aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/pci/cx23885
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/pci/cx23885')
-rw-r--r--drivers/media/pci/cx23885/Kconfig1
-rw-r--r--drivers/media/pci/cx23885/cimax2.c13
-rw-r--r--drivers/media/pci/cx23885/cx23885-417.c2
-rw-r--r--drivers/media/pci/cx23885/cx23885-cards.c108
-rw-r--r--drivers/media/pci/cx23885/cx23885-core.c2
-rw-r--r--drivers/media/pci/cx23885/cx23885-dvb.c24
-rw-r--r--drivers/media/pci/cx23885/cx23885-input.c12
-rw-r--r--drivers/media/pci/cx23885/cx23885-video.c3
-rw-r--r--drivers/media/pci/cx23885/cx23885.h3
9 files changed, 164 insertions, 4 deletions
diff --git a/drivers/media/pci/cx23885/Kconfig b/drivers/media/pci/cx23885/Kconfig
index 5104c802f72f..d1dcb1d2e087 100644
--- a/drivers/media/pci/cx23885/Kconfig
+++ b/drivers/media/pci/cx23885/Kconfig
@@ -23,6 +23,7 @@ config VIDEO_CX23885
23 select DVB_STB6100 if MEDIA_SUBDRV_AUTOSELECT 23 select DVB_STB6100 if MEDIA_SUBDRV_AUTOSELECT
24 select DVB_STV6110 if MEDIA_SUBDRV_AUTOSELECT 24 select DVB_STV6110 if MEDIA_SUBDRV_AUTOSELECT
25 select DVB_CX24116 if MEDIA_SUBDRV_AUTOSELECT 25 select DVB_CX24116 if MEDIA_SUBDRV_AUTOSELECT
26 select DVB_CX24117 if MEDIA_SUBDRV_AUTOSELECT
26 select DVB_STV0900 if MEDIA_SUBDRV_AUTOSELECT 27 select DVB_STV0900 if MEDIA_SUBDRV_AUTOSELECT
27 select DVB_DS3000 if MEDIA_SUBDRV_AUTOSELECT 28 select DVB_DS3000 if MEDIA_SUBDRV_AUTOSELECT
28 select DVB_TS2020 if MEDIA_SUBDRV_AUTOSELECT 29 select DVB_TS2020 if MEDIA_SUBDRV_AUTOSELECT
diff --git a/drivers/media/pci/cx23885/cimax2.c b/drivers/media/pci/cx23885/cimax2.c
index 7344849183a7..16fa7ea4d4aa 100644
--- a/drivers/media/pci/cx23885/cimax2.c
+++ b/drivers/media/pci/cx23885/cimax2.c
@@ -26,6 +26,10 @@
26#include "cx23885.h" 26#include "cx23885.h"
27#include "cimax2.h" 27#include "cimax2.h"
28#include "dvb_ca_en50221.h" 28#include "dvb_ca_en50221.h"
29
30/* Max transfer size done by I2C transfer functions */
31#define MAX_XFER_SIZE 64
32
29/**** Bit definitions for MC417_RWD and MC417_OEN registers *** 33/**** Bit definitions for MC417_RWD and MC417_OEN registers ***
30 bits 31-16 34 bits 31-16
31+-----------+ 35+-----------+
@@ -125,7 +129,7 @@ static int netup_write_i2c(struct i2c_adapter *i2c_adap, u8 addr, u8 reg,
125 u8 *buf, int len) 129 u8 *buf, int len)
126{ 130{
127 int ret; 131 int ret;
128 u8 buffer[len + 1]; 132 u8 buffer[MAX_XFER_SIZE];
129 133
130 struct i2c_msg msg = { 134 struct i2c_msg msg = {
131 .addr = addr, 135 .addr = addr,
@@ -134,6 +138,13 @@ static int netup_write_i2c(struct i2c_adapter *i2c_adap, u8 addr, u8 reg,
134 .len = len + 1 138 .len = len + 1
135 }; 139 };
136 140
141 if (1 + len > sizeof(buffer)) {
142 printk(KERN_WARNING
143 "%s: i2c wr reg=%04x: len=%d is too big!\n",
144 KBUILD_MODNAME, reg, len);
145 return -EINVAL;
146 }
147
137 buffer[0] = reg; 148 buffer[0] = reg;
138 memcpy(&buffer[1], buf, len); 149 memcpy(&buffer[1], buf, len);
139 150
diff --git a/drivers/media/pci/cx23885/cx23885-417.c b/drivers/media/pci/cx23885/cx23885-417.c
index e3fc2c71808a..95666eee7b27 100644
--- a/drivers/media/pci/cx23885/cx23885-417.c
+++ b/drivers/media/pci/cx23885/cx23885-417.c
@@ -427,7 +427,7 @@ int mc417_register_read(struct cx23885_dev *dev, u16 address, u32 *value)
427 cx_write(MC417_RWD, regval); 427 cx_write(MC417_RWD, regval);
428 428
429 /* Transition RD to effect read transaction across bus. 429 /* Transition RD to effect read transaction across bus.
430 * Transtion 0x5000 -> 0x9000 correct (RD/RDY -> WR/RDY)? 430 * Transition 0x5000 -> 0x9000 correct (RD/RDY -> WR/RDY)?
431 * Should it be 0x9000 -> 0xF000 (also why is RDY being set, its 431 * Should it be 0x9000 -> 0xF000 (also why is RDY being set, its
432 * input only...) 432 * input only...)
433 */ 433 */
diff --git a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx23885/cx23885-cards.c
index 6a71a965e757..79f20c8c842e 100644
--- a/drivers/media/pci/cx23885/cx23885-cards.c
+++ b/drivers/media/pci/cx23885/cx23885-cards.c
@@ -223,6 +223,39 @@ struct cx23885_board cx23885_boards[] = {
223 .name = "Leadtek Winfast PxDVR3200 H", 223 .name = "Leadtek Winfast PxDVR3200 H",
224 .portc = CX23885_MPEG_DVB, 224 .portc = CX23885_MPEG_DVB,
225 }, 225 },
226 [CX23885_BOARD_LEADTEK_WINFAST_PXPVR2200] = {
227 .name = "Leadtek Winfast PxPVR2200",
228 .porta = CX23885_ANALOG_VIDEO,
229 .tuner_type = TUNER_XC2028,
230 .tuner_addr = 0x61,
231 .tuner_bus = 1,
232 .input = {{
233 .type = CX23885_VMUX_TELEVISION,
234 .vmux = CX25840_VIN2_CH1 |
235 CX25840_VIN5_CH2,
236 .amux = CX25840_AUDIO8,
237 .gpio0 = 0x704040,
238 }, {
239 .type = CX23885_VMUX_COMPOSITE1,
240 .vmux = CX25840_COMPOSITE1,
241 .amux = CX25840_AUDIO7,
242 .gpio0 = 0x704040,
243 }, {
244 .type = CX23885_VMUX_SVIDEO,
245 .vmux = CX25840_SVIDEO_LUMA3 |
246 CX25840_SVIDEO_CHROMA4,
247 .amux = CX25840_AUDIO7,
248 .gpio0 = 0x704040,
249 }, {
250 .type = CX23885_VMUX_COMPONENT,
251 .vmux = CX25840_VIN7_CH1 |
252 CX25840_VIN6_CH2 |
253 CX25840_VIN8_CH3 |
254 CX25840_COMPONENT_ON,
255 .amux = CX25840_AUDIO7,
256 .gpio0 = 0x704040,
257 } },
258 },
226 [CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H_XC4000] = { 259 [CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H_XC4000] = {
227 .name = "Leadtek Winfast PxDVR3200 H XC4000", 260 .name = "Leadtek Winfast PxDVR3200 H XC4000",
228 .porta = CX23885_ANALOG_VIDEO, 261 .porta = CX23885_ANALOG_VIDEO,
@@ -259,6 +292,16 @@ struct cx23885_board cx23885_boards[] = {
259 .name = "TurboSight TBS 6920", 292 .name = "TurboSight TBS 6920",
260 .portb = CX23885_MPEG_DVB, 293 .portb = CX23885_MPEG_DVB,
261 }, 294 },
295 [CX23885_BOARD_TBS_6980] = {
296 .name = "TurboSight TBS 6980",
297 .portb = CX23885_MPEG_DVB,
298 .portc = CX23885_MPEG_DVB,
299 },
300 [CX23885_BOARD_TBS_6981] = {
301 .name = "TurboSight TBS 6981",
302 .portb = CX23885_MPEG_DVB,
303 .portc = CX23885_MPEG_DVB,
304 },
262 [CX23885_BOARD_TEVII_S470] = { 305 [CX23885_BOARD_TEVII_S470] = {
263 .name = "TeVii S470", 306 .name = "TeVii S470",
264 .portb = CX23885_MPEG_DVB, 307 .portb = CX23885_MPEG_DVB,
@@ -688,6 +731,10 @@ struct cx23885_subid cx23885_subids[] = {
688 .card = CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H, 731 .card = CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H,
689 }, { 732 }, {
690 .subvendor = 0x107d, 733 .subvendor = 0x107d,
734 .subdevice = 0x6f21,
735 .card = CX23885_BOARD_LEADTEK_WINFAST_PXPVR2200,
736 }, {
737 .subvendor = 0x107d,
691 .subdevice = 0x6f39, 738 .subdevice = 0x6f39,
692 .card = CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H_XC4000, 739 .card = CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H_XC4000,
693 }, { 740 }, {
@@ -699,6 +746,14 @@ struct cx23885_subid cx23885_subids[] = {
699 .subdevice = 0x8888, 746 .subdevice = 0x8888,
700 .card = CX23885_BOARD_TBS_6920, 747 .card = CX23885_BOARD_TBS_6920,
701 }, { 748 }, {
749 .subvendor = 0x6980,
750 .subdevice = 0x8888,
751 .card = CX23885_BOARD_TBS_6980,
752 }, {
753 .subvendor = 0x6981,
754 .subdevice = 0x8888,
755 .card = CX23885_BOARD_TBS_6981,
756 }, {
702 .subvendor = 0xd470, 757 .subvendor = 0xd470,
703 .subdevice = 0x9022, 758 .subdevice = 0x9022,
704 .card = CX23885_BOARD_TEVII_S470, 759 .card = CX23885_BOARD_TEVII_S470,
@@ -1023,6 +1078,35 @@ static void hauppauge_eeprom(struct cx23885_dev *dev, u8 *eeprom_data)
1023 dev->name, tv.model); 1078 dev->name, tv.model);
1024} 1079}
1025 1080
1081/* Some TBS cards require initing a chip using a bitbanged SPI attached
1082 to the cx23885 gpio's. If this chip doesn't get init'ed the demod
1083 doesn't respond to any command. */
1084static void tbs_card_init(struct cx23885_dev *dev)
1085{
1086 int i;
1087 const u8 buf[] = {
1088 0xe0, 0x06, 0x66, 0x33, 0x65,
1089 0x01, 0x17, 0x06, 0xde};
1090
1091 switch (dev->board) {
1092 case CX23885_BOARD_TBS_6980:
1093 case CX23885_BOARD_TBS_6981:
1094 cx_set(GP0_IO, 0x00070007);
1095 usleep_range(1000, 10000);
1096 cx_clear(GP0_IO, 2);
1097 usleep_range(1000, 10000);
1098 for (i = 0; i < 9 * 8; i++) {
1099 cx_clear(GP0_IO, 7);
1100 usleep_range(1000, 10000);
1101 cx_set(GP0_IO,
1102 ((buf[i >> 3] >> (7 - (i & 7))) & 1) | 4);
1103 usleep_range(1000, 10000);
1104 }
1105 cx_set(GP0_IO, 7);
1106 break;
1107 }
1108}
1109
1026int cx23885_tuner_callback(void *priv, int component, int command, int arg) 1110int cx23885_tuner_callback(void *priv, int component, int command, int arg)
1027{ 1111{
1028 struct cx23885_tsport *port = priv; 1112 struct cx23885_tsport *port = priv;
@@ -1043,6 +1127,7 @@ int cx23885_tuner_callback(void *priv, int component, int command, int arg)
1043 case CX23885_BOARD_HAUPPAUGE_HVR1500: 1127 case CX23885_BOARD_HAUPPAUGE_HVR1500:
1044 case CX23885_BOARD_HAUPPAUGE_HVR1500Q: 1128 case CX23885_BOARD_HAUPPAUGE_HVR1500Q:
1045 case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H: 1129 case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H:
1130 case CX23885_BOARD_LEADTEK_WINFAST_PXPVR2200:
1046 case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H_XC4000: 1131 case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H_XC4000:
1047 case CX23885_BOARD_COMPRO_VIDEOMATE_E650F: 1132 case CX23885_BOARD_COMPRO_VIDEOMATE_E650F:
1048 case CX23885_BOARD_COMPRO_VIDEOMATE_E800: 1133 case CX23885_BOARD_COMPRO_VIDEOMATE_E800:
@@ -1208,6 +1293,7 @@ void cx23885_gpio_setup(struct cx23885_dev *dev)
1208 cx_set(GP0_IO, 0x000f000f); 1293 cx_set(GP0_IO, 0x000f000f);
1209 break; 1294 break;
1210 case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H: 1295 case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H:
1296 case CX23885_BOARD_LEADTEK_WINFAST_PXPVR2200:
1211 case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H_XC4000: 1297 case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H_XC4000:
1212 case CX23885_BOARD_COMPRO_VIDEOMATE_E650F: 1298 case CX23885_BOARD_COMPRO_VIDEOMATE_E650F:
1213 case CX23885_BOARD_COMPRO_VIDEOMATE_E800: 1299 case CX23885_BOARD_COMPRO_VIDEOMATE_E800:
@@ -1225,6 +1311,8 @@ void cx23885_gpio_setup(struct cx23885_dev *dev)
1225 cx_set(GP0_IO, 0x00040004); 1311 cx_set(GP0_IO, 0x00040004);
1226 break; 1312 break;
1227 case CX23885_BOARD_TBS_6920: 1313 case CX23885_BOARD_TBS_6920:
1314 case CX23885_BOARD_TBS_6980:
1315 case CX23885_BOARD_TBS_6981:
1228 case CX23885_BOARD_PROF_8000: 1316 case CX23885_BOARD_PROF_8000:
1229 cx_write(MC417_CTL, 0x00000036); 1317 cx_write(MC417_CTL, 0x00000036);
1230 cx_write(MC417_OEN, 0x00001000); 1318 cx_write(MC417_OEN, 0x00001000);
@@ -1473,6 +1561,8 @@ int cx23885_ir_init(struct cx23885_dev *dev)
1473 case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL: 1561 case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL:
1474 case CX23885_BOARD_TEVII_S470: 1562 case CX23885_BOARD_TEVII_S470:
1475 case CX23885_BOARD_MYGICA_X8507: 1563 case CX23885_BOARD_MYGICA_X8507:
1564 case CX23885_BOARD_TBS_6980:
1565 case CX23885_BOARD_TBS_6981:
1476 if (!enable_885_ir) 1566 if (!enable_885_ir)
1477 break; 1567 break;
1478 dev->sd_ir = cx23885_find_hw(dev, CX23885_HW_AV_CORE); 1568 dev->sd_ir = cx23885_find_hw(dev, CX23885_HW_AV_CORE);
@@ -1516,6 +1606,8 @@ void cx23885_ir_fini(struct cx23885_dev *dev)
1516 case CX23885_BOARD_TEVII_S470: 1606 case CX23885_BOARD_TEVII_S470:
1517 case CX23885_BOARD_HAUPPAUGE_HVR1250: 1607 case CX23885_BOARD_HAUPPAUGE_HVR1250:
1518 case CX23885_BOARD_MYGICA_X8507: 1608 case CX23885_BOARD_MYGICA_X8507:
1609 case CX23885_BOARD_TBS_6980:
1610 case CX23885_BOARD_TBS_6981:
1519 cx23885_irq_remove(dev, PCI_MSK_AV_CORE); 1611 cx23885_irq_remove(dev, PCI_MSK_AV_CORE);
1520 /* sd_ir is a duplicate pointer to the AV Core, just clear it */ 1612 /* sd_ir is a duplicate pointer to the AV Core, just clear it */
1521 dev->sd_ir = NULL; 1613 dev->sd_ir = NULL;
@@ -1561,6 +1653,8 @@ void cx23885_ir_pci_int_enable(struct cx23885_dev *dev)
1561 case CX23885_BOARD_TEVII_S470: 1653 case CX23885_BOARD_TEVII_S470:
1562 case CX23885_BOARD_HAUPPAUGE_HVR1250: 1654 case CX23885_BOARD_HAUPPAUGE_HVR1250:
1563 case CX23885_BOARD_MYGICA_X8507: 1655 case CX23885_BOARD_MYGICA_X8507:
1656 case CX23885_BOARD_TBS_6980:
1657 case CX23885_BOARD_TBS_6981:
1564 if (dev->sd_ir) 1658 if (dev->sd_ir)
1565 cx23885_irq_add_enable(dev, PCI_MSK_AV_CORE); 1659 cx23885_irq_add_enable(dev, PCI_MSK_AV_CORE);
1566 break; 1660 break;
@@ -1676,6 +1770,16 @@ void cx23885_card_setup(struct cx23885_dev *dev)
1676 ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 1770 ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */
1677 ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 1771 ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
1678 break; 1772 break;
1773 case CX23885_BOARD_TBS_6980:
1774 case CX23885_BOARD_TBS_6981:
1775 ts1->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */
1776 ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */
1777 ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
1778 ts2->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */
1779 ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */
1780 ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
1781 tbs_card_init(dev);
1782 break;
1679 case CX23885_BOARD_MYGICA_X8506: 1783 case CX23885_BOARD_MYGICA_X8506:
1680 case CX23885_BOARD_MAGICPRO_PROHDTVE2: 1784 case CX23885_BOARD_MAGICPRO_PROHDTVE2:
1681 case CX23885_BOARD_MYGICA_X8507: 1785 case CX23885_BOARD_MYGICA_X8507:
@@ -1704,6 +1808,7 @@ void cx23885_card_setup(struct cx23885_dev *dev)
1704 case CX23885_BOARD_HAUPPAUGE_HVR1700: 1808 case CX23885_BOARD_HAUPPAUGE_HVR1700:
1705 case CX23885_BOARD_HAUPPAUGE_HVR1400: 1809 case CX23885_BOARD_HAUPPAUGE_HVR1400:
1706 case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H: 1810 case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H:
1811 case CX23885_BOARD_LEADTEK_WINFAST_PXPVR2200:
1707 case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H_XC4000: 1812 case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H_XC4000:
1708 case CX23885_BOARD_COMPRO_VIDEOMATE_E650F: 1813 case CX23885_BOARD_COMPRO_VIDEOMATE_E650F:
1709 case CX23885_BOARD_HAUPPAUGE_HVR1270: 1814 case CX23885_BOARD_HAUPPAUGE_HVR1270:
@@ -1733,6 +1838,7 @@ void cx23885_card_setup(struct cx23885_dev *dev)
1733 case CX23885_BOARD_HAUPPAUGE_HVR1800lp: 1838 case CX23885_BOARD_HAUPPAUGE_HVR1800lp:
1734 case CX23885_BOARD_HAUPPAUGE_HVR1700: 1839 case CX23885_BOARD_HAUPPAUGE_HVR1700:
1735 case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H: 1840 case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H:
1841 case CX23885_BOARD_LEADTEK_WINFAST_PXPVR2200:
1736 case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H_XC4000: 1842 case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H_XC4000:
1737 case CX23885_BOARD_COMPRO_VIDEOMATE_E650F: 1843 case CX23885_BOARD_COMPRO_VIDEOMATE_E650F:
1738 case CX23885_BOARD_NETUP_DUAL_DVBS2_CI: 1844 case CX23885_BOARD_NETUP_DUAL_DVBS2_CI:
@@ -1752,6 +1858,8 @@ void cx23885_card_setup(struct cx23885_dev *dev)
1752 case CX23885_BOARD_MYGICA_X8507: 1858 case CX23885_BOARD_MYGICA_X8507:
1753 case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL: 1859 case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL:
1754 case CX23885_BOARD_AVERMEDIA_HC81R: 1860 case CX23885_BOARD_AVERMEDIA_HC81R:
1861 case CX23885_BOARD_TBS_6980:
1862 case CX23885_BOARD_TBS_6981:
1755 dev->sd_cx25840 = v4l2_i2c_new_subdev(&dev->v4l2_dev, 1863 dev->sd_cx25840 = v4l2_i2c_new_subdev(&dev->v4l2_dev,
1756 &dev->i2c_bus[2].i2c_adap, 1864 &dev->i2c_bus[2].i2c_adap,
1757 "cx25840", 0x88 >> 1, NULL); 1865 "cx25840", 0x88 >> 1, NULL);
diff --git a/drivers/media/pci/cx23885/cx23885-core.c b/drivers/media/pci/cx23885/cx23885-core.c
index 9f63d93239ec..edcd79db1e4e 100644
--- a/drivers/media/pci/cx23885/cx23885-core.c
+++ b/drivers/media/pci/cx23885/cx23885-core.c
@@ -2129,7 +2129,7 @@ static int cx23885_initdev(struct pci_dev *pci_dev,
2129 } 2129 }
2130 2130
2131 err = request_irq(pci_dev->irq, cx23885_irq, 2131 err = request_irq(pci_dev->irq, cx23885_irq,
2132 IRQF_SHARED | IRQF_DISABLED, dev->name, dev); 2132 IRQF_SHARED, dev->name, dev);
2133 if (err < 0) { 2133 if (err < 0) {
2134 printk(KERN_ERR "%s: can't get IRQ %d\n", 2134 printk(KERN_ERR "%s: can't get IRQ %d\n",
2135 dev->name, pci_dev->irq); 2135 dev->name, pci_dev->irq);
diff --git a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/cx23885-dvb.c
index 971e4ff1b87f..05492053b473 100644
--- a/drivers/media/pci/cx23885/cx23885-dvb.c
+++ b/drivers/media/pci/cx23885/cx23885-dvb.c
@@ -51,6 +51,7 @@
51#include "stv6110.h" 51#include "stv6110.h"
52#include "lnbh24.h" 52#include "lnbh24.h"
53#include "cx24116.h" 53#include "cx24116.h"
54#include "cx24117.h"
54#include "cimax2.h" 55#include "cimax2.h"
55#include "lgs8gxx.h" 56#include "lgs8gxx.h"
56#include "netup-eeprom.h" 57#include "netup-eeprom.h"
@@ -461,6 +462,10 @@ static struct cx24116_config tbs_cx24116_config = {
461 .demod_address = 0x55, 462 .demod_address = 0x55,
462}; 463};
463 464
465static struct cx24117_config tbs_cx24117_config = {
466 .demod_address = 0x55,
467};
468
464static struct ds3000_config tevii_ds3000_config = { 469static struct ds3000_config tevii_ds3000_config = {
465 .demod_address = 0x68, 470 .demod_address = 0x68,
466}; 471};
@@ -1044,6 +1049,25 @@ static int dvb_register(struct cx23885_tsport *port)
1044 fe0->dvb.frontend->ops.set_voltage = f300_set_voltage; 1049 fe0->dvb.frontend->ops.set_voltage = f300_set_voltage;
1045 1050
1046 break; 1051 break;
1052 case CX23885_BOARD_TBS_6980:
1053 case CX23885_BOARD_TBS_6981:
1054 i2c_bus = &dev->i2c_bus[1];
1055
1056 switch (port->nr) {
1057 /* PORT B */
1058 case 1:
1059 fe0->dvb.frontend = dvb_attach(cx24117_attach,
1060 &tbs_cx24117_config,
1061 &i2c_bus->i2c_adap);
1062 break;
1063 /* PORT C */
1064 case 2:
1065 fe0->dvb.frontend = dvb_attach(cx24117_attach,
1066 &tbs_cx24117_config,
1067 &i2c_bus->i2c_adap);
1068 break;
1069 }
1070 break;
1047 case CX23885_BOARD_TEVII_S470: 1071 case CX23885_BOARD_TEVII_S470:
1048 i2c_bus = &dev->i2c_bus[1]; 1072 i2c_bus = &dev->i2c_bus[1];
1049 1073
diff --git a/drivers/media/pci/cx23885/cx23885-input.c b/drivers/media/pci/cx23885/cx23885-input.c
index 7875dfbe09ff..8a49e7c9eddd 100644
--- a/drivers/media/pci/cx23885/cx23885-input.c
+++ b/drivers/media/pci/cx23885/cx23885-input.c
@@ -90,6 +90,8 @@ void cx23885_input_rx_work_handler(struct cx23885_dev *dev, u32 events)
90 case CX23885_BOARD_TEVII_S470: 90 case CX23885_BOARD_TEVII_S470:
91 case CX23885_BOARD_HAUPPAUGE_HVR1250: 91 case CX23885_BOARD_HAUPPAUGE_HVR1250:
92 case CX23885_BOARD_MYGICA_X8507: 92 case CX23885_BOARD_MYGICA_X8507:
93 case CX23885_BOARD_TBS_6980:
94 case CX23885_BOARD_TBS_6981:
93 /* 95 /*
94 * The only boards we handle right now. However other boards 96 * The only boards we handle right now. However other boards
95 * using the CX2388x integrated IR controller should be similar 97 * using the CX2388x integrated IR controller should be similar
@@ -168,6 +170,8 @@ static int cx23885_input_ir_start(struct cx23885_dev *dev)
168 break; 170 break;
169 case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL: 171 case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL:
170 case CX23885_BOARD_TEVII_S470: 172 case CX23885_BOARD_TEVII_S470:
173 case CX23885_BOARD_TBS_6980:
174 case CX23885_BOARD_TBS_6981:
171 /* 175 /*
172 * The IR controller on this board only returns pulse widths. 176 * The IR controller on this board only returns pulse widths.
173 * Any other mode setting will fail to set up the device. 177 * Any other mode setting will fail to set up the device.
@@ -298,6 +302,14 @@ int cx23885_input_init(struct cx23885_dev *dev)
298 /* A guess at the remote */ 302 /* A guess at the remote */
299 rc_map = RC_MAP_TOTAL_MEDIA_IN_HAND_02; 303 rc_map = RC_MAP_TOTAL_MEDIA_IN_HAND_02;
300 break; 304 break;
305 case CX23885_BOARD_TBS_6980:
306 case CX23885_BOARD_TBS_6981:
307 /* Integrated CX23885 IR controller */
308 driver_type = RC_DRIVER_IR_RAW;
309 allowed_protos = RC_BIT_ALL;
310 /* A guess at the remote */
311 rc_map = RC_MAP_TBS_NEC;
312 break;
301 default: 313 default:
302 return -ENODEV; 314 return -ENODEV;
303 } 315 }
diff --git a/drivers/media/pci/cx23885/cx23885-video.c b/drivers/media/pci/cx23885/cx23885-video.c
index 161686832b20..7891f34157d1 100644
--- a/drivers/media/pci/cx23885/cx23885-video.c
+++ b/drivers/media/pci/cx23885/cx23885-video.c
@@ -1865,7 +1865,8 @@ int cx23885_video_register(struct cx23885_dev *dev)
1865 1865
1866 v4l2_subdev_call(sd, tuner, s_type_addr, &tun_setup); 1866 v4l2_subdev_call(sd, tuner, s_type_addr, &tun_setup);
1867 1867
1868 if (dev->board == CX23885_BOARD_LEADTEK_WINFAST_PXTV1200) { 1868 if ((dev->board == CX23885_BOARD_LEADTEK_WINFAST_PXTV1200) ||
1869 (dev->board == CX23885_BOARD_LEADTEK_WINFAST_PXPVR2200)) {
1869 struct xc2028_ctrl ctrl = { 1870 struct xc2028_ctrl ctrl = {
1870 .fname = XC2028_DEFAULT_FIRMWARE, 1871 .fname = XC2028_DEFAULT_FIRMWARE,
1871 .max_len = 64 1872 .max_len = 64
diff --git a/drivers/media/pci/cx23885/cx23885.h b/drivers/media/pci/cx23885/cx23885.h
index 038caf53908b..0fa4048ab872 100644
--- a/drivers/media/pci/cx23885/cx23885.h
+++ b/drivers/media/pci/cx23885/cx23885.h
@@ -93,6 +93,9 @@
93#define CX23885_BOARD_PROF_8000 37 93#define CX23885_BOARD_PROF_8000 37
94#define CX23885_BOARD_HAUPPAUGE_HVR4400 38 94#define CX23885_BOARD_HAUPPAUGE_HVR4400 38
95#define CX23885_BOARD_AVERMEDIA_HC81R 39 95#define CX23885_BOARD_AVERMEDIA_HC81R 39
96#define CX23885_BOARD_TBS_6981 40
97#define CX23885_BOARD_TBS_6980 41
98#define CX23885_BOARD_LEADTEK_WINFAST_PXPVR2200 42
96 99
97#define GPIO_0 0x00000001 100#define GPIO_0 0x00000001
98#define GPIO_1 0x00000002 101#define GPIO_1 0x00000002