diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-15 15:49:56 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-15 15:49:56 -0500 |
commit | 122804ecb59493fbb4d31b3ba9ac59faaf45276f (patch) | |
tree | cff4d8a158c412e4a8d3abc8d91bb0eb52b01c9a /drivers/media/dvb/dvb-usb/dw2102.c | |
parent | 16008d641670571ff4cd750b416c7caf2d89f467 (diff) | |
parent | 126400033940afb658123517a2e80eb68259fbd7 (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.c | 93 |
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 | ||
1438 | enum 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 | |||
1438 | static struct usb_device_id dw2102_table[] = { | 1456 | static 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 = { | |||
1770 | struct dvb_usb_device_properties *p1100; | 1788 | struct dvb_usb_device_properties *p1100; |
1771 | static struct dvb_usb_device_description d1100 = { | 1789 | static 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 | ||
1777 | struct dvb_usb_device_properties *s660; | 1795 | struct dvb_usb_device_properties *s660; |
1778 | static struct dvb_usb_device_description d660 = { | 1796 | static 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 | ||
1784 | static struct dvb_usb_device_description d480_1 = { | 1802 | static 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 | ||
1790 | static struct dvb_usb_device_description d480_2 = { | 1808 | static 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 | ||
1796 | struct dvb_usb_device_properties *p7500; | 1814 | struct dvb_usb_device_properties *p7500; |
1797 | static struct dvb_usb_device_description d7500 = { | 1815 | static 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 = { | |||
1859 | static int dw2102_probe(struct usb_interface *intf, | 1877 | static 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; |