18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
28c2ecf20Sopenharmony_ci/* GSPCA subdrivers for Genesys Logic webcams with the GL860 chip
38c2ecf20Sopenharmony_ci * Subdriver declarations
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * 2009/10/14 Olivier LORIN <o.lorin@laposte.net>
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci#ifndef GL860_DEV_H
88c2ecf20Sopenharmony_ci#define GL860_DEV_H
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci#include "gspca.h"
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci#define MODULE_NAME "gspca_gl860"
138c2ecf20Sopenharmony_ci#define DRIVER_VERSION "0.9d10"
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci#define ctrl_in  gl860_RTx
168c2ecf20Sopenharmony_ci#define ctrl_out gl860_RTx
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_ci#define ID_MI1320   1
198c2ecf20Sopenharmony_ci#define ID_OV2640   2
208c2ecf20Sopenharmony_ci#define ID_OV9655   4
218c2ecf20Sopenharmony_ci#define ID_MI2020   8
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_ci#define _MI1320_  (((struct sd *) gspca_dev)->sensor == ID_MI1320)
248c2ecf20Sopenharmony_ci#define _MI2020_  (((struct sd *) gspca_dev)->sensor == ID_MI2020)
258c2ecf20Sopenharmony_ci#define _OV2640_  (((struct sd *) gspca_dev)->sensor == ID_OV2640)
268c2ecf20Sopenharmony_ci#define _OV9655_  (((struct sd *) gspca_dev)->sensor == ID_OV9655)
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_ci#define IMAGE_640   0
298c2ecf20Sopenharmony_ci#define IMAGE_800   1
308c2ecf20Sopenharmony_ci#define IMAGE_1280  2
318c2ecf20Sopenharmony_ci#define IMAGE_1600  3
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_cistruct sd_gl860 {
348c2ecf20Sopenharmony_ci	u16 backlight;
358c2ecf20Sopenharmony_ci	u16 brightness;
368c2ecf20Sopenharmony_ci	u16 sharpness;
378c2ecf20Sopenharmony_ci	u16 contrast;
388c2ecf20Sopenharmony_ci	u16 gamma;
398c2ecf20Sopenharmony_ci	u16 hue;
408c2ecf20Sopenharmony_ci	u16 saturation;
418c2ecf20Sopenharmony_ci	u16 whitebal;
428c2ecf20Sopenharmony_ci	u8  mirror;
438c2ecf20Sopenharmony_ci	u8  flip;
448c2ecf20Sopenharmony_ci	u8  AC50Hz;
458c2ecf20Sopenharmony_ci};
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ci/* Specific webcam descriptor */
488c2ecf20Sopenharmony_cistruct sd {
498c2ecf20Sopenharmony_ci	struct gspca_dev gspca_dev;	/* !! must be the first item */
508c2ecf20Sopenharmony_ci
518c2ecf20Sopenharmony_ci	struct sd_gl860 vcur;
528c2ecf20Sopenharmony_ci	struct sd_gl860 vold;
538c2ecf20Sopenharmony_ci	struct sd_gl860 vmax;
548c2ecf20Sopenharmony_ci
558c2ecf20Sopenharmony_ci	int  (*dev_configure_alt)  (struct gspca_dev *);
568c2ecf20Sopenharmony_ci	int  (*dev_init_at_startup)(struct gspca_dev *);
578c2ecf20Sopenharmony_ci	int  (*dev_init_pre_alt)   (struct gspca_dev *);
588c2ecf20Sopenharmony_ci	void (*dev_post_unset_alt) (struct gspca_dev *);
598c2ecf20Sopenharmony_ci	int  (*dev_camera_settings)(struct gspca_dev *);
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_ci	u8   swapRB;
628c2ecf20Sopenharmony_ci	u8   mirrorMask;
638c2ecf20Sopenharmony_ci	u8   sensor;
648c2ecf20Sopenharmony_ci	s32  nbIm;
658c2ecf20Sopenharmony_ci	s32  nbRightUp;
668c2ecf20Sopenharmony_ci	u8   waitSet;
678c2ecf20Sopenharmony_ci};
688c2ecf20Sopenharmony_ci
698c2ecf20Sopenharmony_cistruct validx {
708c2ecf20Sopenharmony_ci	u16 val;
718c2ecf20Sopenharmony_ci	u16 idx;
728c2ecf20Sopenharmony_ci};
738c2ecf20Sopenharmony_ci
748c2ecf20Sopenharmony_cistruct idxdata {
758c2ecf20Sopenharmony_ci	u8 idx;
768c2ecf20Sopenharmony_ci	u8 data[3];
778c2ecf20Sopenharmony_ci};
788c2ecf20Sopenharmony_ci
798c2ecf20Sopenharmony_ciint fetch_validx(struct gspca_dev *gspca_dev, struct validx *tbl, int len);
808c2ecf20Sopenharmony_ciint keep_on_fetching_validx(struct gspca_dev *gspca_dev, struct validx *tbl,
818c2ecf20Sopenharmony_ci				int len, int n);
828c2ecf20Sopenharmony_civoid fetch_idxdata(struct gspca_dev *gspca_dev, struct idxdata *tbl, int len);
838c2ecf20Sopenharmony_ci
848c2ecf20Sopenharmony_ciint gl860_RTx(struct gspca_dev *gspca_dev,
858c2ecf20Sopenharmony_ci			unsigned char pref, u32 req, u16 val, u16 index,
868c2ecf20Sopenharmony_ci			s32 len, void *pdata);
878c2ecf20Sopenharmony_ci
888c2ecf20Sopenharmony_civoid mi1320_init_settings(struct gspca_dev *);
898c2ecf20Sopenharmony_civoid ov2640_init_settings(struct gspca_dev *);
908c2ecf20Sopenharmony_civoid ov9655_init_settings(struct gspca_dev *);
918c2ecf20Sopenharmony_civoid mi2020_init_settings(struct gspca_dev *);
928c2ecf20Sopenharmony_ci
938c2ecf20Sopenharmony_ci#endif
94