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