aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb/dvb-usb/dw2102.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-01-15 15:49:56 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2012-01-15 15:49:56 -0500
commit122804ecb59493fbb4d31b3ba9ac59faaf45276f (patch)
treecff4d8a158c412e4a8d3abc8d91bb0eb52b01c9a /drivers/media/dvb/dvb-usb/dw2102.c
parent16008d641670571ff4cd750b416c7caf2d89f467 (diff)
parent126400033940afb658123517a2e80eb68259fbd7 (diff)
Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media
* 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (655 commits) [media] revert patch: HDIC HD29L2 DMB-TH USB2.0 reference design driver mb86a20s: Add a few more register settings at the init seq mb86a20s: Group registers into the same line [media] [PATCH] don't reset the delivery system on DTV_CLEAR [media] [BUG] it913x-fe fix typo error making SNR levels unstable [media] cx23885: Query the CX25840 during enum_input for status [media] cx25840: Add support for g_input_status [media] rc-videomate-m1f.c Rename to match remote controler name [media] drivers: media: au0828: Fix dependency for VIDEO_AU0828 [media] convert drivers/media/* to use module_platform_driver() [media] drivers: video: cx231xx: Fix dependency for VIDEO_CX231XX_DVB [media] Exynos4 JPEG codec v4l2 driver [media] doc: v4l: selection: choose pixels as units for selection rectangles [media] v4l: s5p-tv: mixer: fix setup of VP scaling [media] v4l: s5p-tv: mixer: add support for selection API [media] v4l: emulate old crop API using extended crop/compose API [media] doc: v4l: add documentation for selection API [media] doc: v4l: add binary images for selection API [media] v4l: add support for selection api [media] hd29l2: fix review findings ...
Diffstat (limited to 'drivers/media/dvb/dvb-usb/dw2102.c')
-rw-r--r--drivers/media/dvb/dvb-usb/dw2102.c93
1 files changed, 54 insertions, 39 deletions
diff --git a/drivers/media/dvb/dvb-usb/dw2102.c b/drivers/media/dvb/dvb-usb/dw2102.c
index ff941d20e6b7..451c5a7adfb2 100644
--- a/drivers/media/dvb/dvb-usb/dw2102.c
+++ b/drivers/media/dvb/dvb-usb/dw2102.c
@@ -1435,22 +1435,40 @@ static int dw2102_rc_query(struct dvb_usb_device *d, u32 *event, int *state)
1435 return 0; 1435 return 0;
1436} 1436}
1437 1437
1438enum dw2102_table_entry {
1439 CYPRESS_DW2102,
1440 CYPRESS_DW2101,
1441 CYPRESS_DW2104,
1442 TEVII_S650,
1443 TERRATEC_CINERGY_S,
1444 CYPRESS_DW3101,
1445 TEVII_S630,
1446 PROF_1100,
1447 TEVII_S660,
1448 PROF_7500,
1449 GENIATECH_SU3000,
1450 TERRATEC_CINERGY_S2,
1451 TEVII_S480_1,
1452 TEVII_S480_2,
1453 X3M_SPC1400HD,
1454};
1455
1438static struct usb_device_id dw2102_table[] = { 1456static struct usb_device_id dw2102_table[] = {
1439 {USB_DEVICE(USB_VID_CYPRESS, USB_PID_DW2102)}, 1457 [CYPRESS_DW2102] = {USB_DEVICE(USB_VID_CYPRESS, USB_PID_DW2102)},
1440 {USB_DEVICE(USB_VID_CYPRESS, 0x2101)}, 1458 [CYPRESS_DW2101] = {USB_DEVICE(USB_VID_CYPRESS, 0x2101)},
1441 {USB_DEVICE(USB_VID_CYPRESS, USB_PID_DW2104)}, 1459 [CYPRESS_DW2104] = {USB_DEVICE(USB_VID_CYPRESS, USB_PID_DW2104)},
1442 {USB_DEVICE(0x9022, USB_PID_TEVII_S650)}, 1460 [TEVII_S650] = {USB_DEVICE(0x9022, USB_PID_TEVII_S650)},
1443 {USB_DEVICE(USB_VID_TERRATEC, USB_PID_CINERGY_S)}, 1461 [TERRATEC_CINERGY_S] = {USB_DEVICE(USB_VID_TERRATEC, USB_PID_CINERGY_S)},
1444 {USB_DEVICE(USB_VID_CYPRESS, USB_PID_DW3101)}, 1462 [CYPRESS_DW3101] = {USB_DEVICE(USB_VID_CYPRESS, USB_PID_DW3101)},
1445 {USB_DEVICE(0x9022, USB_PID_TEVII_S630)}, 1463 [TEVII_S630] = {USB_DEVICE(0x9022, USB_PID_TEVII_S630)},
1446 {USB_DEVICE(0x3011, USB_PID_PROF_1100)}, 1464 [PROF_1100] = {USB_DEVICE(0x3011, USB_PID_PROF_1100)},
1447 {USB_DEVICE(0x9022, USB_PID_TEVII_S660)}, 1465 [TEVII_S660] = {USB_DEVICE(0x9022, USB_PID_TEVII_S660)},
1448 {USB_DEVICE(0x3034, 0x7500)}, 1466 [PROF_7500] = {USB_DEVICE(0x3034, 0x7500)},
1449 {USB_DEVICE(0x1f4d, 0x3000)}, 1467 [GENIATECH_SU3000] = {USB_DEVICE(0x1f4d, 0x3000)},
1450 {USB_DEVICE(USB_VID_TERRATEC, 0x00a8)}, 1468 [TERRATEC_CINERGY_S2] = {USB_DEVICE(USB_VID_TERRATEC, 0x00a8)},
1451 {USB_DEVICE(0x9022, USB_PID_TEVII_S480_1)}, 1469 [TEVII_S480_1] = {USB_DEVICE(0x9022, USB_PID_TEVII_S480_1)},
1452 {USB_DEVICE(0x9022, USB_PID_TEVII_S480_2)}, 1470 [TEVII_S480_2] = {USB_DEVICE(0x9022, USB_PID_TEVII_S480_2)},
1453 {USB_DEVICE(0x1f4d, 0x3100)}, 1471 [X3M_SPC1400HD] = {USB_DEVICE(0x1f4d, 0x3100)},
1454 { } 1472 { }
1455}; 1473};
1456 1474
@@ -1610,15 +1628,15 @@ static struct dvb_usb_device_properties dw2102_properties = {
1610 .num_device_descs = 3, 1628 .num_device_descs = 3,
1611 .devices = { 1629 .devices = {
1612 {"DVBWorld DVB-S 2102 USB2.0", 1630 {"DVBWorld DVB-S 2102 USB2.0",
1613 {&dw2102_table[0], NULL}, 1631 {&dw2102_table[CYPRESS_DW2102], NULL},
1614 {NULL}, 1632 {NULL},
1615 }, 1633 },
1616 {"DVBWorld DVB-S 2101 USB2.0", 1634 {"DVBWorld DVB-S 2101 USB2.0",
1617 {&dw2102_table[1], NULL}, 1635 {&dw2102_table[CYPRESS_DW2101], NULL},
1618 {NULL}, 1636 {NULL},
1619 }, 1637 },
1620 {"TerraTec Cinergy S USB", 1638 {"TerraTec Cinergy S USB",
1621 {&dw2102_table[4], NULL}, 1639 {&dw2102_table[TERRATEC_CINERGY_S], NULL},
1622 {NULL}, 1640 {NULL},
1623 }, 1641 },
1624 } 1642 }
@@ -1664,11 +1682,11 @@ static struct dvb_usb_device_properties dw2104_properties = {
1664 .num_device_descs = 2, 1682 .num_device_descs = 2,
1665 .devices = { 1683 .devices = {
1666 { "DVBWorld DW2104 USB2.0", 1684 { "DVBWorld DW2104 USB2.0",
1667 {&dw2102_table[2], NULL}, 1685 {&dw2102_table[CYPRESS_DW2104], NULL},
1668 {NULL}, 1686 {NULL},
1669 }, 1687 },
1670 { "TeVii S650 USB2.0", 1688 { "TeVii S650 USB2.0",
1671 {&dw2102_table[3], NULL}, 1689 {&dw2102_table[TEVII_S650], NULL},
1672 {NULL}, 1690 {NULL},
1673 }, 1691 },
1674 } 1692 }
@@ -1715,7 +1733,7 @@ static struct dvb_usb_device_properties dw3101_properties = {
1715 .num_device_descs = 1, 1733 .num_device_descs = 1,
1716 .devices = { 1734 .devices = {
1717 { "DVBWorld DVB-C 3101 USB2.0", 1735 { "DVBWorld DVB-C 3101 USB2.0",
1718 {&dw2102_table[5], NULL}, 1736 {&dw2102_table[CYPRESS_DW3101], NULL},
1719 {NULL}, 1737 {NULL},
1720 }, 1738 },
1721 } 1739 }
@@ -1761,7 +1779,7 @@ static struct dvb_usb_device_properties s6x0_properties = {
1761 .num_device_descs = 1, 1779 .num_device_descs = 1,
1762 .devices = { 1780 .devices = {
1763 {"TeVii S630 USB", 1781 {"TeVii S630 USB",
1764 {&dw2102_table[6], NULL}, 1782 {&dw2102_table[TEVII_S630], NULL},
1765 {NULL}, 1783 {NULL},
1766 }, 1784 },
1767 } 1785 }
@@ -1770,33 +1788,33 @@ static struct dvb_usb_device_properties s6x0_properties = {
1770struct dvb_usb_device_properties *p1100; 1788struct dvb_usb_device_properties *p1100;
1771static struct dvb_usb_device_description d1100 = { 1789static struct dvb_usb_device_description d1100 = {
1772 "Prof 1100 USB ", 1790 "Prof 1100 USB ",
1773 {&dw2102_table[7], NULL}, 1791 {&dw2102_table[PROF_1100], NULL},
1774 {NULL}, 1792 {NULL},
1775}; 1793};
1776 1794
1777struct dvb_usb_device_properties *s660; 1795struct dvb_usb_device_properties *s660;
1778static struct dvb_usb_device_description d660 = { 1796static struct dvb_usb_device_description d660 = {
1779 "TeVii S660 USB", 1797 "TeVii S660 USB",
1780 {&dw2102_table[8], NULL}, 1798 {&dw2102_table[TEVII_S660], NULL},
1781 {NULL}, 1799 {NULL},
1782}; 1800};
1783 1801
1784static struct dvb_usb_device_description d480_1 = { 1802static struct dvb_usb_device_description d480_1 = {
1785 "TeVii S480.1 USB", 1803 "TeVii S480.1 USB",
1786 {&dw2102_table[12], NULL}, 1804 {&dw2102_table[TEVII_S480_1], NULL},
1787 {NULL}, 1805 {NULL},
1788}; 1806};
1789 1807
1790static struct dvb_usb_device_description d480_2 = { 1808static struct dvb_usb_device_description d480_2 = {
1791 "TeVii S480.2 USB", 1809 "TeVii S480.2 USB",
1792 {&dw2102_table[13], NULL}, 1810 {&dw2102_table[TEVII_S480_2], NULL},
1793 {NULL}, 1811 {NULL},
1794}; 1812};
1795 1813
1796struct dvb_usb_device_properties *p7500; 1814struct dvb_usb_device_properties *p7500;
1797static struct dvb_usb_device_description d7500 = { 1815static struct dvb_usb_device_description d7500 = {
1798 "Prof 7500 USB DVB-S2", 1816 "Prof 7500 USB DVB-S2",
1799 {&dw2102_table[9], NULL}, 1817 {&dw2102_table[PROF_7500], NULL},
1800 {NULL}, 1818 {NULL},
1801}; 1819};
1802 1820
@@ -1842,15 +1860,15 @@ static struct dvb_usb_device_properties su3000_properties = {
1842 .num_device_descs = 3, 1860 .num_device_descs = 3,
1843 .devices = { 1861 .devices = {
1844 { "SU3000HD DVB-S USB2.0", 1862 { "SU3000HD DVB-S USB2.0",
1845 { &dw2102_table[10], NULL }, 1863 { &dw2102_table[GENIATECH_SU3000], NULL },
1846 { NULL }, 1864 { NULL },
1847 }, 1865 },
1848 { "Terratec Cinergy S2 USB HD", 1866 { "Terratec Cinergy S2 USB HD",
1849 { &dw2102_table[11], NULL }, 1867 { &dw2102_table[TERRATEC_CINERGY_S2], NULL },
1850 { NULL }, 1868 { NULL },
1851 }, 1869 },
1852 { "X3M TV SPC1400HD PCI", 1870 { "X3M TV SPC1400HD PCI",
1853 { &dw2102_table[14], NULL }, 1871 { &dw2102_table[X3M_SPC1400HD], NULL },
1854 { NULL }, 1872 { NULL },
1855 }, 1873 },
1856 } 1874 }
@@ -1859,12 +1877,11 @@ static struct dvb_usb_device_properties su3000_properties = {
1859static int dw2102_probe(struct usb_interface *intf, 1877static int dw2102_probe(struct usb_interface *intf,
1860 const struct usb_device_id *id) 1878 const struct usb_device_id *id)
1861{ 1879{
1862 p1100 = kzalloc(sizeof(struct dvb_usb_device_properties), GFP_KERNEL); 1880 p1100 = kmemdup(&s6x0_properties,
1881 sizeof(struct dvb_usb_device_properties), GFP_KERNEL);
1863 if (!p1100) 1882 if (!p1100)
1864 return -ENOMEM; 1883 return -ENOMEM;
1865 /* copy default structure */ 1884 /* copy default structure */
1866 memcpy(p1100, &s6x0_properties,
1867 sizeof(struct dvb_usb_device_properties));
1868 /* fill only different fields */ 1885 /* fill only different fields */
1869 p1100->firmware = "dvb-usb-p1100.fw"; 1886 p1100->firmware = "dvb-usb-p1100.fw";
1870 p1100->devices[0] = d1100; 1887 p1100->devices[0] = d1100;
@@ -1872,13 +1889,12 @@ static int dw2102_probe(struct usb_interface *intf,
1872 p1100->rc.legacy.rc_map_size = ARRAY_SIZE(rc_map_tbs_table); 1889 p1100->rc.legacy.rc_map_size = ARRAY_SIZE(rc_map_tbs_table);
1873 p1100->adapter->fe[0].frontend_attach = stv0288_frontend_attach; 1890 p1100->adapter->fe[0].frontend_attach = stv0288_frontend_attach;
1874 1891
1875 s660 = kzalloc(sizeof(struct dvb_usb_device_properties), GFP_KERNEL); 1892 s660 = kmemdup(&s6x0_properties,
1893 sizeof(struct dvb_usb_device_properties), GFP_KERNEL);
1876 if (!s660) { 1894 if (!s660) {
1877 kfree(p1100); 1895 kfree(p1100);
1878 return -ENOMEM; 1896 return -ENOMEM;
1879 } 1897 }
1880 memcpy(s660, &s6x0_properties,
1881 sizeof(struct dvb_usb_device_properties));
1882 s660->firmware = "dvb-usb-s660.fw"; 1898 s660->firmware = "dvb-usb-s660.fw";
1883 s660->num_device_descs = 3; 1899 s660->num_device_descs = 3;
1884 s660->devices[0] = d660; 1900 s660->devices[0] = d660;
@@ -1886,14 +1902,13 @@ static int dw2102_probe(struct usb_interface *intf,
1886 s660->devices[2] = d480_2; 1902 s660->devices[2] = d480_2;
1887 s660->adapter->fe[0].frontend_attach = ds3000_frontend_attach; 1903 s660->adapter->fe[0].frontend_attach = ds3000_frontend_attach;
1888 1904
1889 p7500 = kzalloc(sizeof(struct dvb_usb_device_properties), GFP_KERNEL); 1905 p7500 = kmemdup(&s6x0_properties,
1906 sizeof(struct dvb_usb_device_properties), GFP_KERNEL);
1890 if (!p7500) { 1907 if (!p7500) {
1891 kfree(p1100); 1908 kfree(p1100);
1892 kfree(s660); 1909 kfree(s660);
1893 return -ENOMEM; 1910 return -ENOMEM;
1894 } 1911 }
1895 memcpy(p7500, &s6x0_properties,
1896 sizeof(struct dvb_usb_device_properties));
1897 p7500->firmware = "dvb-usb-p7500.fw"; 1912 p7500->firmware = "dvb-usb-p7500.fw";
1898 p7500->devices[0] = d7500; 1913 p7500->devices[0] = d7500;
1899 p7500->rc.legacy.rc_map_table = rc_map_tbs_table; 1914 p7500->rc.legacy.rc_map_table = rc_map_tbs_table;