aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/gspca/sonixj.c
diff options
context:
space:
mode:
authorJean-Francois Moine <moinejf@free.fr>2009-02-01 12:26:51 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-03-30 11:42:37 -0400
commit65c5259cc44c822215e670025c226d77f5a323bf (patch)
tree565c64e510dc44a4b8a7eaac925366f8e0da1547 /drivers/media/video/gspca/sonixj.c
parentb083b92f9386d82e8ff3c1cfe04eefae488cbf1f (diff)
V4L/DVB (10429): gspca - sonixj: Simplify the probe of the sensors mi0360/mt9v111.
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.c32
1 files changed, 15 insertions, 17 deletions
diff --git a/drivers/media/video/gspca/sonixj.c b/drivers/media/video/gspca/sonixj.c
index a5b58374333b..4101a240e481 100644
--- a/drivers/media/video/gspca/sonixj.c
+++ b/drivers/media/video/gspca/sonixj.c
@@ -1009,18 +1009,19 @@ static int hv7131r_probe(struct gspca_dev *gspca_dev)
1009 return -ENODEV; 1009 return -ENODEV;
1010} 1010}
1011 1011
1012static int mi0360_probe(struct gspca_dev *gspca_dev) 1012static void mi0360_probe(struct gspca_dev *gspca_dev)
1013{ 1013{
1014 struct sd *sd = (struct sd *) gspca_dev;
1014 int i, j; 1015 int i, j;
1015 u16 val; 1016 u16 val;
1016 static const u8 probe_tb[][4][8] = { 1017 static const u8 probe_tb[][4][8] = {
1017 { 1018 { /* mi0360 */
1018 {0xb0, 0x5d, 0x07, 0x00, 0x02, 0x00, 0x00, 0x10}, 1019 {0xb0, 0x5d, 0x07, 0x00, 0x02, 0x00, 0x00, 0x10},
1019 {0x90, 0x5d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10}, 1020 {0x90, 0x5d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10},
1020 {0xa2, 0x5d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10}, 1021 {0xa2, 0x5d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10},
1021 {0xb0, 0x5d, 0x07, 0x00, 0x00, 0x00, 0x00, 0x10} 1022 {0xb0, 0x5d, 0x07, 0x00, 0x00, 0x00, 0x00, 0x10}
1022 }, 1023 },
1023 { 1024 { /* mt9v111 */
1024 {0xb0, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0x10}, 1025 {0xb0, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0x10},
1025 {0x90, 0x5c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x10}, 1026 {0x90, 0x5c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x10},
1026 {0xa2, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10}, 1027 {0xa2, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10},
@@ -1046,13 +1047,16 @@ static int mi0360_probe(struct gspca_dev *gspca_dev)
1046 switch (val) { 1047 switch (val) {
1047 case 0x823a: 1048 case 0x823a:
1048 PDEBUG(D_PROBE, "Sensor mt9v111"); 1049 PDEBUG(D_PROBE, "Sensor mt9v111");
1049 return SENSOR_MT9V111; 1050 sd->sensor = SENSOR_MT9V111;
1051 sd->i2c_base = 0x5c;
1052 break;
1050 case 0x8243: 1053 case 0x8243:
1051 PDEBUG(D_PROBE, "Sensor mi0360"); 1054 PDEBUG(D_PROBE, "Sensor mi0360");
1052 return SENSOR_MI0360; 1055 break;
1056 default:
1057 PDEBUG(D_PROBE, "Unknown sensor %04x - forced to mi0360", val);
1058 break;
1053 } 1059 }
1054 PDEBUG(D_PROBE, "Unknown sensor %04x - forced to mi0360", val);
1055 return SENSOR_MI0360;
1056} 1060}
1057 1061
1058static int configure_gpio(struct gspca_dev *gspca_dev, 1062static int configure_gpio(struct gspca_dev *gspca_dev,
@@ -1319,21 +1323,15 @@ static int sd_init(struct gspca_dev *gspca_dev)
1319 case BRIDGE_SN9C105: 1323 case BRIDGE_SN9C105:
1320 if (regF1 != 0x11) 1324 if (regF1 != 0x11)
1321 return -ENODEV; 1325 return -ENODEV;
1322 if (sd->sensor == SENSOR_MI0360) { 1326 if (sd->sensor == SENSOR_MI0360)
1323 sd->sensor = mi0360_probe(gspca_dev); 1327 mi0360_probe(gspca_dev);
1324 if (sd->sensor == SENSOR_MT9V111)
1325 sd->i2c_base = 0x5c;
1326 }
1327 reg_w(gspca_dev, 0x01, regGpio, 2); 1328 reg_w(gspca_dev, 0x01, regGpio, 2);
1328 break; 1329 break;
1329 case BRIDGE_SN9C120: 1330 case BRIDGE_SN9C120:
1330 if (regF1 != 0x12) 1331 if (regF1 != 0x12)
1331 return -ENODEV; 1332 return -ENODEV;
1332 if (sd->sensor == SENSOR_MI0360) { 1333 if (sd->sensor == SENSOR_MI0360)
1333 sd->sensor = mi0360_probe(gspca_dev); 1334 mi0360_probe(gspca_dev);
1334 if (sd->sensor == SENSOR_MT9V111)
1335 sd->i2c_base = 0x5c;
1336 }
1337 regGpio[1] = 0x70; 1335 regGpio[1] = 0x70;
1338 reg_w(gspca_dev, 0x01, regGpio, 2); 1336 reg_w(gspca_dev, 0x01, regGpio, 2);
1339 break; 1337 break;