aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/gspca/sonixj.c
diff options
context:
space:
mode:
authorJean-Francois Moine <moinejf@free.fr>2008-11-21 02:34:15 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2008-12-29 14:53:39 -0500
commit1432f3062a72d1eafccc641dd9327a062fc27b92 (patch)
tree3f6ae56165edadf5addabd9acc3b5b65b08e8f34 /drivers/media/video/gspca/sonixj.c
parentd01823069f40b8ff084449bf469ba558b1bc951d (diff)
V4L/DVB (9708): gspca: Do the sn9c105 - ov7660 work again in sonixj.
The sn9c105 and sn9c120 bridges must be differently programmed for the ov7660. 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.c48
1 files changed, 32 insertions, 16 deletions
diff --git a/drivers/media/video/gspca/sonixj.c b/drivers/media/video/gspca/sonixj.c
index c3859b5b4ba3..b99d1e5607b3 100644
--- a/drivers/media/video/gspca/sonixj.c
+++ b/drivers/media/video/gspca/sonixj.c
@@ -843,11 +843,14 @@ static int configure_gpio(struct gspca_dev *gspca_dev,
843 break; 843 break;
844/*jfm: from win trace */ 844/*jfm: from win trace */
845 case SENSOR_OV7660: 845 case SENSOR_OV7660:
846 reg_w1(gspca_dev, 0x01, 0x61); 846 if (sd->bridge == BRIDGE_SN9C120) {
847 reg_w1(gspca_dev, 0x17, 0x20); 847 reg_w1(gspca_dev, 0x01, 0x61);
848 reg_w1(gspca_dev, 0x01, 0x60); 848 reg_w1(gspca_dev, 0x17, 0x20);
849 reg_w1(gspca_dev, 0x01, 0x40); 849 reg_w1(gspca_dev, 0x01, 0x60);
850 break; 850 reg_w1(gspca_dev, 0x01, 0x40);
851 break;
852 }
853 /* fall thru */
851 default: 854 default:
852 reg_w1(gspca_dev, 0x01, 0x43); 855 reg_w1(gspca_dev, 0x01, 0x43);
853 reg_w1(gspca_dev, 0x17, 0x61); 856 reg_w1(gspca_dev, 0x17, 0x61);
@@ -1265,13 +1268,17 @@ static int sd_start(struct gspca_dev *gspca_dev)
1265 break; 1268 break;
1266/*jfm: from win trace */ 1269/*jfm: from win trace */
1267 case SENSOR_OV7660: 1270 case SENSOR_OV7660:
1268 reg17 = 0xa0; 1271 if (sd->bridge == BRIDGE_SN9C120) {
1269 break; 1272 reg17 = 0xa0;
1273 break;
1274 }
1275 /* fall thru */
1270 default: 1276 default:
1271 reg17 = 0x60; 1277 reg17 = 0x60;
1272 break; 1278 break;
1273 } 1279 }
1274 reg_w1(gspca_dev, 0x17, reg17); 1280 reg_w1(gspca_dev, 0x17, reg17);
1281/* set reg1 was here */
1275 reg_w1(gspca_dev, 0x05, sn9c1xx[5]); 1282 reg_w1(gspca_dev, 0x05, sn9c1xx[5]);
1276 reg_w1(gspca_dev, 0x07, sn9c1xx[7]); 1283 reg_w1(gspca_dev, 0x07, sn9c1xx[7]);
1277 reg_w1(gspca_dev, 0x06, sn9c1xx[6]); 1284 reg_w1(gspca_dev, 0x06, sn9c1xx[6]);
@@ -1285,8 +1292,11 @@ static int sd_start(struct gspca_dev *gspca_dev)
1285 reg_w1(gspca_dev, 0x99, 0x60); 1292 reg_w1(gspca_dev, 0x99, 0x60);
1286 break; 1293 break;
1287 case SENSOR_OV7660: 1294 case SENSOR_OV7660:
1288 reg_w1(gspca_dev, 0x9a, 0x05); 1295 if (sd->bridge == BRIDGE_SN9C120) {
1289 break; 1296 reg_w1(gspca_dev, 0x9a, 0x05);
1297 break;
1298 }
1299 /* fall thru */
1290 default: 1300 default:
1291 reg_w1(gspca_dev, 0x9a, 0x08); 1301 reg_w1(gspca_dev, 0x9a, 0x08);
1292 reg_w1(gspca_dev, 0x99, 0x59); 1302 reg_w1(gspca_dev, 0x99, 0x59);
@@ -1295,10 +1305,10 @@ static int sd_start(struct gspca_dev *gspca_dev)
1295 1305
1296 mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv; 1306 mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv;
1297 if (mode) 1307 if (mode)
1298 reg1 = 0x46; /* 320 clk 48Mhz */ 1308 reg1 = 0x46; /* 320x240: clk 48Mhz, video trf enable */
1299 else 1309 else
1300 reg1 = 0x06; /* 640 clk 24Mz */ 1310 reg1 = 0x06; /* 640x480: clk 24Mhz, video trf enable */
1301 reg17 = 0x61; 1311 reg17 = 0x61; /* 0x:20: enable sensor clock */
1302 switch (sd->sensor) { 1312 switch (sd->sensor) {
1303 case SENSOR_HV7131R: 1313 case SENSOR_HV7131R:
1304 hv7131R_InitSensor(gspca_dev); 1314 hv7131R_InitSensor(gspca_dev);
@@ -1342,9 +1352,15 @@ static int sd_start(struct gspca_dev *gspca_dev)
1342/* reg17 = 0x21; * 320 */ 1352/* reg17 = 0x21; * 320 */
1343/* reg1 = 0x44; */ 1353/* reg1 = 0x44; */
1344/* reg1 = 0x46; (done) */ 1354/* reg1 = 0x46; (done) */
1345 } else { 1355 } else { /* 640 */
1346 reg17 = 0xa2; /* 640 */ 1356 if (sd->bridge == BRIDGE_SN9C120) {
1347 reg1 = 0x44; 1357 reg17 = 0xa2;
1358 reg1 = 0x44; /* 48 Mhz, video trf eneble */
1359 } else {
1360 reg17 = 0x22;
1361 reg1 = 0x06; /* 24 Mhz, video trf eneble
1362 * inverse power down */
1363 }
1348 } 1364 }
1349 break; 1365 break;
1350 } 1366 }
@@ -1372,6 +1388,7 @@ static int sd_start(struct gspca_dev *gspca_dev)
1372 reg_w1(gspca_dev, 0x18, reg18); 1388 reg_w1(gspca_dev, 0x18, reg18);
1373 1389
1374 reg_w1(gspca_dev, 0x17, reg17); 1390 reg_w1(gspca_dev, 0x17, reg17);
1391 reg_w1(gspca_dev, 0x01, reg1);
1375 switch (sd->sensor) { 1392 switch (sd->sensor) {
1376 case SENSOR_MI0360: 1393 case SENSOR_MI0360:
1377 setinfrared(sd); 1394 setinfrared(sd);
@@ -1390,7 +1407,6 @@ static int sd_start(struct gspca_dev *gspca_dev)
1390 break; 1407 break;
1391 } 1408 }
1392 setautogain(gspca_dev); 1409 setautogain(gspca_dev);
1393 reg_w1(gspca_dev, 0x01, reg1);
1394 return 0; 1410 return 0;
1395} 1411}
1396 1412