xref: /openbmc/linux/drivers/media/usb/gspca/stv06xx/stv06xx_sensor.h (revision 75bf465f0bc33e9b776a46d6a1b9b990f5fb7c37)
1*c942fddfSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
20c0d06caSMauro Carvalho Chehab /*
30c0d06caSMauro Carvalho Chehab  * Copyright (c) 2001 Jean-Fredric Clere, Nikolas Zimmermann, Georg Acher
40c0d06caSMauro Carvalho Chehab  *		      Mark Cave-Ayland, Carlo E Prelz, Dick Streefland
50c0d06caSMauro Carvalho Chehab  * Copyright (c) 2002, 2003 Tuukka Toivonen
60c0d06caSMauro Carvalho Chehab  * Copyright (c) 2008 Erik Andrén
70c0d06caSMauro Carvalho Chehab  *
80c0d06caSMauro Carvalho Chehab  * P/N 861037:      Sensor HDCS1000        ASIC STV0600
90c0d06caSMauro Carvalho Chehab  * P/N 861050-0010: Sensor HDCS1000        ASIC STV0600
100c0d06caSMauro Carvalho Chehab  * P/N 861050-0020: Sensor Photobit PB100  ASIC STV0600-1 - QuickCam Express
110c0d06caSMauro Carvalho Chehab  * P/N 861055:      Sensor ST VV6410       ASIC STV0610   - LEGO cam
120c0d06caSMauro Carvalho Chehab  * P/N 861075-0040: Sensor HDCS1000        ASIC
130c0d06caSMauro Carvalho Chehab  * P/N 961179-0700: Sensor ST VV6410       ASIC STV0602   - Dexxa WebCam USB
140c0d06caSMauro Carvalho Chehab  * P/N 861040-0000: Sensor ST VV6410       ASIC STV0610   - QuickCam Web
150c0d06caSMauro Carvalho Chehab  */
160c0d06caSMauro Carvalho Chehab 
170c0d06caSMauro Carvalho Chehab #ifndef STV06XX_SENSOR_H_
180c0d06caSMauro Carvalho Chehab #define STV06XX_SENSOR_H_
190c0d06caSMauro Carvalho Chehab 
200c0d06caSMauro Carvalho Chehab #include "stv06xx.h"
210c0d06caSMauro Carvalho Chehab 
220c0d06caSMauro Carvalho Chehab #define IS_1020(sd)	((sd)->sensor == &stv06xx_sensor_hdcs1020)
230c0d06caSMauro Carvalho Chehab 
240c0d06caSMauro Carvalho Chehab extern const struct stv06xx_sensor stv06xx_sensor_vv6410;
250c0d06caSMauro Carvalho Chehab extern const struct stv06xx_sensor stv06xx_sensor_hdcs1x00;
260c0d06caSMauro Carvalho Chehab extern const struct stv06xx_sensor stv06xx_sensor_hdcs1020;
270c0d06caSMauro Carvalho Chehab extern const struct stv06xx_sensor stv06xx_sensor_pb0100;
280c0d06caSMauro Carvalho Chehab extern const struct stv06xx_sensor stv06xx_sensor_st6422;
290c0d06caSMauro Carvalho Chehab 
300c0d06caSMauro Carvalho Chehab struct stv06xx_sensor {
310c0d06caSMauro Carvalho Chehab 	/* Defines the name of a sensor */
320c0d06caSMauro Carvalho Chehab 	char name[32];
330c0d06caSMauro Carvalho Chehab 
340c0d06caSMauro Carvalho Chehab 	/* Sensor i2c address */
350c0d06caSMauro Carvalho Chehab 	u8 i2c_addr;
360c0d06caSMauro Carvalho Chehab 
370c0d06caSMauro Carvalho Chehab 	/* Flush value*/
380c0d06caSMauro Carvalho Chehab 	u8 i2c_flush;
390c0d06caSMauro Carvalho Chehab 
400c0d06caSMauro Carvalho Chehab 	/* length of an i2c word */
410c0d06caSMauro Carvalho Chehab 	u8 i2c_len;
420c0d06caSMauro Carvalho Chehab 
430c0d06caSMauro Carvalho Chehab 	/* Isoc packet size (per mode) */
440c0d06caSMauro Carvalho Chehab 	int min_packet_size[4];
450c0d06caSMauro Carvalho Chehab 	int max_packet_size[4];
460c0d06caSMauro Carvalho Chehab 
470c0d06caSMauro Carvalho Chehab 	/* Probes if the sensor is connected */
480c0d06caSMauro Carvalho Chehab 	int (*probe)(struct sd *sd);
490c0d06caSMauro Carvalho Chehab 
500c0d06caSMauro Carvalho Chehab 	/* Performs a initialization sequence */
510c0d06caSMauro Carvalho Chehab 	int (*init)(struct sd *sd);
520c0d06caSMauro Carvalho Chehab 
530c0d06caSMauro Carvalho Chehab 	/* Initializes the controls */
540c0d06caSMauro Carvalho Chehab 	int (*init_controls)(struct sd *sd);
550c0d06caSMauro Carvalho Chehab 
560c0d06caSMauro Carvalho Chehab 	/* Reads a sensor register */
570c0d06caSMauro Carvalho Chehab 	int (*read_sensor)(struct sd *sd, const u8 address,
580c0d06caSMauro Carvalho Chehab 	      u8 *i2c_data, const u8 len);
590c0d06caSMauro Carvalho Chehab 
600c0d06caSMauro Carvalho Chehab 	/* Writes to a sensor register */
610c0d06caSMauro Carvalho Chehab 	int (*write_sensor)(struct sd *sd, const u8 address,
620c0d06caSMauro Carvalho Chehab 	      u8 *i2c_data, const u8 len);
630c0d06caSMauro Carvalho Chehab 
640c0d06caSMauro Carvalho Chehab 	/* Instructs the sensor to start streaming */
650c0d06caSMauro Carvalho Chehab 	int (*start)(struct sd *sd);
660c0d06caSMauro Carvalho Chehab 
670c0d06caSMauro Carvalho Chehab 	/* Instructs the sensor to stop streaming */
680c0d06caSMauro Carvalho Chehab 	int (*stop)(struct sd *sd);
690c0d06caSMauro Carvalho Chehab 
700c0d06caSMauro Carvalho Chehab 	/* Instructs the sensor to dump all its contents */
710c0d06caSMauro Carvalho Chehab 	int (*dump)(struct sd *sd);
720c0d06caSMauro Carvalho Chehab };
730c0d06caSMauro Carvalho Chehab 
740c0d06caSMauro Carvalho Chehab #endif
75