aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/gspca/zc3xx.c
diff options
context:
space:
mode:
authorJean-François Moine <moinejf@free.fr>2010-12-28 05:17:40 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2010-12-29 05:17:20 -0500
commit7fbee99aa2c73bdf47add9de58f646fa7713e7e5 (patch)
treebbc03e33bc0079d4c89d76611250eaa8fc05d4fc /drivers/media/video/gspca/zc3xx.c
parent49fb5e60f7e907126aac10af6577fac6fde684f6 (diff)
[media] gspca - zc3xx: The sensor of the VF0250 is a GC0303
Signed-off-by: Jean-François Moine <moinejf@free.fr> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/gspca/zc3xx.c')
-rw-r--r--drivers/media/video/gspca/zc3xx.c60
1 files changed, 30 insertions, 30 deletions
diff --git a/drivers/media/video/gspca/zc3xx.c b/drivers/media/video/gspca/zc3xx.c
index 48b880283b63..14b85d483163 100644
--- a/drivers/media/video/gspca/zc3xx.c
+++ b/drivers/media/video/gspca/zc3xx.c
@@ -71,6 +71,7 @@ enum sensors {
71 SENSOR_ADCM2700, 71 SENSOR_ADCM2700,
72 SENSOR_CS2102, 72 SENSOR_CS2102,
73 SENSOR_CS2102K, 73 SENSOR_CS2102K,
74 SENSOR_GC0303,
74 SENSOR_GC0305, 75 SENSOR_GC0305,
75 SENSOR_HDCS2020b, 76 SENSOR_HDCS2020b,
76 SENSOR_HV7131B, 77 SENSOR_HV7131B,
@@ -86,7 +87,6 @@ enum sensors {
86 SENSOR_PB0330, 87 SENSOR_PB0330,
87 SENSOR_PO2030, 88 SENSOR_PO2030,
88 SENSOR_TAS5130C, 89 SENSOR_TAS5130C,
89 SENSOR_TAS5130C_VF0250,
90 SENSOR_MAX 90 SENSOR_MAX
91}; 91};
92 92
@@ -5393,7 +5393,7 @@ static const struct usb_action tas5130c_NoFlikerScale[] = {
5393 {} 5393 {}
5394}; 5394};
5395 5395
5396static const struct usb_action tas5130c_vf0250_InitialScale[] = { 5396static const struct usb_action gc0303_InitialScale[] = {
5397 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc, */ 5397 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc, */
5398 {0xa0, 0x02, ZC3XX_R008_CLOCKSETTING}, /* 00,08,02,cc, */ 5398 {0xa0, 0x02, ZC3XX_R008_CLOCKSETTING}, /* 00,08,02,cc, */
5399 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc, */ 5399 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc, */
@@ -5460,7 +5460,7 @@ static const struct usb_action tas5130c_vf0250_InitialScale[] = {
5460 {} 5460 {}
5461}; 5461};
5462 5462
5463static const struct usb_action tas5130c_vf0250_Initial[] = { 5463static const struct usb_action gc0303_Initial[] = {
5464 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc, */ 5464 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc, */
5465 {0xa0, 0x02, ZC3XX_R008_CLOCKSETTING}, /* 00,08,02,cc, */ 5465 {0xa0, 0x02, ZC3XX_R008_CLOCKSETTING}, /* 00,08,02,cc, */
5466 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc, */ 5466 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc, */
@@ -5525,7 +5525,7 @@ static const struct usb_action tas5130c_vf0250_Initial[] = {
5525 {0xa0, 0x65, ZC3XX_R118_BGAIN}, /* 01,18,65,cc */ 5525 {0xa0, 0x65, ZC3XX_R118_BGAIN}, /* 01,18,65,cc */
5526 {} 5526 {}
5527}; 5527};
5528static const struct usb_action tas5130c_vf0250_50HZScale[] = { 5528static const struct usb_action gc0303_50HZScale[] = {
5529 {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 5529 {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */
5530 {0xaa, 0x83, 0x0001}, /* 00,83,01,aa */ 5530 {0xaa, 0x83, 0x0001}, /* 00,83,01,aa */
5531 {0xaa, 0x84, 0x00aa}, /* 00,84,aa,aa */ 5531 {0xaa, 0x84, 0x00aa}, /* 00,84,aa,aa */
@@ -5549,7 +5549,7 @@ static const struct usb_action tas5130c_vf0250_50HZScale[] = {
5549 {} 5549 {}
5550}; 5550};
5551 5551
5552static const struct usb_action tas5130c_vf0250_50HZ[] = { 5552static const struct usb_action gc0303_50HZ[] = {
5553 {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 5553 {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */
5554 {0xaa, 0x83, 0x0003}, /* 00,83,03,aa */ 5554 {0xaa, 0x83, 0x0003}, /* 00,83,03,aa */
5555 {0xaa, 0x84, 0x0054}, /* 00,84,54,aa */ 5555 {0xaa, 0x84, 0x0054}, /* 00,84,54,aa */
@@ -5573,7 +5573,7 @@ static const struct usb_action tas5130c_vf0250_50HZ[] = {
5573 {} 5573 {}
5574}; 5574};
5575 5575
5576static const struct usb_action tas5130c_vf0250_60HZScale[] = { 5576static const struct usb_action gc0303_60HZScale[] = {
5577 {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 5577 {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */
5578 {0xaa, 0x83, 0x0001}, /* 00,83,01,aa */ 5578 {0xaa, 0x83, 0x0001}, /* 00,83,01,aa */
5579 {0xaa, 0x84, 0x0062}, /* 00,84,62,aa */ 5579 {0xaa, 0x84, 0x0062}, /* 00,84,62,aa */
@@ -5597,7 +5597,7 @@ static const struct usb_action tas5130c_vf0250_60HZScale[] = {
5597 {} 5597 {}
5598}; 5598};
5599 5599
5600static const struct usb_action tas5130c_vf0250_60HZ[] = { 5600static const struct usb_action gc0303_60HZ[] = {
5601 {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 5601 {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */
5602 {0xaa, 0x83, 0x0002}, /* 00,83,02,aa */ 5602 {0xaa, 0x83, 0x0002}, /* 00,83,02,aa */
5603 {0xaa, 0x84, 0x00c4}, /* 00,84,c4,aa */ 5603 {0xaa, 0x84, 0x00c4}, /* 00,84,c4,aa */
@@ -5621,7 +5621,7 @@ static const struct usb_action tas5130c_vf0250_60HZ[] = {
5621 {} 5621 {}
5622}; 5622};
5623 5623
5624static const struct usb_action tas5130c_vf0250_NoFlikerScale[] = { 5624static const struct usb_action gc0303_NoFlikerScale[] = {
5625 {0xa0, 0x0c, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0c,cc, */ 5625 {0xa0, 0x0c, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0c,cc, */
5626 {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 5626 {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */
5627 {0xaa, 0x83, 0x0000}, /* 00,83,00,aa */ 5627 {0xaa, 0x83, 0x0000}, /* 00,83,00,aa */
@@ -5643,7 +5643,7 @@ static const struct usb_action tas5130c_vf0250_NoFlikerScale[] = {
5643 {} 5643 {}
5644}; 5644};
5645 5645
5646static const struct usb_action tas5130c_vf0250_NoFliker[] = { 5646static const struct usb_action gc0303_NoFliker[] = {
5647 {0xa0, 0x0c, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0c,cc, */ 5647 {0xa0, 0x0c, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0c,cc, */
5648 {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 5648 {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */
5649 {0xaa, 0x83, 0x0000}, /* 00,83,00,aa */ 5649 {0xaa, 0x83, 0x0000}, /* 00,83,00,aa */
@@ -5820,12 +5820,13 @@ static void setmatrix(struct gspca_dev *gspca_dev)
5820 {0x60, 0xf0, 0xf0, 0xf0, 0x60, 0xf0, 0xf0, 0xf0, 0x60}; 5820 {0x60, 0xf0, 0xf0, 0xf0, 0x60, 0xf0, 0xf0, 0xf0, 0x60};
5821 static const u8 tas5130c_matrix[9] = 5821 static const u8 tas5130c_matrix[9] =
5822 {0x68, 0xec, 0xec, 0xec, 0x68, 0xec, 0xec, 0xec, 0x68}; 5822 {0x68, 0xec, 0xec, 0xec, 0x68, 0xec, 0xec, 0xec, 0x68};
5823 static const u8 vf0250_matrix[9] = 5823 static const u8 gc0303_matrix[9] =
5824 {0x7b, 0xea, 0xea, 0xea, 0x7b, 0xea, 0xea, 0xea, 0x7b}; 5824 {0x7b, 0xea, 0xea, 0xea, 0x7b, 0xea, 0xea, 0xea, 0x7b};
5825 static const u8 *matrix_tb[SENSOR_MAX] = { 5825 static const u8 *matrix_tb[SENSOR_MAX] = {
5826 [SENSOR_ADCM2700] = adcm2700_matrix, 5826 [SENSOR_ADCM2700] = adcm2700_matrix,
5827 [SENSOR_CS2102] = ov7620_matrix, 5827 [SENSOR_CS2102] = ov7620_matrix,
5828 [SENSOR_CS2102K] = NULL, 5828 [SENSOR_CS2102K] = NULL,
5829 [SENSOR_GC0303] = gc0303_matrix,
5829 [SENSOR_GC0305] = gc0305_matrix, 5830 [SENSOR_GC0305] = gc0305_matrix,
5830 [SENSOR_HDCS2020b] = NULL, 5831 [SENSOR_HDCS2020b] = NULL,
5831 [SENSOR_HV7131B] = NULL, 5832 [SENSOR_HV7131B] = NULL,
@@ -5841,7 +5842,6 @@ static void setmatrix(struct gspca_dev *gspca_dev)
5841 [SENSOR_PB0330] = gc0305_matrix, 5842 [SENSOR_PB0330] = gc0305_matrix,
5842 [SENSOR_PO2030] = po2030_matrix, 5843 [SENSOR_PO2030] = po2030_matrix,
5843 [SENSOR_TAS5130C] = tas5130c_matrix, 5844 [SENSOR_TAS5130C] = tas5130c_matrix,
5844 [SENSOR_TAS5130C_VF0250] = vf0250_matrix,
5845 }; 5845 };
5846 5846
5847 matrix = matrix_tb[sd->sensor]; 5847 matrix = matrix_tb[sd->sensor];
@@ -5981,6 +5981,10 @@ static void setlightfreq(struct gspca_dev *gspca_dev)
5981 {cs2102_NoFliker, cs2102_NoFlikerScale, 5981 {cs2102_NoFliker, cs2102_NoFlikerScale,
5982 NULL, NULL, /* currently disabled */ 5982 NULL, NULL, /* currently disabled */
5983 NULL, NULL}, 5983 NULL, NULL},
5984 [SENSOR_GC0303] =
5985 {gc0303_NoFliker, gc0303_NoFlikerScale,
5986 gc0303_50HZ, gc0303_50HZScale,
5987 gc0303_60HZ, gc0303_60HZScale},
5984 [SENSOR_GC0305] = 5988 [SENSOR_GC0305] =
5985 {gc0305_NoFliker, gc0305_NoFliker, 5989 {gc0305_NoFliker, gc0305_NoFliker,
5986 gc0305_50HZ, gc0305_50HZ, 5990 gc0305_50HZ, gc0305_50HZ,
@@ -6041,10 +6045,6 @@ static void setlightfreq(struct gspca_dev *gspca_dev)
6041 {tas5130c_NoFliker, tas5130c_NoFlikerScale, 6045 {tas5130c_NoFliker, tas5130c_NoFlikerScale,
6042 tas5130c_50HZ, tas5130c_50HZScale, 6046 tas5130c_50HZ, tas5130c_50HZScale,
6043 tas5130c_60HZ, tas5130c_60HZScale}, 6047 tas5130c_60HZ, tas5130c_60HZScale},
6044 [SENSOR_TAS5130C_VF0250] =
6045 {tas5130c_vf0250_NoFliker, tas5130c_vf0250_NoFlikerScale,
6046 tas5130c_vf0250_50HZ, tas5130c_vf0250_50HZScale,
6047 tas5130c_vf0250_60HZ, tas5130c_vf0250_60HZScale},
6048 }; 6048 };
6049 6049
6050 i = sd->ctrls[LIGHTFREQ].val * 2; 6050 i = sd->ctrls[LIGHTFREQ].val * 2;
@@ -6317,8 +6317,8 @@ static int vga_3wr_probe(struct gspca_dev *gspca_dev)
6317 retword = i2c_read(gspca_dev, 0x00); 6317 retword = i2c_read(gspca_dev, 0x00);
6318 if (retword != 0) { 6318 if (retword != 0) {
6319 PDEBUG(D_PROBE, "probe 3wr vga type %02x", retword); 6319 PDEBUG(D_PROBE, "probe 3wr vga type %02x", retword);
6320 if (retword == 0x0011) /* VF0250 */ 6320 if (retword == 0x0011) /* gc0303 */
6321 return 0x0250; 6321 return 0x0303;
6322 if (retword == 0x0029) /* gc0305 */ 6322 if (retword == 0x0029) /* gc0305 */
6323 send_unknown(gspca_dev, SENSOR_GC0305); 6323 send_unknown(gspca_dev, SENSOR_GC0305);
6324 return retword; 6324 return retword;
@@ -6379,7 +6379,7 @@ static int zcxx_probeSensor(struct gspca_dev *gspca_dev)
6379 switch (sd->sensor) { 6379 switch (sd->sensor) {
6380 case SENSOR_MC501CB: 6380 case SENSOR_MC501CB:
6381 return -1; /* don't probe */ 6381 return -1; /* don't probe */
6382 case SENSOR_TAS5130C_VF0250: 6382 case SENSOR_GC0303:
6383 /* may probe but with no write in reg 0x0010 */ 6383 /* may probe but with no write in reg 0x0010 */
6384 return -1; /* don't probe */ 6384 return -1; /* don't probe */
6385 case SENSOR_PAS106: 6385 case SENSOR_PAS106:
@@ -6424,6 +6424,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
6424 [SENSOR_ADCM2700] = 4, 6424 [SENSOR_ADCM2700] = 4,
6425 [SENSOR_CS2102] = 4, 6425 [SENSOR_CS2102] = 4,
6426 [SENSOR_CS2102K] = 5, 6426 [SENSOR_CS2102K] = 5,
6427 [SENSOR_GC0303] = 3,
6427 [SENSOR_GC0305] = 4, 6428 [SENSOR_GC0305] = 4,
6428 [SENSOR_HDCS2020b] = 4, 6429 [SENSOR_HDCS2020b] = 4,
6429 [SENSOR_HV7131B] = 4, 6430 [SENSOR_HV7131B] = 4,
@@ -6439,12 +6440,12 @@ static int sd_init(struct gspca_dev *gspca_dev)
6439 [SENSOR_PB0330] = 4, 6440 [SENSOR_PB0330] = 4,
6440 [SENSOR_PO2030] = 4, 6441 [SENSOR_PO2030] = 4,
6441 [SENSOR_TAS5130C] = 3, 6442 [SENSOR_TAS5130C] = 3,
6442 [SENSOR_TAS5130C_VF0250] = 3,
6443 }; 6443 };
6444 static const u8 mode_tb[SENSOR_MAX] = { 6444 static const u8 mode_tb[SENSOR_MAX] = {
6445 [SENSOR_ADCM2700] = 2, 6445 [SENSOR_ADCM2700] = 2,
6446 [SENSOR_CS2102] = 1, 6446 [SENSOR_CS2102] = 1,
6447 [SENSOR_CS2102K] = 1, 6447 [SENSOR_CS2102K] = 1,
6448 [SENSOR_GC0303] = 1,
6448 [SENSOR_GC0305] = 1, 6449 [SENSOR_GC0305] = 1,
6449 [SENSOR_HDCS2020b] = 1, 6450 [SENSOR_HDCS2020b] = 1,
6450 [SENSOR_HV7131B] = 1, 6451 [SENSOR_HV7131B] = 1,
@@ -6460,7 +6461,6 @@ static int sd_init(struct gspca_dev *gspca_dev)
6460 [SENSOR_PB0330] = 1, 6461 [SENSOR_PB0330] = 1,
6461 [SENSOR_PO2030] = 1, 6462 [SENSOR_PO2030] = 1,
6462 [SENSOR_TAS5130C] = 1, 6463 [SENSOR_TAS5130C] = 1,
6463 [SENSOR_TAS5130C_VF0250] = 1,
6464 }; 6464 };
6465 6465
6466 sensor = zcxx_probeSensor(gspca_dev); 6466 sensor = zcxx_probeSensor(gspca_dev);
@@ -6476,8 +6476,8 @@ static int sd_init(struct gspca_dev *gspca_dev)
6476 case SENSOR_MC501CB: 6476 case SENSOR_MC501CB:
6477 PDEBUG(D_PROBE, "Sensor MC501CB"); 6477 PDEBUG(D_PROBE, "Sensor MC501CB");
6478 break; 6478 break;
6479 case SENSOR_TAS5130C_VF0250: 6479 case SENSOR_GC0303:
6480 PDEBUG(D_PROBE, "Sensor Tas5130 (VF0250)"); 6480 PDEBUG(D_PROBE, "Sensor GC0303");
6481 break; 6481 break;
6482 default: 6482 default:
6483 warn("Unknown sensor - set to TAS5130C"); 6483 warn("Unknown sensor - set to TAS5130C");
@@ -6564,9 +6564,9 @@ static int sd_init(struct gspca_dev *gspca_dev)
6564 PDEBUG(D_PROBE, "Find Sensor GC0305"); 6564 PDEBUG(D_PROBE, "Find Sensor GC0305");
6565 sd->sensor = SENSOR_GC0305; 6565 sd->sensor = SENSOR_GC0305;
6566 break; 6566 break;
6567 case 0x0250: 6567 case 0x0303:
6568 PDEBUG(D_PROBE, "Sensor Tas5130 (VF0250)"); 6568 PDEBUG(D_PROBE, "Sensor GC0303");
6569 sd->sensor = SENSOR_TAS5130C_VF0250; 6569 sd->sensor = SENSOR_GC0303;
6570 break; 6570 break;
6571 case 0x2030: 6571 case 0x2030:
6572 PDEBUG(D_PROBE, "Find Sensor PO2030"); 6572 PDEBUG(D_PROBE, "Find Sensor PO2030");
@@ -6637,6 +6637,8 @@ static int sd_start(struct gspca_dev *gspca_dev)
6637 {cs2102_Initial, cs2102_InitialScale}, 6637 {cs2102_Initial, cs2102_InitialScale},
6638 [SENSOR_CS2102K] = 6638 [SENSOR_CS2102K] =
6639 {cs2102K_Initial, cs2102K_InitialScale}, 6639 {cs2102K_Initial, cs2102K_InitialScale},
6640 [SENSOR_GC0303] =
6641 {gc0303_Initial, gc0303_InitialScale},
6640 [SENSOR_GC0305] = 6642 [SENSOR_GC0305] =
6641 {gc0305_Initial, gc0305_InitialScale}, 6643 {gc0305_Initial, gc0305_InitialScale},
6642 [SENSOR_HDCS2020b] = 6644 [SENSOR_HDCS2020b] =
@@ -6667,8 +6669,6 @@ static int sd_start(struct gspca_dev *gspca_dev)
6667 {po2030_Initial, po2030_InitialScale}, 6669 {po2030_Initial, po2030_InitialScale},
6668 [SENSOR_TAS5130C] = 6670 [SENSOR_TAS5130C] =
6669 {tas5130c_Initial, tas5130c_InitialScale}, 6671 {tas5130c_Initial, tas5130c_InitialScale},
6670 [SENSOR_TAS5130C_VF0250] =
6671 {tas5130c_vf0250_Initial, tas5130c_vf0250_InitialScale},
6672 }; 6672 };
6673 6673
6674 /* create the JPEG header */ 6674 /* create the JPEG header */
@@ -6693,7 +6693,7 @@ static int sd_start(struct gspca_dev *gspca_dev)
6693 case SENSOR_OV7620: 6693 case SENSOR_OV7620:
6694 case SENSOR_PO2030: 6694 case SENSOR_PO2030:
6695 case SENSOR_TAS5130C: 6695 case SENSOR_TAS5130C:
6696 case SENSOR_TAS5130C_VF0250: 6696 case SENSOR_GC0303:
6697/* msleep(100); * ?? */ 6697/* msleep(100); * ?? */
6698 reg_r(gspca_dev, 0x0002); /* --> 0x40 */ 6698 reg_r(gspca_dev, 0x0002); /* --> 0x40 */
6699 reg_w(gspca_dev, 0x09, 0x01ad); /* (from win traces) */ 6699 reg_w(gspca_dev, 0x09, 0x01ad); /* (from win traces) */
@@ -6921,8 +6921,8 @@ static const __devinitdata struct usb_device_id device_table[] = {
6921 {USB_DEVICE(0x041e, 0x4035), .driver_info = SENSOR_PAS106}, 6921 {USB_DEVICE(0x041e, 0x4035), .driver_info = SENSOR_PAS106},
6922 {USB_DEVICE(0x041e, 0x4036)}, 6922 {USB_DEVICE(0x041e, 0x4036)},
6923 {USB_DEVICE(0x041e, 0x403a)}, 6923 {USB_DEVICE(0x041e, 0x403a)},
6924 {USB_DEVICE(0x041e, 0x4051), .driver_info = SENSOR_TAS5130C_VF0250}, 6924 {USB_DEVICE(0x041e, 0x4051), .driver_info = SENSOR_GC0303},
6925 {USB_DEVICE(0x041e, 0x4053), .driver_info = SENSOR_TAS5130C_VF0250}, 6925 {USB_DEVICE(0x041e, 0x4053), .driver_info = SENSOR_GC0303},
6926 {USB_DEVICE(0x0458, 0x7007)}, 6926 {USB_DEVICE(0x0458, 0x7007)},
6927 {USB_DEVICE(0x0458, 0x700c)}, 6927 {USB_DEVICE(0x0458, 0x700c)},
6928 {USB_DEVICE(0x0458, 0x700f)}, 6928 {USB_DEVICE(0x0458, 0x700f)},