diff options
Diffstat (limited to 'drivers/media/video/cx88/cx88-cards.c')
-rw-r--r-- | drivers/media/video/cx88/cx88-cards.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c index d484e5ce579c..3ba31572c657 100644 --- a/drivers/media/video/cx88/cx88-cards.c +++ b/drivers/media/video/cx88/cx88-cards.c | |||
@@ -1375,6 +1375,32 @@ static const struct cx88_board cx88_boards[] = { | |||
1375 | .gpio0 = 0x07fa, | 1375 | .gpio0 = 0x07fa, |
1376 | }}, | 1376 | }}, |
1377 | }, | 1377 | }, |
1378 | [CX88_BOARD_PINNACLE_PCTV_HD_800i] = { | ||
1379 | .name = "Pinnacle PCTV HD 800i", | ||
1380 | .tuner_type = TUNER_XC5000, | ||
1381 | .radio_type = UNSET, | ||
1382 | .tuner_addr = ADDR_UNSET, | ||
1383 | .radio_addr = ADDR_UNSET, | ||
1384 | .input = {{ | ||
1385 | .type = CX88_VMUX_TELEVISION, | ||
1386 | .vmux = 0, | ||
1387 | .gpio0 = 0x04fb, | ||
1388 | .gpio1 = 0x10ff, | ||
1389 | },{ | ||
1390 | .type = CX88_VMUX_COMPOSITE1, | ||
1391 | .vmux = 1, | ||
1392 | .gpio0 = 0x04fb, | ||
1393 | .gpio1 = 0x10ef, | ||
1394 | .audioroute = 1, | ||
1395 | },{ | ||
1396 | .type = CX88_VMUX_SVIDEO, | ||
1397 | .vmux = 2, | ||
1398 | .gpio0 = 0x04fb, | ||
1399 | .gpio1 = 0x10ef, | ||
1400 | .audioroute = 1, | ||
1401 | }}, | ||
1402 | .mpeg = CX88_MPEG_DVB, | ||
1403 | }, | ||
1378 | }; | 1404 | }; |
1379 | 1405 | ||
1380 | /* ------------------------------------------------------------------ */ | 1406 | /* ------------------------------------------------------------------ */ |
@@ -1684,6 +1710,10 @@ static const struct cx88_subid cx88_subids[] = { | |||
1684 | .subvendor = 0x1421, | 1710 | .subvendor = 0x1421, |
1685 | .subdevice = 0x0390, | 1711 | .subdevice = 0x0390, |
1686 | .card = CX88_BOARD_ADSTECH_PTV_390, | 1712 | .card = CX88_BOARD_ADSTECH_PTV_390, |
1713 | },{ | ||
1714 | .subvendor = 0x11bd, | ||
1715 | .subdevice = 0x0051, | ||
1716 | .card = CX88_BOARD_PINNACLE_PCTV_HD_800i, | ||
1687 | }, | 1717 | }, |
1688 | }; | 1718 | }; |
1689 | 1719 | ||
@@ -1851,6 +1881,39 @@ static void dvico_fusionhdtv_hybrid_init(struct cx88_core *core) | |||
1851 | } | 1881 | } |
1852 | 1882 | ||
1853 | /* ----------------------------------------------------------------------- */ | 1883 | /* ----------------------------------------------------------------------- */ |
1884 | /* Tuner callback function. Currently only needed for the Pinnacle * | ||
1885 | * PCTV HD 800i with an xc5000 sillicon tuner. This is used for both * | ||
1886 | * analog tuner attach (tuner-core.c) and dvb tuner attach (cx88-dvb.c) */ | ||
1887 | |||
1888 | int cx88_tuner_callback(void *i2c_algo, int command, int arg) | ||
1889 | { | ||
1890 | struct i2c_algo_bit_data *algo = i2c_algo; | ||
1891 | struct cx88_core *core = algo->data; | ||
1892 | |||
1893 | switch(core->boardnr) { | ||
1894 | case CX88_BOARD_PINNACLE_PCTV_HD_800i: | ||
1895 | if(command == 0) { /* This is the reset command from xc5000 */ | ||
1896 | /* Reset XC5000 tuner via GPIO pin #2 */ | ||
1897 | cx_set(MO_GP0_IO, 0x00000400); | ||
1898 | cx_clear(MO_GP0_IO, 0x00000004); | ||
1899 | mdelay(200); | ||
1900 | cx_set(MO_GP0_IO, 0x00000004); | ||
1901 | printk(KERN_ERR "xc5000: in reset for xc5000\n"); | ||
1902 | mdelay(200); | ||
1903 | return 0; | ||
1904 | } | ||
1905 | else { | ||
1906 | printk(KERN_ERR | ||
1907 | "xc5000: unknown tuner callback command.\n"); | ||
1908 | return -EINVAL; | ||
1909 | } | ||
1910 | break; | ||
1911 | } | ||
1912 | return 0; /* Should never be here */ | ||
1913 | } | ||
1914 | EXPORT_SYMBOL(cx88_tuner_callback); | ||
1915 | |||
1916 | /* ----------------------------------------------------------------------- */ | ||
1854 | 1917 | ||
1855 | static void cx88_card_list(struct cx88_core *core, struct pci_dev *pci) | 1918 | static void cx88_card_list(struct cx88_core *core, struct pci_dev *pci) |
1856 | { | 1919 | { |