1/* SPDX-License-Identifier: GPL-2.0-or-later */
2/* GSPCA subdrivers for Genesys Logic webcams with the GL860 chip
3 * Subdriver declarations
4 *
5 * 2009/10/14 Olivier LORIN <o.lorin@laposte.net>
6 */
7#ifndef GL860_DEV_H
8#define GL860_DEV_H
9
10#include "gspca.h"
11
12#define MODULE_NAME "gspca_gl860"
13#define DRIVER_VERSION "0.9d10"
14
15#define ctrl_in  gl860_RTx
16#define ctrl_out gl860_RTx
17
18#define ID_MI1320   1
19#define ID_OV2640   2
20#define ID_OV9655   4
21#define ID_MI2020   8
22
23#define _MI1320_  (((struct sd *) gspca_dev)->sensor == ID_MI1320)
24#define _MI2020_  (((struct sd *) gspca_dev)->sensor == ID_MI2020)
25#define _OV2640_  (((struct sd *) gspca_dev)->sensor == ID_OV2640)
26#define _OV9655_  (((struct sd *) gspca_dev)->sensor == ID_OV9655)
27
28#define IMAGE_640   0
29#define IMAGE_800   1
30#define IMAGE_1280  2
31#define IMAGE_1600  3
32
33struct sd_gl860 {
34	u16 backlight;
35	u16 brightness;
36	u16 sharpness;
37	u16 contrast;
38	u16 gamma;
39	u16 hue;
40	u16 saturation;
41	u16 whitebal;
42	u8  mirror;
43	u8  flip;
44	u8  AC50Hz;
45};
46
47/* Specific webcam descriptor */
48struct sd {
49	struct gspca_dev gspca_dev;	/* !! must be the first item */
50
51	struct sd_gl860 vcur;
52	struct sd_gl860 vold;
53	struct sd_gl860 vmax;
54
55	int  (*dev_configure_alt)  (struct gspca_dev *);
56	int  (*dev_init_at_startup)(struct gspca_dev *);
57	int  (*dev_init_pre_alt)   (struct gspca_dev *);
58	void (*dev_post_unset_alt) (struct gspca_dev *);
59	int  (*dev_camera_settings)(struct gspca_dev *);
60
61	u8   swapRB;
62	u8   mirrorMask;
63	u8   sensor;
64	s32  nbIm;
65	s32  nbRightUp;
66	u8   waitSet;
67};
68
69struct validx {
70	u16 val;
71	u16 idx;
72};
73
74struct idxdata {
75	u8 idx;
76	u8 data[3];
77};
78
79int fetch_validx(struct gspca_dev *gspca_dev, struct validx *tbl, int len);
80int keep_on_fetching_validx(struct gspca_dev *gspca_dev, struct validx *tbl,
81				int len, int n);
82void fetch_idxdata(struct gspca_dev *gspca_dev, struct idxdata *tbl, int len);
83
84int gl860_RTx(struct gspca_dev *gspca_dev,
85			unsigned char pref, u32 req, u16 val, u16 index,
86			s32 len, void *pdata);
87
88void mi1320_init_settings(struct gspca_dev *);
89void ov2640_init_settings(struct gspca_dev *);
90void ov9655_init_settings(struct gspca_dev *);
91void mi2020_init_settings(struct gspca_dev *);
92
93#endif
94