diff options
-rw-r--r-- | drivers/media/video/gspca/sonixj.c | 136 |
1 files changed, 78 insertions, 58 deletions
diff --git a/drivers/media/video/gspca/sonixj.c b/drivers/media/video/gspca/sonixj.c index 1d61b92f6bfc..20ca161bc3d0 100644 --- a/drivers/media/video/gspca/sonixj.c +++ b/drivers/media/video/gspca/sonixj.c | |||
@@ -67,17 +67,19 @@ struct sd { | |||
67 | #define BRIDGE_SN9C110 2 | 67 | #define BRIDGE_SN9C110 2 |
68 | #define BRIDGE_SN9C120 3 | 68 | #define BRIDGE_SN9C120 3 |
69 | u8 sensor; /* Type of image sensor chip */ | 69 | u8 sensor; /* Type of image sensor chip */ |
70 | #define SENSOR_ADCM1700 0 | 70 | enum { |
71 | #define SENSOR_HV7131R 1 | 71 | SENSOR_ADCM1700, |
72 | #define SENSOR_MI0360 2 | 72 | SENSOR_HV7131R, |
73 | #define SENSOR_MO4000 3 | 73 | SENSOR_MI0360, |
74 | #define SENSOR_MT9V111 4 | 74 | SENSOR_MO4000, |
75 | #define SENSOR_OM6802 5 | 75 | SENSOR_MT9V111, |
76 | #define SENSOR_OV7630 6 | 76 | SENSOR_OM6802, |
77 | #define SENSOR_OV7648 7 | 77 | SENSOR_OV7630, |
78 | #define SENSOR_OV7660 8 | 78 | SENSOR_OV7648, |
79 | #define SENSOR_PO1030 9 | 79 | SENSOR_OV7660, |
80 | #define SENSOR_SP80708 10 | 80 | SENSOR_PO1030, |
81 | SENSOR_SP80708, | ||
82 | } sensors; | ||
81 | u8 i2c_addr; | 83 | u8 i2c_addr; |
82 | 84 | ||
83 | u8 *jpeg_hdr; | 85 | u8 *jpeg_hdr; |
@@ -281,29 +283,47 @@ static const struct ctrl sd_ctrls[] = { | |||
281 | }; | 283 | }; |
282 | 284 | ||
283 | /* table of the disabled controls */ | 285 | /* table of the disabled controls */ |
284 | static __u32 ctrl_dis[] = { | 286 | static const __u32 ctrl_dis[] = { |
285 | (1 << INFRARED_IDX) | (1 << VFLIP_IDX) | (1 << FREQ_IDX) | | 287 | [SENSOR_ADCM1700] = (1 << AUTOGAIN_IDX) | |
286 | (1 << AUTOGAIN_IDX), /* SENSOR_ADCM1700 0 */ | 288 | (1 << INFRARED_IDX) | |
287 | (1 << INFRARED_IDX) | (1 << FREQ_IDX), | 289 | (1 << VFLIP_IDX) | |
288 | /* SENSOR_HV7131R 1 */ | 290 | (1 << FREQ_IDX), |
289 | (1 << INFRARED_IDX) | (1 << VFLIP_IDX) | (1 << FREQ_IDX), | 291 | |
290 | /* SENSOR_MI0360 2 */ | 292 | [SENSOR_HV7131R] = (1 << INFRARED_IDX) | |
291 | (1 << INFRARED_IDX) | (1 << VFLIP_IDX) | (1 << FREQ_IDX), | 293 | (1 << FREQ_IDX), |
292 | /* SENSOR_MO4000 3 */ | 294 | |
293 | (1 << VFLIP_IDX) | (1 << FREQ_IDX), | 295 | [SENSOR_MI0360] = (1 << INFRARED_IDX) | |
294 | /* SENSOR_MT9V111 4 */ | 296 | (1 << VFLIP_IDX) | |
295 | (1 << INFRARED_IDX) | (1 << VFLIP_IDX) | (1 << FREQ_IDX), | 297 | (1 << FREQ_IDX), |
296 | /* SENSOR_OM6802 5 */ | 298 | |
297 | (1 << INFRARED_IDX), | 299 | [SENSOR_MO4000] = (1 << INFRARED_IDX) | |
298 | /* SENSOR_OV7630 6 */ | 300 | (1 << VFLIP_IDX) | |
299 | (1 << INFRARED_IDX), | 301 | (1 << FREQ_IDX), |
300 | /* SENSOR_OV7648 7 */ | 302 | |
301 | (1 << AUTOGAIN_IDX) | (1 << INFRARED_IDX) | (1 << VFLIP_IDX), | 303 | [SENSOR_MT9V111] = (1 << VFLIP_IDX) | |
302 | /* SENSOR_OV7660 8 */ | 304 | (1 << FREQ_IDX), |
303 | (1 << AUTOGAIN_IDX) | (1 << INFRARED_IDX) | (1 << VFLIP_IDX) | | 305 | |
304 | (1 << FREQ_IDX), /* SENSOR_PO1030 9 */ | 306 | [SENSOR_OM6802] = (1 << INFRARED_IDX) | |
305 | (1 << AUTOGAIN_IDX) | (1 << INFRARED_IDX) | (1 << VFLIP_IDX) | | 307 | (1 << VFLIP_IDX) | |
306 | (1 << FREQ_IDX), /* SENSOR_SP80708 10 */ | 308 | (1 << FREQ_IDX), |
309 | |||
310 | [SENSOR_OV7630] = (1 << INFRARED_IDX), | ||
311 | |||
312 | [SENSOR_OV7648] = (1 << INFRARED_IDX), | ||
313 | |||
314 | [SENSOR_OV7660] = (1 << AUTOGAIN_IDX) | | ||
315 | (1 << INFRARED_IDX) | | ||
316 | (1 << VFLIP_IDX), | ||
317 | |||
318 | [SENSOR_PO1030] = (1 << AUTOGAIN_IDX) | | ||
319 | (1 << INFRARED_IDX) | | ||
320 | (1 << VFLIP_IDX) | | ||
321 | (1 << FREQ_IDX), | ||
322 | |||
323 | [SENSOR_SP80708] = (1 << AUTOGAIN_IDX) | | ||
324 | (1 << INFRARED_IDX) | | ||
325 | (1 << VFLIP_IDX) | | ||
326 | (1 << FREQ_IDX), | ||
307 | }; | 327 | }; |
308 | 328 | ||
309 | static const struct v4l2_pix_format cif_mode[] = { | 329 | static const struct v4l2_pix_format cif_mode[] = { |
@@ -456,17 +476,17 @@ static const u8 sn_sp80708[0x1c] = { | |||
456 | 476 | ||
457 | /* sequence specific to the sensors - !! index = SENSOR_xxx */ | 477 | /* sequence specific to the sensors - !! index = SENSOR_xxx */ |
458 | static const u8 *sn_tb[] = { | 478 | static const u8 *sn_tb[] = { |
459 | sn_adcm1700, | 479 | [SENSOR_ADCM1700] = sn_adcm1700, |
460 | sn_hv7131, | 480 | [SENSOR_HV7131R] = sn_hv7131, |
461 | sn_mi0360, | 481 | [SENSOR_MI0360] = sn_mi0360, |
462 | sn_mo4000, | 482 | [SENSOR_MO4000] = sn_mo4000, |
463 | sn_mt9v111, | 483 | [SENSOR_MT9V111] = sn_mt9v111, |
464 | sn_om6802, | 484 | [SENSOR_OM6802] = sn_om6802, |
465 | sn_ov7630, | 485 | [SENSOR_OV7630] = sn_ov7630, |
466 | sn_ov7648, | 486 | [SENSOR_OV7648] = sn_ov7648, |
467 | sn_ov7660, | 487 | [SENSOR_OV7660] = sn_ov7660, |
468 | sn_po1030, | 488 | [SENSOR_PO1030] = sn_po1030, |
469 | sn_sp80708 | 489 | [SENSOR_SP80708] = sn_sp80708 |
470 | }; | 490 | }; |
471 | 491 | ||
472 | /* default gamma table */ | 492 | /* default gamma table */ |
@@ -1069,18 +1089,18 @@ static const u8 sp80708_sensor_param1[][8] = { | |||
1069 | {} | 1089 | {} |
1070 | }; | 1090 | }; |
1071 | 1091 | ||
1072 | static const u8 (*sensor_init[11])[8] = { | 1092 | static const u8 (*sensor_init[])[8] = { |
1073 | adcm1700_sensor_init, /* ADCM1700 0 */ | 1093 | [SENSOR_ADCM1700] = adcm1700_sensor_init, |
1074 | hv7131r_sensor_init, /* HV7131R 1 */ | 1094 | [SENSOR_HV7131R] = hv7131r_sensor_init, |
1075 | mi0360_sensor_init, /* MI0360 2 */ | 1095 | [SENSOR_MI0360] = mi0360_sensor_init, |
1076 | mo4000_sensor_init, /* MO4000 3 */ | 1096 | [SENSOR_MO4000] = mo4000_sensor_init, |
1077 | mt9v111_sensor_init, /* MT9V111 4 */ | 1097 | [SENSOR_MT9V111] = mt9v111_sensor_init, |
1078 | om6802_sensor_init, /* OM6802 5 */ | 1098 | [SENSOR_OM6802] = om6802_sensor_init, |
1079 | ov7630_sensor_init, /* OV7630 6 */ | 1099 | [SENSOR_OV7630] = ov7630_sensor_init, |
1080 | ov7648_sensor_init, /* OV7648 7 */ | 1100 | [SENSOR_OV7648] = ov7648_sensor_init, |
1081 | ov7660_sensor_init, /* OV7660 8 */ | 1101 | [SENSOR_OV7660] = ov7660_sensor_init, |
1082 | po1030_sensor_init, /* PO1030 9 */ | 1102 | [SENSOR_PO1030] = po1030_sensor_init, |
1083 | sp80708_sensor_init, /* SP80708 10 */ | 1103 | [SENSOR_SP80708] = sp80708_sensor_init, |
1084 | }; | 1104 | }; |
1085 | 1105 | ||
1086 | /* read <len> bytes to gspca_dev->usb_buf */ | 1106 | /* read <len> bytes to gspca_dev->usb_buf */ |
@@ -1703,7 +1723,7 @@ static void setcolors(struct gspca_dev *gspca_dev) | |||
1703 | struct sd *sd = (struct sd *) gspca_dev; | 1723 | struct sd *sd = (struct sd *) gspca_dev; |
1704 | int i, v; | 1724 | int i, v; |
1705 | u8 reg8a[12]; /* U & V gains */ | 1725 | u8 reg8a[12]; /* U & V gains */ |
1706 | static s16 uv[6] = { /* same as reg84 in signed decimal */ | 1726 | static const s16 uv[6] = { /* same as reg84 in signed decimal */ |
1707 | -24, -38, 64, /* UR UG UB */ | 1727 | -24, -38, 64, /* UR UG UB */ |
1708 | 62, -51, -9 /* VR VG VB */ | 1728 | 62, -51, -9 /* VR VG VB */ |
1709 | }; | 1729 | }; |