162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
262306a36Sopenharmony_ci/* GSPCA subdrivers for Genesys Logic webcams with the GL860 chip
362306a36Sopenharmony_ci * Subdriver declarations
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * 2009/10/14 Olivier LORIN <o.lorin@laposte.net>
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci#ifndef GL860_DEV_H
862306a36Sopenharmony_ci#define GL860_DEV_H
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#include "gspca.h"
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#define MODULE_NAME "gspca_gl860"
1362306a36Sopenharmony_ci#define DRIVER_VERSION "0.9d10"
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci#define ctrl_in  gl860_RTx
1662306a36Sopenharmony_ci#define ctrl_out gl860_RTx
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci#define ID_MI1320   1
1962306a36Sopenharmony_ci#define ID_OV2640   2
2062306a36Sopenharmony_ci#define ID_OV9655   4
2162306a36Sopenharmony_ci#define ID_MI2020   8
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci#define _MI1320_  (((struct sd *) gspca_dev)->sensor == ID_MI1320)
2462306a36Sopenharmony_ci#define _MI2020_  (((struct sd *) gspca_dev)->sensor == ID_MI2020)
2562306a36Sopenharmony_ci#define _OV2640_  (((struct sd *) gspca_dev)->sensor == ID_OV2640)
2662306a36Sopenharmony_ci#define _OV9655_  (((struct sd *) gspca_dev)->sensor == ID_OV9655)
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci#define IMAGE_640   0
2962306a36Sopenharmony_ci#define IMAGE_800   1
3062306a36Sopenharmony_ci#define IMAGE_1280  2
3162306a36Sopenharmony_ci#define IMAGE_1600  3
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_cistruct sd_gl860 {
3462306a36Sopenharmony_ci	u16 backlight;
3562306a36Sopenharmony_ci	u16 brightness;
3662306a36Sopenharmony_ci	u16 sharpness;
3762306a36Sopenharmony_ci	u16 contrast;
3862306a36Sopenharmony_ci	u16 gamma;
3962306a36Sopenharmony_ci	u16 hue;
4062306a36Sopenharmony_ci	u16 saturation;
4162306a36Sopenharmony_ci	u16 whitebal;
4262306a36Sopenharmony_ci	u8  mirror;
4362306a36Sopenharmony_ci	u8  flip;
4462306a36Sopenharmony_ci	u8  AC50Hz;
4562306a36Sopenharmony_ci};
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci/* Specific webcam descriptor */
4862306a36Sopenharmony_cistruct sd {
4962306a36Sopenharmony_ci	struct gspca_dev gspca_dev;	/* !! must be the first item */
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci	struct sd_gl860 vcur;
5262306a36Sopenharmony_ci	struct sd_gl860 vold;
5362306a36Sopenharmony_ci	struct sd_gl860 vmax;
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci	int  (*dev_configure_alt)  (struct gspca_dev *);
5662306a36Sopenharmony_ci	int  (*dev_init_at_startup)(struct gspca_dev *);
5762306a36Sopenharmony_ci	int  (*dev_init_pre_alt)   (struct gspca_dev *);
5862306a36Sopenharmony_ci	void (*dev_post_unset_alt) (struct gspca_dev *);
5962306a36Sopenharmony_ci	int  (*dev_camera_settings)(struct gspca_dev *);
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci	u8   swapRB;
6262306a36Sopenharmony_ci	u8   mirrorMask;
6362306a36Sopenharmony_ci	u8   sensor;
6462306a36Sopenharmony_ci	s32  nbIm;
6562306a36Sopenharmony_ci	s32  nbRightUp;
6662306a36Sopenharmony_ci	u8   waitSet;
6762306a36Sopenharmony_ci};
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_cistruct validx {
7062306a36Sopenharmony_ci	u16 val;
7162306a36Sopenharmony_ci	u16 idx;
7262306a36Sopenharmony_ci};
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_cistruct idxdata {
7562306a36Sopenharmony_ci	u8 idx;
7662306a36Sopenharmony_ci	u8 data[3];
7762306a36Sopenharmony_ci};
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ciint fetch_validx(struct gspca_dev *gspca_dev, struct validx *tbl, int len);
8062306a36Sopenharmony_ciint keep_on_fetching_validx(struct gspca_dev *gspca_dev, struct validx *tbl,
8162306a36Sopenharmony_ci				int len, int n);
8262306a36Sopenharmony_civoid fetch_idxdata(struct gspca_dev *gspca_dev, struct idxdata *tbl, int len);
8362306a36Sopenharmony_ci
8462306a36Sopenharmony_ciint gl860_RTx(struct gspca_dev *gspca_dev,
8562306a36Sopenharmony_ci			unsigned char pref, u32 req, u16 val, u16 index,
8662306a36Sopenharmony_ci			s32 len, void *pdata);
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_civoid mi1320_init_settings(struct gspca_dev *);
8962306a36Sopenharmony_civoid ov2640_init_settings(struct gspca_dev *);
9062306a36Sopenharmony_civoid ov9655_init_settings(struct gspca_dev *);
9162306a36Sopenharmony_civoid mi2020_init_settings(struct gspca_dev *);
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_ci#endif
94