diff options
Diffstat (limited to 'drivers/media/video/cx88/cx88-cards.c')
-rw-r--r-- | drivers/media/video/cx88/cx88-cards.c | 161 |
1 files changed, 157 insertions, 4 deletions
diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c index 14bd4863d157..6214eb823b29 100644 --- a/drivers/media/video/cx88/cx88-cards.c +++ b/drivers/media/video/cx88/cx88-cards.c | |||
@@ -1041,11 +1041,11 @@ struct cx88_board cx88_boards[] = { | |||
1041 | .input = {{ | 1041 | .input = {{ |
1042 | .type = CX88_VMUX_COMPOSITE1, | 1042 | .type = CX88_VMUX_COMPOSITE1, |
1043 | .vmux = 1, | 1043 | .vmux = 1, |
1044 | .gpio0 = 0x000027df, | 1044 | .gpio0 = 0x000067df, |
1045 | },{ | 1045 | },{ |
1046 | .type = CX88_VMUX_SVIDEO, | 1046 | .type = CX88_VMUX_SVIDEO, |
1047 | .vmux = 2, | 1047 | .vmux = 2, |
1048 | .gpio0 = 0x000027df, | 1048 | .gpio0 = 0x000067df, |
1049 | }}, | 1049 | }}, |
1050 | .dvb = 1, | 1050 | .dvb = 1, |
1051 | }, | 1051 | }, |
@@ -1209,6 +1209,100 @@ struct cx88_board cx88_boards[] = { | |||
1209 | }}, | 1209 | }}, |
1210 | .dvb = 1, | 1210 | .dvb = 1, |
1211 | }, | 1211 | }, |
1212 | [CX88_BOARD_HAUPPAUGE_HVR3000] = { | ||
1213 | /* FIXME: Add dvb & radio support */ | ||
1214 | .name = "Hauppauge WinTV-HVR3000 TriMode Analog/DVB-S/DVB-T", | ||
1215 | .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, | ||
1216 | .radio_type = UNSET, | ||
1217 | .tuner_addr = ADDR_UNSET, | ||
1218 | .radio_addr = ADDR_UNSET, | ||
1219 | .tda9887_conf = TDA9887_PRESENT, | ||
1220 | .input = {{ | ||
1221 | .type = CX88_VMUX_TELEVISION, | ||
1222 | .vmux = 0, | ||
1223 | .gpio0 = 0x84bf, | ||
1224 | },{ | ||
1225 | .type = CX88_VMUX_COMPOSITE1, | ||
1226 | .vmux = 1, | ||
1227 | .gpio0 = 0x84bf, | ||
1228 | },{ | ||
1229 | .type = CX88_VMUX_SVIDEO, | ||
1230 | .vmux = 2, | ||
1231 | .gpio0 = 0x84bf, | ||
1232 | }}, | ||
1233 | }, | ||
1234 | [CX88_BOARD_NORWOOD_MICRO] = { | ||
1235 | .name = "Norwood Micro TV Tuner", | ||
1236 | .tuner_type = TUNER_TNF_5335MF, | ||
1237 | .radio_type = UNSET, | ||
1238 | .tuner_addr = ADDR_UNSET, | ||
1239 | .radio_addr = ADDR_UNSET, | ||
1240 | .input = {{ | ||
1241 | .type = CX88_VMUX_TELEVISION, | ||
1242 | .vmux = 0, | ||
1243 | .gpio0 = 0x0709, | ||
1244 | },{ | ||
1245 | .type = CX88_VMUX_COMPOSITE1, | ||
1246 | .vmux = 1, | ||
1247 | .gpio0 = 0x070b, | ||
1248 | },{ | ||
1249 | .type = CX88_VMUX_SVIDEO, | ||
1250 | .vmux = 2, | ||
1251 | .gpio0 = 0x070b, | ||
1252 | }}, | ||
1253 | }, | ||
1254 | [CX88_BOARD_TE_DTV_250_OEM_SWANN] = { | ||
1255 | .name = "Shenzhen Tungsten Ages Tech TE-DTV-250 / Swann OEM", | ||
1256 | .tuner_type = TUNER_LG_PAL_NEW_TAPC, | ||
1257 | .radio_type = UNSET, | ||
1258 | .tuner_addr = ADDR_UNSET, | ||
1259 | .radio_addr = ADDR_UNSET, | ||
1260 | .input = {{ | ||
1261 | .type = CX88_VMUX_TELEVISION, | ||
1262 | .vmux = 0, | ||
1263 | .gpio0 = 0x003fffff, | ||
1264 | .gpio1 = 0x00e00000, | ||
1265 | .gpio2 = 0x003fffff, | ||
1266 | .gpio3 = 0x02000000, | ||
1267 | },{ | ||
1268 | .type = CX88_VMUX_COMPOSITE1, | ||
1269 | .vmux = 1, | ||
1270 | .gpio0 = 0x003fffff, | ||
1271 | .gpio1 = 0x00e00000, | ||
1272 | .gpio2 = 0x003fffff, | ||
1273 | .gpio3 = 0x02000000, | ||
1274 | },{ | ||
1275 | .type = CX88_VMUX_SVIDEO, | ||
1276 | .vmux = 2, | ||
1277 | .gpio0 = 0x003fffff, | ||
1278 | .gpio1 = 0x00e00000, | ||
1279 | .gpio2 = 0x003fffff, | ||
1280 | .gpio3 = 0x02000000, | ||
1281 | }}, | ||
1282 | }, | ||
1283 | [CX88_BOARD_HAUPPAUGE_HVR1300] = { | ||
1284 | .name = "Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG Encoder", | ||
1285 | .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, | ||
1286 | .radio_type = UNSET, | ||
1287 | .tuner_addr = ADDR_UNSET, | ||
1288 | .radio_addr = ADDR_UNSET, | ||
1289 | .tda9887_conf = TDA9887_PRESENT, | ||
1290 | .input = {{ | ||
1291 | .type = CX88_VMUX_TELEVISION, | ||
1292 | .vmux = 0, | ||
1293 | .gpio0 = 0xe780, | ||
1294 | },{ | ||
1295 | .type = CX88_VMUX_COMPOSITE1, | ||
1296 | .vmux = 1, | ||
1297 | .gpio0 = 0xe780, | ||
1298 | },{ | ||
1299 | .type = CX88_VMUX_SVIDEO, | ||
1300 | .vmux = 2, | ||
1301 | .gpio0 = 0xe780, | ||
1302 | }}, | ||
1303 | /* fixme: Add radio support */ | ||
1304 | .dvb = 1, | ||
1305 | }, | ||
1212 | }; | 1306 | }; |
1213 | const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards); | 1307 | const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards); |
1214 | 1308 | ||
@@ -1254,7 +1348,7 @@ struct cx88_subid cx88_subids[] = { | |||
1254 | .card = CX88_BOARD_LEADTEK_PVR2000, | 1348 | .card = CX88_BOARD_LEADTEK_PVR2000, |
1255 | },{ | 1349 | },{ |
1256 | .subvendor = 0x107d, | 1350 | .subvendor = 0x107d, |
1257 | .subdevice = 0x663C, | 1351 | .subdevice = 0x663c, |
1258 | .card = CX88_BOARD_LEADTEK_PVR2000, | 1352 | .card = CX88_BOARD_LEADTEK_PVR2000, |
1259 | },{ | 1353 | },{ |
1260 | .subvendor = 0x1461, | 1354 | .subvendor = 0x1461, |
@@ -1458,6 +1552,35 @@ struct cx88_subid cx88_subids[] = { | |||
1458 | .subvendor = 0x14f1, | 1552 | .subvendor = 0x14f1, |
1459 | .subdevice = 0x0084, | 1553 | .subdevice = 0x0084, |
1460 | .card = CX88_BOARD_GENIATECH_DVBS, | 1554 | .card = CX88_BOARD_GENIATECH_DVBS, |
1555 | },{ | ||
1556 | .subvendor = 0x0070, | ||
1557 | .subdevice = 0x1404, | ||
1558 | .card = CX88_BOARD_HAUPPAUGE_HVR3000, | ||
1559 | },{ | ||
1560 | .subvendor = 0x1461, | ||
1561 | .subdevice = 0xc111, /* AverMedia M150-D */ | ||
1562 | /* This board is known to work with the ASUS PVR416 config */ | ||
1563 | .card = CX88_BOARD_ASUS_PVR_416, | ||
1564 | },{ | ||
1565 | .subvendor = 0xc180, | ||
1566 | .subdevice = 0xc980, | ||
1567 | .card = CX88_BOARD_TE_DTV_250_OEM_SWANN, | ||
1568 | },{ | ||
1569 | .subvendor = 0x0070, | ||
1570 | .subdevice = 0x9600, | ||
1571 | .card = CX88_BOARD_HAUPPAUGE_HVR1300, | ||
1572 | },{ | ||
1573 | .subvendor = 0x0070, | ||
1574 | .subdevice = 0x9601, | ||
1575 | .card = CX88_BOARD_HAUPPAUGE_HVR1300, | ||
1576 | },{ | ||
1577 | .subvendor = 0x0070, | ||
1578 | .subdevice = 0x9602, | ||
1579 | .card = CX88_BOARD_HAUPPAUGE_HVR1300, | ||
1580 | },{ | ||
1581 | .subvendor = 0x107d, | ||
1582 | .subdevice = 0x6632, | ||
1583 | .card = CX88_BOARD_LEADTEK_PVR2000, | ||
1461 | }, | 1584 | }, |
1462 | }; | 1585 | }; |
1463 | const unsigned int cx88_idcount = ARRAY_SIZE(cx88_subids); | 1586 | const unsigned int cx88_idcount = ARRAY_SIZE(cx88_subids); |
@@ -1501,6 +1624,7 @@ static void hauppauge_eeprom(struct cx88_core *core, u8 *eeprom_data) | |||
1501 | /* Make sure we support the board model */ | 1624 | /* Make sure we support the board model */ |
1502 | switch (tv.model) | 1625 | switch (tv.model) |
1503 | { | 1626 | { |
1627 | case 14569: /* WinTV-HVR3000 (OEM, no IR, no back panel video) */ | ||
1504 | case 28552: /* WinTV-PVR 'Roslyn' (No IR) */ | 1628 | case 28552: /* WinTV-PVR 'Roslyn' (No IR) */ |
1505 | case 34519: /* WinTV-PCI-FM */ | 1629 | case 34519: /* WinTV-PCI-FM */ |
1506 | case 90002: /* Nova-T-PCI (9002) */ | 1630 | case 90002: /* Nova-T-PCI (9002) */ |
@@ -1512,6 +1636,11 @@ static void hauppauge_eeprom(struct cx88_core *core, u8 *eeprom_data) | |||
1512 | case 92000: /* Nova-SE2 (OEM, No Video or IR) */ | 1636 | case 92000: /* Nova-SE2 (OEM, No Video or IR) */ |
1513 | case 94009: /* WinTV-HVR1100 (Video and IR Retail) */ | 1637 | case 94009: /* WinTV-HVR1100 (Video and IR Retail) */ |
1514 | case 94501: /* WinTV-HVR1100 (Video and IR OEM) */ | 1638 | case 94501: /* WinTV-HVR1100 (Video and IR OEM) */ |
1639 | case 96009: /* WinTV-HVR1300 (PAL Video, MPEG Video and IR RX) */ | ||
1640 | case 96019: /* WinTV-HVR1300 (PAL Video, MPEG Video and IR RX/TX) */ | ||
1641 | case 96559: /* WinTV-HVR1300 (PAL Video, MPEG Video no IR) */ | ||
1642 | case 96569: /* WinTV-HVR1300 () */ | ||
1643 | case 96659: /* WinTV-HVR1300 () */ | ||
1515 | case 98559: /* WinTV-HVR1100LP (Video no IR, Retail - Low Profile) */ | 1644 | case 98559: /* WinTV-HVR1100LP (Video no IR, Retail - Low Profile) */ |
1516 | /* known */ | 1645 | /* known */ |
1517 | break; | 1646 | break; |
@@ -1638,6 +1767,22 @@ void cx88_card_list(struct cx88_core *core, struct pci_dev *pci) | |||
1638 | core->name, i, cx88_boards[i].name); | 1767 | core->name, i, cx88_boards[i].name); |
1639 | } | 1768 | } |
1640 | 1769 | ||
1770 | void cx88_card_setup_pre_i2c(struct cx88_core *core) | ||
1771 | { | ||
1772 | switch (core->board) { | ||
1773 | case CX88_BOARD_HAUPPAUGE_HVR1300: | ||
1774 | /* Bring the 702 demod up before i2c scanning/attach or devices are hidden */ | ||
1775 | /* We leave here with the 702 on the bus */ | ||
1776 | cx_write(MO_GP0_IO, 0x0000e780); | ||
1777 | udelay(1000); | ||
1778 | cx_clear(MO_GP0_IO, 0x00000080); | ||
1779 | udelay(50); | ||
1780 | cx_set(MO_GP0_IO, 0x00000080); /* 702 out of reset */ | ||
1781 | udelay(1000); | ||
1782 | break; | ||
1783 | } | ||
1784 | } | ||
1785 | |||
1641 | void cx88_card_setup(struct cx88_core *core) | 1786 | void cx88_card_setup(struct cx88_core *core) |
1642 | { | 1787 | { |
1643 | static u8 eeprom[256]; | 1788 | static u8 eeprom[256]; |
@@ -1666,6 +1811,8 @@ void cx88_card_setup(struct cx88_core *core) | |||
1666 | case CX88_BOARD_HAUPPAUGE_DVB_T1: | 1811 | case CX88_BOARD_HAUPPAUGE_DVB_T1: |
1667 | case CX88_BOARD_HAUPPAUGE_HVR1100: | 1812 | case CX88_BOARD_HAUPPAUGE_HVR1100: |
1668 | case CX88_BOARD_HAUPPAUGE_HVR1100LP: | 1813 | case CX88_BOARD_HAUPPAUGE_HVR1100LP: |
1814 | case CX88_BOARD_HAUPPAUGE_HVR3000: | ||
1815 | case CX88_BOARD_HAUPPAUGE_HVR1300: | ||
1669 | if (0 == core->i2c_rc) | 1816 | if (0 == core->i2c_rc) |
1670 | hauppauge_eeprom(core,eeprom); | 1817 | hauppauge_eeprom(core,eeprom); |
1671 | break; | 1818 | break; |
@@ -1673,9 +1820,15 @@ void cx88_card_setup(struct cx88_core *core) | |||
1673 | cx_write(MO_GP0_IO, 0x000007f8); | 1820 | cx_write(MO_GP0_IO, 0x000007f8); |
1674 | cx_write(MO_GP1_IO, 0x00000001); | 1821 | cx_write(MO_GP1_IO, 0x00000001); |
1675 | break; | 1822 | break; |
1823 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL: | ||
1824 | /* GPIO0:6 is hooked to FX2 reset pin */ | ||
1825 | cx_set(MO_GP0_IO, 0x00004040); | ||
1826 | cx_clear(MO_GP0_IO, 0x00000040); | ||
1827 | msleep(1000); | ||
1828 | cx_set(MO_GP0_IO, 0x00004040); | ||
1829 | /* FALLTHROUGH */ | ||
1676 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1: | 1830 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1: |
1677 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS: | 1831 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS: |
1678 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL: | ||
1679 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID: | 1832 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID: |
1680 | /* GPIO0:0 is hooked to mt352 reset pin */ | 1833 | /* GPIO0:0 is hooked to mt352 reset pin */ |
1681 | cx_set(MO_GP0_IO, 0x00000101); | 1834 | cx_set(MO_GP0_IO, 0x00000101); |