diff options
Diffstat (limited to 'drivers/media/video/em28xx/em28xx-cards.c')
-rw-r--r-- | drivers/media/video/em28xx/em28xx-cards.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/drivers/media/video/em28xx/em28xx-cards.c b/drivers/media/video/em28xx/em28xx-cards.c index 00cc791a9e44..c43fdb9bc888 100644 --- a/drivers/media/video/em28xx/em28xx-cards.c +++ b/drivers/media/video/em28xx/em28xx-cards.c | |||
@@ -139,6 +139,24 @@ static struct em28xx_reg_seq kworld_330u_digital[] = { | |||
139 | { -1, -1, -1, -1}, | 139 | { -1, -1, -1, -1}, |
140 | }; | 140 | }; |
141 | 141 | ||
142 | /* Evga inDtube | ||
143 | GPIO0 - Enable digital power (s5h1409) - low to enable | ||
144 | GPIO1 - Enable analog power (tvp5150/emp202) - low to enable | ||
145 | GPIO4 - xc3028 reset | ||
146 | GOP3 - s5h1409 reset | ||
147 | */ | ||
148 | static struct em28xx_reg_seq evga_indtube_analog[] = { | ||
149 | {EM28XX_R08_GPIO, 0x79, 0xff, 60}, | ||
150 | { -1, -1, -1, -1}, | ||
151 | }; | ||
152 | |||
153 | static struct em28xx_reg_seq evga_indtube_digital[] = { | ||
154 | {EM28XX_R08_GPIO, 0x7a, 0xff, 1}, | ||
155 | {EM2880_R04_GPO, 0x04, 0xff, 10}, | ||
156 | {EM2880_R04_GPO, 0x0c, 0xff, 1}, | ||
157 | { -1, -1, -1, -1}, | ||
158 | }; | ||
159 | |||
142 | /* Callback for the most boards */ | 160 | /* Callback for the most boards */ |
143 | static struct em28xx_reg_seq default_tuner_gpio[] = { | 161 | static struct em28xx_reg_seq default_tuner_gpio[] = { |
144 | {EM28XX_R08_GPIO, EM_GPIO_4, EM_GPIO_4, 10}, | 162 | {EM28XX_R08_GPIO, EM_GPIO_4, EM_GPIO_4, 10}, |
@@ -1449,6 +1467,33 @@ struct em28xx_board em28xx_boards[] = { | |||
1449 | .gpio = terratec_av350_unmute_gpio, | 1467 | .gpio = terratec_av350_unmute_gpio, |
1450 | } }, | 1468 | } }, |
1451 | }, | 1469 | }, |
1470 | [EM2882_BOARD_EVGA_INDTUBE] = { | ||
1471 | .name = "Evga inDtube", | ||
1472 | .tuner_type = TUNER_XC2028, | ||
1473 | .tuner_gpio = default_tuner_gpio, | ||
1474 | .decoder = EM28XX_TVP5150, | ||
1475 | .xclk = EM28XX_XCLK_FREQUENCY_12MHZ, /* NEC IR */ | ||
1476 | .mts_firmware = 1, | ||
1477 | .has_dvb = 1, | ||
1478 | .dvb_gpio = evga_indtube_digital, | ||
1479 | .ir_codes = ir_codes_evga_indtube, | ||
1480 | .input = { { | ||
1481 | .type = EM28XX_VMUX_TELEVISION, | ||
1482 | .vmux = TVP5150_COMPOSITE0, | ||
1483 | .amux = EM28XX_AMUX_VIDEO, | ||
1484 | .gpio = evga_indtube_analog, | ||
1485 | }, { | ||
1486 | .type = EM28XX_VMUX_COMPOSITE1, | ||
1487 | .vmux = TVP5150_COMPOSITE1, | ||
1488 | .amux = EM28XX_AMUX_LINE_IN, | ||
1489 | .gpio = evga_indtube_analog, | ||
1490 | }, { | ||
1491 | .type = EM28XX_VMUX_SVIDEO, | ||
1492 | .vmux = TVP5150_SVIDEO, | ||
1493 | .amux = EM28XX_AMUX_LINE_IN, | ||
1494 | .gpio = evga_indtube_analog, | ||
1495 | } }, | ||
1496 | }, | ||
1452 | }; | 1497 | }; |
1453 | const unsigned int em28xx_bcount = ARRAY_SIZE(em28xx_boards); | 1498 | const unsigned int em28xx_bcount = ARRAY_SIZE(em28xx_boards); |
1454 | 1499 | ||
@@ -1571,6 +1616,7 @@ static struct em28xx_hash_table em28xx_eeprom_hash[] = { | |||
1571 | {0x72cc5a8b, EM2820_BOARD_PROLINK_PLAYTV_BOX4_USB2, TUNER_YMEC_TVF_5533MF}, | 1616 | {0x72cc5a8b, EM2820_BOARD_PROLINK_PLAYTV_BOX4_USB2, TUNER_YMEC_TVF_5533MF}, |
1572 | {0x966a0441, EM2880_BOARD_KWORLD_DVB_310U, TUNER_XC2028}, | 1617 | {0x966a0441, EM2880_BOARD_KWORLD_DVB_310U, TUNER_XC2028}, |
1573 | {0x9567eb1a, EM2880_BOARD_EMPIRE_DUAL_TV, TUNER_XC2028}, | 1618 | {0x9567eb1a, EM2880_BOARD_EMPIRE_DUAL_TV, TUNER_XC2028}, |
1619 | {0xcee44a99, EM2882_BOARD_EVGA_INDTUBE, TUNER_XC2028}, | ||
1574 | }; | 1620 | }; |
1575 | 1621 | ||
1576 | /* I2C devicelist hash table for devices with generic USB IDs */ | 1622 | /* I2C devicelist hash table for devices with generic USB IDs */ |
@@ -1834,6 +1880,10 @@ static void em28xx_setup_xc3028(struct em28xx *dev, struct xc2028_ctrl *ctl) | |||
1834 | ctl->demod = XC3028_FE_CHINA; | 1880 | ctl->demod = XC3028_FE_CHINA; |
1835 | ctl->fname = XC2028_DEFAULT_FIRMWARE; | 1881 | ctl->fname = XC2028_DEFAULT_FIRMWARE; |
1836 | break; | 1882 | break; |
1883 | case EM2882_BOARD_EVGA_INDTUBE: | ||
1884 | ctl->demod = XC3028_FE_CHINA; | ||
1885 | ctl->fname = XC3028L_DEFAULT_FIRMWARE; | ||
1886 | break; | ||
1837 | default: | 1887 | default: |
1838 | ctl->demod = XC3028_FE_OREN538; | 1888 | ctl->demod = XC3028_FE_OREN538; |
1839 | } | 1889 | } |
@@ -2101,6 +2151,12 @@ void em28xx_card_setup(struct em28xx *dev) | |||
2101 | case EM2880_BOARD_MSI_DIGIVOX_AD: | 2151 | case EM2880_BOARD_MSI_DIGIVOX_AD: |
2102 | if (!em28xx_hint_board(dev)) | 2152 | if (!em28xx_hint_board(dev)) |
2103 | em28xx_set_model(dev); | 2153 | em28xx_set_model(dev); |
2154 | |||
2155 | /* In cases where we had to use a board hint, the call to | ||
2156 | em28xx_set_mode() in em28xx_pre_card_setup() was a no-op, | ||
2157 | so make the call now so the analog GPIOs are set properly | ||
2158 | before probing the i2c bus. */ | ||
2159 | em28xx_set_mode(dev, EM28XX_ANALOG_MODE); | ||
2104 | break; | 2160 | break; |
2105 | } | 2161 | } |
2106 | 2162 | ||