aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/gspca/sunplus.c
diff options
context:
space:
mode:
authorJean-Francois Moine <moinejf@free.fr>2008-07-25 07:53:03 -0400
committerMauro Carvalho Chehab <mchehab@infradead.org>2008-07-27 10:06:38 -0400
commit9d64fdb15b1b9ce9144cfde4001e9194ccde42d1 (patch)
treeda578050af9867c0247b55099b4e7337f8fea2b4 /drivers/media/video/gspca/sunplus.c
parent07767ebda385956bd2b193f9820de719475bfe6e (diff)
V4L/DVB (8513): gspca: Set the specific per webcam information in driver_info.
This patch removes a big part of the code run at probe time. Signed-off-by: Jean-Francois Moine <moinejf@free.fr> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/video/gspca/sunplus.c')
-rw-r--r--drivers/media/video/gspca/sunplus.c349
1 files changed, 76 insertions, 273 deletions
diff --git a/drivers/media/video/gspca/sunplus.c b/drivers/media/video/gspca/sunplus.c
index 030cb18b355..54efa48bee0 100644
--- a/drivers/media/video/gspca/sunplus.c
+++ b/drivers/media/video/gspca/sunplus.c
@@ -801,228 +801,29 @@ static int sd_config(struct gspca_dev *gspca_dev,
801 struct sd *sd = (struct sd *) gspca_dev; 801 struct sd *sd = (struct sd *) gspca_dev;
802 struct usb_device *dev = gspca_dev->dev; 802 struct usb_device *dev = gspca_dev->dev;
803 struct cam *cam; 803 struct cam *cam;
804 __u16 vendor; 804
805 __u16 product; 805 cam = &gspca_dev->cam;
806 __u8 fw; 806 cam->epaddr = 0x01;
807 807
808 vendor = id->idVendor; 808 sd->bridge = id->driver_info >> 8;
809 product = id->idProduct; 809 sd->subtype = id->driver_info;
810 switch (vendor) { 810
811 case 0x041e: /* Creative cameras */ 811 if (sd->subtype == AiptekMiniPenCam13) {
812/* switch (product) { */
813/* case 0x400b: */
814/* case 0x4012: */
815/* case 0x4013: */
816/* sd->bridge = BRIDGE_SPCA504C; */
817/* break; */
818/* } */
819 break;
820 case 0x0458: /* Genius KYE cameras */
821/* switch (product) { */
822/* case 0x7006: */
823 sd->bridge = BRIDGE_SPCA504B;
824/* break; */
825/* } */
826 break;
827 case 0x0461: /* MicroInnovation */
828/* switch (product) { */
829/* case 0x0821: */
830 sd->bridge = BRIDGE_SPCA533;
831/* break; */
832/* } */
833 break;
834 case 0x046d: /* Logitech Labtec */
835 switch (product) {
836 case 0x0905:
837 sd->subtype = LogitechClickSmart820;
838 sd->bridge = BRIDGE_SPCA533;
839 break;
840 case 0x0960:
841 sd->subtype = LogitechClickSmart420;
842 sd->bridge = BRIDGE_SPCA504C;
843 break;
844 }
845 break;
846 case 0x0471: /* Philips */
847/* switch (product) { */
848/* case 0x0322: */
849 sd->bridge = BRIDGE_SPCA504B;
850/* break; */
851/* } */
852 break;
853 case 0x04a5: /* Benq */
854 switch (product) {
855 case 0x3003:
856 sd->bridge = BRIDGE_SPCA504B;
857 break;
858 case 0x3008:
859 case 0x300a:
860 sd->bridge = BRIDGE_SPCA533;
861 break;
862 }
863 break;
864 case 0x04f1: /* JVC */
865/* switch (product) { */
866/* case 0x1001: */
867 sd->bridge = BRIDGE_SPCA504B;
868/* break; */
869/* } */
870 break;
871 case 0x04fc: /* SunPlus */
872 switch (product) {
873 case 0x500c:
874 sd->bridge = BRIDGE_SPCA504B;
875 break;
876 case 0x504a:
877/* try to get the firmware as some cam answer 2.0.1.2.2 812/* try to get the firmware as some cam answer 2.0.1.2.2
878 * and should be a spca504b then overwrite that setting */ 813 * and should be a spca504b then overwrite that setting */
879 reg_r(dev, 0x20, 0, gspca_dev->usb_buf, 1); 814 reg_r(dev, 0x20, 0, gspca_dev->usb_buf, 1);
880 fw = gspca_dev->usb_buf[0]; 815 switch (gspca_dev->usb_buf[0]) {
881 if (fw == 1) { 816 case 1:
882 sd->subtype = AiptekMiniPenCam13; 817 break; /* (right bridge/subtype) */
883 sd->bridge = BRIDGE_SPCA504; 818 case 2:
884 } else if (fw == 2) {
885 sd->bridge = BRIDGE_SPCA504B;
886 } else
887 return -ENODEV;
888 break;
889 case 0x504b:
890 sd->bridge = BRIDGE_SPCA504B;
891 break;
892 case 0x5330:
893 sd->bridge = BRIDGE_SPCA533;
894 break;
895 case 0x5360:
896 sd->bridge = BRIDGE_SPCA536;
897 break;
898 case 0xffff:
899 sd->bridge = BRIDGE_SPCA504B;
900 break;
901 }
902 break;
903 case 0x052b: /* ?? Megapix */
904/* switch (product) { */
905/* case 0x1513: */
906 sd->subtype = MegapixV4;
907 sd->bridge = BRIDGE_SPCA533;
908/* break; */
909/* } */
910 break;
911 case 0x0546: /* Polaroid */
912 switch (product) {
913 case 0x3155:
914 sd->bridge = BRIDGE_SPCA533;
915 break;
916 case 0x3191:
917 case 0x3273:
918 sd->bridge = BRIDGE_SPCA504B; 819 sd->bridge = BRIDGE_SPCA504B;
820 sd->subtype = 0;
919 break; 821 break;
822 default:
823 return -ENODEV;
920 } 824 }
921 break;
922 case 0x055f: /* Mustek cameras */
923 switch (product) {
924 case 0xc211:
925 sd->bridge = BRIDGE_SPCA536;
926 break;
927 case 0xc230:
928 case 0xc232:
929 sd->bridge = BRIDGE_SPCA533;
930 break;
931 case 0xc360:
932 sd->bridge = BRIDGE_SPCA536;
933 break;
934 case 0xc420:
935 sd->bridge = BRIDGE_SPCA504;
936 break;
937 case 0xc430:
938 case 0xc440:
939 sd->bridge = BRIDGE_SPCA533;
940 break;
941 case 0xc520:
942 sd->bridge = BRIDGE_SPCA504;
943 break;
944 case 0xc530:
945 case 0xc540:
946 case 0xc630:
947 case 0xc650:
948 sd->bridge = BRIDGE_SPCA533;
949 break;
950 }
951 break;
952 case 0x05da: /* Digital Dream cameras */
953/* switch (product) { */
954/* case 0x1018: */
955 sd->bridge = BRIDGE_SPCA504B;
956/* break; */
957/* } */
958 break;
959 case 0x06d6: /* Trust */
960/* switch (product) { */
961/* case 0x0031: */
962 sd->bridge = BRIDGE_SPCA533; /* SPCA533A */
963/* break; */
964/* } */
965 break;
966 case 0x0733: /* Rebadged ViewQuest (Intel) and ViewQuest cameras */
967 switch (product) {
968 case 0x1311:
969 case 0x1314:
970 case 0x2211:
971 case 0x2221:
972 sd->bridge = BRIDGE_SPCA533;
973 break;
974 case 0x3261:
975 case 0x3281:
976 sd->bridge = BRIDGE_SPCA536;
977 break;
978 }
979 break;
980 case 0x08ca: /* Aiptek */
981 switch (product) {
982 case 0x0104:
983 case 0x0106:
984 sd->bridge = BRIDGE_SPCA533;
985 break;
986 case 0x2008:
987 sd->bridge = BRIDGE_SPCA504B;
988 break;
989 case 0x2010:
990 sd->bridge = BRIDGE_SPCA533;
991 break;
992 case 0x2016:
993 case 0x2018:
994 sd->bridge = BRIDGE_SPCA504B;
995 break;
996 case 0x2020:
997 case 0x2022:
998 sd->bridge = BRIDGE_SPCA533;
999 break;
1000 case 0x2024:
1001 sd->bridge = BRIDGE_SPCA536;
1002 break;
1003 case 0x2028:
1004 sd->bridge = BRIDGE_SPCA533;
1005 break;
1006 case 0x2040:
1007 case 0x2042:
1008 case 0x2050:
1009 case 0x2060:
1010 sd->bridge = BRIDGE_SPCA536;
1011 break;
1012 }
1013 break;
1014 case 0x0d64: /* SunPlus */
1015/* switch (product) { */
1016/* case 0x0303: */
1017 sd->bridge = BRIDGE_SPCA536;
1018/* break; */
1019/* } */
1020 break;
1021 } 825 }
1022 826
1023 cam = &gspca_dev->cam;
1024 cam->epaddr = 0x01;
1025
1026 switch (sd->bridge) { 827 switch (sd->bridge) {
1027 default: 828 default:
1028/* case BRIDGE_SPCA504B: */ 829/* case BRIDGE_SPCA504B: */
@@ -1577,65 +1378,67 @@ static const struct sd_desc sd_desc = {
1577}; 1378};
1578 1379
1579/* -- module initialisation -- */ 1380/* -- module initialisation -- */
1580#define DVNM(name) .driver_info = (kernel_ulong_t) name 1381#define BS(bridge, subtype) \
1382 .driver_info = (BRIDGE_ ## bridge << 8) \
1383 | (subtype)
1581static const __devinitdata struct usb_device_id device_table[] = { 1384static const __devinitdata struct usb_device_id device_table[] = {
1582 {USB_DEVICE(0x041e, 0x400b), DVNM("Creative PC-CAM 600")}, 1385 {USB_DEVICE(0x041e, 0x400b), BS(SPCA504C, 0)},
1583 {USB_DEVICE(0x041e, 0x4012), DVNM("PC-Cam350")}, 1386 {USB_DEVICE(0x041e, 0x4012), BS(SPCA504C, 0)},
1584 {USB_DEVICE(0x041e, 0x4013), DVNM("Creative Pccam750")}, 1387 {USB_DEVICE(0x041e, 0x4013), BS(SPCA504C, 0)},
1585 {USB_DEVICE(0x0458, 0x7006), DVNM("Genius Dsc 1.3 Smart")}, 1388 {USB_DEVICE(0x0458, 0x7006), BS(SPCA504B, 0)},
1586 {USB_DEVICE(0x0461, 0x0821), DVNM("Fujifilm MV-1")}, 1389 {USB_DEVICE(0x0461, 0x0821), BS(SPCA533, 0)},
1587 {USB_DEVICE(0x046d, 0x0905), DVNM("Logitech ClickSmart 820")}, 1390 {USB_DEVICE(0x046d, 0x0905), BS(SPCA533, LogitechClickSmart820)},
1588 {USB_DEVICE(0x046d, 0x0960), DVNM("Logitech ClickSmart 420")}, 1391 {USB_DEVICE(0x046d, 0x0960), BS(SPCA504C, LogitechClickSmart420)},
1589 {USB_DEVICE(0x0471, 0x0322), DVNM("Philips DMVC1300K")}, 1392 {USB_DEVICE(0x0471, 0x0322), BS(SPCA504B, 0)},
1590 {USB_DEVICE(0x04a5, 0x3003), DVNM("Benq DC 1300")}, 1393 {USB_DEVICE(0x04a5, 0x3003), BS(SPCA504B, 0)},
1591 {USB_DEVICE(0x04a5, 0x3008), DVNM("Benq DC 1500")}, 1394 {USB_DEVICE(0x04a5, 0x3008), BS(SPCA533, 0)},
1592 {USB_DEVICE(0x04a5, 0x300a), DVNM("Benq DC3410")}, 1395 {USB_DEVICE(0x04a5, 0x300a), BS(SPCA533, 0)},
1593 {USB_DEVICE(0x04f1, 0x1001), DVNM("JVC GC A50")}, 1396 {USB_DEVICE(0x04f1, 0x1001), BS(SPCA504B, 0)},
1594 {USB_DEVICE(0x04fc, 0x500c), DVNM("Sunplus CA500C")}, 1397 {USB_DEVICE(0x04fc, 0x500c), BS(SPCA504B, 0)},
1595 {USB_DEVICE(0x04fc, 0x504a), DVNM("Aiptek Mini PenCam 1.3")}, 1398 {USB_DEVICE(0x04fc, 0x504a), BS(SPCA504, AiptekMiniPenCam13)},
1596 {USB_DEVICE(0x04fc, 0x504b), DVNM("Maxell MaxPocket LE 1.3")}, 1399 {USB_DEVICE(0x04fc, 0x504b), BS(SPCA504B, 0)},
1597 {USB_DEVICE(0x04fc, 0x5330), DVNM("Digitrex 2110")}, 1400 {USB_DEVICE(0x04fc, 0x5330), BS(SPCA533, 0)},
1598 {USB_DEVICE(0x04fc, 0x5360), DVNM("Sunplus Generic")}, 1401 {USB_DEVICE(0x04fc, 0x5360), BS(SPCA536, 0)},
1599 {USB_DEVICE(0x04fc, 0xffff), DVNM("Pure DigitalDakota")}, 1402 {USB_DEVICE(0x04fc, 0xffff), BS(SPCA504B, 0)},
1600 {USB_DEVICE(0x052b, 0x1513), DVNM("Megapix V4")}, 1403 {USB_DEVICE(0x052b, 0x1513), BS(SPCA533, MegapixV4)},
1601 {USB_DEVICE(0x0546, 0x3155), DVNM("Polaroid PDC3070")}, 1404 {USB_DEVICE(0x0546, 0x3155), BS(SPCA533, 0)},
1602 {USB_DEVICE(0x0546, 0x3191), DVNM("Polaroid Ion 80")}, 1405 {USB_DEVICE(0x0546, 0x3191), BS(SPCA504B, 0)},
1603 {USB_DEVICE(0x0546, 0x3273), DVNM("Polaroid PDC2030")}, 1406 {USB_DEVICE(0x0546, 0x3273), BS(SPCA504B, 0)},
1604 {USB_DEVICE(0x055f, 0xc211), DVNM("Kowa Bs888e Microcamera")}, 1407 {USB_DEVICE(0x055f, 0xc211), BS(SPCA536, 0)},
1605 {USB_DEVICE(0x055f, 0xc230), DVNM("Mustek Digicam 330K")}, 1408 {USB_DEVICE(0x055f, 0xc230), BS(SPCA533, 0)},
1606 {USB_DEVICE(0x055f, 0xc232), DVNM("Mustek MDC3500")}, 1409 {USB_DEVICE(0x055f, 0xc232), BS(SPCA533, 0)},
1607 {USB_DEVICE(0x055f, 0xc360), DVNM("Mustek DV4000 Mpeg4 ")}, 1410 {USB_DEVICE(0x055f, 0xc360), BS(SPCA536, 0)},
1608 {USB_DEVICE(0x055f, 0xc420), DVNM("Mustek gSmart Mini 2")}, 1411 {USB_DEVICE(0x055f, 0xc420), BS(SPCA504, 0)},
1609 {USB_DEVICE(0x055f, 0xc430), DVNM("Mustek Gsmart LCD 2")}, 1412 {USB_DEVICE(0x055f, 0xc430), BS(SPCA533, 0)},
1610 {USB_DEVICE(0x055f, 0xc440), DVNM("Mustek DV 3000")}, 1413 {USB_DEVICE(0x055f, 0xc440), BS(SPCA533, 0)},
1611 {USB_DEVICE(0x055f, 0xc520), DVNM("Mustek gSmart Mini 3")}, 1414 {USB_DEVICE(0x055f, 0xc520), BS(SPCA504, 0)},
1612 {USB_DEVICE(0x055f, 0xc530), DVNM("Mustek Gsmart LCD 3")}, 1415 {USB_DEVICE(0x055f, 0xc530), BS(SPCA533, 0)},
1613 {USB_DEVICE(0x055f, 0xc540), DVNM("Gsmart D30")}, 1416 {USB_DEVICE(0x055f, 0xc540), BS(SPCA533, 0)},
1614 {USB_DEVICE(0x055f, 0xc630), DVNM("Mustek MDC4000")}, 1417 {USB_DEVICE(0x055f, 0xc630), BS(SPCA533, 0)},
1615 {USB_DEVICE(0x055f, 0xc650), DVNM("Mustek MDC5500Z")}, 1418 {USB_DEVICE(0x055f, 0xc650), BS(SPCA533, 0)},
1616 {USB_DEVICE(0x05da, 0x1018), DVNM("Digital Dream Enigma 1.3")}, 1419 {USB_DEVICE(0x05da, 0x1018), BS(SPCA504B, 0)},
1617 {USB_DEVICE(0x06d6, 0x0031), DVNM("Trust 610 LCD PowerC@m Zoom")}, 1420 {USB_DEVICE(0x06d6, 0x0031), BS(SPCA533, 0)},
1618 {USB_DEVICE(0x0733, 0x1311), DVNM("Digital Dream Epsilon 1.3")}, 1421 {USB_DEVICE(0x0733, 0x1311), BS(SPCA533, 0)},
1619 {USB_DEVICE(0x0733, 0x1314), DVNM("Mercury 2.1MEG Deluxe Classic Cam")}, 1422 {USB_DEVICE(0x0733, 0x1314), BS(SPCA533, 0)},
1620 {USB_DEVICE(0x0733, 0x2211), DVNM("Jenoptik jdc 21 LCD")}, 1423 {USB_DEVICE(0x0733, 0x2211), BS(SPCA533, 0)},
1621 {USB_DEVICE(0x0733, 0x2221), DVNM("Mercury Digital Pro 3.1p")}, 1424 {USB_DEVICE(0x0733, 0x2221), BS(SPCA533, 0)},
1622 {USB_DEVICE(0x0733, 0x3261), DVNM("Concord 3045 spca536a")}, 1425 {USB_DEVICE(0x0733, 0x3261), BS(SPCA536, 0)},
1623 {USB_DEVICE(0x0733, 0x3281), DVNM("Cyberpix S550V")}, 1426 {USB_DEVICE(0x0733, 0x3281), BS(SPCA536, 0)},
1624 {USB_DEVICE(0x08ca, 0x0104), DVNM("Aiptek PocketDVII 1.3")}, 1427 {USB_DEVICE(0x08ca, 0x0104), BS(SPCA533, 0)},
1625 {USB_DEVICE(0x08ca, 0x0106), DVNM("Aiptek Pocket DV3100+")}, 1428 {USB_DEVICE(0x08ca, 0x0106), BS(SPCA533, 0)},
1626 {USB_DEVICE(0x08ca, 0x2008), DVNM("Aiptek Mini PenCam 2 M")}, 1429 {USB_DEVICE(0x08ca, 0x2008), BS(SPCA504B, 0)},
1627 {USB_DEVICE(0x08ca, 0x2010), DVNM("Aiptek PocketCam 3M")}, 1430 {USB_DEVICE(0x08ca, 0x2010), BS(SPCA533, 0)},
1628 {USB_DEVICE(0x08ca, 0x2016), DVNM("Aiptek PocketCam 2 Mega")}, 1431 {USB_DEVICE(0x08ca, 0x2016), BS(SPCA504B, 0)},
1629 {USB_DEVICE(0x08ca, 0x2018), DVNM("Aiptek Pencam SD 2M")}, 1432 {USB_DEVICE(0x08ca, 0x2018), BS(SPCA504B, 0)},
1630 {USB_DEVICE(0x08ca, 0x2020), DVNM("Aiptek Slim 3000F")}, 1433 {USB_DEVICE(0x08ca, 0x2020), BS(SPCA533, 0)},
1631 {USB_DEVICE(0x08ca, 0x2022), DVNM("Aiptek Slim 3200")}, 1434 {USB_DEVICE(0x08ca, 0x2022), BS(SPCA533, 0)},
1632 {USB_DEVICE(0x08ca, 0x2024), DVNM("Aiptek DV3500 Mpeg4 ")}, 1435 {USB_DEVICE(0x08ca, 0x2024), BS(SPCA536, 0)},
1633 {USB_DEVICE(0x08ca, 0x2028), DVNM("Aiptek PocketCam4M")}, 1436 {USB_DEVICE(0x08ca, 0x2028), BS(SPCA533, 0)},
1634 {USB_DEVICE(0x08ca, 0x2040), DVNM("Aiptek PocketDV4100M")}, 1437 {USB_DEVICE(0x08ca, 0x2040), BS(SPCA536, 0)},
1635 {USB_DEVICE(0x08ca, 0x2042), DVNM("Aiptek PocketDV5100")}, 1438 {USB_DEVICE(0x08ca, 0x2042), BS(SPCA536, 0)},
1636 {USB_DEVICE(0x08ca, 0x2050), DVNM("Medion MD 41437")}, 1439 {USB_DEVICE(0x08ca, 0x2050), BS(SPCA536, 0)},
1637 {USB_DEVICE(0x08ca, 0x2060), DVNM("Aiptek PocketDV5300")}, 1440 {USB_DEVICE(0x08ca, 0x2060), BS(SPCA536, 0)},
1638 {USB_DEVICE(0x0d64, 0x0303), DVNM("Sunplus FashionCam DXG")}, 1441 {USB_DEVICE(0x0d64, 0x0303), BS(SPCA536, 0)},
1639 {} 1442 {}
1640}; 1443};
1641MODULE_DEVICE_TABLE(usb, device_table); 1444MODULE_DEVICE_TABLE(usb, device_table);