diff options
author | Jean-Francois Moine <moinejf@free.fr> | 2008-11-21 02:34:15 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2008-12-29 14:53:39 -0500 |
commit | 1432f3062a72d1eafccc641dd9327a062fc27b92 (patch) | |
tree | 3f6ae56165edadf5addabd9acc3b5b65b08e8f34 /drivers/media/video/gspca | |
parent | d01823069f40b8ff084449bf469ba558b1bc951d (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')
-rw-r--r-- | drivers/media/video/gspca/sonixj.c | 48 |
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 | ||