root/drivers/media/usb/gspca/gl860/gl860.h
/* SPDX-License-Identifier: GPL-2.0-or-later */
/* GSPCA subdrivers for Genesys Logic webcams with the GL860 chip
 * Subdriver declarations
 *
 * 2009/10/14 Olivier LORIN <o.lorin@laposte.net>
 */
#ifndef GL860_DEV_H
#define GL860_DEV_H

#include "gspca.h"

#define MODULE_NAME "gspca_gl860"
#define DRIVER_VERSION "0.9d10"

#define ctrl_in  gl860_RTx
#define ctrl_out gl860_RTx

#define ID_MI1320   1
#define ID_OV2640   2
#define ID_OV9655   4
#define ID_MI2020   8

#define _MI1320_  (((struct sd *) gspca_dev)->sensor == ID_MI1320)
#define _MI2020_  (((struct sd *) gspca_dev)->sensor == ID_MI2020)
#define _OV2640_  (((struct sd *) gspca_dev)->sensor == ID_OV2640)
#define _OV9655_  (((struct sd *) gspca_dev)->sensor == ID_OV9655)

#define IMAGE_640   0
#define IMAGE_800   1
#define IMAGE_1280  2
#define IMAGE_1600  3

struct sd_gl860 {
        u16 backlight;
        u16 brightness;
        u16 sharpness;
        u16 contrast;
        u16 gamma;
        u16 hue;
        u16 saturation;
        u16 whitebal;
        u8  mirror;
        u8  flip;
        u8  AC50Hz;
};

/* Specific webcam descriptor */
struct sd {
        struct gspca_dev gspca_dev;     /* !! must be the first item */

        struct sd_gl860 vcur;
        struct sd_gl860 vold;
        struct sd_gl860 vmax;

        int  (*dev_configure_alt)  (struct gspca_dev *);
        int  (*dev_init_at_startup)(struct gspca_dev *);
        int  (*dev_init_pre_alt)   (struct gspca_dev *);
        void (*dev_post_unset_alt) (struct gspca_dev *);
        int  (*dev_camera_settings)(struct gspca_dev *);

        u8   swapRB;
        u8   mirrorMask;
        u8   sensor;
        s32  nbIm;
        s32  nbRightUp;
        u8   waitSet;
};

struct validx {
        u16 val;
        u16 idx;
};

struct idxdata {
        u8 idx;
        u8 data[3];
};

int fetch_validx(struct gspca_dev *gspca_dev, struct validx *tbl, int len);
int keep_on_fetching_validx(struct gspca_dev *gspca_dev, struct validx *tbl,
                                int len, int n);
void fetch_idxdata(struct gspca_dev *gspca_dev, struct idxdata *tbl, int len);

int gl860_RTx(struct gspca_dev *gspca_dev,
                        unsigned char pref, u32 req, u16 val, u16 index,
                        s32 len, void *pdata);

void mi1320_init_settings(struct gspca_dev *);
void ov2640_init_settings(struct gspca_dev *);
void ov9655_init_settings(struct gspca_dev *);
void mi2020_init_settings(struct gspca_dev *);

#endif