Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * Copyright (c) 2001 Jean-Fredric Clere, Nikolas Zimmermann, Georg Acher
0004  *            Mark Cave-Ayland, Carlo E Prelz, Dick Streefland
0005  * Copyright (c) 2002, 2003 Tuukka Toivonen
0006  * Copyright (c) 2008 Erik Andrén
0007  *
0008  * P/N 861037:      Sensor HDCS1000        ASIC STV0600
0009  * P/N 861050-0010: Sensor HDCS1000        ASIC STV0600
0010  * P/N 861050-0020: Sensor Photobit PB100  ASIC STV0600-1 - QuickCam Express
0011  * P/N 861055:      Sensor ST VV6410       ASIC STV0610   - LEGO cam
0012  * P/N 861075-0040: Sensor HDCS1000        ASIC
0013  * P/N 961179-0700: Sensor ST VV6410       ASIC STV0602   - Dexxa WebCam USB
0014  * P/N 861040-0000: Sensor ST VV6410       ASIC STV0610   - QuickCam Web
0015  */
0016 
0017 #ifndef STV06XX_PB0100_H_
0018 #define STV06XX_PB0100_H_
0019 
0020 #include "stv06xx_sensor.h"
0021 
0022 /* mode priv field flags */
0023 #define PB0100_CROP_TO_VGA  0x01
0024 #define PB0100_SUBSAMPLE    0x02
0025 
0026 /* I2C Registers */
0027 #define PB_IDENT        0x00    /* Chip Version */
0028 #define PB_RSTART       0x01    /* Row Window Start */
0029 #define PB_CSTART       0x02    /* Column Window Start */
0030 #define PB_RWSIZE       0x03    /* Row Window Size */
0031 #define PB_CWSIZE       0x04    /* Column  Window Size */
0032 #define PB_CFILLIN      0x05    /* Column Fill-In */
0033 #define PB_VBL          0x06    /* Vertical Blank Count */
0034 #define PB_CONTROL      0x07    /* Control Mode */
0035 #define PB_FINTTIME     0x08    /* Integration Time/Frame Unit Count */
0036 #define PB_RINTTIME     0x09    /* Integration Time/Row Unit Count */
0037 #define PB_ROWSPEED     0x0a    /* Row Speed Control */
0038 #define PB_ABORTFRAME       0x0b    /* Abort Frame */
0039 #define PB_R12          0x0c    /* Reserved */
0040 #define PB_RESET        0x0d    /* Reset */
0041 #define PB_EXPGAIN      0x0e    /* Exposure Gain Command */
0042 #define PB_R15          0x0f    /* Expose0 */
0043 #define PB_R16          0x10    /* Expose1 */
0044 #define PB_R17          0x11    /* Expose2 */
0045 #define PB_R18          0x12    /* Low0_DAC */
0046 #define PB_R19          0x13    /* Low1_DAC */
0047 #define PB_R20          0x14    /* Low2_DAC */
0048 #define PB_R21          0x15    /* Threshold11 */
0049 #define PB_R22          0x16    /* Threshold0x */
0050 #define PB_UPDATEINT        0x17    /* Update Interval */
0051 #define PB_R24          0x18    /* High_DAC */
0052 #define PB_R25          0x19    /* Trans0H */
0053 #define PB_R26          0x1a    /* Trans1L */
0054 #define PB_R27          0x1b    /* Trans1H */
0055 #define PB_R28          0x1c    /* Trans2L */
0056 #define PB_R29          0x1d    /* Reserved */
0057 #define PB_R30          0x1e    /* Reserved */
0058 #define PB_R31          0x1f    /* Wait to Read */
0059 #define PB_PREADCTRL        0x20    /* Pixel Read Control Mode */
0060 #define PB_R33          0x21    /* IREF_VLN */
0061 #define PB_R34          0x22    /* IREF_VLP */
0062 #define PB_R35          0x23    /* IREF_VLN_INTEG */
0063 #define PB_R36          0x24    /* IREF_MASTER */
0064 #define PB_R37          0x25    /* IDACP */
0065 #define PB_R38          0x26    /* IDACN */
0066 #define PB_R39          0x27    /* DAC_Control_Reg */
0067 #define PB_R40          0x28    /* VCL */
0068 #define PB_R41          0x29    /* IREF_VLN_ADCIN */
0069 #define PB_R42          0x2a    /* Reserved */
0070 #define PB_G1GAIN       0x2b    /* Green 1 Gain */
0071 #define PB_BGAIN        0x2c    /* Blue Gain */
0072 #define PB_RGAIN        0x2d    /* Red Gain */
0073 #define PB_G2GAIN       0x2e    /* Green 2 Gain */
0074 #define PB_R47          0x2f    /* Dark Row Address */
0075 #define PB_R48          0x30    /* Dark Row Options */
0076 #define PB_R49          0x31    /* Reserved */
0077 #define PB_R50          0x32    /* Image Test Data */
0078 #define PB_ADCMAXGAIN       0x33    /* Maximum Gain */
0079 #define PB_ADCMINGAIN       0x34    /* Minimum Gain */
0080 #define PB_ADCGLOBALGAIN    0x35    /* Global Gain */
0081 #define PB_R54          0x36    /* Maximum Frame */
0082 #define PB_R55          0x37    /* Minimum Frame */
0083 #define PB_R56          0x38    /* Reserved */
0084 #define PB_VOFFSET      0x39    /* VOFFSET */
0085 #define PB_R58          0x3a    /* Snap-Shot Sequence Trigger */
0086 #define PB_ADCGAINH     0x3b    /* VREF_HI */
0087 #define PB_ADCGAINL     0x3c    /* VREF_LO */
0088 #define PB_R61          0x3d    /* Reserved */
0089 #define PB_R62          0x3e    /* Reserved */
0090 #define PB_R63          0x3f    /* Reserved */
0091 #define PB_R64          0x40    /* Red/Blue Gain */
0092 #define PB_R65          0x41    /* Green 2/Green 1 Gain */
0093 #define PB_R66          0x42    /* VREF_HI/LO */
0094 #define PB_R67          0x43    /* Integration Time/Row Unit Count */
0095 #define PB_R240         0xf0    /* ADC Test */
0096 #define PB_R241         0xf1    /* Chip Enable */
0097 #define PB_R242         0xf2    /* Reserved */
0098 
0099 static int pb0100_probe(struct sd *sd);
0100 static int pb0100_start(struct sd *sd);
0101 static int pb0100_init(struct sd *sd);
0102 static int pb0100_init_controls(struct sd *sd);
0103 static int pb0100_stop(struct sd *sd);
0104 static int pb0100_dump(struct sd *sd);
0105 
0106 /* V4L2 controls supported by the driver */
0107 static int pb0100_set_gain(struct gspca_dev *gspca_dev, __s32 val);
0108 static int pb0100_set_red_balance(struct gspca_dev *gspca_dev, __s32 val);
0109 static int pb0100_set_blue_balance(struct gspca_dev *gspca_dev, __s32 val);
0110 static int pb0100_set_exposure(struct gspca_dev *gspca_dev, __s32 val);
0111 static int pb0100_set_autogain(struct gspca_dev *gspca_dev, __s32 val);
0112 static int pb0100_set_autogain_target(struct gspca_dev *gspca_dev, __s32 val);
0113 
0114 const struct stv06xx_sensor stv06xx_sensor_pb0100 = {
0115     .name = "PB-0100",
0116     .i2c_flush = 1,
0117     .i2c_addr = 0xba,
0118     .i2c_len = 2,
0119 
0120     .min_packet_size = { 635, 847 },
0121     .max_packet_size = { 847, 923 },
0122 
0123     .init = pb0100_init,
0124     .init_controls = pb0100_init_controls,
0125     .probe = pb0100_probe,
0126     .start = pb0100_start,
0127     .stop = pb0100_stop,
0128     .dump = pb0100_dump,
0129 };
0130 
0131 #endif