aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media
diff options
context:
space:
mode:
authorJean-Francois Moine <moinejf@free.fr>2009-11-07 04:10:08 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-12-05 15:41:37 -0500
commitd5aa3856fd09ad0ea04619d6cba31192dac08e84 (patch)
tree8721bd2a164e0eec17c9dc7ae1c31db4b1468512 /drivers/media
parentb1784b3377bdeaeb6b9d01e651ff07bd44fec0f4 (diff)
V4L/DVB (13384): gspca - sonixj: Optimize code and add some comments.
- the i2c base address is now taken from the sn9c1xx register table Signed-off-by: Jean-Francois Moine <moinejf@free.fr> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/video/gspca/sonixj.c161
1 files changed, 82 insertions, 79 deletions
diff --git a/drivers/media/video/gspca/sonixj.c b/drivers/media/video/gspca/sonixj.c
index a9643a0f78d5..5f82efb93d9b 100644
--- a/drivers/media/video/gspca/sonixj.c
+++ b/drivers/media/video/gspca/sonixj.c
@@ -1,5 +1,6 @@
1/* 1/*
2 * Sonix sn9c102p sn9c105 sn9c120 (jpeg) subdriver 2 * Sonix sn9c102p sn9c105 sn9c120 (jpeg) subdriver
3 *
3 * Copyright (C) 2009 Jean-Francois Moine <http://moinejf.free.fr> 4 * Copyright (C) 2009 Jean-Francois Moine <http://moinejf.free.fr>
4 * Copyright (C) 2005 Michel Xhaard mxhaard@magic.fr 5 * Copyright (C) 2005 Michel Xhaard mxhaard@magic.fr
5 * 6 *
@@ -72,7 +73,7 @@ struct sd {
72#define SENSOR_OV7648 6 73#define SENSOR_OV7648 6
73#define SENSOR_OV7660 7 74#define SENSOR_OV7660 7
74#define SENSOR_SP80708 8 75#define SENSOR_SP80708 8
75 u8 i2c_base; 76 u8 i2c_addr;
76 77
77 u8 *jpeg_hdr; 78 u8 *jpeg_hdr;
78}; 79};
@@ -597,10 +598,11 @@ static const u8 om6802_sensor_init[][8] = {
597 {0xa0, 0x34, 0xdf, 0x6d, 0x00, 0x00, 0x00, 0x10}, 598 {0xa0, 0x34, 0xdf, 0x6d, 0x00, 0x00, 0x00, 0x10},
598 /* factory mode */ 599 /* factory mode */
599 {0xa0, 0x34, 0xdd, 0x18, 0x00, 0x00, 0x00, 0x10}, 600 {0xa0, 0x34, 0xdd, 0x18, 0x00, 0x00, 0x00, 0x10},
601 /* output raw RGB */
600 {0xa0, 0x34, 0x5a, 0xc0, 0x00, 0x00, 0x00, 0x10}, 602 {0xa0, 0x34, 0x5a, 0xc0, 0x00, 0x00, 0x00, 0x10},
601/* {0xa0, 0x34, 0xfb, 0x11, 0x00, 0x00, 0x00, 0x10}, */ 603/* {0xa0, 0x34, 0xfb, 0x11, 0x00, 0x00, 0x00, 0x10}, */
602 {0xa0, 0x34, 0xf0, 0x04, 0x00, 0x00, 0x00, 0x10}, 604 {0xa0, 0x34, 0xf0, 0x04, 0x00, 0x00, 0x00, 0x10},
603 /* white balance & auto-exposure */ 605 /* auto-exposure speed (0) / white balance mode (auto RGB) */
604/* {0xa0, 0x34, 0xf1, 0x02, 0x00, 0x00, 0x00, 0x10}, 606/* {0xa0, 0x34, 0xf1, 0x02, 0x00, 0x00, 0x00, 0x10},
605 * set color mode */ 607 * set color mode */
606/* {0xa0, 0x34, 0xfe, 0x5b, 0x00, 0x00, 0x00, 0x10}, 608/* {0xa0, 0x34, 0xfe, 0x5b, 0x00, 0x00, 0x00, 0x10},
@@ -614,7 +616,7 @@ static const u8 om6802_sensor_init[][8] = {
614/* {0xa0, 0x34, 0xe8, 0x31, 0x00, 0x00, 0x00, 0x10}, 616/* {0xa0, 0x34, 0xe8, 0x31, 0x00, 0x00, 0x00, 0x10},
615 * preset gamma */ 617 * preset gamma */
616 {0xa0, 0x34, 0xe9, 0x0f, 0x00, 0x00, 0x00, 0x10}, 618 {0xa0, 0x34, 0xe9, 0x0f, 0x00, 0x00, 0x00, 0x10},
617 /* luminance mode (0x4f = AE) */ 619 /* luminance mode (0x4f -> AutoExpo on) */
618 {0xa0, 0x34, 0xe4, 0xff, 0x00, 0x00, 0x00, 0x10}, 620 {0xa0, 0x34, 0xe4, 0xff, 0x00, 0x00, 0x00, 0x10},
619 /* preset shutter */ 621 /* preset shutter */
620/* {0xa0, 0x34, 0xef, 0x00, 0x00, 0x00, 0x00, 0x10}, 622/* {0xa0, 0x34, 0xef, 0x00, 0x00, 0x00, 0x00, 0x10},
@@ -999,7 +1001,7 @@ static void i2c_w1(struct gspca_dev *gspca_dev, u8 reg, u8 val)
999 gspca_dev->usb_buf[0] = 0x81 | (2 << 4); 1001 gspca_dev->usb_buf[0] = 0x81 | (2 << 4);
1000 break; 1002 break;
1001 } 1003 }
1002 gspca_dev->usb_buf[1] = sd->i2c_base; 1004 gspca_dev->usb_buf[1] = sd->i2c_addr;
1003 gspca_dev->usb_buf[2] = reg; 1005 gspca_dev->usb_buf[2] = reg;
1004 gspca_dev->usb_buf[3] = val; 1006 gspca_dev->usb_buf[3] = val;
1005 gspca_dev->usb_buf[4] = 0; 1007 gspca_dev->usb_buf[4] = 0;
@@ -1045,7 +1047,7 @@ static void i2c_r5(struct gspca_dev *gspca_dev, u8 reg)
1045 mode[0] = 0x81 | 0x10; 1047 mode[0] = 0x81 | 0x10;
1046 break; 1048 break;
1047 } 1049 }
1048 mode[1] = sd->i2c_base; 1050 mode[1] = sd->i2c_addr;
1049 mode[2] = reg; 1051 mode[2] = reg;
1050 mode[3] = 0; 1052 mode[3] = 0;
1051 mode[4] = 0; 1053 mode[4] = 0;
@@ -1132,7 +1134,6 @@ static void mi0360_probe(struct gspca_dev *gspca_dev)
1132 case 0x823a: 1134 case 0x823a:
1133 PDEBUG(D_PROBE, "Sensor mt9v111"); 1135 PDEBUG(D_PROBE, "Sensor mt9v111");
1134 sd->sensor = SENSOR_MT9V111; 1136 sd->sensor = SENSOR_MT9V111;
1135 sd->i2c_base = 0x5c;
1136 break; 1137 break;
1137 case 0x8243: 1138 case 0x8243:
1138 PDEBUG(D_PROBE, "Sensor mi0360"); 1139 PDEBUG(D_PROBE, "Sensor mi0360");
@@ -1160,7 +1161,7 @@ static void bridge_init(struct gspca_dev *gspca_dev,
1160 /* configure gpio */ 1161 /* configure gpio */
1161 reg_w(gspca_dev, 0x01, &sn9c1xx[1], 2); 1162 reg_w(gspca_dev, 0x01, &sn9c1xx[1], 2);
1162 reg_w(gspca_dev, 0x08, &sn9c1xx[8], 2); 1163 reg_w(gspca_dev, 0x08, &sn9c1xx[8], 2);
1163 reg_w(gspca_dev, 0x17, &sn9c1xx[0x17], 5); /* jfm len was 3 */ 1164 reg_w(gspca_dev, 0x17, &sn9c1xx[0x17], 5);
1164 switch (sd->sensor) { 1165 switch (sd->sensor) {
1165 case SENSOR_OV7660: 1166 case SENSOR_OV7660:
1166 case SENSOR_SP80708: 1167 case SENSOR_SP80708:
@@ -1172,7 +1173,7 @@ static void bridge_init(struct gspca_dev *gspca_dev,
1172 } 1173 }
1173 reg_w(gspca_dev, 0x9a, reg9a, 6); 1174 reg_w(gspca_dev, 0x9a, reg9a, 6);
1174 1175
1175 reg_w(gspca_dev, 0xd4, regd4, sizeof regd4); /*fixme:jfm was 60 only*/ 1176 reg_w(gspca_dev, 0xd4, regd4, sizeof regd4);
1176 1177
1177 reg_w(gspca_dev, 0x03, &sn9c1xx[3], 0x0f); 1178 reg_w(gspca_dev, 0x03, &sn9c1xx[3], 0x0f);
1178 1179
@@ -1222,14 +1223,15 @@ static void bridge_init(struct gspca_dev *gspca_dev,
1222 msleep(100); 1223 msleep(100);
1223 reg_w1(gspca_dev, 0x02, 0x62); 1224 reg_w1(gspca_dev, 0x02, 0x62);
1224 break; 1225 break;
1226 default:
1225/* case SENSOR_HV7131R: */ 1227/* case SENSOR_HV7131R: */
1226/* case SENSOR_MI0360: */ 1228/* case SENSOR_MI0360: */
1227/* case SENSOR_MO4000: */ 1229/* case SENSOR_MO4000: */
1228 default:
1229 reg_w1(gspca_dev, 0x01, 0x43); 1230 reg_w1(gspca_dev, 0x01, 0x43);
1230 reg_w1(gspca_dev, 0x17, 0x61); 1231 reg_w1(gspca_dev, 0x17, 0x61);
1231 reg_w1(gspca_dev, 0x01, 0x42); 1232 reg_w1(gspca_dev, 0x01, 0x42);
1232 if (sd->sensor == SENSOR_HV7131R) 1233 if (sd->sensor == SENSOR_HV7131R
1234 && sd->bridge == BRIDGE_SN9C102P)
1233 hv7131r_probe(gspca_dev); 1235 hv7131r_probe(gspca_dev);
1234 break; 1236 break;
1235 } 1237 }
@@ -1248,8 +1250,7 @@ static int sd_config(struct gspca_dev *gspca_dev,
1248 cam->npkt = 24; /* 24 packets per ISOC message */ 1250 cam->npkt = 24; /* 24 packets per ISOC message */
1249 1251
1250 sd->bridge = id->driver_info >> 16; 1252 sd->bridge = id->driver_info >> 16;
1251 sd->sensor = id->driver_info >> 8; 1253 sd->sensor = id->driver_info;
1252 sd->i2c_base = id->driver_info;
1253 1254
1254 sd->brightness = BRIGHTNESS_DEF; 1255 sd->brightness = BRIGHTNESS_DEF;
1255 sd->contrast = CONTRAST_DEF; 1256 sd->contrast = CONTRAST_DEF;
@@ -1273,6 +1274,7 @@ static int sd_config(struct gspca_dev *gspca_dev,
1273static int sd_init(struct gspca_dev *gspca_dev) 1274static int sd_init(struct gspca_dev *gspca_dev)
1274{ 1275{
1275 struct sd *sd = (struct sd *) gspca_dev; 1276 struct sd *sd = (struct sd *) gspca_dev;
1277 const u8 *sn9c1xx;
1276 u8 regGpio[] = { 0x29, 0x74 }; 1278 u8 regGpio[] = { 0x29, 0x74 };
1277 u8 regF1; 1279 u8 regF1;
1278 1280
@@ -1315,6 +1317,10 @@ static int sd_init(struct gspca_dev *gspca_dev)
1315 1317
1316 reg_w1(gspca_dev, 0xf1, 0x01); 1318 reg_w1(gspca_dev, 0xf1, 0x01);
1317 1319
1320 /* set the i2c address */
1321 sn9c1xx = sn_tb[sd->sensor];
1322 sd->i2c_addr = sn9c1xx[9];
1323
1318 return 0; 1324 return 0;
1319} 1325}
1320 1326
@@ -1326,7 +1332,7 @@ static u32 setexposure(struct gspca_dev *gspca_dev,
1326 switch (sd->sensor) { 1332 switch (sd->sensor) {
1327 case SENSOR_HV7131R: { 1333 case SENSOR_HV7131R: {
1328 u8 Expodoit[] = 1334 u8 Expodoit[] =
1329 { 0xc1, 0x11, 0x25, 0x07, 0x27, 0xc0, 0x00, 0x16 }; 1335 { 0xc1, 0x11, 0x25, 0x00, 0x00, 0x00, 0x00, 0x16 };
1330 1336
1331 Expodoit[3] = expo >> 16; 1337 Expodoit[3] = expo >> 16;
1332 Expodoit[4] = expo >> 8; 1338 Expodoit[4] = expo >> 8;
@@ -1336,7 +1342,7 @@ static u32 setexposure(struct gspca_dev *gspca_dev,
1336 } 1342 }
1337 case SENSOR_MI0360: { 1343 case SENSOR_MI0360: {
1338 u8 expoMi[] = /* exposure 0x0635 -> 4 fp/s 0x10 */ 1344 u8 expoMi[] = /* exposure 0x0635 -> 4 fp/s 0x10 */
1339 { 0xb1, 0x5d, 0x09, 0x06, 0x35, 0x00, 0x00, 0x16 }; 1345 { 0xb1, 0x5d, 0x09, 0x00, 0x00, 0x00, 0x00, 0x16 };
1340 static const u8 doit[] = /* update sensor */ 1346 static const u8 doit[] = /* update sensor */
1341 { 0xb1, 0x5d, 0x07, 0x00, 0x03, 0x00, 0x00, 0x10 }; 1347 { 0xb1, 0x5d, 0x07, 0x00, 0x03, 0x00, 0x00, 0x10 };
1342 static const u8 sensorgo[] = /* sensor on */ 1348 static const u8 sensorgo[] = /* sensor on */
@@ -1355,9 +1361,9 @@ static u32 setexposure(struct gspca_dev *gspca_dev,
1355 } 1361 }
1356 case SENSOR_MO4000: { 1362 case SENSOR_MO4000: {
1357 u8 expoMof[] = 1363 u8 expoMof[] =
1358 { 0xa1, 0x21, 0x0f, 0x20, 0x00, 0x00, 0x00, 0x10 }; 1364 { 0xa1, 0x21, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x10 };
1359 u8 expoMo10[] = 1365 u8 expoMo10[] =
1360 { 0xa1, 0x21, 0x10, 0x20, 0x00, 0x00, 0x00, 0x10 }; 1366 { 0xa1, 0x21, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10 };
1361 static const u8 gainMo[] = 1367 static const u8 gainMo[] =
1362 { 0xa1, 0x21, 0x00, 0x10, 0x00, 0x00, 0x00, 0x1d }; 1368 { 0xa1, 0x21, 0x00, 0x10, 0x00, 0x00, 0x00, 0x1d };
1363 1369
@@ -1393,6 +1399,7 @@ static u32 setexposure(struct gspca_dev *gspca_dev,
1393 case SENSOR_OM6802: { 1399 case SENSOR_OM6802: {
1394 u8 gainOm[] = 1400 u8 gainOm[] =
1395 { 0xa0, 0x34, 0xe5, 0x00, 0x00, 0x00, 0x00, 0x10 }; 1401 { 0xa0, 0x34, 0xe5, 0x00, 0x00, 0x00, 0x00, 0x10 };
1402 /* preset AGC - works when AutoExpo = off */
1396 1403
1397 if (expo > 0x03ff) 1404 if (expo > 0x03ff)
1398 expo = 0x03ff; 1405 expo = 0x03ff;
@@ -1400,7 +1407,7 @@ static u32 setexposure(struct gspca_dev *gspca_dev,
1400 expo = 0x0001; 1407 expo = 0x0001;
1401 gainOm[3] = expo >> 2; 1408 gainOm[3] = expo >> 2;
1402 i2c_w8(gspca_dev, gainOm); 1409 i2c_w8(gspca_dev, gainOm);
1403 reg_w1(gspca_dev, 0x96, (expo >> 5) & 0x1f); 1410 reg_w1(gspca_dev, 0x96, expo >> 5);
1404 PDEBUG(D_FRAM, "set exposure %d", gainOm[3]); 1411 PDEBUG(D_FRAM, "set exposure %d", gainOm[3]);
1405 break; 1412 break;
1406 } 1413 }
@@ -1432,7 +1439,7 @@ static void setbrightness(struct gspca_dev *gspca_dev)
1432 case SENSOR_MT9V111: 1439 case SENSOR_MT9V111:
1433 expo = sd->brightness >> 8; 1440 expo = sd->brightness >> 8;
1434 sd->exposure = setexposure(gspca_dev, expo); 1441 sd->exposure = setexposure(gspca_dev, expo);
1435 break; 1442 return; /* don't set the Y offset */
1436 case SENSOR_OM6802: 1443 case SENSOR_OM6802:
1437 expo = sd->brightness >> 6; 1444 expo = sd->brightness >> 6;
1438 sd->exposure = setexposure(gspca_dev, expo); 1445 sd->exposure = setexposure(gspca_dev, expo);
@@ -1440,8 +1447,7 @@ static void setbrightness(struct gspca_dev *gspca_dev)
1440 break; 1447 break;
1441 } 1448 }
1442 1449
1443 if (sd->sensor != SENSOR_MT9V111) 1450 reg_w1(gspca_dev, 0x96, k2); /* color matrix Y offset */
1444 reg_w1(gspca_dev, 0x96, k2); /* color matrix Y offset */
1445} 1451}
1446 1452
1447static void setcontrast(struct gspca_dev *gspca_dev) 1453static void setcontrast(struct gspca_dev *gspca_dev)
@@ -1469,6 +1475,7 @@ static void setcolors(struct gspca_dev *gspca_dev)
1469 -24, -38, 64, /* UR UG UB */ 1475 -24, -38, 64, /* UR UG UB */
1470 62, -51, -9 /* VR VG VB */ 1476 62, -51, -9 /* VR VG VB */
1471 }; 1477 };
1478
1472 for (i = 0; i < 6; i++) { 1479 for (i = 0; i < 6; i++) {
1473 v = uv[i] * sd->colors / COLOR_DEF; 1480 v = uv[i] * sd->colors / COLOR_DEF;
1474 reg8a[i * 2] = v; 1481 reg8a[i * 2] = v;
@@ -1692,6 +1699,7 @@ static int sd_start(struct gspca_dev *gspca_dev)
1692 /* initialize the bridge */ 1699 /* initialize the bridge */
1693 sn9c1xx = sn_tb[sd->sensor]; 1700 sn9c1xx = sn_tb[sd->sensor];
1694 bridge_init(gspca_dev, sn9c1xx); 1701 bridge_init(gspca_dev, sn9c1xx);
1702
1695 /* initialize the sensor */ 1703 /* initialize the sensor */
1696 i2c_w_seq(gspca_dev, sensor_init[sd->sensor]); 1704 i2c_w_seq(gspca_dev, sensor_init[sd->sensor]);
1697 1705
@@ -1779,7 +1787,7 @@ static int sd_start(struct gspca_dev *gspca_dev)
1779 reg_w1(gspca_dev, 0x06, sn9c1xx[6]); /* blue */ 1787 reg_w1(gspca_dev, 0x06, sn9c1xx[6]); /* blue */
1780 1788
1781 init = NULL; 1789 init = NULL;
1782 mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv; 1790 mode = gspca_dev->cam.cam_mode[gspca_dev->curr_mode].priv;
1783 if (mode) 1791 if (mode)
1784 reg1 = 0x46; /* 320x240: clk 48Mhz, video trf enable */ 1792 reg1 = 0x46; /* 320x240: clk 48Mhz, video trf enable */
1785 else 1793 else
@@ -1913,12 +1921,8 @@ static void sd_stopN(struct gspca_dev *gspca_dev)
1913 case SENSOR_OV7630: 1921 case SENSOR_OV7630:
1914 data = 0x29; 1922 data = 0x29;
1915 break; 1923 break;
1916 default:
1917/* case SENSOR_MO4000: */
1918/* case SENSOR_OV7660: */
1919 break;
1920 } 1924 }
1921 sn9c1xx = sn_tb[(int) sd->sensor]; 1925 sn9c1xx = sn_tb[sd->sensor];
1922 reg_w1(gspca_dev, 0x01, sn9c1xx[1]); 1926 reg_w1(gspca_dev, 0x01, sn9c1xx[1]);
1923 reg_w1(gspca_dev, 0x17, sn9c1xx[0x17]); 1927 reg_w1(gspca_dev, 0x17, sn9c1xx[0x17]);
1924 reg_w1(gspca_dev, 0x01, sn9c1xx[1]); 1928 reg_w1(gspca_dev, 0x01, sn9c1xx[1]);
@@ -2277,70 +2281,69 @@ static const struct sd_desc sd_desc = {
2277}; 2281};
2278 2282
2279/* -- module initialisation -- */ 2283/* -- module initialisation -- */
2280#define BSI(bridge, sensor, i2c_addr) \ 2284#define BS(bridge, sensor) \
2281 .driver_info = (BRIDGE_ ## bridge << 16) \ 2285 .driver_info = (BRIDGE_ ## bridge << 16) \
2282 | (SENSOR_ ## sensor << 8) \ 2286 | SENSOR_ ## sensor
2283 | (i2c_addr)
2284static const __devinitdata struct usb_device_id device_table[] = { 2287static const __devinitdata struct usb_device_id device_table[] = {
2285#if !defined CONFIG_USB_SN9C102 && !defined CONFIG_USB_SN9C102_MODULE 2288#if !defined CONFIG_USB_SN9C102 && !defined CONFIG_USB_SN9C102_MODULE
2286 {USB_DEVICE(0x0458, 0x7025), BSI(SN9C120, MI0360, 0x5d)}, 2289 {USB_DEVICE(0x0458, 0x7025), BS(SN9C120, MI0360)},
2287 {USB_DEVICE(0x0458, 0x702e), BSI(SN9C120, OV7660, 0x21)}, 2290 {USB_DEVICE(0x0458, 0x702e), BS(SN9C120, OV7660)},
2288#endif 2291#endif
2289 {USB_DEVICE(0x045e, 0x00f5), BSI(SN9C105, OV7660, 0x21)}, 2292 {USB_DEVICE(0x045e, 0x00f5), BS(SN9C105, OV7660)},
2290 {USB_DEVICE(0x045e, 0x00f7), BSI(SN9C105, OV7660, 0x21)}, 2293 {USB_DEVICE(0x045e, 0x00f7), BS(SN9C105, OV7660)},
2291 {USB_DEVICE(0x0471, 0x0327), BSI(SN9C105, MI0360, 0x5d)}, 2294 {USB_DEVICE(0x0471, 0x0327), BS(SN9C105, MI0360)},
2292 {USB_DEVICE(0x0471, 0x0328), BSI(SN9C105, MI0360, 0x5d)}, 2295 {USB_DEVICE(0x0471, 0x0328), BS(SN9C105, MI0360)},
2293 {USB_DEVICE(0x0471, 0x0330), BSI(SN9C105, MI0360, 0x5d)}, 2296 {USB_DEVICE(0x0471, 0x0330), BS(SN9C105, MI0360)},
2294 {USB_DEVICE(0x06f8, 0x3004), BSI(SN9C105, OV7660, 0x21)}, 2297 {USB_DEVICE(0x06f8, 0x3004), BS(SN9C105, OV7660)},
2295 {USB_DEVICE(0x06f8, 0x3008), BSI(SN9C105, OV7660, 0x21)}, 2298 {USB_DEVICE(0x06f8, 0x3008), BS(SN9C105, OV7660)},
2296/* {USB_DEVICE(0x0c45, 0x603a), BSI(SN9C102P, OV7648, 0x21)}, */ 2299/* {USB_DEVICE(0x0c45, 0x603a), BS(SN9C102P, OV7648)}, */
2297 {USB_DEVICE(0x0c45, 0x6040), BSI(SN9C102P, HV7131R, 0x11)}, 2300 {USB_DEVICE(0x0c45, 0x6040), BS(SN9C102P, HV7131R)},
2298/* {USB_DEVICE(0x0c45, 0x607a), BSI(SN9C102P, OV7648, 0x21)}, */ 2301/* {USB_DEVICE(0x0c45, 0x607a), BS(SN9C102P, OV7648)}, */
2299/* {USB_DEVICE(0x0c45, 0x607b), BSI(SN9C102P, OV7660, 0x21)}, */ 2302/* {USB_DEVICE(0x0c45, 0x607b), BS(SN9C102P, OV7660)}, */
2300 {USB_DEVICE(0x0c45, 0x607c), BSI(SN9C102P, HV7131R, 0x11)}, 2303 {USB_DEVICE(0x0c45, 0x607c), BS(SN9C102P, HV7131R)},
2301/* {USB_DEVICE(0x0c45, 0x607e), BSI(SN9C102P, OV7630, 0x21)}, */ 2304/* {USB_DEVICE(0x0c45, 0x607e), BS(SN9C102P, OV7630)}, */
2302 {USB_DEVICE(0x0c45, 0x60c0), BSI(SN9C105, MI0360, 0x5d)}, 2305 {USB_DEVICE(0x0c45, 0x60c0), BS(SN9C105, MI0360)},
2303/* {USB_DEVICE(0x0c45, 0x60c2), BSI(SN9C105, P1030xC, 0x??)}, */ 2306/* {USB_DEVICE(0x0c45, 0x60c2), BS(SN9C105, P1030xC)}, */
2304/* {USB_DEVICE(0x0c45, 0x60c8), BSI(SN9C105, OM6802, 0x34)}, */ 2307/* {USB_DEVICE(0x0c45, 0x60c8), BS(SN9C105, OM6802)}, */
2305/* {USB_DEVICE(0x0c45, 0x60cc), BSI(SN9C105, HV7131GP, 0x??)}, */ 2308/* {USB_DEVICE(0x0c45, 0x60cc), BS(SN9C105, HV7131GP)}, */
2306 {USB_DEVICE(0x0c45, 0x60ec), BSI(SN9C105, MO4000, 0x21)}, 2309 {USB_DEVICE(0x0c45, 0x60ec), BS(SN9C105, MO4000)},
2307/* {USB_DEVICE(0x0c45, 0x60ef), BSI(SN9C105, ICM105C, 0x??)}, */ 2310/* {USB_DEVICE(0x0c45, 0x60ef), BS(SN9C105, ICM105C)}, */
2308/* {USB_DEVICE(0x0c45, 0x60fa), BSI(SN9C105, OV7648, 0x21)}, */ 2311/* {USB_DEVICE(0x0c45, 0x60fa), BS(SN9C105, OV7648)}, */
2309 {USB_DEVICE(0x0c45, 0x60fb), BSI(SN9C105, OV7660, 0x21)}, 2312 {USB_DEVICE(0x0c45, 0x60fb), BS(SN9C105, OV7660)},
2310#if !defined CONFIG_USB_SN9C102 && !defined CONFIG_USB_SN9C102_MODULE 2313#if !defined CONFIG_USB_SN9C102 && !defined CONFIG_USB_SN9C102_MODULE
2311 {USB_DEVICE(0x0c45, 0x60fc), BSI(SN9C105, HV7131R, 0x11)}, 2314 {USB_DEVICE(0x0c45, 0x60fc), BS(SN9C105, HV7131R)},
2312 {USB_DEVICE(0x0c45, 0x60fe), BSI(SN9C105, OV7630, 0x21)}, 2315 {USB_DEVICE(0x0c45, 0x60fe), BS(SN9C105, OV7630)},
2313#endif 2316#endif
2314 {USB_DEVICE(0x0c45, 0x6100), BSI(SN9C120, MI0360, 0x5d)}, /*sn9c128*/ 2317 {USB_DEVICE(0x0c45, 0x6100), BS(SN9C120, MI0360)}, /*sn9c128*/
2315/* {USB_DEVICE(0x0c45, 0x6102), BSI(SN9C120, P1030xC, ??)}, */ 2318/* {USB_DEVICE(0x0c45, 0x6102), BS(SN9C120, P1030xC)}, */
2316/* {USB_DEVICE(0x0c45, 0x6108), BSI(SN9C120, OM6802, 0x34)}, */ 2319/* {USB_DEVICE(0x0c45, 0x6108), BS(SN9C120, OM6802)}, */
2317 {USB_DEVICE(0x0c45, 0x610a), BSI(SN9C120, OV7648, 0x21)}, /*sn9c128*/ 2320 {USB_DEVICE(0x0c45, 0x610a), BS(SN9C120, OV7648)}, /*sn9c128*/
2318 {USB_DEVICE(0x0c45, 0x610b), BSI(SN9C120, OV7660, 0x21)}, /*sn9c128*/ 2321 {USB_DEVICE(0x0c45, 0x610b), BS(SN9C120, OV7660)}, /*sn9c128*/
2319 {USB_DEVICE(0x0c45, 0x610c), BSI(SN9C120, HV7131R, 0x11)}, /*sn9c128*/ 2322 {USB_DEVICE(0x0c45, 0x610c), BS(SN9C120, HV7131R)}, /*sn9c128*/
2320 {USB_DEVICE(0x0c45, 0x610e), BSI(SN9C120, OV7630, 0x21)}, /*sn9c128*/ 2323 {USB_DEVICE(0x0c45, 0x610e), BS(SN9C120, OV7630)}, /*sn9c128*/
2321/* {USB_DEVICE(0x0c45, 0x610f), BSI(SN9C120, S5K53BEB, 0x??)}, */ 2324/* {USB_DEVICE(0x0c45, 0x610f), BS(SN9C120, S5K53BEB)}, */
2322/* {USB_DEVICE(0x0c45, 0x6122), BSI(SN9C110, ICM105C, 0x??)}, */ 2325/* {USB_DEVICE(0x0c45, 0x6122), BS(SN9C110, ICM105C)}, */
2323/* {USB_DEVICE(0x0c45, 0x6123), BSI(SN9C110, SanyoCCD, 0x??)}, */ 2326/* {USB_DEVICE(0x0c45, 0x6123), BS(SN9C110, SanyoCCD)}, */
2324 {USB_DEVICE(0x0c45, 0x6128), BSI(SN9C120, OM6802, 0x34)}, /*sn9c325?*/ 2327 {USB_DEVICE(0x0c45, 0x6128), BS(SN9C120, OM6802)}, /*sn9c325?*/
2325/*bw600.inf:*/ 2328/*bw600.inf:*/
2326 {USB_DEVICE(0x0c45, 0x612a), BSI(SN9C120, OV7648, 0x21)}, /*sn9c110?*/ 2329 {USB_DEVICE(0x0c45, 0x612a), BS(SN9C120, OV7648)}, /*sn9c110?*/
2327 {USB_DEVICE(0x0c45, 0x612c), BSI(SN9C110, MO4000, 0x21)}, 2330 {USB_DEVICE(0x0c45, 0x612c), BS(SN9C110, MO4000)},
2328 {USB_DEVICE(0x0c45, 0x612e), BSI(SN9C110, OV7630, 0x21)}, 2331 {USB_DEVICE(0x0c45, 0x612e), BS(SN9C110, OV7630)},
2329/* {USB_DEVICE(0x0c45, 0x612f), BSI(SN9C110, ICM105C, 0x??)}, */ 2332/* {USB_DEVICE(0x0c45, 0x612f), BS(SN9C110, ICM105C)}, */
2330#if !defined CONFIG_USB_SN9C102 && !defined CONFIG_USB_SN9C102_MODULE 2333#if !defined CONFIG_USB_SN9C102 && !defined CONFIG_USB_SN9C102_MODULE
2331 {USB_DEVICE(0x0c45, 0x6130), BSI(SN9C120, MI0360, 0x5d)}, 2334 {USB_DEVICE(0x0c45, 0x6130), BS(SN9C120, MI0360)},
2332#endif 2335#endif
2333/* {USB_DEVICE(0x0c45, 0x6132), BSI(SN9C120, OV7670, 0x21)}, */ 2336/* {USB_DEVICE(0x0c45, 0x6132), BS(SN9C120, OV7670)}, */
2334 {USB_DEVICE(0x0c45, 0x6138), BSI(SN9C120, MO4000, 0x21)}, 2337 {USB_DEVICE(0x0c45, 0x6138), BS(SN9C120, MO4000)},
2335 {USB_DEVICE(0x0c45, 0x613a), BSI(SN9C120, OV7648, 0x21)}, 2338 {USB_DEVICE(0x0c45, 0x613a), BS(SN9C120, OV7648)},
2336#if !defined CONFIG_USB_SN9C102 && !defined CONFIG_USB_SN9C102_MODULE 2339#if !defined CONFIG_USB_SN9C102 && !defined CONFIG_USB_SN9C102_MODULE
2337 {USB_DEVICE(0x0c45, 0x613b), BSI(SN9C120, OV7660, 0x21)}, 2340 {USB_DEVICE(0x0c45, 0x613b), BS(SN9C120, OV7660)},
2338#endif 2341#endif
2339 {USB_DEVICE(0x0c45, 0x613c), BSI(SN9C120, HV7131R, 0x11)}, 2342 {USB_DEVICE(0x0c45, 0x613c), BS(SN9C120, HV7131R)},
2340 {USB_DEVICE(0x0c45, 0x613e), BSI(SN9C120, OV7630, 0x21)}, 2343 {USB_DEVICE(0x0c45, 0x613e), BS(SN9C120, OV7630)},
2341/* {USB_DEVICE(0x0c45, 0x6142), BSI(SN9C120, PO2030N, ??)}, *sn9c120b*/ 2344/* {USB_DEVICE(0x0c45, 0x6142), BS(SN9C120, PO2030N)}, *sn9c120b*/
2342 {USB_DEVICE(0x0c45, 0x6143), BSI(SN9C120, SP80708, 0x18)}, /*sn9c120b*/ 2345 {USB_DEVICE(0x0c45, 0x6143), BS(SN9C120, SP80708)}, /*sn9c120b*/
2343 {USB_DEVICE(0x0c45, 0x6148), BSI(SN9C120, OM6802, 0x34)}, /*sn9c120b*/ 2346 {USB_DEVICE(0x0c45, 0x6148), BS(SN9C120, OM6802)}, /*sn9c120b*/
2344 {} 2347 {}
2345}; 2348};
2346MODULE_DEVICE_TABLE(usb, device_table); 2349MODULE_DEVICE_TABLE(usb, device_table);