diff options
Diffstat (limited to 'drivers/media/video/gspca/zc3xx.c')
-rw-r--r-- | drivers/media/video/gspca/zc3xx.c | 1715 |
1 files changed, 795 insertions, 920 deletions
diff --git a/drivers/media/video/gspca/zc3xx.c b/drivers/media/video/gspca/zc3xx.c index 4473f0fb8b73..0666038a51b0 100644 --- a/drivers/media/video/gspca/zc3xx.c +++ b/drivers/media/video/gspca/zc3xx.c | |||
@@ -21,7 +21,9 @@ | |||
21 | 21 | ||
22 | #define MODULE_NAME "zc3xx" | 22 | #define MODULE_NAME "zc3xx" |
23 | 23 | ||
24 | #ifdef CONFIG_INPUT | ||
24 | #include <linux/input.h> | 25 | #include <linux/input.h> |
26 | #endif | ||
25 | #include "gspca.h" | 27 | #include "gspca.h" |
26 | #include "jpeg.h" | 28 | #include "jpeg.h" |
27 | 29 | ||
@@ -50,33 +52,38 @@ struct sd { | |||
50 | #define QUALITY_MAX 80 | 52 | #define QUALITY_MAX 80 |
51 | #define QUALITY_DEF 70 | 53 | #define QUALITY_DEF 70 |
52 | 54 | ||
55 | u8 bridge; | ||
53 | u8 sensor; /* Type of image sensor chip */ | 56 | u8 sensor; /* Type of image sensor chip */ |
54 | /* !! values used in different tables */ | 57 | u16 chip_revision; |
55 | #define SENSOR_ADCM2700 0 | ||
56 | #define SENSOR_CS2102 1 | ||
57 | #define SENSOR_CS2102K 2 | ||
58 | #define SENSOR_GC0305 3 | ||
59 | #define SENSOR_HDCS2020b 4 | ||
60 | #define SENSOR_HV7131B 5 | ||
61 | #define SENSOR_HV7131C 6 | ||
62 | #define SENSOR_ICM105A 7 | ||
63 | #define SENSOR_MC501CB 8 | ||
64 | #define SENSOR_MI0360SOC 9 | ||
65 | #define SENSOR_OV7620 10 | ||
66 | /*#define SENSOR_OV7648 10 - same values */ | ||
67 | #define SENSOR_OV7630C 11 | ||
68 | #define SENSOR_PAS106 12 | ||
69 | #define SENSOR_PAS202B 13 | ||
70 | #define SENSOR_PB0330 14 /* (MI0360) */ | ||
71 | #define SENSOR_PO2030 15 | ||
72 | #define SENSOR_TAS5130CK 16 | ||
73 | #define SENSOR_TAS5130CXX 17 | ||
74 | #define SENSOR_TAS5130C_VF0250 18 | ||
75 | #define SENSOR_MAX 19 | ||
76 | unsigned short chip_revision; | ||
77 | 58 | ||
78 | u8 jpeg_hdr[JPEG_HDR_SZ]; | 59 | u8 jpeg_hdr[JPEG_HDR_SZ]; |
79 | }; | 60 | }; |
61 | enum bridges { | ||
62 | BRIDGE_ZC301, | ||
63 | BRIDGE_ZC303, | ||
64 | }; | ||
65 | enum sensors { | ||
66 | SENSOR_ADCM2700, | ||
67 | SENSOR_CS2102, | ||
68 | SENSOR_CS2102K, | ||
69 | SENSOR_GC0305, | ||
70 | SENSOR_HDCS2020b, | ||
71 | SENSOR_HV7131B, | ||
72 | SENSOR_HV7131R, | ||
73 | SENSOR_ICM105A, | ||
74 | SENSOR_MC501CB, | ||
75 | SENSOR_MT9V111_1, /* (mi360soc) zc301 */ | ||
76 | SENSOR_MT9V111_3, /* (mi360soc) zc303 */ | ||
77 | SENSOR_OV7620, /* OV7648 - same values */ | ||
78 | SENSOR_OV7630C, | ||
79 | SENSOR_PAS106, | ||
80 | SENSOR_PAS202B, | ||
81 | SENSOR_PB0330, | ||
82 | SENSOR_PO2030, | ||
83 | SENSOR_TAS5130C, | ||
84 | SENSOR_TAS5130C_VF0250, | ||
85 | SENSOR_MAX | ||
86 | }; | ||
80 | 87 | ||
81 | /* V4L2 controls supported by the driver */ | 88 | /* V4L2 controls supported by the driver */ |
82 | static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val); | 89 | static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val); |
@@ -2074,6 +2081,7 @@ static const struct usb_action hv7131b_NoFlikerScale[] = { /* 320x240 */ | |||
2074 | {} | 2081 | {} |
2075 | }; | 2082 | }; |
2076 | 2083 | ||
2084 | /* from lPEPI264v.inf (hv7131b!) */ | ||
2077 | static const struct usb_action hv7131r_InitialScale[] = { | 2085 | static const struct usb_action hv7131r_InitialScale[] = { |
2078 | {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, | 2086 | {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, |
2079 | {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, | 2087 | {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, |
@@ -2081,8 +2089,8 @@ static const struct usb_action hv7131r_InitialScale[] = { | |||
2081 | {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, | 2089 | {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, |
2082 | {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, | 2090 | {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, |
2083 | {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, | 2091 | {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, |
2084 | {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, | ||
2085 | {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, | 2092 | {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, |
2093 | {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, | ||
2086 | {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, | 2094 | {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, |
2087 | {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, | 2095 | {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, |
2088 | {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, | 2096 | {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, |
@@ -2095,6 +2103,8 @@ static const struct usb_action hv7131r_InitialScale[] = { | |||
2095 | {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, | 2103 | {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, |
2096 | {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, | 2104 | {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, |
2097 | {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, | 2105 | {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, |
2106 | {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, | ||
2107 | {0xdd, 0x00, 0x0200}, | ||
2098 | {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, | 2108 | {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, |
2099 | {0xaa, 0x01, 0x000c}, | 2109 | {0xaa, 0x01, 0x000c}, |
2100 | {0xaa, 0x11, 0x0000}, | 2110 | {0xaa, 0x11, 0x0000}, |
@@ -2103,10 +2113,10 @@ static const struct usb_action hv7131r_InitialScale[] = { | |||
2103 | {0xaa, 0x15, 0x00e8}, | 2113 | {0xaa, 0x15, 0x00e8}, |
2104 | {0xaa, 0x16, 0x0002}, | 2114 | {0xaa, 0x16, 0x0002}, |
2105 | {0xaa, 0x17, 0x0088}, | 2115 | {0xaa, 0x17, 0x0088}, |
2106 | 2116 | {0xaa, 0x30, 0x000b}, | |
2107 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, | 2117 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, |
2108 | {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, | 2118 | {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, |
2109 | {0xa0, 0x89, ZC3XX_R18D_YTARGET}, | 2119 | {0xa0, 0x78, ZC3XX_R18D_YTARGET}, |
2110 | {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN}, | 2120 | {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN}, |
2111 | {0xa0, 0x00, 0x01ad}, | 2121 | {0xa0, 0x00, 0x01ad}, |
2112 | {0xa0, 0xc0, 0x019b}, | 2122 | {0xa0, 0xc0, 0x019b}, |
@@ -2116,96 +2126,44 @@ static const struct usb_action hv7131r_InitialScale[] = { | |||
2116 | {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, | 2126 | {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, |
2117 | {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, | 2127 | {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, |
2118 | {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, | 2128 | {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, |
2119 | {0xa1, 0x01, 0x0002}, | ||
2120 | {0xa0, 0x00, ZC3XX_R092_I2CADDRESSSELECT}, | ||
2121 | {0xa0, 0x02, ZC3XX_R090_I2CCOMMAND}, | ||
2122 | {0xa1, 0x01, 0x0091}, | ||
2123 | {0xa1, 0x01, 0x0095}, | ||
2124 | {0xa1, 0x01, 0x0096}, | ||
2125 | |||
2126 | {0xa1, 0x01, 0x0008}, | ||
2127 | {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ | ||
2128 | {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ | ||
2129 | {0xa1, 0x01, 0x01c8}, | ||
2130 | {0xa1, 0x01, 0x01c9}, | ||
2131 | {0xa1, 0x01, 0x01ca}, | ||
2132 | {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ | ||
2133 | |||
2134 | {0xa0, 0x60, ZC3XX_R10A_RGB00}, /* matrix */ | ||
2135 | {0xa0, 0xf0, ZC3XX_R10B_RGB01}, | ||
2136 | {0xa0, 0xf0, ZC3XX_R10C_RGB02}, | ||
2137 | {0xa0, 0xf0, ZC3XX_R10D_RGB10}, | ||
2138 | {0xa0, 0x60, ZC3XX_R10E_RGB11}, | ||
2139 | {0xa0, 0xf0, ZC3XX_R10F_RGB12}, | ||
2140 | {0xa0, 0xf0, ZC3XX_R110_RGB20}, | ||
2141 | {0xa0, 0xf0, ZC3XX_R111_RGB21}, | ||
2142 | {0xa0, 0x60, ZC3XX_R112_RGB22}, | ||
2143 | {0xa1, 0x01, 0x0180}, | ||
2144 | {0xa0, 0x10, ZC3XX_R180_AUTOCORRECTENABLE}, | ||
2145 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, | ||
2146 | {0xaa, 0x25, 0x0007}, | ||
2147 | {0xaa, 0x26, 0x0053}, | ||
2148 | {0xaa, 0x27, 0x0000}, | ||
2149 | |||
2150 | {0xa0, 0x10, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 2f */ | ||
2151 | {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 9b */ | ||
2152 | {0xa0, 0x60, ZC3XX_R192_EXPOSURELIMITLOW}, /* 80 */ | ||
2153 | {0xa0, 0x01, ZC3XX_R195_ANTIFLICKERHIGH}, | ||
2154 | {0xa0, 0xd4, ZC3XX_R196_ANTIFLICKERMID}, | ||
2155 | {0xa0, 0xc0, ZC3XX_R197_ANTIFLICKERLOW}, | ||
2156 | {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, | ||
2157 | {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, | ||
2158 | {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, | ||
2159 | {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, | ||
2160 | {0xa0, 0x13, ZC3XX_R1AA_DIGITALGAINSTEP}, | ||
2161 | {0xa1, 0x01, 0x001d}, | ||
2162 | {0xa1, 0x01, 0x001e}, | ||
2163 | {0xa1, 0x01, 0x001f}, | ||
2164 | {0xa1, 0x01, 0x0020}, | ||
2165 | {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE}, | ||
2166 | {0xa1, 0x01, 0x0180}, | ||
2167 | {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, | ||
2168 | {} | 2129 | {} |
2169 | }; | 2130 | }; |
2170 | |||
2171 | static const struct usb_action hv7131r_Initial[] = { | 2131 | static const struct usb_action hv7131r_Initial[] = { |
2172 | {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, | 2132 | {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, |
2173 | 2133 | {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, | |
2174 | {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, /* diff */ | ||
2175 | {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, | 2134 | {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, |
2176 | {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, | 2135 | {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, |
2177 | {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, | 2136 | {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, |
2178 | {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, | 2137 | {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, |
2179 | |||
2180 | {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, | ||
2181 | {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, | 2138 | {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, |
2182 | 2139 | {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, | |
2183 | {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, | 2140 | {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, |
2184 | {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, | 2141 | {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, |
2185 | {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, | 2142 | {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, |
2186 | {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 1e0 */ | 2143 | {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, |
2187 | 2144 | ||
2188 | {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, | 2145 | {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, |
2189 | {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, | 2146 | {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, |
2190 | {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, | 2147 | {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, |
2191 | {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, | 2148 | {0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW}, |
2192 | {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, | 2149 | {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, |
2193 | {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, | 2150 | {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, |
2194 | {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, | 2151 | {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, |
2195 | {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, | 2152 | {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, |
2153 | {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, | ||
2154 | {0xdd, 0x00, 0x0200}, | ||
2196 | {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, | 2155 | {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, |
2197 | {0xaa, 0x01, 0x000c}, | 2156 | {0xaa, 0x01, 0x000c}, |
2198 | {0xaa, 0x11, 0x0000}, | 2157 | {0xaa, 0x11, 0x0000}, |
2199 | {0xaa, 0x13, 0x0000}, | 2158 | {0xaa, 0x13, 0x0000}, |
2200 | {0xaa, 0x14, 0x0001}, | 2159 | {0xaa, 0x14, 0x0001}, |
2201 | {0xaa, 0x15, 0x00e8}, | 2160 | {0xaa, 0x15, 0x00e6}, |
2202 | {0xaa, 0x16, 0x0002}, | 2161 | {0xaa, 0x16, 0x0002}, |
2203 | {0xaa, 0x17, 0x0088}, | 2162 | {0xaa, 0x17, 0x0086}, |
2204 | 2163 | {0xaa, 0x30, 0x000b}, | |
2205 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00 */ | 2164 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, |
2206 | |||
2207 | {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, | 2165 | {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, |
2208 | {0xa0, 0x89, ZC3XX_R18D_YTARGET}, | 2166 | {0xa0, 0x78, ZC3XX_R18D_YTARGET}, |
2209 | {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN}, | 2167 | {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN}, |
2210 | {0xa0, 0x00, 0x01ad}, | 2168 | {0xa0, 0x00, 0x01ad}, |
2211 | {0xa0, 0xc0, 0x019b}, | 2169 | {0xa0, 0xc0, 0x019b}, |
@@ -2215,58 +2173,114 @@ static const struct usb_action hv7131r_Initial[] = { | |||
2215 | {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, | 2173 | {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, |
2216 | {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, | 2174 | {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, |
2217 | {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, | 2175 | {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, |
2218 | {0xa1, 0x01, 0x0002}, | 2176 | {} |
2219 | {0xa0, 0x00, ZC3XX_R092_I2CADDRESSSELECT}, | 2177 | }; |
2220 | /* read the i2c chips ident */ | 2178 | static const struct usb_action hv7131r_50HZ[] = { |
2221 | {0xa0, 0x02, ZC3XX_R090_I2CCOMMAND}, | ||
2222 | {0xa1, 0x01, 0x0091}, | ||
2223 | {0xa1, 0x01, 0x0095}, | ||
2224 | {0xa1, 0x01, 0x0096}, | ||
2225 | |||
2226 | {0xa1, 0x01, 0x0008}, | ||
2227 | {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ | ||
2228 | {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ | ||
2229 | {0xa1, 0x01, 0x01c8}, | ||
2230 | {0xa1, 0x01, 0x01c9}, | ||
2231 | {0xa1, 0x01, 0x01ca}, | ||
2232 | {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ | ||
2233 | |||
2234 | {0xa0, 0x60, ZC3XX_R10A_RGB00}, /* matrix */ | ||
2235 | {0xa0, 0xf0, ZC3XX_R10B_RGB01}, | ||
2236 | {0xa0, 0xf0, ZC3XX_R10C_RGB02}, | ||
2237 | {0xa0, 0xf0, ZC3XX_R10D_RGB10}, | ||
2238 | {0xa0, 0x60, ZC3XX_R10E_RGB11}, | ||
2239 | {0xa0, 0xf0, ZC3XX_R10F_RGB12}, | ||
2240 | {0xa0, 0xf0, ZC3XX_R110_RGB20}, | ||
2241 | {0xa0, 0xf0, ZC3XX_R111_RGB21}, | ||
2242 | {0xa0, 0x60, ZC3XX_R112_RGB22}, | ||
2243 | {0xa1, 0x01, 0x0180}, | ||
2244 | {0xa0, 0x10, ZC3XX_R180_AUTOCORRECTENABLE}, | ||
2245 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, | 2179 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, |
2246 | {0xaa, 0x25, 0x0007}, | 2180 | {0xa0, 0x06, ZC3XX_R190_EXPOSURELIMITHIGH}, |
2247 | {0xaa, 0x26, 0x0053}, | 2181 | {0xa0, 0x68, ZC3XX_R191_EXPOSURELIMITMID}, |
2248 | {0xaa, 0x27, 0x0000}, | 2182 | {0xa0, 0xa0, ZC3XX_R192_EXPOSURELIMITLOW}, |
2249 | 2183 | {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, | |
2250 | {0xa0, 0x10, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 2f */ | 2184 | {0xa0, 0xea, ZC3XX_R196_ANTIFLICKERMID}, |
2251 | {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 9b */ | 2185 | {0xa0, 0x60, ZC3XX_R197_ANTIFLICKERLOW}, |
2252 | {0xa0, 0x60, ZC3XX_R192_EXPOSURELIMITLOW}, /* 80 */ | 2186 | {0xa0, 0x18, ZC3XX_R18C_AEFREEZE}, |
2253 | 2187 | {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, | |
2188 | {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, | ||
2189 | {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP}, | ||
2190 | {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, | ||
2191 | {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, | ||
2192 | {0xa0, 0x00, ZC3XX_R01F_HSYNC_2}, | ||
2193 | {0xa0, 0x08, ZC3XX_R020_HSYNC_3}, | ||
2194 | {} | ||
2195 | }; | ||
2196 | static const struct usb_action hv7131r_50HZScale[] = { | ||
2197 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, | ||
2198 | {0xa0, 0x0c, ZC3XX_R190_EXPOSURELIMITHIGH}, | ||
2199 | {0xa0, 0xd1, ZC3XX_R191_EXPOSURELIMITMID}, | ||
2200 | {0xa0, 0x40, ZC3XX_R192_EXPOSURELIMITLOW}, | ||
2254 | {0xa0, 0x01, ZC3XX_R195_ANTIFLICKERHIGH}, | 2201 | {0xa0, 0x01, ZC3XX_R195_ANTIFLICKERHIGH}, |
2255 | {0xa0, 0xd4, ZC3XX_R196_ANTIFLICKERMID}, | 2202 | {0xa0, 0xd4, ZC3XX_R196_ANTIFLICKERMID}, |
2256 | {0xa0, 0xc0, ZC3XX_R197_ANTIFLICKERLOW}, | 2203 | {0xa0, 0xc0, ZC3XX_R197_ANTIFLICKERLOW}, |
2257 | 2204 | {0xa0, 0x18, ZC3XX_R18C_AEFREEZE}, | |
2258 | {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, | ||
2259 | {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, | 2205 | {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, |
2260 | {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, | ||
2261 | {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, | 2206 | {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, |
2262 | {0xa0, 0x13, ZC3XX_R1AA_DIGITALGAINSTEP}, | 2207 | {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP}, |
2263 | {0xa1, 0x01, 0x001d}, | 2208 | {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, |
2264 | {0xa1, 0x01, 0x001e}, | 2209 | {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, |
2265 | {0xa1, 0x01, 0x001f}, | 2210 | {0xa0, 0x00, ZC3XX_R01F_HSYNC_2}, |
2266 | {0xa1, 0x01, 0x0020}, | 2211 | {0xa0, 0x08, ZC3XX_R020_HSYNC_3}, |
2267 | {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE}, | 2212 | {} |
2268 | {0xa1, 0x01, 0x0180}, | 2213 | }; |
2269 | {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, | 2214 | static const struct usb_action hv7131r_60HZ[] = { |
2215 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, | ||
2216 | {0xa0, 0x06, ZC3XX_R190_EXPOSURELIMITHIGH}, | ||
2217 | {0xa0, 0x1a, ZC3XX_R191_EXPOSURELIMITMID}, | ||
2218 | {0xa0, 0x80, ZC3XX_R192_EXPOSURELIMITLOW}, | ||
2219 | {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, | ||
2220 | {0xa0, 0xc3, ZC3XX_R196_ANTIFLICKERMID}, | ||
2221 | {0xa0, 0x50, ZC3XX_R197_ANTIFLICKERLOW}, | ||
2222 | {0xa0, 0x18, ZC3XX_R18C_AEFREEZE}, | ||
2223 | {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, | ||
2224 | {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, | ||
2225 | {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP}, | ||
2226 | {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, | ||
2227 | {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, | ||
2228 | {0xa0, 0x00, ZC3XX_R01F_HSYNC_2}, | ||
2229 | {0xa0, 0x08, ZC3XX_R020_HSYNC_3}, | ||
2230 | {} | ||
2231 | }; | ||
2232 | static const struct usb_action hv7131r_60HZScale[] = { | ||
2233 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, | ||
2234 | {0xa0, 0x0c, ZC3XX_R190_EXPOSURELIMITHIGH}, | ||
2235 | {0xa0, 0x35, ZC3XX_R191_EXPOSURELIMITMID}, | ||
2236 | {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW}, | ||
2237 | {0xa0, 0x01, ZC3XX_R195_ANTIFLICKERHIGH}, | ||
2238 | {0xa0, 0x86, ZC3XX_R196_ANTIFLICKERMID}, | ||
2239 | {0xa0, 0xa0, ZC3XX_R197_ANTIFLICKERLOW}, | ||
2240 | {0xa0, 0x18, ZC3XX_R18C_AEFREEZE}, | ||
2241 | {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, | ||
2242 | {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, | ||
2243 | {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP}, | ||
2244 | {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, | ||
2245 | {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, | ||
2246 | {0xa0, 0x00, ZC3XX_R01F_HSYNC_2}, | ||
2247 | {0xa0, 0x08, ZC3XX_R020_HSYNC_3}, | ||
2248 | {} | ||
2249 | }; | ||
2250 | static const struct usb_action hv7131r_NoFliker[] = { | ||
2251 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, | ||
2252 | {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, | ||
2253 | {0xa0, 0xf8, ZC3XX_R191_EXPOSURELIMITMID}, | ||
2254 | {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW}, | ||
2255 | {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, | ||
2256 | {0xa0, 0x02, ZC3XX_R196_ANTIFLICKERMID}, | ||
2257 | {0xa0, 0x58, ZC3XX_R197_ANTIFLICKERLOW}, | ||
2258 | {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, | ||
2259 | {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, | ||
2260 | {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, | ||
2261 | {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, | ||
2262 | {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, | ||
2263 | {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, | ||
2264 | {0xa0, 0x00, ZC3XX_R01F_HSYNC_2}, | ||
2265 | {0xa0, 0x08, ZC3XX_R020_HSYNC_3}, | ||
2266 | {} | ||
2267 | }; | ||
2268 | static const struct usb_action hv7131r_NoFlikerScale[] = { | ||
2269 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, | ||
2270 | {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, | ||
2271 | {0xa0, 0xf8, ZC3XX_R191_EXPOSURELIMITMID}, | ||
2272 | {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW}, | ||
2273 | {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, | ||
2274 | {0xa0, 0x04, ZC3XX_R196_ANTIFLICKERMID}, | ||
2275 | {0xa0, 0xb0, ZC3XX_R197_ANTIFLICKERLOW}, | ||
2276 | {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, | ||
2277 | {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, | ||
2278 | {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, | ||
2279 | {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, | ||
2280 | {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, | ||
2281 | {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, | ||
2282 | {0xa0, 0x00, ZC3XX_R01F_HSYNC_2}, | ||
2283 | {0xa0, 0x08, ZC3XX_R020_HSYNC_3}, | ||
2270 | {} | 2284 | {} |
2271 | }; | 2285 | }; |
2272 | 2286 | ||
@@ -3350,7 +3364,7 @@ static const struct usb_action ov7620_NoFliker[] = { | |||
3350 | {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ | 3364 | {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ |
3351 | {0xa0, 0x01, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,01,cc */ | 3365 | {0xa0, 0x01, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,01,cc */ |
3352 | /* {0xa0, 0x44, ZC3XX_R002_CLOCKSELECT}, * 00,02,44,cc | 3366 | /* {0xa0, 0x44, ZC3XX_R002_CLOCKSELECT}, * 00,02,44,cc |
3353 | - if mode1 (320x240) */ | 3367 | * if mode1 (320x240) */ |
3354 | /* ?? was | 3368 | /* ?? was |
3355 | {0xa0, 0x00, 0x0039}, * 00,00,00,dd * | 3369 | {0xa0, 0x00, 0x0039}, * 00,00,00,dd * |
3356 | {0xa1, 0x01, 0x0037}, */ | 3370 | {0xa1, 0x01, 0x0037}, */ |
@@ -3439,7 +3453,6 @@ static const struct usb_action ov7630c_InitialScale[] = { | |||
3439 | {0xa0, 0xf8, ZC3XX_R110_RGB20}, | 3453 | {0xa0, 0xf8, ZC3XX_R110_RGB20}, |
3440 | {0xa0, 0xf8, ZC3XX_R111_RGB21}, | 3454 | {0xa0, 0xf8, ZC3XX_R111_RGB21}, |
3441 | {0xa0, 0x50, ZC3XX_R112_RGB22}, | 3455 | {0xa0, 0x50, ZC3XX_R112_RGB22}, |
3442 | /* 0x03, */ | ||
3443 | {0xa1, 0x01, 0x0008}, | 3456 | {0xa1, 0x01, 0x0008}, |
3444 | {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ | 3457 | {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ |
3445 | {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ | 3458 | {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ |
@@ -3719,7 +3732,7 @@ static const struct usb_action pas106b_InitialScale[] = { /* 176x144 */ | |||
3719 | {0xaa, 0x0e, 0x0002}, | 3732 | {0xaa, 0x0e, 0x0002}, |
3720 | {0xaa, 0x14, 0x0081}, | 3733 | {0xaa, 0x14, 0x0081}, |
3721 | 3734 | ||
3722 | /* Other registors */ | 3735 | /* Other registers */ |
3723 | {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, | 3736 | {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, |
3724 | /* Frame retreiving */ | 3737 | /* Frame retreiving */ |
3725 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, | 3738 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, |
@@ -3730,7 +3743,7 @@ static const struct usb_action pas106b_InitialScale[] = { /* 176x144 */ | |||
3730 | /* Sharpness */ | 3743 | /* Sharpness */ |
3731 | {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, | 3744 | {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, |
3732 | {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, | 3745 | {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, |
3733 | /* Other registors */ | 3746 | /* Other registers */ |
3734 | {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, | 3747 | {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, |
3735 | /* Auto exposure and white balance */ | 3748 | /* Auto exposure and white balance */ |
3736 | {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, | 3749 | {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, |
@@ -3837,7 +3850,7 @@ static const struct usb_action pas106b_Initial[] = { /* 352x288 */ | |||
3837 | {0xaa, 0x0e, 0x0002}, | 3850 | {0xaa, 0x0e, 0x0002}, |
3838 | {0xaa, 0x14, 0x0081}, | 3851 | {0xaa, 0x14, 0x0081}, |
3839 | 3852 | ||
3840 | /* Other registors */ | 3853 | /* Other registers */ |
3841 | {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, | 3854 | {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, |
3842 | /* Frame retreiving */ | 3855 | /* Frame retreiving */ |
3843 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, | 3856 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, |
@@ -3848,7 +3861,7 @@ static const struct usb_action pas106b_Initial[] = { /* 352x288 */ | |||
3848 | /* Sharpness */ | 3861 | /* Sharpness */ |
3849 | {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, | 3862 | {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, |
3850 | {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, | 3863 | {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, |
3851 | /* Other registors */ | 3864 | /* Other registers */ |
3852 | {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, | 3865 | {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, |
3853 | /* Auto exposure and white balance */ | 3866 | /* Auto exposure and white balance */ |
3854 | {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, | 3867 | {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, |
@@ -4241,8 +4254,8 @@ static const struct usb_action pas202b_NoFlikerScale[] = { | |||
4241 | {} | 4254 | {} |
4242 | }; | 4255 | }; |
4243 | 4256 | ||
4244 | /* mi0360soc and pb0330 from vm30x.inf for 0ac8:301b and 0ac8:303b 07/02/13 */ | 4257 | /* mt9v111 (mi0360soc) and pb0330 from vm30x.inf 0ac8:301b 07/02/13 */ |
4245 | static const struct usb_action mi0360soc_Initial[] = { /* 640x480 */ | 4258 | static const struct usb_action mt9v111_1_Initial[] = { /* 640x480 */ |
4246 | {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, | 4259 | {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, |
4247 | {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, | 4260 | {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, |
4248 | {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, | 4261 | {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, |
@@ -4253,14 +4266,14 @@ static const struct usb_action mi0360soc_Initial[] = { /* 640x480 */ | |||
4253 | {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, | 4266 | {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, |
4254 | {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, | 4267 | {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, |
4255 | {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, | 4268 | {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, |
4256 | {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, /*jfm: was 03*/ | 4269 | {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, |
4257 | /* {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, */ | ||
4258 | {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, | 4270 | {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, |
4259 | {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, | 4271 | {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, |
4260 | {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, | 4272 | {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, |
4261 | {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, | 4273 | {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, |
4262 | {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, | 4274 | {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, |
4263 | {0xdd, 0x00, 0x0200}, | 4275 | {0xdd, 0x00, 0x0200}, |
4276 | {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, | ||
4264 | {0xaa, 0x01, 0x0001}, | 4277 | {0xaa, 0x01, 0x0001}, |
4265 | {0xaa, 0x06, 0x0000}, | 4278 | {0xaa, 0x06, 0x0000}, |
4266 | {0xaa, 0x08, 0x0483}, | 4279 | {0xaa, 0x08, 0x0483}, |
@@ -4270,18 +4283,18 @@ static const struct usb_action mi0360soc_Initial[] = { /* 640x480 */ | |||
4270 | {0xaa, 0x03, 0x01e5}, /*jfm: was 01e7*/ | 4283 | {0xaa, 0x03, 0x01e5}, /*jfm: was 01e7*/ |
4271 | {0xaa, 0x04, 0x0285}, /*jfm: was 0287*/ | 4284 | {0xaa, 0x04, 0x0285}, /*jfm: was 0287*/ |
4272 | {0xaa, 0x07, 0x3002}, | 4285 | {0xaa, 0x07, 0x3002}, |
4273 | {0xaa, 0x20, 0x5100}, /*jfm: was 1100*/ | 4286 | {0xaa, 0x20, 0x5100}, |
4274 | {0xaa, 0x35, 0x507f}, /*jfm: was 0050*/ | 4287 | {0xaa, 0x35, 0x507f}, |
4275 | {0xaa, 0x30, 0x0005}, | 4288 | {0xaa, 0x30, 0x0005}, |
4276 | {0xaa, 0x31, 0x0000}, | 4289 | {0xaa, 0x31, 0x0000}, |
4277 | {0xaa, 0x58, 0x0078}, | 4290 | {0xaa, 0x58, 0x0078}, |
4278 | {0xaa, 0x62, 0x0411}, | 4291 | {0xaa, 0x62, 0x0411}, |
4279 | {0xaa, 0x2b, 0x0028}, | 4292 | {0xaa, 0x2b, 0x007f}, |
4280 | {0xaa, 0x2c, 0x007f}, /*jfm: was 0030*/ | 4293 | {0xaa, 0x2c, 0x007f}, /*jfm: was 0030*/ |
4281 | {0xaa, 0x2d, 0x007f}, /*jfm: was 0030*/ | 4294 | {0xaa, 0x2d, 0x007f}, /*jfm: was 0030*/ |
4282 | {0xaa, 0x2e, 0x007f}, /*jfm: was 0030*/ | 4295 | {0xaa, 0x2e, 0x007f}, /*jfm: was 0030*/ |
4283 | {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, | 4296 | {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, |
4284 | {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /*jfm: was 37*/ | 4297 | {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, |
4285 | {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, | 4298 | {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, |
4286 | {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, | 4299 | {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, |
4287 | {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, | 4300 | {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, |
@@ -4291,12 +4304,12 @@ static const struct usb_action mi0360soc_Initial[] = { /* 640x480 */ | |||
4291 | {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, | 4304 | {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, |
4292 | {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, | 4305 | {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, |
4293 | {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, | 4306 | {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, |
4294 | {0xa0, 0x6c, ZC3XX_R18D_YTARGET}, /* jfm: was 78 */ | 4307 | {0xa0, 0x6c, ZC3XX_R18D_YTARGET}, |
4295 | {0xa0, 0x61, ZC3XX_R116_RGAIN}, | 4308 | {0xa0, 0x61, ZC3XX_R116_RGAIN}, |
4296 | {0xa0, 0x65, ZC3XX_R118_BGAIN}, | 4309 | {0xa0, 0x65, ZC3XX_R118_BGAIN}, |
4297 | {} | 4310 | {} |
4298 | }; | 4311 | }; |
4299 | static const struct usb_action mi0360soc_InitialScale[] = { /* 320x240 */ | 4312 | static const struct usb_action mt9v111_1_InitialScale[] = { /* 320x240 */ |
4300 | {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, | 4313 | {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, |
4301 | {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, | 4314 | {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, |
4302 | {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, | 4315 | {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, |
@@ -4307,14 +4320,14 @@ static const struct usb_action mi0360soc_InitialScale[] = { /* 320x240 */ | |||
4307 | {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, | 4320 | {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, |
4308 | {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, | 4321 | {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, |
4309 | {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, | 4322 | {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, |
4310 | {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, /*jfm: was 03*/ | 4323 | {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, |
4311 | /* {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, */ | ||
4312 | {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, | 4324 | {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, |
4313 | {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, | 4325 | {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, |
4314 | {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, | 4326 | {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, |
4315 | {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, | 4327 | {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, |
4316 | {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, | 4328 | {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, |
4317 | {0xdd, 0x00, 0x0200}, | 4329 | {0xdd, 0x00, 0x0200}, |
4330 | {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, | ||
4318 | {0xaa, 0x01, 0x0001}, | 4331 | {0xaa, 0x01, 0x0001}, |
4319 | {0xaa, 0x06, 0x0000}, | 4332 | {0xaa, 0x06, 0x0000}, |
4320 | {0xaa, 0x08, 0x0483}, | 4333 | {0xaa, 0x08, 0x0483}, |
@@ -4324,7 +4337,7 @@ static const struct usb_action mi0360soc_InitialScale[] = { /* 320x240 */ | |||
4324 | {0xaa, 0x03, 0x01e7}, | 4337 | {0xaa, 0x03, 0x01e7}, |
4325 | {0xaa, 0x04, 0x0287}, | 4338 | {0xaa, 0x04, 0x0287}, |
4326 | {0xaa, 0x07, 0x3002}, | 4339 | {0xaa, 0x07, 0x3002}, |
4327 | {0xaa, 0x20, 0x5100}, /*jfm: was 1100*/ | 4340 | {0xaa, 0x20, 0x5100}, |
4328 | {0xaa, 0x35, 0x007f}, /*jfm: was 0050*/ | 4341 | {0xaa, 0x35, 0x007f}, /*jfm: was 0050*/ |
4329 | {0xaa, 0x30, 0x0005}, | 4342 | {0xaa, 0x30, 0x0005}, |
4330 | {0xaa, 0x31, 0x0000}, | 4343 | {0xaa, 0x31, 0x0000}, |
@@ -4335,7 +4348,7 @@ static const struct usb_action mi0360soc_InitialScale[] = { /* 320x240 */ | |||
4335 | {0xaa, 0x2d, 0x007f}, /*jfm: was 30*/ | 4348 | {0xaa, 0x2d, 0x007f}, /*jfm: was 30*/ |
4336 | {0xaa, 0x2e, 0x007f}, /*jfm: was 28*/ | 4349 | {0xaa, 0x2e, 0x007f}, /*jfm: was 28*/ |
4337 | {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, | 4350 | {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, |
4338 | {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /*jfm: was 37*/ | 4351 | {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, |
4339 | {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, | 4352 | {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, |
4340 | {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, | 4353 | {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, |
4341 | {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, | 4354 | {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, |
@@ -4345,12 +4358,12 @@ static const struct usb_action mi0360soc_InitialScale[] = { /* 320x240 */ | |||
4345 | {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, | 4358 | {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, |
4346 | {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, | 4359 | {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, |
4347 | {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, | 4360 | {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, |
4348 | {0xa0, 0x6c, ZC3XX_R18D_YTARGET}, /*jfm: was 78*/ | 4361 | {0xa0, 0x6c, ZC3XX_R18D_YTARGET}, |
4349 | {0xa0, 0x61, ZC3XX_R116_RGAIN}, | 4362 | {0xa0, 0x61, ZC3XX_R116_RGAIN}, |
4350 | {0xa0, 0x65, ZC3XX_R118_BGAIN}, | 4363 | {0xa0, 0x65, ZC3XX_R118_BGAIN}, |
4351 | {} | 4364 | {} |
4352 | }; | 4365 | }; |
4353 | static const struct usb_action mi360soc_AE50HZ[] = { | 4366 | static const struct usb_action mt9v111_1_AE50HZ[] = { |
4354 | {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, | 4367 | {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, |
4355 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, | 4368 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, |
4356 | {0xbb, 0x00, 0x0562}, | 4369 | {0xbb, 0x00, 0x0562}, |
@@ -4373,7 +4386,7 @@ static const struct usb_action mi360soc_AE50HZ[] = { | |||
4373 | {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, | 4386 | {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, |
4374 | {} | 4387 | {} |
4375 | }; | 4388 | }; |
4376 | static const struct usb_action mi360soc_AE50HZScale[] = { | 4389 | static const struct usb_action mt9v111_1_AE50HZScale[] = { |
4377 | {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, | 4390 | {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, |
4378 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, | 4391 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, |
4379 | {0xbb, 0x00, 0x0509}, | 4392 | {0xbb, 0x00, 0x0509}, |
@@ -4395,11 +4408,11 @@ static const struct usb_action mi360soc_AE50HZScale[] = { | |||
4395 | {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, | 4408 | {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, |
4396 | {} | 4409 | {} |
4397 | }; | 4410 | }; |
4398 | static const struct usb_action mi360soc_AE60HZ[] = { | 4411 | static const struct usb_action mt9v111_1_AE60HZ[] = { |
4399 | {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, | 4412 | {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, |
4400 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, | 4413 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, |
4401 | {0xbb, 0x00, 0x053d}, | 4414 | {0xaa, 0x05, 0x003d}, |
4402 | {0xbb, 0x01, 0x096e}, | 4415 | {0xaa, 0x09, 0x016e}, |
4403 | {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, | 4416 | {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, |
4404 | {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, | 4417 | {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, |
4405 | {0xa0, 0xdd, ZC3XX_R192_EXPOSURELIMITLOW}, | 4418 | {0xa0, 0xdd, ZC3XX_R192_EXPOSURELIMITLOW}, |
@@ -4418,7 +4431,7 @@ static const struct usb_action mi360soc_AE60HZ[] = { | |||
4418 | {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, | 4431 | {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, |
4419 | {} | 4432 | {} |
4420 | }; | 4433 | }; |
4421 | static const struct usb_action mi360soc_AE60HZScale[] = { | 4434 | static const struct usb_action mt9v111_1_AE60HZScale[] = { |
4422 | {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, | 4435 | {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, |
4423 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, | 4436 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, |
4424 | {0xbb, 0x00, 0x0509}, | 4437 | {0xbb, 0x00, 0x0509}, |
@@ -4440,7 +4453,7 @@ static const struct usb_action mi360soc_AE60HZScale[] = { | |||
4440 | {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, | 4453 | {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, |
4441 | {} | 4454 | {} |
4442 | }; | 4455 | }; |
4443 | static const struct usb_action mi360soc_AENoFliker[] = { | 4456 | static const struct usb_action mt9v111_1_AENoFliker[] = { |
4444 | {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, | 4457 | {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, |
4445 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, | 4458 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, |
4446 | {0xbb, 0x00, 0x0509}, | 4459 | {0xbb, 0x00, 0x0509}, |
@@ -4463,7 +4476,7 @@ static const struct usb_action mi360soc_AENoFliker[] = { | |||
4463 | {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, | 4476 | {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, |
4464 | {} | 4477 | {} |
4465 | }; | 4478 | }; |
4466 | static const struct usb_action mi360soc_AENoFlikerScale[] = { | 4479 | static const struct usb_action mt9v111_1_AENoFlikerScale[] = { |
4467 | {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, | 4480 | {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, |
4468 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, | 4481 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, |
4469 | {0xbb, 0x00, 0x0534}, | 4482 | {0xbb, 0x00, 0x0534}, |
@@ -4486,6 +4499,251 @@ static const struct usb_action mi360soc_AENoFlikerScale[] = { | |||
4486 | {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, | 4499 | {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, |
4487 | {} | 4500 | {} |
4488 | }; | 4501 | }; |
4502 | /* from usbvm303.inf 0ac8:303b 07/03/25 (3 - tas5130c) */ | ||
4503 | static const struct usb_action mt9v111_3_Initial[] = { | ||
4504 | {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, | ||
4505 | {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, | ||
4506 | {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, | ||
4507 | {0xa0, 0x04, ZC3XX_R002_CLOCKSELECT}, | ||
4508 | {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, | ||
4509 | {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, | ||
4510 | {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, | ||
4511 | {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, | ||
4512 | {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, | ||
4513 | {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, | ||
4514 | {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, | ||
4515 | {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, | ||
4516 | {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, | ||
4517 | {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, | ||
4518 | {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, | ||
4519 | {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, | ||
4520 | {0xdd, 0x00, 0x0200}, | ||
4521 | {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, | ||
4522 | {0xaa, 0x01, 0x0001}, /* select IFP/SOC registers */ | ||
4523 | {0xaa, 0x06, 0x0000}, /* operating mode control */ | ||
4524 | {0xaa, 0x08, 0x0483}, /* output format control */ | ||
4525 | /* H red first, V red or blue first, | ||
4526 | * raw Bayer, auto flicker */ | ||
4527 | {0xaa, 0x01, 0x0004}, /* select sensor core registers */ | ||
4528 | {0xaa, 0x08, 0x0006}, /* row start */ | ||
4529 | {0xaa, 0x02, 0x0011}, /* column start */ | ||
4530 | {0xaa, 0x03, 0x01e5}, /* window height - 1 */ | ||
4531 | {0xaa, 0x04, 0x0285}, /* window width - 1 */ | ||
4532 | {0xaa, 0x07, 0x3002}, /* output control */ | ||
4533 | {0xaa, 0x20, 0x1100}, /* read mode: bits 8 & 12 (?) */ | ||
4534 | {0xaa, 0x35, 0x007f}, /* global gain */ | ||
4535 | {0xaa, 0x30, 0x0005}, | ||
4536 | {0xaa, 0x31, 0x0000}, | ||
4537 | {0xaa, 0x58, 0x0078}, | ||
4538 | {0xaa, 0x62, 0x0411}, | ||
4539 | {0xaa, 0x2b, 0x007f}, /* green1 gain */ | ||
4540 | {0xaa, 0x2c, 0x007f}, /* blue gain */ | ||
4541 | {0xaa, 0x2d, 0x007f}, /* red gain */ | ||
4542 | {0xaa, 0x2e, 0x007f}, /* green2 gain */ | ||
4543 | {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, | ||
4544 | {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, | ||
4545 | {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, | ||
4546 | {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, | ||
4547 | {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, | ||
4548 | {0xa0, 0x00, 0x01ad}, | ||
4549 | {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, | ||
4550 | {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, | ||
4551 | {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, | ||
4552 | {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, | ||
4553 | {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, | ||
4554 | {0xa0, 0x80, ZC3XX_R18D_YTARGET}, | ||
4555 | {0xa0, 0x61, ZC3XX_R116_RGAIN}, | ||
4556 | {0xa0, 0x65, ZC3XX_R118_BGAIN}, | ||
4557 | {} | ||
4558 | }; | ||
4559 | static const struct usb_action mt9v111_3_InitialScale[] = { | ||
4560 | {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, | ||
4561 | {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, | ||
4562 | {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, | ||
4563 | {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, | ||
4564 | {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, | ||
4565 | {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, | ||
4566 | {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, | ||
4567 | {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, | ||
4568 | {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, | ||
4569 | {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, | ||
4570 | {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, | ||
4571 | {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, | ||
4572 | {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, | ||
4573 | {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, | ||
4574 | {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, | ||
4575 | {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, | ||
4576 | {0xdd, 0x00, 0x0200}, | ||
4577 | {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, | ||
4578 | {0xaa, 0x01, 0x0001}, | ||
4579 | {0xaa, 0x06, 0x0000}, | ||
4580 | {0xaa, 0x08, 0x0483}, | ||
4581 | {0xaa, 0x01, 0x0004}, | ||
4582 | {0xaa, 0x08, 0x0006}, | ||
4583 | {0xaa, 0x02, 0x0011}, | ||
4584 | {0xaa, 0x03, 0x01e7}, | ||
4585 | {0xaa, 0x04, 0x0287}, | ||
4586 | {0xaa, 0x07, 0x3002}, | ||
4587 | {0xaa, 0x20, 0x1100}, | ||
4588 | {0xaa, 0x35, 0x007f}, | ||
4589 | {0xaa, 0x30, 0x0005}, | ||
4590 | {0xaa, 0x31, 0x0000}, | ||
4591 | {0xaa, 0x58, 0x0078}, | ||
4592 | {0xaa, 0x62, 0x0411}, | ||
4593 | {0xaa, 0x2b, 0x007f}, | ||
4594 | {0xaa, 0x2c, 0x007f}, | ||
4595 | {0xaa, 0x2d, 0x007f}, | ||
4596 | {0xaa, 0x2e, 0x007f}, | ||
4597 | {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, | ||
4598 | {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, | ||
4599 | {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, | ||
4600 | {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, | ||
4601 | {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, | ||
4602 | {0xa0, 0x00, 0x01ad}, | ||
4603 | {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, | ||
4604 | {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, | ||
4605 | {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, | ||
4606 | {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, | ||
4607 | {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, | ||
4608 | {0xa0, 0x80, ZC3XX_R18D_YTARGET}, | ||
4609 | {0xa0, 0x61, ZC3XX_R116_RGAIN}, | ||
4610 | {0xa0, 0x65, ZC3XX_R118_BGAIN}, | ||
4611 | {} | ||
4612 | }; | ||
4613 | static const struct usb_action mt9v111_3_AE50HZ[] = { | ||
4614 | {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, | ||
4615 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, | ||
4616 | {0xaa, 0x05, 0x0009}, /* horizontal blanking */ | ||
4617 | {0xaa, 0x09, 0x01ce}, /* shutter width */ | ||
4618 | {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, | ||
4619 | {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, | ||
4620 | {0xa0, 0xd2, ZC3XX_R192_EXPOSURELIMITLOW}, | ||
4621 | {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, | ||
4622 | {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, | ||
4623 | {0xa0, 0x9a, ZC3XX_R197_ANTIFLICKERLOW}, | ||
4624 | {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, | ||
4625 | {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, | ||
4626 | {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, | ||
4627 | {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, | ||
4628 | {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0}, | ||
4629 | {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1}, | ||
4630 | {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2}, | ||
4631 | {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, | ||
4632 | {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, | ||
4633 | {} | ||
4634 | }; | ||
4635 | static const struct usb_action mt9v111_3_AE50HZScale[] = { | ||
4636 | {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, | ||
4637 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, | ||
4638 | {0xaa, 0x05, 0x0009}, | ||
4639 | {0xaa, 0x09, 0x01ce}, | ||
4640 | {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, | ||
4641 | {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, | ||
4642 | {0xa0, 0xd2, ZC3XX_R192_EXPOSURELIMITLOW}, | ||
4643 | {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, | ||
4644 | {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, | ||
4645 | {0xa0, 0x9a, ZC3XX_R197_ANTIFLICKERLOW}, | ||
4646 | {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, | ||
4647 | {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, | ||
4648 | {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, | ||
4649 | {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, | ||
4650 | {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0}, | ||
4651 | {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1}, | ||
4652 | {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2}, | ||
4653 | {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, | ||
4654 | {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, | ||
4655 | {} | ||
4656 | }; | ||
4657 | static const struct usb_action mt9v111_3_AE60HZ[] = { | ||
4658 | {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, | ||
4659 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, | ||
4660 | {0xaa, 0x05, 0x0009}, | ||
4661 | {0xaa, 0x09, 0x0083}, | ||
4662 | {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, | ||
4663 | {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, | ||
4664 | {0xa0, 0x8f, ZC3XX_R192_EXPOSURELIMITLOW}, | ||
4665 | {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, | ||
4666 | {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, | ||
4667 | {0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW}, | ||
4668 | {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, | ||
4669 | {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, | ||
4670 | {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, | ||
4671 | {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, | ||
4672 | {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0}, | ||
4673 | {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1}, | ||
4674 | {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2}, | ||
4675 | {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, | ||
4676 | {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, | ||
4677 | {} | ||
4678 | }; | ||
4679 | static const struct usb_action mt9v111_3_AE60HZScale[] = { | ||
4680 | {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, | ||
4681 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, | ||
4682 | {0xaa, 0x05, 0x0009}, | ||
4683 | {0xaa, 0x09, 0x0083}, | ||
4684 | {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, | ||
4685 | {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, | ||
4686 | {0xa0, 0x8f, ZC3XX_R192_EXPOSURELIMITLOW}, | ||
4687 | {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, | ||
4688 | {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, | ||
4689 | {0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW}, | ||
4690 | {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, | ||
4691 | {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, | ||
4692 | {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, | ||
4693 | {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, | ||
4694 | {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0}, | ||
4695 | {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1}, | ||
4696 | {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2}, | ||
4697 | {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, | ||
4698 | {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, | ||
4699 | {} | ||
4700 | }; | ||
4701 | static const struct usb_action mt9v111_3_AENoFliker[] = { | ||
4702 | {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, | ||
4703 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, | ||
4704 | {0xaa, 0x05, 0x0034}, | ||
4705 | {0xaa, 0x09, 0x0260}, | ||
4706 | {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, | ||
4707 | {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, | ||
4708 | {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW}, | ||
4709 | {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, | ||
4710 | {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, | ||
4711 | {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW}, | ||
4712 | {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, | ||
4713 | {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, | ||
4714 | {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, | ||
4715 | {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, | ||
4716 | {0xa0, 0x34, ZC3XX_R01D_HSYNC_0}, | ||
4717 | {0xa0, 0x60, ZC3XX_R01E_HSYNC_1}, | ||
4718 | {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, | ||
4719 | {0xa0, 0xe0, ZC3XX_R020_HSYNC_3}, | ||
4720 | {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, | ||
4721 | {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, | ||
4722 | {} | ||
4723 | }; | ||
4724 | static const struct usb_action mt9v111_3_AENoFlikerScale[] = { | ||
4725 | {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, | ||
4726 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, | ||
4727 | {0xaa, 0x05, 0x0034}, | ||
4728 | {0xaa, 0x09, 0x0260}, | ||
4729 | {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, | ||
4730 | {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, | ||
4731 | {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW}, | ||
4732 | {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, | ||
4733 | {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, | ||
4734 | {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW}, | ||
4735 | {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, | ||
4736 | {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, | ||
4737 | {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, | ||
4738 | {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, | ||
4739 | {0xa0, 0x34, ZC3XX_R01D_HSYNC_0}, | ||
4740 | {0xa0, 0x60, ZC3XX_R01E_HSYNC_1}, | ||
4741 | {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, | ||
4742 | {0xa0, 0xe0, ZC3XX_R020_HSYNC_3}, | ||
4743 | {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, | ||
4744 | {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, | ||
4745 | {} | ||
4746 | }; | ||
4489 | 4747 | ||
4490 | static const struct usb_action pb0330_Initial[] = { /* 640x480 */ | 4748 | static const struct usb_action pb0330_Initial[] = { /* 640x480 */ |
4491 | {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, | 4749 | {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, |
@@ -4928,419 +5186,7 @@ static const struct usb_action po2030_NoFliker[] = { | |||
4928 | {} | 5186 | {} |
4929 | }; | 5187 | }; |
4930 | 5188 | ||
4931 | /* TEST */ | 5189 | static const struct usb_action tas5130c_InitialScale[] = { /* 320x240 */ |
4932 | static const struct usb_action tas5130cK_InitialScale[] = { | ||
4933 | {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, | ||
4934 | {0xa0, 0x01, 0x003b}, | ||
4935 | {0xa0, 0x0e, 0x003a}, | ||
4936 | {0xa0, 0x01, 0x0038}, | ||
4937 | {0xa0, 0x0b, 0x0039}, | ||
4938 | {0xa0, 0x00, 0x0038}, | ||
4939 | {0xa0, 0x0b, 0x0039}, | ||
4940 | {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, | ||
4941 | {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, | ||
4942 | {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, | ||
4943 | {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, | ||
4944 | {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, | ||
4945 | {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, | ||
4946 | {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, | ||
4947 | {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, | ||
4948 | {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, | ||
4949 | {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, | ||
4950 | {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, | ||
4951 | {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, | ||
4952 | {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, | ||
4953 | {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, | ||
4954 | {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, | ||
4955 | {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, | ||
4956 | {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, | ||
4957 | {0xa0, 0x01, ZC3XX_R092_I2CADDRESSSELECT}, | ||
4958 | {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, | ||
4959 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
4960 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
4961 | {0xa0, 0x06, ZC3XX_R092_I2CADDRESSSELECT}, | ||
4962 | {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, | ||
4963 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
4964 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
4965 | {0xa0, 0x08, ZC3XX_R092_I2CADDRESSSELECT}, | ||
4966 | {0xa0, 0x83, ZC3XX_R093_I2CSETVALUE}, | ||
4967 | {0xa0, 0x04, ZC3XX_R094_I2CWRITEACK}, | ||
4968 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
4969 | {0xa0, 0x01, ZC3XX_R092_I2CADDRESSSELECT}, | ||
4970 | {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, | ||
4971 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
4972 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
4973 | {0xa0, 0x08, ZC3XX_R092_I2CADDRESSSELECT}, | ||
4974 | {0xa0, 0x06, ZC3XX_R093_I2CSETVALUE}, | ||
4975 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
4976 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
4977 | {0xa0, 0x02, ZC3XX_R092_I2CADDRESSSELECT}, | ||
4978 | {0xa0, 0x11, ZC3XX_R093_I2CSETVALUE}, | ||
4979 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
4980 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
4981 | {0xa0, 0x03, ZC3XX_R092_I2CADDRESSSELECT}, | ||
4982 | {0xa0, 0xE7, ZC3XX_R093_I2CSETVALUE}, | ||
4983 | {0xa0, 0x01, ZC3XX_R094_I2CWRITEACK}, | ||
4984 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
4985 | {0xa0, 0x04, ZC3XX_R092_I2CADDRESSSELECT}, | ||
4986 | {0xa0, 0x87, ZC3XX_R093_I2CSETVALUE}, | ||
4987 | {0xa0, 0x02, ZC3XX_R094_I2CWRITEACK}, | ||
4988 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
4989 | {0xa0, 0x07, ZC3XX_R092_I2CADDRESSSELECT}, | ||
4990 | {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, | ||
4991 | {0xa0, 0x30, ZC3XX_R094_I2CWRITEACK}, | ||
4992 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
4993 | {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, | ||
4994 | {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, | ||
4995 | {0xa0, 0x51, ZC3XX_R094_I2CWRITEACK}, | ||
4996 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
4997 | {0xa0, 0x35, ZC3XX_R092_I2CADDRESSSELECT}, | ||
4998 | {0xa0, 0x7F, ZC3XX_R093_I2CSETVALUE}, | ||
4999 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
5000 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5001 | {0xa0, 0x30, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5002 | {0xa0, 0x05, ZC3XX_R093_I2CSETVALUE}, | ||
5003 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
5004 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5005 | {0xa0, 0x31, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5006 | {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, | ||
5007 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
5008 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5009 | {0xa0, 0x58, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5010 | {0xa0, 0x78, ZC3XX_R093_I2CSETVALUE}, | ||
5011 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
5012 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5013 | {0xa0, 0x62, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5014 | {0xa0, 0x11, ZC3XX_R093_I2CSETVALUE}, | ||
5015 | {0xa0, 0x04, ZC3XX_R094_I2CWRITEACK}, | ||
5016 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5017 | {0xa0, 0x2B, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5018 | {0xa0, 0x7f, ZC3XX_R093_I2CSETVALUE}, | ||
5019 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
5020 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5021 | {0xa0, 0x2c, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5022 | {0xa0, 0x7f, ZC3XX_R093_I2CSETVALUE}, | ||
5023 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
5024 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5025 | {0xa0, 0x2D, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5026 | {0xa0, 0x7f, ZC3XX_R093_I2CSETVALUE}, | ||
5027 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
5028 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5029 | {0xa0, 0x2e, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5030 | {0xa0, 0x7f, ZC3XX_R093_I2CSETVALUE}, | ||
5031 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
5032 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5033 | {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, | ||
5034 | {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, | ||
5035 | {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, | ||
5036 | {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, | ||
5037 | {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, | ||
5038 | {0xa0, 0x09, 0x01ad}, | ||
5039 | {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, | ||
5040 | {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, | ||
5041 | {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, | ||
5042 | {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, | ||
5043 | {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, | ||
5044 | {0xa0, 0x6c, ZC3XX_R18D_YTARGET}, | ||
5045 | {0xa0, 0x61, ZC3XX_R116_RGAIN}, | ||
5046 | {0xa0, 0x65, ZC3XX_R118_BGAIN}, | ||
5047 | {0xa0, 0x09, 0x01ad}, | ||
5048 | {0xa0, 0x15, 0x01ae}, | ||
5049 | {0xa0, 0x4c, ZC3XX_R10A_RGB00}, /* matrix */ | ||
5050 | {0xa0, 0xf1, ZC3XX_R10B_RGB01}, | ||
5051 | {0xa0, 0x03, ZC3XX_R10C_RGB02}, | ||
5052 | {0xa0, 0xfe, ZC3XX_R10D_RGB10}, | ||
5053 | {0xa0, 0x51, ZC3XX_R10E_RGB11}, | ||
5054 | {0xa0, 0xf1, ZC3XX_R10F_RGB12}, | ||
5055 | {0xa0, 0xec, ZC3XX_R110_RGB20}, | ||
5056 | {0xa0, 0x03, ZC3XX_R111_RGB21}, | ||
5057 | {0xa0, 0x51, ZC3XX_R112_RGB22}, | ||
5058 | {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, | ||
5059 | {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ | ||
5060 | {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ | ||
5061 | {0xa0, 0x38, ZC3XX_R120_GAMMA00}, /* gamma > 5 */ | ||
5062 | {0xa0, 0x51, ZC3XX_R121_GAMMA01}, | ||
5063 | {0xa0, 0x6e, ZC3XX_R122_GAMMA02}, | ||
5064 | {0xa0, 0x8c, ZC3XX_R123_GAMMA03}, | ||
5065 | {0xa0, 0xa2, ZC3XX_R124_GAMMA04}, | ||
5066 | {0xa0, 0xb6, ZC3XX_R125_GAMMA05}, | ||
5067 | {0xa0, 0xc8, ZC3XX_R126_GAMMA06}, | ||
5068 | {0xa0, 0xd6, ZC3XX_R127_GAMMA07}, | ||
5069 | {0xa0, 0xe2, ZC3XX_R128_GAMMA08}, | ||
5070 | {0xa0, 0xed, ZC3XX_R129_GAMMA09}, | ||
5071 | {0xa0, 0xf5, ZC3XX_R12A_GAMMA0A}, | ||
5072 | {0xa0, 0xfc, ZC3XX_R12B_GAMMA0B}, | ||
5073 | {0xa0, 0xff, ZC3XX_R12C_GAMMA0C}, | ||
5074 | {0xa0, 0xff, ZC3XX_R12D_GAMMA0D}, | ||
5075 | {0xa0, 0xff, ZC3XX_R12E_GAMMA0E}, | ||
5076 | {0xa0, 0xff, ZC3XX_R12F_GAMMA0F}, | ||
5077 | {0xa0, 0x12, ZC3XX_R130_GAMMA10}, | ||
5078 | {0xa0, 0x1b, ZC3XX_R131_GAMMA11}, | ||
5079 | {0xa0, 0x1d, ZC3XX_R132_GAMMA12}, | ||
5080 | {0xa0, 0x1a, ZC3XX_R133_GAMMA13}, | ||
5081 | {0xa0, 0x15, ZC3XX_R134_GAMMA14}, | ||
5082 | {0xa0, 0x12, ZC3XX_R135_GAMMA15}, | ||
5083 | {0xa0, 0x0f, ZC3XX_R136_GAMMA16}, | ||
5084 | {0xa0, 0x0d, ZC3XX_R137_GAMMA17}, | ||
5085 | {0xa0, 0x0b, ZC3XX_R138_GAMMA18}, | ||
5086 | {0xa0, 0x09, ZC3XX_R139_GAMMA19}, | ||
5087 | {0xa0, 0x07, ZC3XX_R13A_GAMMA1A}, | ||
5088 | {0xa0, 0x05, ZC3XX_R13B_GAMMA1B}, | ||
5089 | {0xa0, 0x00, ZC3XX_R13C_GAMMA1C}, | ||
5090 | {0xa0, 0x00, ZC3XX_R13D_GAMMA1D}, | ||
5091 | {0xa0, 0x00, ZC3XX_R13E_GAMMA1E}, | ||
5092 | {0xa0, 0x01, ZC3XX_R13F_GAMMA1F}, | ||
5093 | {0xa0, 0x4c, ZC3XX_R10A_RGB00}, /* matrix */ | ||
5094 | {0xa0, 0xf1, ZC3XX_R10B_RGB01}, | ||
5095 | {0xa0, 0x03, ZC3XX_R10C_RGB02}, | ||
5096 | {0xa0, 0xfe, ZC3XX_R10D_RGB10}, | ||
5097 | {0xa0, 0x51, ZC3XX_R10E_RGB11}, | ||
5098 | {0xa0, 0xf1, ZC3XX_R10F_RGB12}, | ||
5099 | {0xa0, 0xec, ZC3XX_R110_RGB20}, | ||
5100 | {0xa0, 0x03, ZC3XX_R111_RGB21}, | ||
5101 | {0xa0, 0x51, ZC3XX_R112_RGB22}, | ||
5102 | {0xa0, 0x10, ZC3XX_R180_AUTOCORRECTENABLE}, | ||
5103 | {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, | ||
5104 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, | ||
5105 | {0xa0, 0x05, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5106 | {0xa0, 0x09, ZC3XX_R093_I2CSETVALUE}, | ||
5107 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
5108 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5109 | {0xa0, 0x09, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5110 | {0xa0, 0x34, ZC3XX_R093_I2CSETVALUE}, | ||
5111 | {0xa0, 0x01, ZC3XX_R094_I2CWRITEACK}, | ||
5112 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5113 | {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, | ||
5114 | {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, | ||
5115 | {0xa0, 0xd2, ZC3XX_R192_EXPOSURELIMITLOW}, | ||
5116 | {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, | ||
5117 | {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, | ||
5118 | {0xa0, 0x9a, ZC3XX_R197_ANTIFLICKERLOW}, | ||
5119 | {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, | ||
5120 | {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, | ||
5121 | {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, | ||
5122 | {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP}, | ||
5123 | {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0}, | ||
5124 | {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1}, | ||
5125 | {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2}, | ||
5126 | {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, | ||
5127 | {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, | ||
5128 | {0xa0, 0x09, 0x01ad}, | ||
5129 | {0xa0, 0x15, 0x01ae}, | ||
5130 | {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE}, | ||
5131 | {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, | ||
5132 | {} | ||
5133 | }; | ||
5134 | |||
5135 | static const struct usb_action tas5130cK_Initial[] = { | ||
5136 | {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, | ||
5137 | {0xa0, 0x01, 0x003b}, | ||
5138 | {0xa0, 0x0e, 0x003a}, | ||
5139 | {0xa0, 0x01, 0x0038}, | ||
5140 | {0xa0, 0x0b, 0x0039}, | ||
5141 | {0xa0, 0x00, 0x0038}, | ||
5142 | {0xa0, 0x0b, 0x0039}, | ||
5143 | {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, | ||
5144 | {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, | ||
5145 | {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, | ||
5146 | {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, | ||
5147 | {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, | ||
5148 | {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, | ||
5149 | {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, | ||
5150 | {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, | ||
5151 | {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, | ||
5152 | {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, | ||
5153 | {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, | ||
5154 | {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, | ||
5155 | {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, | ||
5156 | {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, | ||
5157 | {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, | ||
5158 | {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, | ||
5159 | {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, | ||
5160 | {0xa0, 0x01, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5161 | {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, | ||
5162 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
5163 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5164 | {0xa0, 0x06, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5165 | {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, | ||
5166 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
5167 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5168 | {0xa0, 0x08, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5169 | {0xa0, 0x83, ZC3XX_R093_I2CSETVALUE}, | ||
5170 | {0xa0, 0x04, ZC3XX_R094_I2CWRITEACK}, | ||
5171 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5172 | {0xa0, 0x01, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5173 | {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, | ||
5174 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
5175 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5176 | {0xa0, 0x08, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5177 | {0xa0, 0x06, ZC3XX_R093_I2CSETVALUE}, | ||
5178 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
5179 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5180 | {0xa0, 0x02, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5181 | {0xa0, 0x11, ZC3XX_R093_I2CSETVALUE}, | ||
5182 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
5183 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5184 | {0xa0, 0x03, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5185 | {0xa0, 0xe5, ZC3XX_R093_I2CSETVALUE}, | ||
5186 | {0xa0, 0x01, ZC3XX_R094_I2CWRITEACK}, | ||
5187 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5188 | {0xa0, 0x04, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5189 | {0xa0, 0x85, ZC3XX_R093_I2CSETVALUE}, | ||
5190 | {0xa0, 0x02, ZC3XX_R094_I2CWRITEACK}, | ||
5191 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5192 | {0xa0, 0x07, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5193 | {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, | ||
5194 | {0xa0, 0x30, ZC3XX_R094_I2CWRITEACK}, | ||
5195 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5196 | {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5197 | {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, | ||
5198 | {0xa0, 0x51, ZC3XX_R094_I2CWRITEACK}, | ||
5199 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5200 | {0xa0, 0x35, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5201 | {0xa0, 0x7F, ZC3XX_R093_I2CSETVALUE}, | ||
5202 | {0xa0, 0x50, ZC3XX_R094_I2CWRITEACK}, | ||
5203 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5204 | {0xa0, 0x30, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5205 | {0xa0, 0x05, ZC3XX_R093_I2CSETVALUE}, | ||
5206 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
5207 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5208 | {0xa0, 0x31, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5209 | {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, | ||
5210 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
5211 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5212 | {0xa0, 0x58, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5213 | {0xa0, 0x78, ZC3XX_R093_I2CSETVALUE}, | ||
5214 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
5215 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5216 | {0xa0, 0x62, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5217 | {0xa0, 0x11, ZC3XX_R093_I2CSETVALUE}, | ||
5218 | {0xa0, 0x04, ZC3XX_R094_I2CWRITEACK}, | ||
5219 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5220 | {0xa0, 0x2B, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5221 | {0xa0, 0x7f, ZC3XX_R093_I2CSETVALUE}, | ||
5222 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
5223 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5224 | {0xa0, 0x2C, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5225 | {0xa0, 0x7F, ZC3XX_R093_I2CSETVALUE}, | ||
5226 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
5227 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5228 | {0xa0, 0x2D, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5229 | {0xa0, 0x7f, ZC3XX_R093_I2CSETVALUE}, | ||
5230 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
5231 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5232 | {0xa0, 0x2e, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5233 | {0xa0, 0x7f, ZC3XX_R093_I2CSETVALUE}, | ||
5234 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
5235 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5236 | {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, | ||
5237 | {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, | ||
5238 | {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, | ||
5239 | {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, | ||
5240 | {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, | ||
5241 | {0xa0, 0x09, 0x01ad}, | ||
5242 | {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, | ||
5243 | {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, | ||
5244 | {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, | ||
5245 | {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, | ||
5246 | {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, | ||
5247 | {0xa0, 0x6c, ZC3XX_R18D_YTARGET}, | ||
5248 | {0xa0, 0x61, ZC3XX_R116_RGAIN}, | ||
5249 | {0xa0, 0x65, ZC3XX_R118_BGAIN}, | ||
5250 | {0xa0, 0x09, 0x01ad}, | ||
5251 | {0xa0, 0x15, 0x01ae}, | ||
5252 | {0xa0, 0x4c, ZC3XX_R10A_RGB00}, /* matrix */ | ||
5253 | {0xa0, 0xf1, ZC3XX_R10B_RGB01}, | ||
5254 | {0xa0, 0x03, ZC3XX_R10C_RGB02}, | ||
5255 | {0xa0, 0xfe, ZC3XX_R10D_RGB10}, | ||
5256 | {0xa0, 0x51, ZC3XX_R10E_RGB11}, | ||
5257 | {0xa0, 0xf1, ZC3XX_R10F_RGB12}, | ||
5258 | {0xa0, 0xec, ZC3XX_R110_RGB20}, | ||
5259 | {0xa0, 0x03, ZC3XX_R111_RGB21}, | ||
5260 | {0xa0, 0x51, ZC3XX_R112_RGB22}, | ||
5261 | {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, | ||
5262 | {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ | ||
5263 | {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ | ||
5264 | {0xa0, 0x38, ZC3XX_R120_GAMMA00}, /* gamma > 5 */ | ||
5265 | {0xa0, 0x51, ZC3XX_R121_GAMMA01}, | ||
5266 | {0xa0, 0x6e, ZC3XX_R122_GAMMA02}, | ||
5267 | {0xa0, 0x8c, ZC3XX_R123_GAMMA03}, | ||
5268 | {0xa0, 0xa2, ZC3XX_R124_GAMMA04}, | ||
5269 | {0xa0, 0xb6, ZC3XX_R125_GAMMA05}, | ||
5270 | {0xa0, 0xc8, ZC3XX_R126_GAMMA06}, | ||
5271 | {0xa0, 0xd6, ZC3XX_R127_GAMMA07}, | ||
5272 | {0xa0, 0xe2, ZC3XX_R128_GAMMA08}, | ||
5273 | {0xa0, 0xed, ZC3XX_R129_GAMMA09}, | ||
5274 | {0xa0, 0xf5, ZC3XX_R12A_GAMMA0A}, | ||
5275 | {0xa0, 0xfc, ZC3XX_R12B_GAMMA0B}, | ||
5276 | {0xa0, 0xff, ZC3XX_R12C_GAMMA0C}, | ||
5277 | {0xa0, 0xff, ZC3XX_R12D_GAMMA0D}, | ||
5278 | {0xa0, 0xff, ZC3XX_R12E_GAMMA0E}, | ||
5279 | {0xa0, 0xff, ZC3XX_R12F_GAMMA0F}, | ||
5280 | {0xa0, 0x12, ZC3XX_R130_GAMMA10}, | ||
5281 | {0xa0, 0x1b, ZC3XX_R131_GAMMA11}, | ||
5282 | {0xa0, 0x1d, ZC3XX_R132_GAMMA12}, | ||
5283 | {0xa0, 0x1a, ZC3XX_R133_GAMMA13}, | ||
5284 | {0xa0, 0x15, ZC3XX_R134_GAMMA14}, | ||
5285 | {0xa0, 0x12, ZC3XX_R135_GAMMA15}, | ||
5286 | {0xa0, 0x0f, ZC3XX_R136_GAMMA16}, | ||
5287 | {0xa0, 0x0d, ZC3XX_R137_GAMMA17}, | ||
5288 | {0xa0, 0x0b, ZC3XX_R138_GAMMA18}, | ||
5289 | {0xa0, 0x09, ZC3XX_R139_GAMMA19}, | ||
5290 | {0xa0, 0x07, ZC3XX_R13A_GAMMA1A}, | ||
5291 | {0xa0, 0x05, ZC3XX_R13B_GAMMA1B}, | ||
5292 | {0xa0, 0x00, ZC3XX_R13C_GAMMA1C}, | ||
5293 | {0xa0, 0x00, ZC3XX_R13D_GAMMA1D}, | ||
5294 | {0xa0, 0x00, ZC3XX_R13E_GAMMA1E}, | ||
5295 | {0xa0, 0x01, ZC3XX_R13F_GAMMA1F}, | ||
5296 | {0xa0, 0x4c, ZC3XX_R10A_RGB00}, /* matrix */ | ||
5297 | {0xa0, 0xf1, ZC3XX_R10B_RGB01}, | ||
5298 | {0xa0, 0x03, ZC3XX_R10C_RGB02}, | ||
5299 | {0xa0, 0xfe, ZC3XX_R10D_RGB10}, | ||
5300 | {0xa0, 0x51, ZC3XX_R10E_RGB11}, | ||
5301 | {0xa0, 0xf1, ZC3XX_R10F_RGB12}, | ||
5302 | {0xa0, 0xec, ZC3XX_R110_RGB20}, | ||
5303 | {0xa0, 0x03, ZC3XX_R111_RGB21}, | ||
5304 | {0xa0, 0x51, ZC3XX_R112_RGB22}, | ||
5305 | {0xa0, 0x10, ZC3XX_R180_AUTOCORRECTENABLE}, | ||
5306 | {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, | ||
5307 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, | ||
5308 | {0xa0, 0x05, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5309 | {0xa0, 0x62, ZC3XX_R093_I2CSETVALUE}, | ||
5310 | {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, | ||
5311 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5312 | {0xa0, 0x09, ZC3XX_R092_I2CADDRESSSELECT}, | ||
5313 | {0xa0, 0xaa, ZC3XX_R093_I2CSETVALUE}, | ||
5314 | {0xa0, 0x01, ZC3XX_R094_I2CWRITEACK}, | ||
5315 | {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, | ||
5316 | {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, | ||
5317 | {0xa0, 0x03, ZC3XX_R191_EXPOSURELIMITMID}, | ||
5318 | {0xa0, 0x9b, ZC3XX_R192_EXPOSURELIMITLOW}, | ||
5319 | {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, | ||
5320 | {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, | ||
5321 | {0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW}, | ||
5322 | {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, | ||
5323 | {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, | ||
5324 | {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, | ||
5325 | {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP}, | ||
5326 | {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, | ||
5327 | {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, | ||
5328 | {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, | ||
5329 | {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, | ||
5330 | {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, | ||
5331 | {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, | ||
5332 | {0xa0, 0x09, 0x01ad}, | ||
5333 | {0xa0, 0x15, 0x01ae}, | ||
5334 | {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE}, | ||
5335 | {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, | ||
5336 | {0xa0, 0x30, 0x0007}, | ||
5337 | {0xa0, 0x02, ZC3XX_R008_CLOCKSETTING}, | ||
5338 | {0xa0, 0x00, 0x0007}, | ||
5339 | {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, | ||
5340 | {} | ||
5341 | }; | ||
5342 | |||
5343 | static const struct usb_action tas5130cxx_InitialScale[] = { /* 320x240 */ | ||
5344 | {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, | 5190 | {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, |
5345 | {0xa0, 0x50, ZC3XX_R002_CLOCKSELECT}, | 5191 | {0xa0, 0x50, ZC3XX_R002_CLOCKSELECT}, |
5346 | {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, | 5192 | {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, |
@@ -5377,7 +5223,7 @@ static const struct usb_action tas5130cxx_InitialScale[] = { /* 320x240 */ | |||
5377 | {0xa0, 0x02, ZC3XX_R0A6_EXPOSUREBLACKLVL}, | 5223 | {0xa0, 0x02, ZC3XX_R0A6_EXPOSUREBLACKLVL}, |
5378 | {} | 5224 | {} |
5379 | }; | 5225 | }; |
5380 | static const struct usb_action tas5130cxx_Initial[] = { /* 640x480 */ | 5226 | static const struct usb_action tas5130c_Initial[] = { /* 640x480 */ |
5381 | {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, | 5227 | {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, |
5382 | {0xa0, 0x40, ZC3XX_R002_CLOCKSELECT}, | 5228 | {0xa0, 0x40, ZC3XX_R002_CLOCKSELECT}, |
5383 | {0xa0, 0x00, ZC3XX_R008_CLOCKSETTING}, | 5229 | {0xa0, 0x00, ZC3XX_R008_CLOCKSETTING}, |
@@ -5413,7 +5259,7 @@ static const struct usb_action tas5130cxx_Initial[] = { /* 640x480 */ | |||
5413 | {0xa0, 0x02, ZC3XX_R0A6_EXPOSUREBLACKLVL}, | 5259 | {0xa0, 0x02, ZC3XX_R0A6_EXPOSUREBLACKLVL}, |
5414 | {} | 5260 | {} |
5415 | }; | 5261 | }; |
5416 | static const struct usb_action tas5130cxx_50HZ[] = { | 5262 | static const struct usb_action tas5130c_50HZ[] = { |
5417 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ | 5263 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ |
5418 | {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ | 5264 | {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ |
5419 | {0xaa, 0xa4, 0x0063}, /* 00,a4,63,aa */ | 5265 | {0xaa, 0xa4, 0x0063}, /* 00,a4,63,aa */ |
@@ -5438,7 +5284,7 @@ static const struct usb_action tas5130cxx_50HZ[] = { | |||
5438 | {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, | 5284 | {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, |
5439 | {} | 5285 | {} |
5440 | }; | 5286 | }; |
5441 | static const struct usb_action tas5130cxx_50HZScale[] = { | 5287 | static const struct usb_action tas5130c_50HZScale[] = { |
5442 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ | 5288 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ |
5443 | {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ | 5289 | {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ |
5444 | {0xaa, 0xa4, 0x0077}, /* 00,a4,77,aa */ | 5290 | {0xaa, 0xa4, 0x0077}, /* 00,a4,77,aa */ |
@@ -5463,7 +5309,7 @@ static const struct usb_action tas5130cxx_50HZScale[] = { | |||
5463 | {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, | 5309 | {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, |
5464 | {} | 5310 | {} |
5465 | }; | 5311 | }; |
5466 | static const struct usb_action tas5130cxx_60HZ[] = { | 5312 | static const struct usb_action tas5130c_60HZ[] = { |
5467 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ | 5313 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ |
5468 | {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ | 5314 | {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ |
5469 | {0xaa, 0xa4, 0x0036}, /* 00,a4,36,aa */ | 5315 | {0xaa, 0xa4, 0x0036}, /* 00,a4,36,aa */ |
@@ -5488,7 +5334,7 @@ static const struct usb_action tas5130cxx_60HZ[] = { | |||
5488 | {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, | 5334 | {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, |
5489 | {} | 5335 | {} |
5490 | }; | 5336 | }; |
5491 | static const struct usb_action tas5130cxx_60HZScale[] = { | 5337 | static const struct usb_action tas5130c_60HZScale[] = { |
5492 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ | 5338 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ |
5493 | {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ | 5339 | {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ |
5494 | {0xaa, 0xa4, 0x0077}, /* 00,a4,77,aa */ | 5340 | {0xaa, 0xa4, 0x0077}, /* 00,a4,77,aa */ |
@@ -5513,7 +5359,7 @@ static const struct usb_action tas5130cxx_60HZScale[] = { | |||
5513 | {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, | 5359 | {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, |
5514 | {} | 5360 | {} |
5515 | }; | 5361 | }; |
5516 | static const struct usb_action tas5130cxx_NoFliker[] = { | 5362 | static const struct usb_action tas5130c_NoFliker[] = { |
5517 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ | 5363 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ |
5518 | {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ | 5364 | {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ |
5519 | {0xaa, 0xa4, 0x0040}, /* 00,a4,40,aa */ | 5365 | {0xaa, 0xa4, 0x0040}, /* 00,a4,40,aa */ |
@@ -5539,7 +5385,7 @@ static const struct usb_action tas5130cxx_NoFliker[] = { | |||
5539 | {} | 5385 | {} |
5540 | }; | 5386 | }; |
5541 | 5387 | ||
5542 | static const struct usb_action tas5130cxx_NoFlikerScale[] = { | 5388 | static const struct usb_action tas5130c_NoFlikerScale[] = { |
5543 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ | 5389 | {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ |
5544 | {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ | 5390 | {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ |
5545 | {0xaa, 0xa4, 0x0090}, /* 00,a4,90,aa */ | 5391 | {0xaa, 0xa4, 0x0090}, /* 00,a4,90,aa */ |
@@ -5840,13 +5686,22 @@ static const struct usb_action tas5130c_vf0250_NoFliker[] = { | |||
5840 | static u8 reg_r_i(struct gspca_dev *gspca_dev, | 5686 | static u8 reg_r_i(struct gspca_dev *gspca_dev, |
5841 | u16 index) | 5687 | u16 index) |
5842 | { | 5688 | { |
5843 | usb_control_msg(gspca_dev->dev, | 5689 | int ret; |
5690 | |||
5691 | if (gspca_dev->usb_err < 0) | ||
5692 | return 0; | ||
5693 | ret = usb_control_msg(gspca_dev->dev, | ||
5844 | usb_rcvctrlpipe(gspca_dev->dev, 0), | 5694 | usb_rcvctrlpipe(gspca_dev->dev, 0), |
5845 | 0xa1, | 5695 | 0xa1, |
5846 | USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, | 5696 | USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, |
5847 | 0x01, /* value */ | 5697 | 0x01, /* value */ |
5848 | index, gspca_dev->usb_buf, 1, | 5698 | index, gspca_dev->usb_buf, 1, |
5849 | 500); | 5699 | 500); |
5700 | if (ret < 0) { | ||
5701 | PDEBUG(D_ERR, "reg_r_i err %d", ret); | ||
5702 | gspca_dev->usb_err = ret; | ||
5703 | return 0; | ||
5704 | } | ||
5850 | return gspca_dev->usb_buf[0]; | 5705 | return gspca_dev->usb_buf[0]; |
5851 | } | 5706 | } |
5852 | 5707 | ||
@@ -5860,24 +5715,32 @@ static u8 reg_r(struct gspca_dev *gspca_dev, | |||
5860 | return ret; | 5715 | return ret; |
5861 | } | 5716 | } |
5862 | 5717 | ||
5863 | static void reg_w_i(struct usb_device *dev, | 5718 | static void reg_w_i(struct gspca_dev *gspca_dev, |
5864 | u8 value, | 5719 | u8 value, |
5865 | u16 index) | 5720 | u16 index) |
5866 | { | 5721 | { |
5867 | usb_control_msg(dev, | 5722 | int ret; |
5868 | usb_sndctrlpipe(dev, 0), | 5723 | |
5724 | if (gspca_dev->usb_err < 0) | ||
5725 | return; | ||
5726 | ret = usb_control_msg(gspca_dev->dev, | ||
5727 | usb_sndctrlpipe(gspca_dev->dev, 0), | ||
5869 | 0xa0, | 5728 | 0xa0, |
5870 | USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, | 5729 | USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, |
5871 | value, index, NULL, 0, | 5730 | value, index, NULL, 0, |
5872 | 500); | 5731 | 500); |
5732 | if (ret < 0) { | ||
5733 | PDEBUG(D_ERR, "reg_w_i err %d", ret); | ||
5734 | gspca_dev->usb_err = ret; | ||
5735 | } | ||
5873 | } | 5736 | } |
5874 | 5737 | ||
5875 | static void reg_w(struct usb_device *dev, | 5738 | static void reg_w(struct gspca_dev *gspca_dev, |
5876 | u8 value, | 5739 | u8 value, |
5877 | u16 index) | 5740 | u16 index) |
5878 | { | 5741 | { |
5879 | PDEBUG(D_USBO, "reg w [%04x] = %02x", index, value); | 5742 | PDEBUG(D_USBO, "reg w [%04x] = %02x", index, value); |
5880 | reg_w_i(dev, value, index); | 5743 | reg_w_i(gspca_dev, value, index); |
5881 | } | 5744 | } |
5882 | 5745 | ||
5883 | static u16 i2c_read(struct gspca_dev *gspca_dev, | 5746 | static u16 i2c_read(struct gspca_dev *gspca_dev, |
@@ -5886,8 +5749,10 @@ static u16 i2c_read(struct gspca_dev *gspca_dev, | |||
5886 | u8 retbyte; | 5749 | u8 retbyte; |
5887 | u16 retval; | 5750 | u16 retval; |
5888 | 5751 | ||
5889 | reg_w_i(gspca_dev->dev, reg, 0x0092); | 5752 | if (gspca_dev->usb_err < 0) |
5890 | reg_w_i(gspca_dev->dev, 0x02, 0x0090); /* <- read command */ | 5753 | return 0; |
5754 | reg_w_i(gspca_dev, reg, 0x0092); | ||
5755 | reg_w_i(gspca_dev, 0x02, 0x0090); /* <- read command */ | ||
5891 | msleep(20); | 5756 | msleep(20); |
5892 | retbyte = reg_r_i(gspca_dev, 0x0091); /* read status */ | 5757 | retbyte = reg_r_i(gspca_dev, 0x0091); /* read status */ |
5893 | if (retbyte != 0x00) | 5758 | if (retbyte != 0x00) |
@@ -5906,10 +5771,12 @@ static u8 i2c_write(struct gspca_dev *gspca_dev, | |||
5906 | { | 5771 | { |
5907 | u8 retbyte; | 5772 | u8 retbyte; |
5908 | 5773 | ||
5909 | reg_w_i(gspca_dev->dev, reg, 0x92); | 5774 | if (gspca_dev->usb_err < 0) |
5910 | reg_w_i(gspca_dev->dev, valL, 0x93); | 5775 | return 0; |
5911 | reg_w_i(gspca_dev->dev, valH, 0x94); | 5776 | reg_w_i(gspca_dev, reg, 0x92); |
5912 | reg_w_i(gspca_dev->dev, 0x01, 0x90); /* <- write command */ | 5777 | reg_w_i(gspca_dev, valL, 0x93); |
5778 | reg_w_i(gspca_dev, valH, 0x94); | ||
5779 | reg_w_i(gspca_dev, 0x01, 0x90); /* <- write command */ | ||
5913 | msleep(1); | 5780 | msleep(1); |
5914 | retbyte = reg_r_i(gspca_dev, 0x0091); /* read status */ | 5781 | retbyte = reg_r_i(gspca_dev, 0x0091); /* read status */ |
5915 | if (retbyte != 0x00) | 5782 | if (retbyte != 0x00) |
@@ -5925,7 +5792,7 @@ static void usb_exchange(struct gspca_dev *gspca_dev, | |||
5925 | while (action->req) { | 5792 | while (action->req) { |
5926 | switch (action->req) { | 5793 | switch (action->req) { |
5927 | case 0xa0: /* write register */ | 5794 | case 0xa0: /* write register */ |
5928 | reg_w(gspca_dev->dev, action->val, action->idx); | 5795 | reg_w(gspca_dev, action->val, action->idx); |
5929 | break; | 5796 | break; |
5930 | case 0xa1: /* read status */ | 5797 | case 0xa1: /* read status */ |
5931 | reg_r(gspca_dev, action->idx); | 5798 | reg_r(gspca_dev, action->idx); |
@@ -5974,38 +5841,37 @@ static void setmatrix(struct gspca_dev *gspca_dev) | |||
5974 | static const u8 vf0250_matrix[9] = | 5841 | static const u8 vf0250_matrix[9] = |
5975 | {0x7b, 0xea, 0xea, 0xea, 0x7b, 0xea, 0xea, 0xea, 0x7b}; | 5842 | {0x7b, 0xea, 0xea, 0xea, 0x7b, 0xea, 0xea, 0xea, 0x7b}; |
5976 | static const u8 *matrix_tb[SENSOR_MAX] = { | 5843 | static const u8 *matrix_tb[SENSOR_MAX] = { |
5977 | adcm2700_matrix, /* SENSOR_ADCM2700 0 */ | 5844 | [SENSOR_ADCM2700] = adcm2700_matrix, |
5978 | ov7620_matrix, /* SENSOR_CS2102 1 */ | 5845 | [SENSOR_CS2102] = ov7620_matrix, |
5979 | NULL, /* SENSOR_CS2102K 2 */ | 5846 | [SENSOR_CS2102K] = NULL, |
5980 | gc0305_matrix, /* SENSOR_GC0305 3 */ | 5847 | [SENSOR_GC0305] = gc0305_matrix, |
5981 | NULL, /* SENSOR_HDCS2020b 4 */ | 5848 | [SENSOR_HDCS2020b] = NULL, |
5982 | NULL, /* SENSOR_HV7131B 5 */ | 5849 | [SENSOR_HV7131B] = NULL, |
5983 | NULL, /* SENSOR_HV7131C 6 */ | 5850 | [SENSOR_HV7131R] = NULL, |
5984 | NULL, /* SENSOR_ICM105A 7 */ | 5851 | [SENSOR_ICM105A] = po2030_matrix, |
5985 | NULL, /* SENSOR_MC501CB 8 */ | 5852 | [SENSOR_MC501CB] = NULL, |
5986 | gc0305_matrix, /* SENSOR_MI0360SOC 9 */ | 5853 | [SENSOR_MT9V111_1] = gc0305_matrix, |
5987 | ov7620_matrix, /* SENSOR_OV7620 10 */ | 5854 | [SENSOR_MT9V111_3] = gc0305_matrix, |
5988 | NULL, /* SENSOR_OV7630C 11 */ | 5855 | [SENSOR_OV7620] = ov7620_matrix, |
5989 | NULL, /* SENSOR_PAS106 12 */ | 5856 | [SENSOR_OV7630C] = NULL, |
5990 | pas202b_matrix, /* SENSOR_PAS202B 13 */ | 5857 | [SENSOR_PAS106] = NULL, |
5991 | gc0305_matrix, /* SENSOR_PB0330 14 */ | 5858 | [SENSOR_PAS202B] = pas202b_matrix, |
5992 | po2030_matrix, /* SENSOR_PO2030 15 */ | 5859 | [SENSOR_PB0330] = gc0305_matrix, |
5993 | NULL, /* SENSOR_TAS5130CK 16 */ | 5860 | [SENSOR_PO2030] = po2030_matrix, |
5994 | tas5130c_matrix, /* SENSOR_TAS5130CXX 17 */ | 5861 | [SENSOR_TAS5130C] = tas5130c_matrix, |
5995 | vf0250_matrix, /* SENSOR_TAS5130C_VF0250 18 */ | 5862 | [SENSOR_TAS5130C_VF0250] = vf0250_matrix, |
5996 | }; | 5863 | }; |
5997 | 5864 | ||
5998 | matrix = matrix_tb[sd->sensor]; | 5865 | matrix = matrix_tb[sd->sensor]; |
5999 | if (matrix == NULL) | 5866 | if (matrix == NULL) |
6000 | return; /* matrix already loaded */ | 5867 | return; /* matrix already loaded */ |
6001 | for (i = 0; i < ARRAY_SIZE(ov7620_matrix); i++) | 5868 | for (i = 0; i < ARRAY_SIZE(ov7620_matrix); i++) |
6002 | reg_w(gspca_dev->dev, matrix[i], 0x010a + i); | 5869 | reg_w(gspca_dev, matrix[i], 0x010a + i); |
6003 | } | 5870 | } |
6004 | 5871 | ||
6005 | static void setsharpness(struct gspca_dev *gspca_dev) | 5872 | static void setsharpness(struct gspca_dev *gspca_dev) |
6006 | { | 5873 | { |
6007 | struct sd *sd = (struct sd *) gspca_dev; | 5874 | struct sd *sd = (struct sd *) gspca_dev; |
6008 | struct usb_device *dev = gspca_dev->dev; | ||
6009 | int sharpness; | 5875 | int sharpness; |
6010 | static const u8 sharpness_tb[][2] = { | 5876 | static const u8 sharpness_tb[][2] = { |
6011 | {0x02, 0x03}, | 5877 | {0x02, 0x03}, |
@@ -6015,17 +5881,16 @@ static void setsharpness(struct gspca_dev *gspca_dev) | |||
6015 | }; | 5881 | }; |
6016 | 5882 | ||
6017 | sharpness = sd->sharpness; | 5883 | sharpness = sd->sharpness; |
6018 | reg_w(dev, sharpness_tb[sharpness][0], 0x01c6); | 5884 | reg_w(gspca_dev, sharpness_tb[sharpness][0], 0x01c6); |
6019 | reg_r(gspca_dev, 0x01c8); | 5885 | reg_r(gspca_dev, 0x01c8); |
6020 | reg_r(gspca_dev, 0x01c9); | 5886 | reg_r(gspca_dev, 0x01c9); |
6021 | reg_r(gspca_dev, 0x01ca); | 5887 | reg_r(gspca_dev, 0x01ca); |
6022 | reg_w(dev, sharpness_tb[sharpness][1], 0x01cb); | 5888 | reg_w(gspca_dev, sharpness_tb[sharpness][1], 0x01cb); |
6023 | } | 5889 | } |
6024 | 5890 | ||
6025 | static void setcontrast(struct gspca_dev *gspca_dev) | 5891 | static void setcontrast(struct gspca_dev *gspca_dev) |
6026 | { | 5892 | { |
6027 | struct sd *sd = (struct sd *) gspca_dev; | 5893 | struct sd *sd = (struct sd *) gspca_dev; |
6028 | struct usb_device *dev = gspca_dev->dev; | ||
6029 | const u8 *Tgamma; | 5894 | const u8 *Tgamma; |
6030 | int g, i, brightness, contrast, adj, gp1, gp2; | 5895 | int g, i, brightness, contrast, adj, gp1, gp2; |
6031 | u8 gr[16]; | 5896 | u8 gr[16]; |
@@ -6063,7 +5928,7 @@ static void setcontrast(struct gspca_dev *gspca_dev) | |||
6063 | g = 0xff; | 5928 | g = 0xff; |
6064 | else if (g < 0) | 5929 | else if (g < 0) |
6065 | g = 0; | 5930 | g = 0; |
6066 | reg_w(dev, g, 0x0120 + i); /* gamma */ | 5931 | reg_w(gspca_dev, g, 0x0120 + i); /* gamma */ |
6067 | if (contrast > 0) | 5932 | if (contrast > 0) |
6068 | adj--; | 5933 | adj--; |
6069 | else if (contrast < 0) | 5934 | else if (contrast < 0) |
@@ -6077,13 +5942,12 @@ static void setcontrast(struct gspca_dev *gspca_dev) | |||
6077 | } | 5942 | } |
6078 | gr[15] = (0xff - gp2) / 2; | 5943 | gr[15] = (0xff - gp2) / 2; |
6079 | for (i = 0; i < 16; i++) | 5944 | for (i = 0; i < 16; i++) |
6080 | reg_w(dev, gr[i], 0x0130 + i); /* gradient */ | 5945 | reg_w(gspca_dev, gr[i], 0x0130 + i); /* gradient */ |
6081 | } | 5946 | } |
6082 | 5947 | ||
6083 | static void setquality(struct gspca_dev *gspca_dev) | 5948 | static void setquality(struct gspca_dev *gspca_dev) |
6084 | { | 5949 | { |
6085 | struct sd *sd = (struct sd *) gspca_dev; | 5950 | struct sd *sd = (struct sd *) gspca_dev; |
6086 | struct usb_device *dev = gspca_dev->dev; | ||
6087 | u8 frxt; | 5951 | u8 frxt; |
6088 | 5952 | ||
6089 | switch (sd->sensor) { | 5953 | switch (sd->sensor) { |
@@ -6096,9 +5960,9 @@ static void setquality(struct gspca_dev *gspca_dev) | |||
6096 | return; | 5960 | return; |
6097 | } | 5961 | } |
6098 | /*fixme: is it really 0008 0007 0018 for all other sensors? */ | 5962 | /*fixme: is it really 0008 0007 0018 for all other sensors? */ |
6099 | reg_w(dev, QUANT_VAL, 0x0008); | 5963 | reg_w(gspca_dev, QUANT_VAL, 0x0008); |
6100 | frxt = 0x30; | 5964 | frxt = 0x30; |
6101 | reg_w(dev, frxt, 0x0007); | 5965 | reg_w(gspca_dev, frxt, 0x0007); |
6102 | #if QUANT_VAL == 0 || QUANT_VAL == 1 || QUANT_VAL == 2 | 5966 | #if QUANT_VAL == 0 || QUANT_VAL == 1 || QUANT_VAL == 2 |
6103 | frxt = 0xff; | 5967 | frxt = 0xff; |
6104 | #elif QUANT_VAL == 3 | 5968 | #elif QUANT_VAL == 3 |
@@ -6108,7 +5972,7 @@ static void setquality(struct gspca_dev *gspca_dev) | |||
6108 | #else | 5972 | #else |
6109 | frxt = 0x20; | 5973 | frxt = 0x20; |
6110 | #endif | 5974 | #endif |
6111 | reg_w(dev, frxt, 0x0018); | 5975 | reg_w(gspca_dev, frxt, 0x0018); |
6112 | } | 5976 | } |
6113 | 5977 | ||
6114 | /* Matches the sensor's internal frame rate to the lighting frequency. | 5978 | /* Matches the sensor's internal frame rate to the lighting frequency. |
@@ -6116,87 +5980,86 @@ static void setquality(struct gspca_dev *gspca_dev) | |||
6116 | * 50Hz, for European and Asian lighting (default) | 5980 | * 50Hz, for European and Asian lighting (default) |
6117 | * 60Hz, for American lighting | 5981 | * 60Hz, for American lighting |
6118 | * 0 = No Fliker (for outdoore usage) | 5982 | * 0 = No Fliker (for outdoore usage) |
6119 | * Returns: 0 for success | ||
6120 | */ | 5983 | */ |
6121 | static int setlightfreq(struct gspca_dev *gspca_dev) | 5984 | static void setlightfreq(struct gspca_dev *gspca_dev) |
6122 | { | 5985 | { |
6123 | struct sd *sd = (struct sd *) gspca_dev; | 5986 | struct sd *sd = (struct sd *) gspca_dev; |
6124 | int i, mode; | 5987 | int i, mode; |
6125 | const struct usb_action *zc3_freq; | 5988 | const struct usb_action *zc3_freq; |
6126 | static const struct usb_action *freq_tb[SENSOR_MAX][6] = { | 5989 | static const struct usb_action *freq_tb[SENSOR_MAX][6] = { |
6127 | /* SENSOR_ADCM2700 0 */ | 5990 | [SENSOR_ADCM2700] = |
6128 | {adcm2700_NoFliker, adcm2700_NoFliker, | 5991 | {adcm2700_NoFliker, adcm2700_NoFliker, |
6129 | adcm2700_50HZ, adcm2700_50HZ, | 5992 | adcm2700_50HZ, adcm2700_50HZ, |
6130 | adcm2700_60HZ, adcm2700_60HZ}, | 5993 | adcm2700_60HZ, adcm2700_60HZ}, |
6131 | /* SENSOR_CS2102 1 */ | 5994 | [SENSOR_CS2102] = |
6132 | {cs2102_NoFliker, cs2102_NoFlikerScale, | 5995 | {cs2102_NoFliker, cs2102_NoFlikerScale, |
6133 | cs2102_50HZ, cs2102_50HZScale, | 5996 | cs2102_50HZ, cs2102_50HZScale, |
6134 | cs2102_60HZ, cs2102_60HZScale}, | 5997 | cs2102_60HZ, cs2102_60HZScale}, |
6135 | /* SENSOR_CS2102K 2 */ | 5998 | [SENSOR_CS2102K] = |
6136 | {cs2102_NoFliker, cs2102_NoFlikerScale, | 5999 | {cs2102_NoFliker, cs2102_NoFlikerScale, |
6137 | NULL, NULL, /* currently disabled */ | 6000 | NULL, NULL, /* currently disabled */ |
6138 | NULL, NULL}, | 6001 | NULL, NULL}, |
6139 | /* SENSOR_GC0305 3 */ | 6002 | [SENSOR_GC0305] = |
6140 | {gc0305_NoFliker, gc0305_NoFliker, | 6003 | {gc0305_NoFliker, gc0305_NoFliker, |
6141 | gc0305_50HZ, gc0305_50HZ, | 6004 | gc0305_50HZ, gc0305_50HZ, |
6142 | gc0305_60HZ, gc0305_60HZ}, | 6005 | gc0305_60HZ, gc0305_60HZ}, |
6143 | /* SENSOR_HDCS2020b 4 */ | 6006 | [SENSOR_HDCS2020b] = |
6144 | {hdcs2020b_NoFliker, hdcs2020b_NoFliker, | 6007 | {hdcs2020b_NoFliker, hdcs2020b_NoFliker, |
6145 | hdcs2020b_50HZ, hdcs2020b_50HZ, | 6008 | hdcs2020b_50HZ, hdcs2020b_50HZ, |
6146 | hdcs2020b_60HZ, hdcs2020b_60HZ}, | 6009 | hdcs2020b_60HZ, hdcs2020b_60HZ}, |
6147 | /* SENSOR_HV7131B 5 */ | 6010 | [SENSOR_HV7131B] = |
6148 | {hv7131b_NoFliker, hv7131b_NoFlikerScale, | 6011 | {hv7131b_NoFliker, hv7131b_NoFlikerScale, |
6149 | hv7131b_50HZ, hv7131b_50HZScale, | 6012 | hv7131b_50HZ, hv7131b_50HZScale, |
6150 | hv7131b_60HZ, hv7131b_60HZScale}, | 6013 | hv7131b_60HZ, hv7131b_60HZScale}, |
6151 | /* SENSOR_HV7131C 6 */ | 6014 | [SENSOR_HV7131R] = |
6152 | {NULL, NULL, | 6015 | {hv7131r_NoFliker, hv7131r_NoFlikerScale, |
6153 | NULL, NULL, | 6016 | hv7131r_50HZ, hv7131r_50HZScale, |
6154 | NULL, NULL}, | 6017 | hv7131r_60HZ, hv7131r_60HZScale}, |
6155 | /* SENSOR_ICM105A 7 */ | 6018 | [SENSOR_ICM105A] = |
6156 | {icm105a_NoFliker, icm105a_NoFlikerScale, | 6019 | {icm105a_NoFliker, icm105a_NoFlikerScale, |
6157 | icm105a_50HZ, icm105a_50HZScale, | 6020 | icm105a_50HZ, icm105a_50HZScale, |
6158 | icm105a_60HZ, icm105a_60HZScale}, | 6021 | icm105a_60HZ, icm105a_60HZScale}, |
6159 | /* SENSOR_MC501CB 8 */ | 6022 | [SENSOR_MC501CB] = |
6160 | {mc501cb_NoFliker, mc501cb_NoFlikerScale, | 6023 | {mc501cb_NoFliker, mc501cb_NoFlikerScale, |
6161 | mc501cb_50HZ, mc501cb_50HZScale, | 6024 | mc501cb_50HZ, mc501cb_50HZScale, |
6162 | mc501cb_60HZ, mc501cb_60HZScale}, | 6025 | mc501cb_60HZ, mc501cb_60HZScale}, |
6163 | /* SENSOR_MI0360SOC 9 */ | 6026 | [SENSOR_MT9V111_1] = |
6164 | {mi360soc_AENoFliker, mi360soc_AENoFlikerScale, | 6027 | {mt9v111_1_AENoFliker, mt9v111_1_AENoFlikerScale, |
6165 | mi360soc_AE50HZ, mi360soc_AE50HZScale, | 6028 | mt9v111_1_AE50HZ, mt9v111_1_AE50HZScale, |
6166 | mi360soc_AE60HZ, mi360soc_AE60HZScale}, | 6029 | mt9v111_1_AE60HZ, mt9v111_1_AE60HZScale}, |
6167 | /* SENSOR_OV7620 10 */ | 6030 | [SENSOR_MT9V111_3] = |
6031 | {mt9v111_3_AENoFliker, mt9v111_3_AENoFlikerScale, | ||
6032 | mt9v111_3_AE50HZ, mt9v111_3_AE50HZScale, | ||
6033 | mt9v111_3_AE60HZ, mt9v111_3_AE60HZScale}, | ||
6034 | [SENSOR_OV7620] = | ||
6168 | {ov7620_NoFliker, ov7620_NoFliker, | 6035 | {ov7620_NoFliker, ov7620_NoFliker, |
6169 | ov7620_50HZ, ov7620_50HZ, | 6036 | ov7620_50HZ, ov7620_50HZ, |
6170 | ov7620_60HZ, ov7620_60HZ}, | 6037 | ov7620_60HZ, ov7620_60HZ}, |
6171 | /* SENSOR_OV7630C 11 */ | 6038 | [SENSOR_OV7630C] = |
6172 | {NULL, NULL, | 6039 | {NULL, NULL, |
6173 | NULL, NULL, | 6040 | NULL, NULL, |
6174 | NULL, NULL}, | 6041 | NULL, NULL}, |
6175 | /* SENSOR_PAS106 12 */ | 6042 | [SENSOR_PAS106] = |
6176 | {pas106b_NoFliker, pas106b_NoFliker, | 6043 | {pas106b_NoFliker, pas106b_NoFliker, |
6177 | pas106b_50HZ, pas106b_50HZ, | 6044 | pas106b_50HZ, pas106b_50HZ, |
6178 | pas106b_60HZ, pas106b_60HZ}, | 6045 | pas106b_60HZ, pas106b_60HZ}, |
6179 | /* SENSOR_PAS202B 13 */ | 6046 | [SENSOR_PAS202B] = |
6180 | {pas202b_NoFliker, pas202b_NoFlikerScale, | 6047 | {pas202b_NoFliker, pas202b_NoFlikerScale, |
6181 | pas202b_50HZ, pas202b_50HZScale, | 6048 | pas202b_50HZ, pas202b_50HZScale, |
6182 | pas202b_60HZ, pas202b_60HZScale}, | 6049 | pas202b_60HZ, pas202b_60HZScale}, |
6183 | /* SENSOR_PB0330 14 */ | 6050 | [SENSOR_PB0330] = |
6184 | {pb0330_NoFliker, pb0330_NoFlikerScale, | 6051 | {pb0330_NoFliker, pb0330_NoFlikerScale, |
6185 | pb0330_50HZ, pb0330_50HZScale, | 6052 | pb0330_50HZ, pb0330_50HZScale, |
6186 | pb0330_60HZ, pb0330_60HZScale}, | 6053 | pb0330_60HZ, pb0330_60HZScale}, |
6187 | /* SENSOR_PO2030 15 */ | 6054 | [SENSOR_PO2030] = |
6188 | {po2030_NoFliker, po2030_NoFliker, | 6055 | {po2030_NoFliker, po2030_NoFliker, |
6189 | po2030_50HZ, po2030_50HZ, | 6056 | po2030_50HZ, po2030_50HZ, |
6190 | po2030_60HZ, po2030_60HZ}, | 6057 | po2030_60HZ, po2030_60HZ}, |
6191 | /* SENSOR_TAS5130CK 16 */ | 6058 | [SENSOR_TAS5130C] = |
6192 | {tas5130cxx_NoFliker, tas5130cxx_NoFlikerScale, | 6059 | {tas5130c_NoFliker, tas5130c_NoFlikerScale, |
6193 | tas5130cxx_50HZ, tas5130cxx_50HZScale, | 6060 | tas5130c_50HZ, tas5130c_50HZScale, |
6194 | tas5130cxx_60HZ, tas5130cxx_60HZScale}, | 6061 | tas5130c_60HZ, tas5130c_60HZScale}, |
6195 | /* SENSOR_TAS5130CXX 17 */ | 6062 | [SENSOR_TAS5130C_VF0250] = |
6196 | {tas5130cxx_NoFliker, tas5130cxx_NoFlikerScale, | ||
6197 | tas5130cxx_50HZ, tas5130cxx_50HZScale, | ||
6198 | tas5130cxx_60HZ, tas5130cxx_60HZScale}, | ||
6199 | /* SENSOR_TAS5130C_VF0250 18 */ | ||
6200 | {tas5130c_vf0250_NoFliker, tas5130c_vf0250_NoFlikerScale, | 6063 | {tas5130c_vf0250_NoFliker, tas5130c_vf0250_NoFlikerScale, |
6201 | tas5130c_vf0250_50HZ, tas5130c_vf0250_50HZScale, | 6064 | tas5130c_vf0250_50HZ, tas5130c_vf0250_50HZScale, |
6202 | tas5130c_vf0250_60HZ, tas5130c_vf0250_60HZScale}, | 6065 | tas5130c_vf0250_60HZ, tas5130c_vf0250_60HZScale}, |
@@ -6207,29 +6070,28 @@ static int setlightfreq(struct gspca_dev *gspca_dev) | |||
6207 | if (mode) | 6070 | if (mode) |
6208 | i++; /* 320x240 */ | 6071 | i++; /* 320x240 */ |
6209 | zc3_freq = freq_tb[sd->sensor][i]; | 6072 | zc3_freq = freq_tb[sd->sensor][i]; |
6210 | if (zc3_freq != NULL) { | 6073 | if (zc3_freq == NULL) |
6211 | usb_exchange(gspca_dev, zc3_freq); | 6074 | return; |
6212 | switch (sd->sensor) { | 6075 | usb_exchange(gspca_dev, zc3_freq); |
6213 | case SENSOR_GC0305: | 6076 | switch (sd->sensor) { |
6214 | if (mode /* if 320x240 */ | 6077 | case SENSOR_GC0305: |
6215 | && sd->lightfreq == 1) /* and 50Hz */ | 6078 | if (mode /* if 320x240 */ |
6216 | reg_w(gspca_dev->dev, 0x85, 0x018d); | 6079 | && sd->lightfreq == 1) /* and 50Hz */ |
6217 | /* win: 0x80, 0x018d */ | 6080 | reg_w(gspca_dev, 0x85, 0x018d); |
6218 | break; | 6081 | /* win: 0x80, 0x018d */ |
6219 | case SENSOR_OV7620: | 6082 | break; |
6220 | if (!mode) { /* if 640x480 */ | 6083 | case SENSOR_OV7620: |
6221 | if (sd->lightfreq != 0) /* and 50 or 60 Hz */ | 6084 | if (!mode) { /* if 640x480 */ |
6222 | reg_w(gspca_dev->dev, 0x40, 0x0002); | 6085 | if (sd->lightfreq != 0) /* and 50 or 60 Hz */ |
6223 | else | 6086 | reg_w(gspca_dev, 0x40, 0x0002); |
6224 | reg_w(gspca_dev->dev, 0x44, 0x0002); | 6087 | else |
6225 | } | 6088 | reg_w(gspca_dev, 0x44, 0x0002); |
6226 | break; | ||
6227 | case SENSOR_PAS202B: | ||
6228 | reg_w(gspca_dev->dev, 0x00, 0x01a7); | ||
6229 | break; | ||
6230 | } | 6089 | } |
6090 | break; | ||
6091 | case SENSOR_PAS202B: | ||
6092 | reg_w(gspca_dev, 0x00, 0x01a7); | ||
6093 | break; | ||
6231 | } | 6094 | } |
6232 | return 0; | ||
6233 | } | 6095 | } |
6234 | 6096 | ||
6235 | static void setautogain(struct gspca_dev *gspca_dev) | 6097 | static void setautogain(struct gspca_dev *gspca_dev) |
@@ -6241,45 +6103,46 @@ static void setautogain(struct gspca_dev *gspca_dev) | |||
6241 | autoval = 0x42; | 6103 | autoval = 0x42; |
6242 | else | 6104 | else |
6243 | autoval = 0x02; | 6105 | autoval = 0x02; |
6244 | reg_w(gspca_dev->dev, autoval, 0x0180); | 6106 | reg_w(gspca_dev, autoval, 0x0180); |
6245 | } | 6107 | } |
6246 | 6108 | ||
6247 | static void send_unknown(struct usb_device *dev, int sensor) | 6109 | static void send_unknown(struct gspca_dev *gspca_dev, int sensor) |
6248 | { | 6110 | { |
6249 | reg_w(dev, 0x01, 0x0000); /* led off */ | 6111 | reg_w(gspca_dev, 0x01, 0x0000); /* led off */ |
6250 | switch (sensor) { | 6112 | switch (sensor) { |
6251 | case SENSOR_PAS106: | 6113 | case SENSOR_PAS106: |
6252 | reg_w(dev, 0x03, 0x003a); | 6114 | reg_w(gspca_dev, 0x03, 0x003a); |
6253 | reg_w(dev, 0x0c, 0x003b); | 6115 | reg_w(gspca_dev, 0x0c, 0x003b); |
6254 | reg_w(dev, 0x08, 0x0038); | 6116 | reg_w(gspca_dev, 0x08, 0x0038); |
6255 | break; | 6117 | break; |
6256 | case SENSOR_ADCM2700: | 6118 | case SENSOR_ADCM2700: |
6257 | case SENSOR_GC0305: | 6119 | case SENSOR_GC0305: |
6258 | case SENSOR_OV7620: | 6120 | case SENSOR_OV7620: |
6259 | case SENSOR_MI0360SOC: | 6121 | case SENSOR_MT9V111_1: |
6122 | case SENSOR_MT9V111_3: | ||
6260 | case SENSOR_PB0330: | 6123 | case SENSOR_PB0330: |
6261 | case SENSOR_PO2030: | 6124 | case SENSOR_PO2030: |
6262 | reg_w(dev, 0x0d, 0x003a); | 6125 | reg_w(gspca_dev, 0x0d, 0x003a); |
6263 | reg_w(dev, 0x02, 0x003b); | 6126 | reg_w(gspca_dev, 0x02, 0x003b); |
6264 | reg_w(dev, 0x00, 0x0038); | 6127 | reg_w(gspca_dev, 0x00, 0x0038); |
6265 | break; | 6128 | break; |
6266 | case SENSOR_PAS202B: | 6129 | case SENSOR_PAS202B: |
6267 | reg_w(dev, 0x03, 0x003b); | 6130 | reg_w(gspca_dev, 0x03, 0x003b); |
6268 | reg_w(dev, 0x0c, 0x003a); | 6131 | reg_w(gspca_dev, 0x0c, 0x003a); |
6269 | reg_w(dev, 0x0b, 0x0039); | 6132 | reg_w(gspca_dev, 0x0b, 0x0039); |
6270 | reg_w(dev, 0x0b, 0x0038); | 6133 | reg_w(gspca_dev, 0x0b, 0x0038); |
6271 | break; | 6134 | break; |
6272 | } | 6135 | } |
6273 | } | 6136 | } |
6274 | 6137 | ||
6275 | /* start probe 2 wires */ | 6138 | /* start probe 2 wires */ |
6276 | static void start_2wr_probe(struct usb_device *dev, int sensor) | 6139 | static void start_2wr_probe(struct gspca_dev *gspca_dev, int sensor) |
6277 | { | 6140 | { |
6278 | reg_w(dev, 0x01, 0x0000); | 6141 | reg_w(gspca_dev, 0x01, 0x0000); |
6279 | reg_w(dev, sensor, 0x0010); | 6142 | reg_w(gspca_dev, sensor, 0x0010); |
6280 | reg_w(dev, 0x01, 0x0001); | 6143 | reg_w(gspca_dev, 0x01, 0x0001); |
6281 | reg_w(dev, 0x03, 0x0012); | 6144 | reg_w(gspca_dev, 0x03, 0x0012); |
6282 | reg_w(dev, 0x01, 0x0012); | 6145 | reg_w(gspca_dev, 0x01, 0x0012); |
6283 | /* msleep(2); */ | 6146 | /* msleep(2); */ |
6284 | } | 6147 | } |
6285 | 6148 | ||
@@ -6287,14 +6150,14 @@ static int sif_probe(struct gspca_dev *gspca_dev) | |||
6287 | { | 6150 | { |
6288 | u16 checkword; | 6151 | u16 checkword; |
6289 | 6152 | ||
6290 | start_2wr_probe(gspca_dev->dev, 0x0f); /* PAS106 */ | 6153 | start_2wr_probe(gspca_dev, 0x0f); /* PAS106 */ |
6291 | reg_w(gspca_dev->dev, 0x08, 0x008d); | 6154 | reg_w(gspca_dev, 0x08, 0x008d); |
6292 | msleep(150); | 6155 | msleep(150); |
6293 | checkword = ((i2c_read(gspca_dev, 0x00) & 0x0f) << 4) | 6156 | checkword = ((i2c_read(gspca_dev, 0x00) & 0x0f) << 4) |
6294 | | ((i2c_read(gspca_dev, 0x01) & 0xf0) >> 4); | 6157 | | ((i2c_read(gspca_dev, 0x01) & 0xf0) >> 4); |
6295 | PDEBUG(D_PROBE, "probe sif 0x%04x", checkword); | 6158 | PDEBUG(D_PROBE, "probe sif 0x%04x", checkword); |
6296 | if (checkword == 0x0007) { | 6159 | if (checkword == 0x0007) { |
6297 | send_unknown(gspca_dev->dev, SENSOR_PAS106); | 6160 | send_unknown(gspca_dev, SENSOR_PAS106); |
6298 | return 0x0f; /* PAS106 */ | 6161 | return 0x0f; /* PAS106 */ |
6299 | } | 6162 | } |
6300 | return -1; | 6163 | return -1; |
@@ -6302,23 +6165,22 @@ static int sif_probe(struct gspca_dev *gspca_dev) | |||
6302 | 6165 | ||
6303 | static int vga_2wr_probe(struct gspca_dev *gspca_dev) | 6166 | static int vga_2wr_probe(struct gspca_dev *gspca_dev) |
6304 | { | 6167 | { |
6305 | struct usb_device *dev = gspca_dev->dev; | ||
6306 | u16 retword; | 6168 | u16 retword; |
6307 | 6169 | ||
6308 | start_2wr_probe(dev, 0x00); /* HV7131B */ | 6170 | start_2wr_probe(gspca_dev, 0x00); /* HV7131B */ |
6309 | i2c_write(gspca_dev, 0x01, 0xaa, 0x00); | 6171 | i2c_write(gspca_dev, 0x01, 0xaa, 0x00); |
6310 | retword = i2c_read(gspca_dev, 0x01); | 6172 | retword = i2c_read(gspca_dev, 0x01); |
6311 | if (retword != 0) | 6173 | if (retword != 0) |
6312 | return 0x00; /* HV7131B */ | 6174 | return 0x00; /* HV7131B */ |
6313 | 6175 | ||
6314 | start_2wr_probe(dev, 0x04); /* CS2102 */ | 6176 | start_2wr_probe(gspca_dev, 0x04); /* CS2102 */ |
6315 | i2c_write(gspca_dev, 0x01, 0xaa, 0x00); | 6177 | i2c_write(gspca_dev, 0x01, 0xaa, 0x00); |
6316 | retword = i2c_read(gspca_dev, 0x01); | 6178 | retword = i2c_read(gspca_dev, 0x01); |
6317 | if (retword != 0) | 6179 | if (retword != 0) |
6318 | return 0x04; /* CS2102 */ | 6180 | return 0x04; /* CS2102 */ |
6319 | 6181 | ||
6320 | start_2wr_probe(dev, 0x06); /* OmniVision */ | 6182 | start_2wr_probe(gspca_dev, 0x06); /* OmniVision */ |
6321 | reg_w(dev, 0x08, 0x008d); | 6183 | reg_w(gspca_dev, 0x08, 0x008d); |
6322 | i2c_write(gspca_dev, 0x11, 0xaa, 0x00); | 6184 | i2c_write(gspca_dev, 0x11, 0xaa, 0x00); |
6323 | retword = i2c_read(gspca_dev, 0x11); | 6185 | retword = i2c_read(gspca_dev, 0x11); |
6324 | if (retword != 0) { | 6186 | if (retword != 0) { |
@@ -6327,14 +6189,14 @@ static int vga_2wr_probe(struct gspca_dev *gspca_dev) | |||
6327 | goto ov_check; | 6189 | goto ov_check; |
6328 | } | 6190 | } |
6329 | 6191 | ||
6330 | start_2wr_probe(dev, 0x08); /* HDCS2020 */ | 6192 | start_2wr_probe(gspca_dev, 0x08); /* HDCS2020 */ |
6331 | i2c_write(gspca_dev, 0x1c, 0x00, 0x00); | 6193 | i2c_write(gspca_dev, 0x1c, 0x00, 0x00); |
6332 | i2c_write(gspca_dev, 0x15, 0xaa, 0x00); | 6194 | i2c_write(gspca_dev, 0x15, 0xaa, 0x00); |
6333 | retword = i2c_read(gspca_dev, 0x15); | 6195 | retword = i2c_read(gspca_dev, 0x15); |
6334 | if (retword != 0) | 6196 | if (retword != 0) |
6335 | return 0x08; /* HDCS2020 */ | 6197 | return 0x08; /* HDCS2020 */ |
6336 | 6198 | ||
6337 | start_2wr_probe(dev, 0x0a); /* PB0330 */ | 6199 | start_2wr_probe(gspca_dev, 0x0a); /* PB0330 */ |
6338 | i2c_write(gspca_dev, 0x07, 0xaa, 0xaa); | 6200 | i2c_write(gspca_dev, 0x07, 0xaa, 0xaa); |
6339 | retword = i2c_read(gspca_dev, 0x07); | 6201 | retword = i2c_read(gspca_dev, 0x07); |
6340 | if (retword != 0) | 6202 | if (retword != 0) |
@@ -6346,23 +6208,23 @@ static int vga_2wr_probe(struct gspca_dev *gspca_dev) | |||
6346 | if (retword != 0) | 6208 | if (retword != 0) |
6347 | return 0x0a; /* PB0330 ?? */ | 6209 | return 0x0a; /* PB0330 ?? */ |
6348 | 6210 | ||
6349 | start_2wr_probe(dev, 0x0c); /* ICM105A */ | 6211 | start_2wr_probe(gspca_dev, 0x0c); /* ICM105A */ |
6350 | i2c_write(gspca_dev, 0x01, 0x11, 0x00); | 6212 | i2c_write(gspca_dev, 0x01, 0x11, 0x00); |
6351 | retword = i2c_read(gspca_dev, 0x01); | 6213 | retword = i2c_read(gspca_dev, 0x01); |
6352 | if (retword != 0) | 6214 | if (retword != 0) |
6353 | return 0x0c; /* ICM105A */ | 6215 | return 0x0c; /* ICM105A */ |
6354 | 6216 | ||
6355 | start_2wr_probe(dev, 0x0e); /* PAS202BCB */ | 6217 | start_2wr_probe(gspca_dev, 0x0e); /* PAS202BCB */ |
6356 | reg_w(dev, 0x08, 0x008d); | 6218 | reg_w(gspca_dev, 0x08, 0x008d); |
6357 | i2c_write(gspca_dev, 0x03, 0xaa, 0x00); | 6219 | i2c_write(gspca_dev, 0x03, 0xaa, 0x00); |
6358 | msleep(50); | 6220 | msleep(50); |
6359 | retword = i2c_read(gspca_dev, 0x03); | 6221 | retword = i2c_read(gspca_dev, 0x03); |
6360 | if (retword != 0) { | 6222 | if (retword != 0) { |
6361 | send_unknown(dev, SENSOR_PAS202B); | 6223 | send_unknown(gspca_dev, SENSOR_PAS202B); |
6362 | return 0x0e; /* PAS202BCB */ | 6224 | return 0x0e; /* PAS202BCB */ |
6363 | } | 6225 | } |
6364 | 6226 | ||
6365 | start_2wr_probe(dev, 0x02); /* TAS5130C */ | 6227 | start_2wr_probe(gspca_dev, 0x02); /* TAS5130C */ |
6366 | i2c_write(gspca_dev, 0x01, 0xaa, 0x00); | 6228 | i2c_write(gspca_dev, 0x01, 0xaa, 0x00); |
6367 | retword = i2c_read(gspca_dev, 0x01); | 6229 | retword = i2c_read(gspca_dev, 0x01); |
6368 | if (retword != 0) | 6230 | if (retword != 0) |
@@ -6371,20 +6233,20 @@ ov_check: | |||
6371 | reg_r(gspca_dev, 0x0010); /* ?? */ | 6233 | reg_r(gspca_dev, 0x0010); /* ?? */ |
6372 | reg_r(gspca_dev, 0x0010); | 6234 | reg_r(gspca_dev, 0x0010); |
6373 | 6235 | ||
6374 | reg_w(dev, 0x01, 0x0000); | 6236 | reg_w(gspca_dev, 0x01, 0x0000); |
6375 | reg_w(dev, 0x01, 0x0001); | 6237 | reg_w(gspca_dev, 0x01, 0x0001); |
6376 | reg_w(dev, 0x06, 0x0010); /* OmniVision */ | 6238 | reg_w(gspca_dev, 0x06, 0x0010); /* OmniVision */ |
6377 | reg_w(dev, 0xa1, 0x008b); | 6239 | reg_w(gspca_dev, 0xa1, 0x008b); |
6378 | reg_w(dev, 0x08, 0x008d); | 6240 | reg_w(gspca_dev, 0x08, 0x008d); |
6379 | msleep(500); | 6241 | msleep(500); |
6380 | reg_w(dev, 0x01, 0x0012); | 6242 | reg_w(gspca_dev, 0x01, 0x0012); |
6381 | i2c_write(gspca_dev, 0x12, 0x80, 0x00); /* sensor reset */ | 6243 | i2c_write(gspca_dev, 0x12, 0x80, 0x00); /* sensor reset */ |
6382 | retword = i2c_read(gspca_dev, 0x0a) << 8; | 6244 | retword = i2c_read(gspca_dev, 0x0a) << 8; |
6383 | retword |= i2c_read(gspca_dev, 0x0b); | 6245 | retword |= i2c_read(gspca_dev, 0x0b); |
6384 | PDEBUG(D_PROBE, "probe 2wr ov vga 0x%04x", retword); | 6246 | PDEBUG(D_PROBE, "probe 2wr ov vga 0x%04x", retword); |
6385 | switch (retword) { | 6247 | switch (retword) { |
6386 | case 0x7631: /* OV7630C */ | 6248 | case 0x7631: /* OV7630C */ |
6387 | reg_w(dev, 0x06, 0x0010); | 6249 | reg_w(gspca_dev, 0x06, 0x0010); |
6388 | break; | 6250 | break; |
6389 | case 0x7620: /* OV7620 */ | 6251 | case 0x7620: /* OV7620 */ |
6390 | case 0x7648: /* OV7648 */ | 6252 | case 0x7648: /* OV7648 */ |
@@ -6401,32 +6263,31 @@ struct sensor_by_chipset_revision { | |||
6401 | }; | 6263 | }; |
6402 | static const struct sensor_by_chipset_revision chipset_revision_sensor[] = { | 6264 | static const struct sensor_by_chipset_revision chipset_revision_sensor[] = { |
6403 | {0xc000, 0x12}, /* TAS5130C */ | 6265 | {0xc000, 0x12}, /* TAS5130C */ |
6404 | {0xc001, 0x13}, /* MI0360SOC */ | 6266 | {0xc001, 0x13}, /* MT9V111 */ |
6405 | {0xe001, 0x13}, | 6267 | {0xe001, 0x13}, |
6406 | {0x8001, 0x13}, | 6268 | {0x8001, 0x13}, |
6407 | {0x8000, 0x14}, /* CS2102K */ | 6269 | {0x8000, 0x14}, /* CS2102K */ |
6408 | {0x8400, 0x15}, /* TAS5130K */ | 6270 | {0x8400, 0x15}, /* MT9V111 */ |
6409 | {0xe400, 0x15}, | 6271 | {0xe400, 0x15}, |
6410 | }; | 6272 | }; |
6411 | 6273 | ||
6412 | static int vga_3wr_probe(struct gspca_dev *gspca_dev) | 6274 | static int vga_3wr_probe(struct gspca_dev *gspca_dev) |
6413 | { | 6275 | { |
6414 | struct sd *sd = (struct sd *) gspca_dev; | 6276 | struct sd *sd = (struct sd *) gspca_dev; |
6415 | struct usb_device *dev = gspca_dev->dev; | ||
6416 | int i; | 6277 | int i; |
6417 | u8 retbyte; | 6278 | u8 retbyte; |
6418 | u16 retword; | 6279 | u16 retword; |
6419 | 6280 | ||
6420 | /*fixme: lack of 8b=b3 (11,12)-> 10, 8b=e0 (14,15,16)-> 12 found in gspcav1*/ | 6281 | /*fixme: lack of 8b=b3 (11,12)-> 10, 8b=e0 (14,15,16)-> 12 found in gspcav1*/ |
6421 | reg_w(dev, 0x02, 0x0010); | 6282 | reg_w(gspca_dev, 0x02, 0x0010); |
6422 | reg_r(gspca_dev, 0x0010); | 6283 | reg_r(gspca_dev, 0x0010); |
6423 | reg_w(dev, 0x01, 0x0000); | 6284 | reg_w(gspca_dev, 0x01, 0x0000); |
6424 | reg_w(dev, 0x00, 0x0010); | 6285 | reg_w(gspca_dev, 0x00, 0x0010); |
6425 | reg_w(dev, 0x01, 0x0001); | 6286 | reg_w(gspca_dev, 0x01, 0x0001); |
6426 | reg_w(dev, 0x91, 0x008b); | 6287 | reg_w(gspca_dev, 0x91, 0x008b); |
6427 | reg_w(dev, 0x03, 0x0012); | 6288 | reg_w(gspca_dev, 0x03, 0x0012); |
6428 | reg_w(dev, 0x01, 0x0012); | 6289 | reg_w(gspca_dev, 0x01, 0x0012); |
6429 | reg_w(dev, 0x05, 0x0012); | 6290 | reg_w(gspca_dev, 0x05, 0x0012); |
6430 | retword = i2c_read(gspca_dev, 0x14); | 6291 | retword = i2c_read(gspca_dev, 0x14); |
6431 | if (retword != 0) | 6292 | if (retword != 0) |
6432 | return 0x11; /* HV7131R */ | 6293 | return 0x11; /* HV7131R */ |
@@ -6437,93 +6298,90 @@ static int vga_3wr_probe(struct gspca_dev *gspca_dev) | |||
6437 | if (retword != 0) | 6298 | if (retword != 0) |
6438 | return 0x11; /* HV7131R */ | 6299 | return 0x11; /* HV7131R */ |
6439 | 6300 | ||
6440 | reg_w(dev, 0x02, 0x0010); | 6301 | reg_w(gspca_dev, 0x02, 0x0010); |
6441 | retword = reg_r(gspca_dev, 0x000b) << 8; | 6302 | retword = reg_r(gspca_dev, 0x000b) << 8; |
6442 | retword |= reg_r(gspca_dev, 0x000a); | 6303 | retword |= reg_r(gspca_dev, 0x000a); |
6443 | PDEBUG(D_PROBE, "probe 3wr vga 1 0x%04x", retword); | 6304 | PDEBUG(D_PROBE, "probe 3wr vga 1 0x%04x", retword); |
6444 | reg_r(gspca_dev, 0x0010); | 6305 | reg_r(gspca_dev, 0x0010); |
6445 | /* value 0x4001 is meaningless */ | 6306 | if ((retword & 0xff00) == 0x6400) |
6446 | if (retword != 0x4001) { | 6307 | return 0x02; /* TAS5130C */ |
6447 | if ((retword & 0xff00) == 0x6400) | 6308 | for (i = 0; i < ARRAY_SIZE(chipset_revision_sensor); i++) { |
6448 | return 0x02; /* TAS5130C */ | 6309 | if (chipset_revision_sensor[i].revision == retword) { |
6449 | for (i = 0; i < ARRAY_SIZE(chipset_revision_sensor); i++) { | 6310 | sd->chip_revision = retword; |
6450 | if (chipset_revision_sensor[i].revision == retword) { | 6311 | send_unknown(gspca_dev, SENSOR_PB0330); |
6451 | sd->chip_revision = retword; | 6312 | return chipset_revision_sensor[i] |
6452 | send_unknown(dev, SENSOR_PB0330); | 6313 | .internal_sensor_id; |
6453 | return chipset_revision_sensor[i] | ||
6454 | .internal_sensor_id; | ||
6455 | } | ||
6456 | } | 6314 | } |
6457 | } | 6315 | } |
6458 | 6316 | ||
6459 | reg_w(dev, 0x01, 0x0000); /* check PB0330 */ | 6317 | reg_w(gspca_dev, 0x01, 0x0000); /* check PB0330 */ |
6460 | reg_w(dev, 0x01, 0x0001); | 6318 | reg_w(gspca_dev, 0x01, 0x0001); |
6461 | reg_w(dev, 0xdd, 0x008b); | 6319 | reg_w(gspca_dev, 0xdd, 0x008b); |
6462 | reg_w(dev, 0x0a, 0x0010); | 6320 | reg_w(gspca_dev, 0x0a, 0x0010); |
6463 | reg_w(dev, 0x03, 0x0012); | 6321 | reg_w(gspca_dev, 0x03, 0x0012); |
6464 | reg_w(dev, 0x01, 0x0012); | 6322 | reg_w(gspca_dev, 0x01, 0x0012); |
6465 | retword = i2c_read(gspca_dev, 0x00); | 6323 | retword = i2c_read(gspca_dev, 0x00); |
6466 | if (retword != 0) { | 6324 | if (retword != 0) { |
6467 | PDEBUG(D_PROBE, "probe 3wr vga type 0a ?"); | 6325 | PDEBUG(D_PROBE, "probe 3wr vga type 0a"); |
6468 | return 0x0a; /* PB0330 */ | 6326 | return 0x0a; /* PB0330 */ |
6469 | } | 6327 | } |
6470 | 6328 | ||
6471 | reg_w(dev, 0x01, 0x0000); | 6329 | reg_w(gspca_dev, 0x01, 0x0000); |
6472 | reg_w(dev, 0x01, 0x0001); | 6330 | reg_w(gspca_dev, 0x01, 0x0001); |
6473 | reg_w(dev, 0x98, 0x008b); | 6331 | reg_w(gspca_dev, 0x98, 0x008b); |
6474 | reg_w(dev, 0x01, 0x0010); | 6332 | reg_w(gspca_dev, 0x01, 0x0010); |
6475 | reg_w(dev, 0x03, 0x0012); | 6333 | reg_w(gspca_dev, 0x03, 0x0012); |
6476 | msleep(2); | 6334 | msleep(2); |
6477 | reg_w(dev, 0x01, 0x0012); | 6335 | reg_w(gspca_dev, 0x01, 0x0012); |
6478 | retword = i2c_read(gspca_dev, 0x00); | 6336 | retword = i2c_read(gspca_dev, 0x00); |
6479 | if (retword != 0) { | 6337 | if (retword != 0) { |
6480 | PDEBUG(D_PROBE, "probe 3wr vga type %02x", retword); | 6338 | PDEBUG(D_PROBE, "probe 3wr vga type %02x", retword); |
6481 | if (retword == 0x0011) /* VF0250 */ | 6339 | if (retword == 0x0011) /* VF0250 */ |
6482 | return 0x0250; | 6340 | return 0x0250; |
6483 | if (retword == 0x0029) /* gc0305 */ | 6341 | if (retword == 0x0029) /* gc0305 */ |
6484 | send_unknown(dev, SENSOR_GC0305); | 6342 | send_unknown(gspca_dev, SENSOR_GC0305); |
6485 | return retword; | 6343 | return retword; |
6486 | } | 6344 | } |
6487 | 6345 | ||
6488 | reg_w(dev, 0x01, 0x0000); /* check OmniVision */ | 6346 | reg_w(gspca_dev, 0x01, 0x0000); /* check OmniVision */ |
6489 | reg_w(dev, 0x01, 0x0001); | 6347 | reg_w(gspca_dev, 0x01, 0x0001); |
6490 | reg_w(dev, 0xa1, 0x008b); | 6348 | reg_w(gspca_dev, 0xa1, 0x008b); |
6491 | reg_w(dev, 0x08, 0x008d); | 6349 | reg_w(gspca_dev, 0x08, 0x008d); |
6492 | reg_w(dev, 0x06, 0x0010); | 6350 | reg_w(gspca_dev, 0x06, 0x0010); |
6493 | reg_w(dev, 0x01, 0x0012); | 6351 | reg_w(gspca_dev, 0x01, 0x0012); |
6494 | reg_w(dev, 0x05, 0x0012); | 6352 | reg_w(gspca_dev, 0x05, 0x0012); |
6495 | if (i2c_read(gspca_dev, 0x1c) == 0x007f /* OV7610 - manufacturer ID */ | 6353 | if (i2c_read(gspca_dev, 0x1c) == 0x007f /* OV7610 - manufacturer ID */ |
6496 | && i2c_read(gspca_dev, 0x1d) == 0x00a2) { | 6354 | && i2c_read(gspca_dev, 0x1d) == 0x00a2) { |
6497 | send_unknown(dev, SENSOR_OV7620); | 6355 | send_unknown(gspca_dev, SENSOR_OV7620); |
6498 | return 0x06; /* OmniVision confirm ? */ | 6356 | return 0x06; /* OmniVision confirm ? */ |
6499 | } | 6357 | } |
6500 | 6358 | ||
6501 | reg_w(dev, 0x01, 0x0000); | 6359 | reg_w(gspca_dev, 0x01, 0x0000); |
6502 | reg_w(dev, 0x00, 0x0002); | 6360 | reg_w(gspca_dev, 0x00, 0x0002); |
6503 | reg_w(dev, 0x01, 0x0010); | 6361 | reg_w(gspca_dev, 0x01, 0x0010); |
6504 | reg_w(dev, 0x01, 0x0001); | 6362 | reg_w(gspca_dev, 0x01, 0x0001); |
6505 | reg_w(dev, 0xee, 0x008b); | 6363 | reg_w(gspca_dev, 0xee, 0x008b); |
6506 | reg_w(dev, 0x03, 0x0012); | 6364 | reg_w(gspca_dev, 0x03, 0x0012); |
6507 | reg_w(dev, 0x01, 0x0012); | 6365 | reg_w(gspca_dev, 0x01, 0x0012); |
6508 | reg_w(dev, 0x05, 0x0012); | 6366 | reg_w(gspca_dev, 0x05, 0x0012); |
6509 | retword = i2c_read(gspca_dev, 0x00) << 8; /* ID 0 */ | 6367 | retword = i2c_read(gspca_dev, 0x00) << 8; /* ID 0 */ |
6510 | retword |= i2c_read(gspca_dev, 0x01); /* ID 1 */ | 6368 | retword |= i2c_read(gspca_dev, 0x01); /* ID 1 */ |
6511 | PDEBUG(D_PROBE, "probe 3wr vga 2 0x%04x", retword); | 6369 | PDEBUG(D_PROBE, "probe 3wr vga 2 0x%04x", retword); |
6512 | if (retword == 0x2030) { | 6370 | if (retword == 0x2030) { |
6513 | retbyte = i2c_read(gspca_dev, 0x02); /* revision number */ | 6371 | retbyte = i2c_read(gspca_dev, 0x02); /* revision number */ |
6514 | PDEBUG(D_PROBE, "sensor PO2030 rev 0x%02x", retbyte); | 6372 | PDEBUG(D_PROBE, "sensor PO2030 rev 0x%02x", retbyte); |
6515 | send_unknown(dev, SENSOR_PO2030); | 6373 | send_unknown(gspca_dev, SENSOR_PO2030); |
6516 | return retword; | 6374 | return retword; |
6517 | } | 6375 | } |
6518 | 6376 | ||
6519 | reg_w(dev, 0x01, 0x0000); | 6377 | reg_w(gspca_dev, 0x01, 0x0000); |
6520 | reg_w(dev, 0x0a, 0x0010); | 6378 | reg_w(gspca_dev, 0x0a, 0x0010); |
6521 | reg_w(dev, 0xd3, 0x008b); | 6379 | reg_w(gspca_dev, 0xd3, 0x008b); |
6522 | reg_w(dev, 0x01, 0x0001); | 6380 | reg_w(gspca_dev, 0x01, 0x0001); |
6523 | reg_w(dev, 0x03, 0x0012); | 6381 | reg_w(gspca_dev, 0x03, 0x0012); |
6524 | reg_w(dev, 0x01, 0x0012); | 6382 | reg_w(gspca_dev, 0x01, 0x0012); |
6525 | reg_w(dev, 0x05, 0x0012); | 6383 | reg_w(gspca_dev, 0x05, 0x0012); |
6526 | reg_w(dev, 0xd3, 0x008b); | 6384 | reg_w(gspca_dev, 0xd3, 0x008b); |
6527 | retword = i2c_read(gspca_dev, 0x01); | 6385 | retword = i2c_read(gspca_dev, 0x01); |
6528 | if (retword != 0) { | 6386 | if (retword != 0) { |
6529 | PDEBUG(D_PROBE, "probe 3wr vga type 0a ? ret: %04x", retword); | 6387 | PDEBUG(D_PROBE, "probe 3wr vga type 0a ? ret: %04x", retword); |
@@ -6560,54 +6418,74 @@ static int sd_config(struct gspca_dev *gspca_dev, | |||
6560 | const struct usb_device_id *id) | 6418 | const struct usb_device_id *id) |
6561 | { | 6419 | { |
6562 | struct sd *sd = (struct sd *) gspca_dev; | 6420 | struct sd *sd = (struct sd *) gspca_dev; |
6421 | |||
6422 | if (id->idProduct == 0x301b) | ||
6423 | sd->bridge = BRIDGE_ZC301; | ||
6424 | else | ||
6425 | sd->bridge = BRIDGE_ZC303; | ||
6426 | |||
6427 | /* define some sensors from the vendor/product */ | ||
6428 | sd->sensor = id->driver_info; | ||
6429 | |||
6430 | sd->sharpness = SHARPNESS_DEF; | ||
6431 | sd->brightness = BRIGHTNESS_DEF; | ||
6432 | sd->contrast = CONTRAST_DEF; | ||
6433 | sd->autogain = AUTOGAIN_DEF; | ||
6434 | sd->lightfreq = FREQ_DEF; | ||
6435 | sd->quality = QUALITY_DEF; | ||
6436 | |||
6437 | return 0; | ||
6438 | } | ||
6439 | |||
6440 | /* this function is called at probe and resume time */ | ||
6441 | static int sd_init(struct gspca_dev *gspca_dev) | ||
6442 | { | ||
6443 | struct sd *sd = (struct sd *) gspca_dev; | ||
6563 | struct cam *cam; | 6444 | struct cam *cam; |
6564 | int sensor; | 6445 | int sensor; |
6565 | static const u8 gamma[SENSOR_MAX] = { | 6446 | static const u8 gamma[SENSOR_MAX] = { |
6566 | 4, /* SENSOR_ADCM2700 0 */ | 6447 | [SENSOR_ADCM2700] = 4, |
6567 | 4, /* SENSOR_CS2102 1 */ | 6448 | [SENSOR_CS2102] = 4, |
6568 | 5, /* SENSOR_CS2102K 2 */ | 6449 | [SENSOR_CS2102K] = 5, |
6569 | 4, /* SENSOR_GC0305 3 */ | 6450 | [SENSOR_GC0305] = 4, |
6570 | 4, /* SENSOR_HDCS2020b 4 */ | 6451 | [SENSOR_HDCS2020b] = 4, |
6571 | 4, /* SENSOR_HV7131B 5 */ | 6452 | [SENSOR_HV7131B] = 4, |
6572 | 4, /* SENSOR_HV7131C 6 */ | 6453 | [SENSOR_HV7131R] = 4, |
6573 | 4, /* SENSOR_ICM105A 7 */ | 6454 | [SENSOR_ICM105A] = 4, |
6574 | 4, /* SENSOR_MC501CB 8 */ | 6455 | [SENSOR_MC501CB] = 4, |
6575 | 4, /* SENSOR_MI0360SOC 9 */ | 6456 | [SENSOR_MT9V111_1] = 4, |
6576 | 3, /* SENSOR_OV7620 10 */ | 6457 | [SENSOR_MT9V111_3] = 4, |
6577 | 4, /* SENSOR_OV7630C 11 */ | 6458 | [SENSOR_OV7620] = 3, |
6578 | 4, /* SENSOR_PAS106 12 */ | 6459 | [SENSOR_OV7630C] = 4, |
6579 | 4, /* SENSOR_PAS202B 13 */ | 6460 | [SENSOR_PAS106] = 4, |
6580 | 4, /* SENSOR_PB0330 14 */ | 6461 | [SENSOR_PAS202B] = 4, |
6581 | 4, /* SENSOR_PO2030 15 */ | 6462 | [SENSOR_PB0330] = 4, |
6582 | 4, /* SENSOR_TAS5130CK 16 */ | 6463 | [SENSOR_PO2030] = 4, |
6583 | 3, /* SENSOR_TAS5130CXX 17 */ | 6464 | [SENSOR_TAS5130C] = 3, |
6584 | 3, /* SENSOR_TAS5130C_VF0250 18 */ | 6465 | [SENSOR_TAS5130C_VF0250] = 3, |
6585 | }; | 6466 | }; |
6586 | static const u8 mode_tb[SENSOR_MAX] = { | 6467 | static const u8 mode_tb[SENSOR_MAX] = { |
6587 | 2, /* SENSOR_ADCM2700 0 */ | 6468 | [SENSOR_ADCM2700] = 2, |
6588 | 1, /* SENSOR_CS2102 1 */ | 6469 | [SENSOR_CS2102] = 1, |
6589 | 1, /* SENSOR_CS2102K 2 */ | 6470 | [SENSOR_CS2102K] = 1, |
6590 | 1, /* SENSOR_GC0305 3 */ | 6471 | [SENSOR_GC0305] = 1, |
6591 | 1, /* SENSOR_HDCS2020b 4 */ | 6472 | [SENSOR_HDCS2020b] = 1, |
6592 | 1, /* SENSOR_HV7131B 5 */ | 6473 | [SENSOR_HV7131B] = 1, |
6593 | 1, /* SENSOR_HV7131C 6 */ | 6474 | [SENSOR_HV7131R] = 1, |
6594 | 1, /* SENSOR_ICM105A 7 */ | 6475 | [SENSOR_ICM105A] = 1, |
6595 | 2, /* SENSOR_MC501CB 8 */ | 6476 | [SENSOR_MC501CB] = 2, |
6596 | 1, /* SENSOR_MI0360SOC 9 */ | 6477 | [SENSOR_MT9V111_1] = 1, |
6597 | 2, /* SENSOR_OV7620 10 */ | 6478 | [SENSOR_MT9V111_3] = 1, |
6598 | 1, /* SENSOR_OV7630C 11 */ | 6479 | [SENSOR_OV7620] = 2, |
6599 | 0, /* SENSOR_PAS106 12 */ | 6480 | [SENSOR_OV7630C] = 1, |
6600 | 1, /* SENSOR_PAS202B 13 */ | 6481 | [SENSOR_PAS106] = 0, |
6601 | 1, /* SENSOR_PB0330 14 */ | 6482 | [SENSOR_PAS202B] = 1, |
6602 | 1, /* SENSOR_PO2030 15 */ | 6483 | [SENSOR_PB0330] = 1, |
6603 | 1, /* SENSOR_TAS5130CK 16 */ | 6484 | [SENSOR_PO2030] = 1, |
6604 | 1, /* SENSOR_TAS5130CXX 17 */ | 6485 | [SENSOR_TAS5130C] = 1, |
6605 | 1, /* SENSOR_TAS5130C_VF0250 18 */ | 6486 | [SENSOR_TAS5130C_VF0250] = 1, |
6606 | }; | 6487 | }; |
6607 | 6488 | ||
6608 | /* define some sensors from the vendor/product */ | ||
6609 | sd->sharpness = SHARPNESS_DEF; | ||
6610 | sd->sensor = id->driver_info; | ||
6611 | sensor = zcxx_probeSensor(gspca_dev); | 6489 | sensor = zcxx_probeSensor(gspca_dev); |
6612 | if (sensor >= 0) | 6490 | if (sensor >= 0) |
6613 | PDEBUG(D_PROBE, "probe sensor -> %04x", sensor); | 6491 | PDEBUG(D_PROBE, "probe sensor -> %04x", sensor); |
@@ -6626,8 +6504,8 @@ static int sd_config(struct gspca_dev *gspca_dev, | |||
6626 | break; | 6504 | break; |
6627 | default: | 6505 | default: |
6628 | PDEBUG(D_PROBE, | 6506 | PDEBUG(D_PROBE, |
6629 | "Sensor UNKNOWN_0 force Tas5130"); | 6507 | "Unknown sensor - set to TAS5130C"); |
6630 | sd->sensor = SENSOR_TAS5130CXX; | 6508 | sd->sensor = SENSOR_TAS5130C; |
6631 | } | 6509 | } |
6632 | break; | 6510 | break; |
6633 | case 0: | 6511 | case 0: |
@@ -6642,14 +6520,14 @@ static int sd_config(struct gspca_dev *gspca_dev, | |||
6642 | break; | 6520 | break; |
6643 | default: | 6521 | default: |
6644 | /* case 2: * hv7131r */ | 6522 | /* case 2: * hv7131r */ |
6645 | PDEBUG(D_PROBE, "Find Sensor HV7131R(c)"); | 6523 | PDEBUG(D_PROBE, "Find Sensor HV7131R"); |
6646 | sd->sensor = SENSOR_HV7131C; | 6524 | sd->sensor = SENSOR_HV7131R; |
6647 | break; | 6525 | break; |
6648 | } | 6526 | } |
6649 | break; | 6527 | break; |
6650 | case 0x02: | 6528 | case 0x02: |
6651 | PDEBUG(D_PROBE, "Sensor TAS5130C"); | 6529 | PDEBUG(D_PROBE, "Sensor TAS5130C"); |
6652 | sd->sensor = SENSOR_TAS5130CXX; | 6530 | sd->sensor = SENSOR_TAS5130C; |
6653 | break; | 6531 | break; |
6654 | case 0x04: | 6532 | case 0x04: |
6655 | PDEBUG(D_PROBE, "Find Sensor CS2102"); | 6533 | PDEBUG(D_PROBE, "Find Sensor CS2102"); |
@@ -6681,17 +6559,20 @@ static int sd_config(struct gspca_dev *gspca_dev, | |||
6681 | case 0x10: | 6559 | case 0x10: |
6682 | case 0x12: | 6560 | case 0x12: |
6683 | PDEBUG(D_PROBE, "Find Sensor TAS5130C"); | 6561 | PDEBUG(D_PROBE, "Find Sensor TAS5130C"); |
6684 | sd->sensor = SENSOR_TAS5130CXX; | 6562 | sd->sensor = SENSOR_TAS5130C; |
6685 | break; | 6563 | break; |
6686 | case 0x11: | 6564 | case 0x11: |
6687 | PDEBUG(D_PROBE, "Find Sensor HV7131R(c)"); | 6565 | PDEBUG(D_PROBE, "Find Sensor HV7131R"); |
6688 | sd->sensor = SENSOR_HV7131C; | 6566 | sd->sensor = SENSOR_HV7131R; |
6689 | break; | 6567 | break; |
6690 | case 0x13: | 6568 | case 0x13: |
6569 | case 0x15: | ||
6691 | PDEBUG(D_PROBE, | 6570 | PDEBUG(D_PROBE, |
6692 | "Find Sensor MI0360SOC. Chip revision %x", | 6571 | "Sensor MT9V111. Chip revision %04x", |
6693 | sd->chip_revision); | 6572 | sd->chip_revision); |
6694 | sd->sensor = SENSOR_MI0360SOC; | 6573 | sd->sensor = sd->bridge == BRIDGE_ZC301 |
6574 | ? SENSOR_MT9V111_1 | ||
6575 | : SENSOR_MT9V111_3; | ||
6695 | break; | 6576 | break; |
6696 | case 0x14: | 6577 | case 0x14: |
6697 | PDEBUG(D_PROBE, | 6578 | PDEBUG(D_PROBE, |
@@ -6699,12 +6580,6 @@ static int sd_config(struct gspca_dev *gspca_dev, | |||
6699 | sd->chip_revision); | 6580 | sd->chip_revision); |
6700 | sd->sensor = SENSOR_CS2102K; | 6581 | sd->sensor = SENSOR_CS2102K; |
6701 | break; | 6582 | break; |
6702 | case 0x15: | ||
6703 | PDEBUG(D_PROBE, | ||
6704 | "Find Sensor TAS5130CK?. Chip revision %x", | ||
6705 | sd->chip_revision); | ||
6706 | sd->sensor = SENSOR_TAS5130CK; | ||
6707 | break; | ||
6708 | case 0x16: | 6583 | case 0x16: |
6709 | PDEBUG(D_PROBE, "Find Sensor ADCM2700"); | 6584 | PDEBUG(D_PROBE, "Find Sensor ADCM2700"); |
6710 | sd->sensor = SENSOR_ADCM2700; | 6585 | sd->sensor = SENSOR_ADCM2700; |
@@ -6741,13 +6616,11 @@ static int sd_config(struct gspca_dev *gspca_dev, | |||
6741 | } | 6616 | } |
6742 | if (sensor < 0x20) { | 6617 | if (sensor < 0x20) { |
6743 | if (sensor == -1 || sensor == 0x10 || sensor == 0x12) | 6618 | if (sensor == -1 || sensor == 0x10 || sensor == 0x12) |
6744 | reg_w(gspca_dev->dev, 0x02, 0x0010); | 6619 | reg_w(gspca_dev, 0x02, 0x0010); |
6745 | reg_r(gspca_dev, 0x0010); | 6620 | reg_r(gspca_dev, 0x0010); |
6746 | } | 6621 | } |
6747 | 6622 | ||
6748 | cam = &gspca_dev->cam; | 6623 | cam = &gspca_dev->cam; |
6749 | /*fixme:test*/ | ||
6750 | gspca_dev->nbalt--; | ||
6751 | switch (mode_tb[sd->sensor]) { | 6624 | switch (mode_tb[sd->sensor]) { |
6752 | case 0: | 6625 | case 0: |
6753 | cam->cam_mode = sif_mode; | 6626 | cam->cam_mode = sif_mode; |
@@ -6763,58 +6636,62 @@ static int sd_config(struct gspca_dev *gspca_dev, | |||
6763 | cam->nmodes = ARRAY_SIZE(broken_vga_mode); | 6636 | cam->nmodes = ARRAY_SIZE(broken_vga_mode); |
6764 | break; | 6637 | break; |
6765 | } | 6638 | } |
6766 | sd->brightness = BRIGHTNESS_DEF; | ||
6767 | sd->contrast = CONTRAST_DEF; | ||
6768 | sd->gamma = gamma[sd->sensor]; | 6639 | sd->gamma = gamma[sd->sensor]; |
6769 | sd->autogain = AUTOGAIN_DEF; | ||
6770 | sd->lightfreq = FREQ_DEF; | ||
6771 | sd->quality = QUALITY_DEF; | ||
6772 | 6640 | ||
6773 | switch (sd->sensor) { | 6641 | switch (sd->sensor) { |
6774 | case SENSOR_HV7131B: | ||
6775 | case SENSOR_HV7131C: | ||
6776 | case SENSOR_OV7630C: | 6642 | case SENSOR_OV7630C: |
6777 | gspca_dev->ctrl_dis = (1 << LIGHTFREQ_IDX); | 6643 | gspca_dev->ctrl_dis = (1 << LIGHTFREQ_IDX); |
6778 | break; | 6644 | break; |
6779 | } | 6645 | } |
6780 | 6646 | ||
6781 | return 0; | ||
6782 | } | ||
6783 | |||
6784 | /* this function is called at probe and resume time */ | ||
6785 | static int sd_init(struct gspca_dev *gspca_dev) | ||
6786 | { | ||
6787 | /* switch off the led */ | 6647 | /* switch off the led */ |
6788 | reg_w(gspca_dev->dev, 0x01, 0x0000); | 6648 | reg_w(gspca_dev, 0x01, 0x0000); |
6789 | return 0; | 6649 | return gspca_dev->usb_err; |
6790 | } | 6650 | } |
6791 | 6651 | ||
6792 | static int sd_start(struct gspca_dev *gspca_dev) | 6652 | static int sd_start(struct gspca_dev *gspca_dev) |
6793 | { | 6653 | { |
6794 | struct sd *sd = (struct sd *) gspca_dev; | 6654 | struct sd *sd = (struct sd *) gspca_dev; |
6795 | struct usb_device *dev = gspca_dev->dev; | ||
6796 | int mode; | 6655 | int mode; |
6797 | static const struct usb_action *init_tb[SENSOR_MAX][2] = { | 6656 | static const struct usb_action *init_tb[SENSOR_MAX][2] = { |
6798 | {adcm2700_Initial, adcm2700_InitialScale}, /* 0 */ | 6657 | [SENSOR_ADCM2700] = |
6799 | {cs2102_Initial, cs2102_InitialScale}, /* 1 */ | 6658 | {adcm2700_Initial, adcm2700_InitialScale}, |
6800 | {cs2102K_Initial, cs2102K_InitialScale}, /* 2 */ | 6659 | [SENSOR_CS2102] = |
6801 | {gc0305_Initial, gc0305_InitialScale}, /* 3 */ | 6660 | {cs2102_Initial, cs2102_InitialScale}, |
6802 | {hdcs2020b_Initial, hdcs2020b_InitialScale}, /* 4 */ | 6661 | [SENSOR_CS2102K] = |
6803 | {hv7131b_Initial, hv7131b_InitialScale}, /* 5 */ | 6662 | {cs2102K_Initial, cs2102K_InitialScale}, |
6804 | {hv7131r_Initial, hv7131r_InitialScale}, /* 6 */ | 6663 | [SENSOR_GC0305] = |
6805 | {icm105a_Initial, icm105a_InitialScale}, /* 7 */ | 6664 | {gc0305_Initial, gc0305_InitialScale}, |
6806 | {mc501cb_Initial, mc501cb_InitialScale}, /* 8 */ | 6665 | [SENSOR_HDCS2020b] = |
6807 | {mi0360soc_Initial, mi0360soc_InitialScale}, /* 9 */ | 6666 | {hdcs2020b_Initial, hdcs2020b_InitialScale}, |
6808 | {ov7620_Initial, ov7620_InitialScale}, /* 10 */ | 6667 | [SENSOR_HV7131B] = |
6809 | {ov7630c_Initial, ov7630c_InitialScale}, /* 11 */ | 6668 | {hv7131b_Initial, hv7131b_InitialScale}, |
6810 | {pas106b_Initial, pas106b_InitialScale}, /* 12 */ | 6669 | [SENSOR_HV7131R] = |
6811 | {pas202b_Initial, pas202b_InitialScale}, /* 13 */ | 6670 | {hv7131r_Initial, hv7131r_InitialScale}, |
6812 | {pb0330_Initial, pb0330_InitialScale}, /* 14 */ | 6671 | [SENSOR_ICM105A] = |
6813 | {po2030_Initial, po2030_InitialScale}, /* 15 */ | 6672 | {icm105a_Initial, icm105a_InitialScale}, |
6814 | {tas5130cK_Initial, tas5130cK_InitialScale}, /* 16 */ | 6673 | [SENSOR_MC501CB] = |
6815 | {tas5130cxx_Initial, tas5130cxx_InitialScale}, /* 17 */ | 6674 | {mc501cb_Initial, mc501cb_InitialScale}, |
6675 | [SENSOR_MT9V111_1] = | ||
6676 | {mt9v111_1_Initial, mt9v111_1_InitialScale}, | ||
6677 | [SENSOR_MT9V111_3] = | ||
6678 | {mt9v111_3_Initial, mt9v111_3_InitialScale}, | ||
6679 | [SENSOR_OV7620] = | ||
6680 | {ov7620_Initial, ov7620_InitialScale}, | ||
6681 | [SENSOR_OV7630C] = | ||
6682 | {ov7630c_Initial, ov7630c_InitialScale}, | ||
6683 | [SENSOR_PAS106] = | ||
6684 | {pas106b_Initial, pas106b_InitialScale}, | ||
6685 | [SENSOR_PAS202B] = | ||
6686 | {pas202b_Initial, pas202b_InitialScale}, | ||
6687 | [SENSOR_PB0330] = | ||
6688 | {pb0330_Initial, pb0330_InitialScale}, | ||
6689 | [SENSOR_PO2030] = | ||
6690 | {po2030_Initial, po2030_InitialScale}, | ||
6691 | [SENSOR_TAS5130C] = | ||
6692 | {tas5130c_Initial, tas5130c_InitialScale}, | ||
6693 | [SENSOR_TAS5130C_VF0250] = | ||
6816 | {tas5130c_vf0250_Initial, tas5130c_vf0250_InitialScale}, | 6694 | {tas5130c_vf0250_Initial, tas5130c_vf0250_InitialScale}, |
6817 | /* 18 */ | ||
6818 | }; | 6695 | }; |
6819 | 6696 | ||
6820 | /* create the JPEG header */ | 6697 | /* create the JPEG header */ |
@@ -6824,7 +6701,7 @@ static int sd_start(struct gspca_dev *gspca_dev) | |||
6824 | 6701 | ||
6825 | mode = gspca_dev->cam.cam_mode[gspca_dev->curr_mode].priv; | 6702 | mode = gspca_dev->cam.cam_mode[gspca_dev->curr_mode].priv; |
6826 | switch (sd->sensor) { | 6703 | switch (sd->sensor) { |
6827 | case SENSOR_HV7131C: | 6704 | case SENSOR_HV7131R: |
6828 | zcxx_probeSensor(gspca_dev); | 6705 | zcxx_probeSensor(gspca_dev); |
6829 | break; | 6706 | break; |
6830 | case SENSOR_PAS106: | 6707 | case SENSOR_PAS106: |
@@ -6838,22 +6715,22 @@ static int sd_start(struct gspca_dev *gspca_dev) | |||
6838 | case SENSOR_GC0305: | 6715 | case SENSOR_GC0305: |
6839 | case SENSOR_OV7620: | 6716 | case SENSOR_OV7620: |
6840 | case SENSOR_PO2030: | 6717 | case SENSOR_PO2030: |
6841 | case SENSOR_TAS5130CXX: | 6718 | case SENSOR_TAS5130C: |
6842 | case SENSOR_TAS5130C_VF0250: | 6719 | case SENSOR_TAS5130C_VF0250: |
6843 | /* msleep(100); * ?? */ | 6720 | /* msleep(100); * ?? */ |
6844 | reg_r(gspca_dev, 0x0002); /* --> 0x40 */ | 6721 | reg_r(gspca_dev, 0x0002); /* --> 0x40 */ |
6845 | reg_w(dev, 0x09, 0x01ad); /* (from win traces) */ | 6722 | reg_w(gspca_dev, 0x09, 0x01ad); /* (from win traces) */ |
6846 | reg_w(dev, 0x15, 0x01ae); | 6723 | reg_w(gspca_dev, 0x15, 0x01ae); |
6847 | if (sd->sensor == SENSOR_TAS5130CXX) | 6724 | if (sd->sensor == SENSOR_TAS5130C) |
6848 | break; | 6725 | break; |
6849 | reg_w(dev, 0x0d, 0x003a); | 6726 | reg_w(gspca_dev, 0x0d, 0x003a); |
6850 | reg_w(dev, 0x02, 0x003b); | 6727 | reg_w(gspca_dev, 0x02, 0x003b); |
6851 | reg_w(dev, 0x00, 0x0038); | 6728 | reg_w(gspca_dev, 0x00, 0x0038); |
6852 | break; | 6729 | break; |
6853 | case SENSOR_PAS202B: | 6730 | case SENSOR_PAS202B: |
6854 | reg_w(dev, 0x03, 0x003b); | 6731 | reg_w(gspca_dev, 0x03, 0x003b); |
6855 | reg_w(dev, 0x0c, 0x003a); | 6732 | reg_w(gspca_dev, 0x0c, 0x003a); |
6856 | reg_w(dev, 0x0b, 0x0039); | 6733 | reg_w(gspca_dev, 0x0b, 0x0039); |
6857 | break; | 6734 | break; |
6858 | } | 6735 | } |
6859 | 6736 | ||
@@ -6862,15 +6739,15 @@ static int sd_start(struct gspca_dev *gspca_dev) | |||
6862 | case SENSOR_ADCM2700: | 6739 | case SENSOR_ADCM2700: |
6863 | case SENSOR_OV7620: | 6740 | case SENSOR_OV7620: |
6864 | reg_r(gspca_dev, 0x0008); | 6741 | reg_r(gspca_dev, 0x0008); |
6865 | reg_w(dev, 0x00, 0x0008); | 6742 | reg_w(gspca_dev, 0x00, 0x0008); |
6866 | break; | 6743 | break; |
6867 | case SENSOR_PAS202B: | 6744 | case SENSOR_PAS202B: |
6868 | case SENSOR_GC0305: | 6745 | case SENSOR_GC0305: |
6869 | case SENSOR_TAS5130CXX: | 6746 | case SENSOR_TAS5130C: |
6870 | reg_r(gspca_dev, 0x0008); | 6747 | reg_r(gspca_dev, 0x0008); |
6871 | /* fall thru */ | 6748 | /* fall thru */ |
6872 | case SENSOR_PO2030: | 6749 | case SENSOR_PO2030: |
6873 | reg_w(dev, 0x03, 0x0008); | 6750 | reg_w(gspca_dev, 0x03, 0x0008); |
6874 | break; | 6751 | break; |
6875 | } | 6752 | } |
6876 | setsharpness(gspca_dev); | 6753 | setsharpness(gspca_dev); |
@@ -6880,7 +6757,6 @@ static int sd_start(struct gspca_dev *gspca_dev) | |||
6880 | case SENSOR_CS2102K: /* gamma set in xxx_Initial */ | 6757 | case SENSOR_CS2102K: /* gamma set in xxx_Initial */ |
6881 | case SENSOR_HDCS2020b: | 6758 | case SENSOR_HDCS2020b: |
6882 | case SENSOR_OV7630C: | 6759 | case SENSOR_OV7630C: |
6883 | case SENSOR_TAS5130CK: | ||
6884 | break; | 6760 | break; |
6885 | default: | 6761 | default: |
6886 | setcontrast(gspca_dev); | 6762 | setcontrast(gspca_dev); |
@@ -6891,7 +6767,7 @@ static int sd_start(struct gspca_dev *gspca_dev) | |||
6891 | case SENSOR_OV7620: | 6767 | case SENSOR_OV7620: |
6892 | case SENSOR_PAS202B: | 6768 | case SENSOR_PAS202B: |
6893 | reg_r(gspca_dev, 0x0180); /* from win */ | 6769 | reg_r(gspca_dev, 0x0180); /* from win */ |
6894 | reg_w(dev, 0x00, 0x0180); | 6770 | reg_w(gspca_dev, 0x00, 0x0180); |
6895 | break; | 6771 | break; |
6896 | default: | 6772 | default: |
6897 | setquality(gspca_dev); | 6773 | setquality(gspca_dev); |
@@ -6901,29 +6777,29 @@ static int sd_start(struct gspca_dev *gspca_dev) | |||
6901 | 6777 | ||
6902 | switch (sd->sensor) { | 6778 | switch (sd->sensor) { |
6903 | case SENSOR_ADCM2700: | 6779 | case SENSOR_ADCM2700: |
6904 | reg_w(dev, 0x09, 0x01ad); /* (from win traces) */ | 6780 | reg_w(gspca_dev, 0x09, 0x01ad); /* (from win traces) */ |
6905 | reg_w(dev, 0x15, 0x01ae); | 6781 | reg_w(gspca_dev, 0x15, 0x01ae); |
6906 | reg_w(dev, 0x02, 0x0180); | 6782 | reg_w(gspca_dev, 0x02, 0x0180); |
6907 | /* ms-win + */ | 6783 | /* ms-win + */ |
6908 | reg_w(dev, 0x40, 0x0117); | 6784 | reg_w(gspca_dev, 0x40, 0x0117); |
6909 | break; | 6785 | break; |
6910 | case SENSOR_GC0305: | 6786 | case SENSOR_GC0305: |
6911 | case SENSOR_TAS5130CXX: | 6787 | case SENSOR_TAS5130C: |
6912 | reg_w(dev, 0x09, 0x01ad); /* (from win traces) */ | 6788 | reg_w(gspca_dev, 0x09, 0x01ad); /* (from win traces) */ |
6913 | reg_w(dev, 0x15, 0x01ae); | 6789 | reg_w(gspca_dev, 0x15, 0x01ae); |
6914 | /* fall thru */ | 6790 | /* fall thru */ |
6915 | case SENSOR_PAS202B: | 6791 | case SENSOR_PAS202B: |
6916 | case SENSOR_PO2030: | 6792 | case SENSOR_PO2030: |
6917 | /* reg_w(dev, 0x40, ZC3XX_R117_GGAIN); * (from win traces) */ | 6793 | /* reg_w(gspca_dev, 0x40, ZC3XX_R117_GGAIN); * (from win traces) */ |
6918 | reg_r(gspca_dev, 0x0180); | 6794 | reg_r(gspca_dev, 0x0180); |
6919 | break; | 6795 | break; |
6920 | case SENSOR_OV7620: | 6796 | case SENSOR_OV7620: |
6921 | reg_w(dev, 0x09, 0x01ad); | 6797 | reg_w(gspca_dev, 0x09, 0x01ad); |
6922 | reg_w(dev, 0x15, 0x01ae); | 6798 | reg_w(gspca_dev, 0x15, 0x01ae); |
6923 | i2c_read(gspca_dev, 0x13); /*fixme: returns 0xa3 */ | 6799 | i2c_read(gspca_dev, 0x13); /*fixme: returns 0xa3 */ |
6924 | i2c_write(gspca_dev, 0x13, 0xa3, 0x00); | 6800 | i2c_write(gspca_dev, 0x13, 0xa3, 0x00); |
6925 | /*fixme: returned value to send? */ | 6801 | /*fixme: returned value to send? */ |
6926 | reg_w(dev, 0x40, 0x0117); | 6802 | reg_w(gspca_dev, 0x40, 0x0117); |
6927 | reg_r(gspca_dev, 0x0180); | 6803 | reg_r(gspca_dev, 0x0180); |
6928 | break; | 6804 | break; |
6929 | } | 6805 | } |
@@ -6932,11 +6808,11 @@ static int sd_start(struct gspca_dev *gspca_dev) | |||
6932 | switch (sd->sensor) { | 6808 | switch (sd->sensor) { |
6933 | case SENSOR_PO2030: | 6809 | case SENSOR_PO2030: |
6934 | msleep(50); | 6810 | msleep(50); |
6935 | reg_w(dev, 0x00, 0x0007); /* (from win traces) */ | 6811 | reg_w(gspca_dev, 0x00, 0x0007); /* (from win traces) */ |
6936 | reg_w(dev, 0x02, ZC3XX_R008_CLOCKSETTING); | 6812 | reg_w(gspca_dev, 0x02, ZC3XX_R008_CLOCKSETTING); |
6937 | break; | 6813 | break; |
6938 | } | 6814 | } |
6939 | return 0; | 6815 | return gspca_dev->usb_err; |
6940 | } | 6816 | } |
6941 | 6817 | ||
6942 | /* called on streamoff with alt 0 and on disconnect */ | 6818 | /* called on streamoff with alt 0 and on disconnect */ |
@@ -6946,7 +6822,7 @@ static void sd_stop0(struct gspca_dev *gspca_dev) | |||
6946 | 6822 | ||
6947 | if (!gspca_dev->present) | 6823 | if (!gspca_dev->present) |
6948 | return; | 6824 | return; |
6949 | send_unknown(gspca_dev->dev, sd->sensor); | 6825 | send_unknown(gspca_dev, sd->sensor); |
6950 | } | 6826 | } |
6951 | 6827 | ||
6952 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 6828 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
@@ -6981,7 +6857,7 @@ static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) | |||
6981 | sd->brightness = val; | 6857 | sd->brightness = val; |
6982 | if (gspca_dev->streaming) | 6858 | if (gspca_dev->streaming) |
6983 | setcontrast(gspca_dev); | 6859 | setcontrast(gspca_dev); |
6984 | return 0; | 6860 | return gspca_dev->usb_err; |
6985 | } | 6861 | } |
6986 | 6862 | ||
6987 | static int sd_getbrightness(struct gspca_dev *gspca_dev, __s32 *val) | 6863 | static int sd_getbrightness(struct gspca_dev *gspca_dev, __s32 *val) |
@@ -6999,7 +6875,7 @@ static int sd_setcontrast(struct gspca_dev *gspca_dev, __s32 val) | |||
6999 | sd->contrast = val; | 6875 | sd->contrast = val; |
7000 | if (gspca_dev->streaming) | 6876 | if (gspca_dev->streaming) |
7001 | setcontrast(gspca_dev); | 6877 | setcontrast(gspca_dev); |
7002 | return 0; | 6878 | return gspca_dev->usb_err; |
7003 | } | 6879 | } |
7004 | 6880 | ||
7005 | static int sd_getcontrast(struct gspca_dev *gspca_dev, __s32 *val) | 6881 | static int sd_getcontrast(struct gspca_dev *gspca_dev, __s32 *val) |
@@ -7017,7 +6893,7 @@ static int sd_setautogain(struct gspca_dev *gspca_dev, __s32 val) | |||
7017 | sd->autogain = val; | 6893 | sd->autogain = val; |
7018 | if (gspca_dev->streaming) | 6894 | if (gspca_dev->streaming) |
7019 | setautogain(gspca_dev); | 6895 | setautogain(gspca_dev); |
7020 | return 0; | 6896 | return gspca_dev->usb_err; |
7021 | } | 6897 | } |
7022 | 6898 | ||
7023 | static int sd_getautogain(struct gspca_dev *gspca_dev, __s32 *val) | 6899 | static int sd_getautogain(struct gspca_dev *gspca_dev, __s32 *val) |
@@ -7035,7 +6911,7 @@ static int sd_setgamma(struct gspca_dev *gspca_dev, __s32 val) | |||
7035 | sd->gamma = val; | 6911 | sd->gamma = val; |
7036 | if (gspca_dev->streaming) | 6912 | if (gspca_dev->streaming) |
7037 | setcontrast(gspca_dev); | 6913 | setcontrast(gspca_dev); |
7038 | return 0; | 6914 | return gspca_dev->usb_err; |
7039 | } | 6915 | } |
7040 | 6916 | ||
7041 | static int sd_getgamma(struct gspca_dev *gspca_dev, __s32 *val) | 6917 | static int sd_getgamma(struct gspca_dev *gspca_dev, __s32 *val) |
@@ -7053,7 +6929,7 @@ static int sd_setfreq(struct gspca_dev *gspca_dev, __s32 val) | |||
7053 | sd->lightfreq = val; | 6929 | sd->lightfreq = val; |
7054 | if (gspca_dev->streaming) | 6930 | if (gspca_dev->streaming) |
7055 | setlightfreq(gspca_dev); | 6931 | setlightfreq(gspca_dev); |
7056 | return 0; | 6932 | return gspca_dev->usb_err; |
7057 | } | 6933 | } |
7058 | 6934 | ||
7059 | static int sd_getfreq(struct gspca_dev *gspca_dev, __s32 *val) | 6935 | static int sd_getfreq(struct gspca_dev *gspca_dev, __s32 *val) |
@@ -7071,7 +6947,7 @@ static int sd_setsharpness(struct gspca_dev *gspca_dev, __s32 val) | |||
7071 | sd->sharpness = val; | 6947 | sd->sharpness = val; |
7072 | if (gspca_dev->streaming) | 6948 | if (gspca_dev->streaming) |
7073 | setsharpness(gspca_dev); | 6949 | setsharpness(gspca_dev); |
7074 | return 0; | 6950 | return gspca_dev->usb_err; |
7075 | } | 6951 | } |
7076 | 6952 | ||
7077 | static int sd_getsharpness(struct gspca_dev *gspca_dev, __s32 *val) | 6953 | static int sd_getsharpness(struct gspca_dev *gspca_dev, __s32 *val) |
@@ -7116,7 +6992,7 @@ static int sd_set_jcomp(struct gspca_dev *gspca_dev, | |||
7116 | sd->quality = jcomp->quality; | 6992 | sd->quality = jcomp->quality; |
7117 | if (gspca_dev->streaming) | 6993 | if (gspca_dev->streaming) |
7118 | jpeg_set_qual(sd->jpeg_hdr, sd->quality); | 6994 | jpeg_set_qual(sd->jpeg_hdr, sd->quality); |
7119 | return 0; | 6995 | return gspca_dev->usb_err; |
7120 | } | 6996 | } |
7121 | 6997 | ||
7122 | static int sd_get_jcomp(struct gspca_dev *gspca_dev, | 6998 | static int sd_get_jcomp(struct gspca_dev *gspca_dev, |
@@ -7220,7 +7096,6 @@ static const __devinitdata struct usb_device_id device_table[] = { | |||
7220 | {USB_DEVICE(0x10fd, 0x8050)}, | 7096 | {USB_DEVICE(0x10fd, 0x8050)}, |
7221 | {} /* end of entry */ | 7097 | {} /* end of entry */ |
7222 | }; | 7098 | }; |
7223 | #undef DVNAME | ||
7224 | MODULE_DEVICE_TABLE(usb, device_table); | 7099 | MODULE_DEVICE_TABLE(usb, device_table); |
7225 | 7100 | ||
7226 | /* -- device connect -- */ | 7101 | /* -- device connect -- */ |