aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/em28xx/em28xx-cards.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video/em28xx/em28xx-cards.c')
-rw-r--r--drivers/media/video/em28xx/em28xx-cards.c49
1 files changed, 44 insertions, 5 deletions
diff --git a/drivers/media/video/em28xx/em28xx-cards.c b/drivers/media/video/em28xx/em28xx-cards.c
index 69fcea82d01c..4e37375decf5 100644
--- a/drivers/media/video/em28xx/em28xx-cards.c
+++ b/drivers/media/video/em28xx/em28xx-cards.c
@@ -100,6 +100,13 @@ static struct em28xx_reg_seq hauppauge_wintv_hvr_900_digital[] = {
100 { -1, -1, -1, -1}, 100 { -1, -1, -1, -1},
101}; 101};
102 102
103/* Board Hauppauge WinTV HVR 900 (R2) digital */
104static struct em28xx_reg_seq hauppauge_wintv_hvr_900R2_digital[] = {
105 {EM28XX_R08_GPIO, 0x2e, ~EM_GPIO_4, 10},
106 {EM2880_R04_GPO, 0x0c, 0x0f, 10},
107 { -1, -1, -1, -1},
108};
109
103/* Boards - EM2880 MSI DIGIVOX AD and EM2880_BOARD_MSI_DIGIVOX_AD_II */ 110/* Boards - EM2880 MSI DIGIVOX AD and EM2880_BOARD_MSI_DIGIVOX_AD_II */
104static struct em28xx_reg_seq em2880_msi_digivox_ad_analog[] = { 111static struct em28xx_reg_seq em2880_msi_digivox_ad_analog[] = {
105 {EM28XX_R08_GPIO, 0x69, ~EM_GPIO_4, 10}, 112 {EM28XX_R08_GPIO, 0x69, ~EM_GPIO_4, 10},
@@ -282,6 +289,16 @@ static struct em28xx_reg_seq leadership_reset[] = {
282 { -1, -1, -1, -1}, 289 { -1, -1, -1, -1},
283}; 290};
284 291
292/* 2013:024f PCTV Systems nanoStick T2 290e
293 * GPIO_6 - demod reset
294 * GPIO_7 - LED
295 */
296static struct em28xx_reg_seq pctv_290e[] = {
297 {EM2874_R80_GPIO, 0x00, 0xff, 80},
298 {EM2874_R80_GPIO, 0x40, 0xff, 80}, /* GPIO_6 = 1 */
299 {EM2874_R80_GPIO, 0xc0, 0xff, 80}, /* GPIO_7 = 1 */
300 {-1, -1, -1, -1},
301};
285 302
286/* 303/*
287 * Board definitions 304 * Board definitions
@@ -859,6 +876,8 @@ struct em28xx_board em28xx_boards[] = {
859 .tuner_type = TUNER_XC2028, 876 .tuner_type = TUNER_XC2028,
860 .tuner_gpio = default_tuner_gpio, 877 .tuner_gpio = default_tuner_gpio,
861 .mts_firmware = 1, 878 .mts_firmware = 1,
879 .has_dvb = 1,
880 .dvb_gpio = hauppauge_wintv_hvr_900R2_digital,
862 .ir_codes = RC_MAP_HAUPPAUGE, 881 .ir_codes = RC_MAP_HAUPPAUGE,
863 .decoder = EM28XX_TVP5150, 882 .decoder = EM28XX_TVP5150,
864 .input = { { 883 .input = { {
@@ -1448,12 +1467,14 @@ struct em28xx_board em28xx_boards[] = {
1448 .gpio = pinnacle_hybrid_pro_analog, 1467 .gpio = pinnacle_hybrid_pro_analog,
1449 } }, 1468 } },
1450 }, 1469 },
1451 [EM2882_BOARD_PINNACLE_HYBRID_PRO] = { 1470 [EM2882_BOARD_PINNACLE_HYBRID_PRO_330E] = {
1452 .name = "Pinnacle Hybrid Pro (2)", 1471 .name = "Pinnacle Hybrid Pro (330e)",
1453 .valid = EM28XX_BOARD_NOT_VALIDATED,
1454 .tuner_type = TUNER_XC2028, 1472 .tuner_type = TUNER_XC2028,
1455 .tuner_gpio = default_tuner_gpio, 1473 .tuner_gpio = default_tuner_gpio,
1456 .mts_firmware = 1, 1474 .mts_firmware = 1,
1475 .has_dvb = 1,
1476 .dvb_gpio = hauppauge_wintv_hvr_900R2_digital,
1477 .ir_codes = RC_MAP_PINNACLE_PCTV_HD,
1457 .decoder = EM28XX_TVP5150, 1478 .decoder = EM28XX_TVP5150,
1458 .input = { { 1479 .input = { {
1459 .type = EM28XX_VMUX_TELEVISION, 1480 .type = EM28XX_VMUX_TELEVISION,
@@ -1749,6 +1770,17 @@ struct em28xx_board em28xx_boards[] = {
1749 .dvb_gpio = kworld_a340_digital, 1770 .dvb_gpio = kworld_a340_digital,
1750 .tuner_gpio = default_tuner_gpio, 1771 .tuner_gpio = default_tuner_gpio,
1751 }, 1772 },
1773 /* 2013:024f PCTV Systems nanoStick T2 290e.
1774 * Empia EM28174, Sony CXD2820R and NXP TDA18271HD/C2 */
1775 [EM28174_BOARD_PCTV_290E] = {
1776 .i2c_speed = EM2874_I2C_SECONDARY_BUS_SELECT |
1777 EM28XX_I2C_CLK_WAIT_ENABLE | EM28XX_I2C_FREQ_100_KHZ,
1778 .xclk = EM28XX_XCLK_FREQUENCY_12MHZ,
1779 .name = "PCTV Systems nanoStick T2 290e",
1780 .tuner_type = TUNER_ABSENT,
1781 .tuner_gpio = pctv_290e,
1782 .has_dvb = 1,
1783 },
1752}; 1784};
1753const unsigned int em28xx_bcount = ARRAY_SIZE(em28xx_boards); 1785const unsigned int em28xx_bcount = ARRAY_SIZE(em28xx_boards);
1754 1786
@@ -1863,7 +1895,7 @@ struct usb_device_id em28xx_id_table[] = {
1863 { USB_DEVICE(0x2304, 0x021a), 1895 { USB_DEVICE(0x2304, 0x021a),
1864 .driver_info = EM2820_BOARD_PINNACLE_DVC_90 }, 1896 .driver_info = EM2820_BOARD_PINNACLE_DVC_90 },
1865 { USB_DEVICE(0x2304, 0x0226), 1897 { USB_DEVICE(0x2304, 0x0226),
1866 .driver_info = EM2882_BOARD_PINNACLE_HYBRID_PRO }, 1898 .driver_info = EM2882_BOARD_PINNACLE_HYBRID_PRO_330E },
1867 { USB_DEVICE(0x2304, 0x0227), 1899 { USB_DEVICE(0x2304, 0x0227),
1868 .driver_info = EM2880_BOARD_PINNACLE_PCTV_HD_PRO }, 1900 .driver_info = EM2880_BOARD_PINNACLE_PCTV_HD_PRO },
1869 { USB_DEVICE(0x0413, 0x6023), 1901 { USB_DEVICE(0x0413, 0x6023),
@@ -1876,6 +1908,8 @@ struct usb_device_id em28xx_id_table[] = {
1876 .driver_info = EM2860_BOARD_GADMEI_UTV330 }, 1908 .driver_info = EM2860_BOARD_GADMEI_UTV330 },
1877 { USB_DEVICE(0x1b80, 0xa340), 1909 { USB_DEVICE(0x1b80, 0xa340),
1878 .driver_info = EM2870_BOARD_KWORLD_A340 }, 1910 .driver_info = EM2870_BOARD_KWORLD_A340 },
1911 { USB_DEVICE(0x2013, 0x024f),
1912 .driver_info = EM28174_BOARD_PCTV_290E },
1879 { }, 1913 { },
1880}; 1914};
1881MODULE_DEVICE_TABLE(usb, em28xx_id_table); 1915MODULE_DEVICE_TABLE(usb, em28xx_id_table);
@@ -2229,7 +2263,7 @@ static void em28xx_setup_xc3028(struct em28xx *dev, struct xc2028_ctrl *ctl)
2229 ctl->demod = XC3028_FE_ZARLINK456; 2263 ctl->demod = XC3028_FE_ZARLINK456;
2230 break; 2264 break;
2231 case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900_R2: 2265 case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900_R2:
2232 /* djh - Not sure which demod we need here */ 2266 case EM2882_BOARD_PINNACLE_HYBRID_PRO_330E:
2233 ctl->demod = XC3028_FE_DEFAULT; 2267 ctl->demod = XC3028_FE_DEFAULT;
2234 break; 2268 break;
2235 case EM2880_BOARD_AMD_ATI_TV_WONDER_HD_600: 2269 case EM2880_BOARD_AMD_ATI_TV_WONDER_HD_600:
@@ -2799,6 +2833,11 @@ static int em28xx_init_dev(struct em28xx **devhandle, struct usb_device *udev,
2799 dev->reg_gpio_num = EM2874_R80_GPIO; 2833 dev->reg_gpio_num = EM2874_R80_GPIO;
2800 dev->wait_after_write = 0; 2834 dev->wait_after_write = 0;
2801 break; 2835 break;
2836 case CHIP_ID_EM28174:
2837 em28xx_info("chip ID is em28174\n");
2838 dev->reg_gpio_num = EM2874_R80_GPIO;
2839 dev->wait_after_write = 0;
2840 break;
2802 case CHIP_ID_EM2883: 2841 case CHIP_ID_EM2883:
2803 em28xx_info("chip ID is em2882/em2883\n"); 2842 em28xx_info("chip ID is em2882/em2883\n");
2804 dev->wait_after_write = 0; 2843 dev->wait_after_write = 0;