diff options
Diffstat (limited to 'drivers/media/pci/cx23885')
-rw-r--r-- | drivers/media/pci/cx23885/Kconfig | 1 | ||||
-rw-r--r-- | drivers/media/pci/cx23885/cimax2.c | 13 | ||||
-rw-r--r-- | drivers/media/pci/cx23885/cx23885-417.c | 2 | ||||
-rw-r--r-- | drivers/media/pci/cx23885/cx23885-cards.c | 108 | ||||
-rw-r--r-- | drivers/media/pci/cx23885/cx23885-core.c | 2 | ||||
-rw-r--r-- | drivers/media/pci/cx23885/cx23885-dvb.c | 24 | ||||
-rw-r--r-- | drivers/media/pci/cx23885/cx23885-input.c | 12 | ||||
-rw-r--r-- | drivers/media/pci/cx23885/cx23885-video.c | 3 | ||||
-rw-r--r-- | drivers/media/pci/cx23885/cx23885.h | 3 |
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. */ | ||
1084 | static 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 | |||
1026 | int cx23885_tuner_callback(void *priv, int component, int command, int arg) | 1110 | int 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 | ||
465 | static struct cx24117_config tbs_cx24117_config = { | ||
466 | .demod_address = 0x55, | ||
467 | }; | ||
468 | |||
464 | static struct ds3000_config tevii_ds3000_config = { | 469 | static 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 |