0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 #ifndef STV06XX_HDCS_H_
0019 #define STV06XX_HDCS_H_
0020
0021 #include "stv06xx_sensor.h"
0022
0023 #define HDCS_REG_CONFIG(sd) (IS_1020(sd) ? HDCS20_CONFIG : HDCS00_CONFIG)
0024 #define HDCS_REG_CONTROL(sd) (IS_1020(sd) ? HDCS20_CONTROL : HDCS00_CONTROL)
0025
0026 #define HDCS_1X00_DEF_WIDTH 360
0027 #define HDCS_1X00_DEF_HEIGHT 296
0028
0029 #define HDCS_1020_DEF_WIDTH 352
0030 #define HDCS_1020_DEF_HEIGHT 292
0031
0032 #define HDCS_1020_BOTTOM_Y_SKIP 4
0033
0034 #define HDCS_CLK_FREQ_MHZ 25
0035
0036 #define HDCS_ADC_START_SIG_DUR 3
0037
0038
0039
0040
0041 #define HDCS_IDENT (0x00 << 1)
0042
0043 #define HDCS_STATUS (0x01 << 1)
0044
0045 #define HDCS_IMASK (0x02 << 1)
0046
0047 #define HDCS_PCTRL (0x03 << 1)
0048
0049 #define HDCS_PDRV (0x04 << 1)
0050
0051 #define HDCS_ICTRL (0x05 << 1)
0052
0053 #define HDCS_ITMG (0x06 << 1)
0054
0055 #define HDCS_BFRAC (0x07 << 1)
0056
0057 #define HDCS_BRATE (0x08 << 1)
0058
0059 #define HDCS_ADCCTRL (0x09 << 1)
0060
0061 #define HDCS_FWROW (0x0a << 1)
0062
0063 #define HDCS_FWCOL (0x0b << 1)
0064
0065 #define HDCS_LWROW (0x0c << 1)
0066
0067 #define HDCS_LWCOL (0x0d << 1)
0068
0069 #define HDCS_TCTRL (0x0e << 1)
0070
0071 #define HDCS_ERECPGA (0x0f << 1)
0072
0073 #define HDCS_EROCPGA (0x10 << 1)
0074
0075 #define HDCS_ORECPGA (0x11 << 1)
0076
0077 #define HDCS_OROCPGA (0x12 << 1)
0078
0079 #define HDCS_ROWEXPL (0x13 << 1)
0080
0081 #define HDCS_ROWEXPH (0x14 << 1)
0082
0083
0084
0085 #define HDCS00_SROWEXPL (0x15 << 1)
0086
0087 #define HDCS00_SROWEXPH (0x16 << 1)
0088
0089 #define HDCS00_CONFIG (0x17 << 1)
0090
0091 #define HDCS00_CONTROL (0x18 << 1)
0092
0093
0094
0095 #define HDCS20_SROWEXP (0x15 << 1)
0096
0097 #define HDCS20_ERROR (0x16 << 1)
0098
0099 #define HDCS20_ITMG2 (0x17 << 1)
0100
0101 #define HDCS20_ICTRL2 (0x18 << 1)
0102
0103 #define HDCS20_HBLANK (0x19 << 1)
0104
0105 #define HDCS20_VBLANK (0x1a << 1)
0106
0107 #define HDCS20_CONFIG (0x1b << 1)
0108
0109 #define HDCS20_CONTROL (0x1c << 1)
0110
0111 #define HDCS_RUN_ENABLE (1 << 2)
0112 #define HDCS_SLEEP_MODE (1 << 1)
0113
0114 #define HDCS_DEFAULT_EXPOSURE 48
0115 #define HDCS_DEFAULT_GAIN 50
0116
0117 static int hdcs_probe_1x00(struct sd *sd);
0118 static int hdcs_probe_1020(struct sd *sd);
0119 static int hdcs_start(struct sd *sd);
0120 static int hdcs_init(struct sd *sd);
0121 static int hdcs_init_controls(struct sd *sd);
0122 static int hdcs_stop(struct sd *sd);
0123 static int hdcs_dump(struct sd *sd);
0124
0125 static int hdcs_set_exposure(struct gspca_dev *gspca_dev, __s32 val);
0126 static int hdcs_set_gain(struct gspca_dev *gspca_dev, __s32 val);
0127
0128 const struct stv06xx_sensor stv06xx_sensor_hdcs1x00 = {
0129 .name = "HP HDCS-1000/1100",
0130 .i2c_flush = 0,
0131 .i2c_addr = (0x55 << 1),
0132 .i2c_len = 1,
0133
0134
0135
0136 .min_packet_size = { 847 },
0137 .max_packet_size = { 847 },
0138
0139 .init = hdcs_init,
0140 .init_controls = hdcs_init_controls,
0141 .probe = hdcs_probe_1x00,
0142 .start = hdcs_start,
0143 .stop = hdcs_stop,
0144 .dump = hdcs_dump,
0145 };
0146
0147 const struct stv06xx_sensor stv06xx_sensor_hdcs1020 = {
0148 .name = "HDCS-1020",
0149 .i2c_flush = 0,
0150 .i2c_addr = (0x55 << 1),
0151 .i2c_len = 1,
0152
0153
0154
0155 .min_packet_size = { 847 },
0156 .max_packet_size = { 847 },
0157
0158 .init = hdcs_init,
0159 .init_controls = hdcs_init_controls,
0160 .probe = hdcs_probe_1020,
0161 .start = hdcs_start,
0162 .stop = hdcs_stop,
0163 .dump = hdcs_dump,
0164 };
0165
0166 static const u16 stv_bridge_init[][2] = {
0167 {STV_ISO_ENABLE, 0},
0168 {STV_REG23, 0},
0169 {STV_REG00, 0x1d},
0170 {STV_REG01, 0xb5},
0171 {STV_REG02, 0xa8},
0172 {STV_REG03, 0x95},
0173 {STV_REG04, 0x07},
0174
0175 {STV_SCAN_RATE, 0x20},
0176 {STV_Y_CTRL, 0x01},
0177 {STV_X_CTRL, 0x0a}
0178 };
0179
0180 static const u8 stv_sensor_init[][2] = {
0181
0182 {HDCS_STATUS, BIT(6) | BIT(5) | BIT(4) | BIT(3) | BIT(2) | BIT(1)},
0183
0184 {HDCS_IMASK, 0x00},
0185 {HDCS_PCTRL, BIT(6) | BIT(5) | BIT(1) | BIT(0)},
0186 {HDCS_PDRV, 0x00},
0187 {HDCS_ICTRL, BIT(5)},
0188 {HDCS_ITMG, BIT(4) | BIT(1)},
0189
0190 {HDCS_ADCCTRL, 10}
0191 };
0192
0193 #endif