aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/gspca/sonixj.c
diff options
context:
space:
mode:
authorJean-Francois Moine <moinejf@free.fr>2009-08-25 05:14:54 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-09-12 11:19:46 -0400
commit47f7f6fb7949b6546baf4b6f26bf0ca075d12759 (patch)
tree49654774c634e21bd0d2d8ea83570575e84b1034 /drivers/media/video/gspca/sonixj.c
parent5706934967e4d98e531615b116c86e2b01b858b8 (diff)
V4L/DVB (12501): gspca - sonixj: Do the ov7660 sensor work again.
- bad sensor power - bad edge gain/threshold - set back the auto gain - light frequency filter inverted Signed-off-by: Jean-Francois Moine <moinejf@free.fr> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/gspca/sonixj.c')
-rw-r--r--drivers/media/video/gspca/sonixj.c23
1 files changed, 7 insertions, 16 deletions
diff --git a/drivers/media/video/gspca/sonixj.c b/drivers/media/video/gspca/sonixj.c
index f0b762f770fb..3c82c00a42b2 100644
--- a/drivers/media/video/gspca/sonixj.c
+++ b/drivers/media/video/gspca/sonixj.c
@@ -733,7 +733,7 @@ static const u8 ov7660_sensor_init[][8] = {
733 /* COM 1 BAVE GEAVE AECHH */ 733 /* COM 1 BAVE GEAVE AECHH */
734 {0xb1, 0x21, 0x08, 0x83, 0x01, 0x00, 0x00, 0x10}, /* RAVE COM2 */ 734 {0xb1, 0x21, 0x08, 0x83, 0x01, 0x00, 0x00, 0x10}, /* RAVE COM2 */
735 {0xd1, 0x21, 0x0c, 0x00, 0x08, 0x04, 0x4f, 0x10}, /* COM 3 4 5 6 */ 735 {0xd1, 0x21, 0x0c, 0x00, 0x08, 0x04, 0x4f, 0x10}, /* COM 3 4 5 6 */
736 {0xd1, 0x21, 0x10, 0x7f, 0x40, 0x05, 0xf8, 0x10}, 736 {0xd1, 0x21, 0x10, 0x7f, 0x40, 0x05, 0xff, 0x10},
737 /* AECH CLKRC COM7 COM8 */ 737 /* AECH CLKRC COM7 COM8 */
738 {0xc1, 0x21, 0x14, 0x2c, 0x00, 0x02, 0x00, 0x10}, /* COM9 COM10 */ 738 {0xc1, 0x21, 0x14, 0x2c, 0x00, 0x02, 0x00, 0x10}, /* COM9 COM10 */
739 {0xd1, 0x21, 0x17, 0x10, 0x60, 0x02, 0x7b, 0x10}, 739 {0xd1, 0x21, 0x17, 0x10, 0x60, 0x02, 0x7b, 0x10},
@@ -783,7 +783,7 @@ static const u8 ov7660_sensor_init[][8] = {
783 {0xc1, 0x21, 0x88, 0xaf, 0xc7, 0xdf, 0x00, 0x10}, /* gamma curve */ 783 {0xc1, 0x21, 0x88, 0xaf, 0xc7, 0xdf, 0x00, 0x10}, /* gamma curve */
784 {0xc1, 0x21, 0x8b, 0x99, 0x99, 0xcf, 0x00, 0x10}, /* reserved */ 784 {0xc1, 0x21, 0x8b, 0x99, 0x99, 0xcf, 0x00, 0x10}, /* reserved */
785 {0xb1, 0x21, 0x92, 0x00, 0x00, 0x00, 0x00, 0x10}, /* DM_LNL/H */ 785 {0xb1, 0x21, 0x92, 0x00, 0x00, 0x00, 0x00, 0x10}, /* DM_LNL/H */
786 {0xb1, 0x21, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x10}, 786 {0xa1, 0x21, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x10},
787/****** (some exchanges in the win trace) ******/ 787/****** (some exchanges in the win trace) ******/
788 {0xa1, 0x21, 0x1e, 0x01, 0x00, 0x00, 0x00, 0x10}, /* MVFP */ 788 {0xa1, 0x21, 0x1e, 0x01, 0x00, 0x00, 0x00, 0x10}, /* MVFP */
789 /* bits[3..0]reserved */ 789 /* bits[3..0]reserved */
@@ -1145,11 +1145,6 @@ static int configure_gpio(struct gspca_dev *gspca_dev,
1145 reg_w1(gspca_dev, 0x01, 0x42); 1145 reg_w1(gspca_dev, 0x01, 0x42);
1146 break; 1146 break;
1147 case SENSOR_OV7660: 1147 case SENSOR_OV7660:
1148 reg_w1(gspca_dev, 0x01, 0x61);
1149 reg_w1(gspca_dev, 0x17, 0x20);
1150 reg_w1(gspca_dev, 0x01, 0x60);
1151 reg_w1(gspca_dev, 0x01, 0x40);
1152 break;
1153 case SENSOR_SP80708: 1148 case SENSOR_SP80708:
1154 reg_w1(gspca_dev, 0x01, 0x63); 1149 reg_w1(gspca_dev, 0x01, 0x63);
1155 reg_w1(gspca_dev, 0x17, 0x20); 1150 reg_w1(gspca_dev, 0x17, 0x20);
@@ -1624,6 +1619,8 @@ static void setvflip(struct sd *sd)
1624 1619
1625static void setinfrared(struct sd *sd) 1620static void setinfrared(struct sd *sd)
1626{ 1621{
1622 if (sd->gspca_dev.ctrl_dis & (1 << INFRARED_IDX))
1623 return;
1627/*fixme: different sequence for StarCam Clip and StarCam 370i */ 1624/*fixme: different sequence for StarCam Clip and StarCam 370i */
1628/* Clip */ 1625/* Clip */
1629 i2c_w1(&sd->gspca_dev, 0x02, /* gpio */ 1626 i2c_w1(&sd->gspca_dev, 0x02, /* gpio */
@@ -1639,10 +1636,10 @@ static void setfreq(struct gspca_dev *gspca_dev)
1639 if (sd->sensor == SENSOR_OV7660) { 1636 if (sd->sensor == SENSOR_OV7660) {
1640 u8 com8; 1637 u8 com8;
1641 1638
1642 com8 = 0xf8; /* no auto gain/wb/expo */ 1639 com8 = 0xdf; /* auto gain/wb/expo */
1643 switch (sd->freq) { 1640 switch (sd->freq) {
1644 case 0: /* Banding filter disabled */ 1641 case 0: /* Banding filter disabled */
1645 i2c_w1(gspca_dev, 0x13, com8 & 0xdf); 1642 i2c_w1(gspca_dev, 0x13, com8 | 0x20);
1646 break; 1643 break;
1647 case 1: /* 50 hz */ 1644 case 1: /* 50 hz */
1648 i2c_w1(gspca_dev, 0x13, com8); 1645 i2c_w1(gspca_dev, 0x13, com8);
@@ -1799,12 +1796,6 @@ static int sd_start(struct gspca_dev *gspca_dev)
1799 reg_w1(gspca_dev, 0x99, 0x60); 1796 reg_w1(gspca_dev, 0x99, 0x60);
1800 break; 1797 break;
1801 case SENSOR_OV7660: 1798 case SENSOR_OV7660:
1802 reg_w1(gspca_dev, 0x9a, 0x05);
1803 if (sd->bridge == BRIDGE_SN9C105)
1804 reg_w1(gspca_dev, 0x99, 0xff);
1805 else
1806 reg_w1(gspca_dev, 0x99, 0x5b);
1807 break;
1808 case SENSOR_SP80708: 1799 case SENSOR_SP80708:
1809 reg_w1(gspca_dev, 0x9a, 0x05); 1800 reg_w1(gspca_dev, 0x9a, 0x05);
1810 reg_w1(gspca_dev, 0x99, 0x59); 1801 reg_w1(gspca_dev, 0x99, 0x59);
@@ -2328,7 +2319,7 @@ static const __devinitdata struct usb_device_id device_table[] = {
2328 {USB_DEVICE(0x0c45, 0x607c), BSI(SN9C102P, HV7131R, 0x11)}, 2319 {USB_DEVICE(0x0c45, 0x607c), BSI(SN9C102P, HV7131R, 0x11)},
2329/* {USB_DEVICE(0x0c45, 0x607e), BSI(SN9C102P, OV7630, 0x??)}, */ 2320/* {USB_DEVICE(0x0c45, 0x607e), BSI(SN9C102P, OV7630, 0x??)}, */
2330 {USB_DEVICE(0x0c45, 0x60c0), BSI(SN9C105, MI0360, 0x5d)}, 2321 {USB_DEVICE(0x0c45, 0x60c0), BSI(SN9C105, MI0360, 0x5d)},
2331/* {USB_DEVICE(0x0c45, 0x60c8), BSI(SN9C105, OM6801, 0x??)}, */ 2322/* {USB_DEVICE(0x0c45, 0x60c8), BSI(SN9C105, OM6802, 0x??)}, */
2332/* {USB_DEVICE(0x0c45, 0x60cc), BSI(SN9C105, HV7131GP, 0x??)}, */ 2323/* {USB_DEVICE(0x0c45, 0x60cc), BSI(SN9C105, HV7131GP, 0x??)}, */
2333 {USB_DEVICE(0x0c45, 0x60ec), BSI(SN9C105, MO4000, 0x21)}, 2324 {USB_DEVICE(0x0c45, 0x60ec), BSI(SN9C105, MO4000, 0x21)},
2334/* {USB_DEVICE(0x0c45, 0x60ef), BSI(SN9C105, ICM105C, 0x??)}, */ 2325/* {USB_DEVICE(0x0c45, 0x60ef), BSI(SN9C105, ICM105C, 0x??)}, */