diff options
-rw-r--r-- | drivers/media/pci/cx23885/cx23885-cards.c | 15 | ||||
-rw-r--r-- | drivers/media/pci/cx23885/cx23885-dvb.c | 60 | ||||
-rw-r--r-- | drivers/media/pci/cx23885/cx23885-input.c | 3 | ||||
-rw-r--r-- | drivers/media/pci/cx23885/cx23885.h | 1 |
4 files changed, 78 insertions, 1 deletions
diff --git a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx23885/cx23885-cards.c index 4bad27d1caa2..db99ca2613ba 100644 --- a/drivers/media/pci/cx23885/cx23885-cards.c +++ b/drivers/media/pci/cx23885/cx23885-cards.c | |||
@@ -701,6 +701,11 @@ struct cx23885_board cx23885_boards[] = { | |||
701 | .portb = CX23885_MPEG_DVB, | 701 | .portb = CX23885_MPEG_DVB, |
702 | .portc = CX23885_MPEG_DVB, | 702 | .portc = CX23885_MPEG_DVB, |
703 | }, | 703 | }, |
704 | [CX23885_BOARD_DVBSKY_T982] = { | ||
705 | .name = "DVBSky T982", | ||
706 | .portb = CX23885_MPEG_DVB, | ||
707 | .portc = CX23885_MPEG_DVB, | ||
708 | }, | ||
704 | }; | 709 | }; |
705 | const unsigned int cx23885_bcount = ARRAY_SIZE(cx23885_boards); | 710 | const unsigned int cx23885_bcount = ARRAY_SIZE(cx23885_boards); |
706 | 711 | ||
@@ -980,6 +985,10 @@ struct cx23885_subid cx23885_subids[] = { | |||
980 | .subvendor = 0x4254, | 985 | .subvendor = 0x4254, |
981 | .subdevice = 0x0952, | 986 | .subdevice = 0x0952, |
982 | .card = CX23885_BOARD_DVBSKY_S952, | 987 | .card = CX23885_BOARD_DVBSKY_S952, |
988 | }, { | ||
989 | .subvendor = 0x4254, | ||
990 | .subdevice = 0x0982, | ||
991 | .card = CX23885_BOARD_DVBSKY_T982, | ||
983 | }, | 992 | }, |
984 | }; | 993 | }; |
985 | const unsigned int cx23885_idcount = ARRAY_SIZE(cx23885_subids); | 994 | const unsigned int cx23885_idcount = ARRAY_SIZE(cx23885_subids); |
@@ -1576,6 +1585,7 @@ void cx23885_gpio_setup(struct cx23885_dev *dev) | |||
1576 | break; | 1585 | break; |
1577 | case CX23885_BOARD_DVBSKY_T9580: | 1586 | case CX23885_BOARD_DVBSKY_T9580: |
1578 | case CX23885_BOARD_DVBSKY_S952: | 1587 | case CX23885_BOARD_DVBSKY_S952: |
1588 | case CX23885_BOARD_DVBSKY_T982: | ||
1579 | /* enable GPIO3-18 pins */ | 1589 | /* enable GPIO3-18 pins */ |
1580 | cx_write(MC417_CTL, 0x00000037); | 1590 | cx_write(MC417_CTL, 0x00000037); |
1581 | cx23885_gpio_enable(dev, GPIO_2 | GPIO_11, 1); | 1591 | cx23885_gpio_enable(dev, GPIO_2 | GPIO_11, 1); |
@@ -1708,6 +1718,7 @@ int cx23885_ir_init(struct cx23885_dev *dev) | |||
1708 | case CX23885_BOARD_TT_CT2_4500_CI: | 1718 | case CX23885_BOARD_TT_CT2_4500_CI: |
1709 | case CX23885_BOARD_DVBSKY_S950: | 1719 | case CX23885_BOARD_DVBSKY_S950: |
1710 | case CX23885_BOARD_DVBSKY_S952: | 1720 | case CX23885_BOARD_DVBSKY_S952: |
1721 | case CX23885_BOARD_DVBSKY_T982: | ||
1711 | if (!enable_885_ir) | 1722 | if (!enable_885_ir) |
1712 | break; | 1723 | break; |
1713 | dev->sd_ir = cx23885_find_hw(dev, CX23885_HW_AV_CORE); | 1724 | dev->sd_ir = cx23885_find_hw(dev, CX23885_HW_AV_CORE); |
@@ -1760,6 +1771,7 @@ void cx23885_ir_fini(struct cx23885_dev *dev) | |||
1760 | case CX23885_BOARD_TT_CT2_4500_CI: | 1771 | case CX23885_BOARD_TT_CT2_4500_CI: |
1761 | case CX23885_BOARD_DVBSKY_S950: | 1772 | case CX23885_BOARD_DVBSKY_S950: |
1762 | case CX23885_BOARD_DVBSKY_S952: | 1773 | case CX23885_BOARD_DVBSKY_S952: |
1774 | case CX23885_BOARD_DVBSKY_T982: | ||
1763 | cx23885_irq_remove(dev, PCI_MSK_AV_CORE); | 1775 | cx23885_irq_remove(dev, PCI_MSK_AV_CORE); |
1764 | /* sd_ir is a duplicate pointer to the AV Core, just clear it */ | 1776 | /* sd_ir is a duplicate pointer to the AV Core, just clear it */ |
1765 | dev->sd_ir = NULL; | 1777 | dev->sd_ir = NULL; |
@@ -1813,6 +1825,7 @@ void cx23885_ir_pci_int_enable(struct cx23885_dev *dev) | |||
1813 | case CX23885_BOARD_TT_CT2_4500_CI: | 1825 | case CX23885_BOARD_TT_CT2_4500_CI: |
1814 | case CX23885_BOARD_DVBSKY_S950: | 1826 | case CX23885_BOARD_DVBSKY_S950: |
1815 | case CX23885_BOARD_DVBSKY_S952: | 1827 | case CX23885_BOARD_DVBSKY_S952: |
1828 | case CX23885_BOARD_DVBSKY_T982: | ||
1816 | if (dev->sd_ir) | 1829 | if (dev->sd_ir) |
1817 | cx23885_irq_add_enable(dev, PCI_MSK_AV_CORE); | 1830 | cx23885_irq_add_enable(dev, PCI_MSK_AV_CORE); |
1818 | break; | 1831 | break; |
@@ -1968,6 +1981,7 @@ void cx23885_card_setup(struct cx23885_dev *dev) | |||
1968 | ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; | 1981 | ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; |
1969 | break; | 1982 | break; |
1970 | case CX23885_BOARD_DVBSKY_T9580: | 1983 | case CX23885_BOARD_DVBSKY_T9580: |
1984 | case CX23885_BOARD_DVBSKY_T982: | ||
1971 | ts1->gen_ctrl_val = 0x5; /* Parallel */ | 1985 | ts1->gen_ctrl_val = 0x5; /* Parallel */ |
1972 | ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ | 1986 | ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ |
1973 | ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; | 1987 | ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; |
@@ -2051,6 +2065,7 @@ void cx23885_card_setup(struct cx23885_dev *dev) | |||
2051 | case CX23885_BOARD_TT_CT2_4500_CI: | 2065 | case CX23885_BOARD_TT_CT2_4500_CI: |
2052 | case CX23885_BOARD_DVBSKY_S950: | 2066 | case CX23885_BOARD_DVBSKY_S950: |
2053 | case CX23885_BOARD_DVBSKY_S952: | 2067 | case CX23885_BOARD_DVBSKY_S952: |
2068 | case CX23885_BOARD_DVBSKY_T982: | ||
2054 | dev->sd_cx25840 = v4l2_i2c_new_subdev(&dev->v4l2_dev, | 2069 | dev->sd_cx25840 = v4l2_i2c_new_subdev(&dev->v4l2_dev, |
2055 | &dev->i2c_bus[2].i2c_adap, | 2070 | &dev->i2c_bus[2].i2c_adap, |
2056 | "cx25840", 0x88 >> 1, NULL); | 2071 | "cx25840", 0x88 >> 1, NULL); |
diff --git a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/cx23885-dvb.c index 2457b6483a40..1ed92eeb46d1 100644 --- a/drivers/media/pci/cx23885/cx23885-dvb.c +++ b/drivers/media/pci/cx23885/cx23885-dvb.c | |||
@@ -1945,6 +1945,63 @@ static int dvb_register(struct cx23885_tsport *port) | |||
1945 | 1945 | ||
1946 | port->i2c_client_tuner = client_tuner; | 1946 | port->i2c_client_tuner = client_tuner; |
1947 | break; | 1947 | break; |
1948 | case CX23885_BOARD_DVBSKY_T982: | ||
1949 | memset(&si2168_config, 0, sizeof(si2168_config)); | ||
1950 | switch (port->nr) { | ||
1951 | /* port b */ | ||
1952 | case 1: | ||
1953 | i2c_bus = &dev->i2c_bus[1]; | ||
1954 | si2168_config.ts_mode = SI2168_TS_PARALLEL; | ||
1955 | break; | ||
1956 | /* port c */ | ||
1957 | case 2: | ||
1958 | i2c_bus = &dev->i2c_bus[0]; | ||
1959 | si2168_config.ts_mode = SI2168_TS_SERIAL; | ||
1960 | break; | ||
1961 | } | ||
1962 | |||
1963 | /* attach frontend */ | ||
1964 | si2168_config.i2c_adapter = &adapter; | ||
1965 | si2168_config.fe = &fe0->dvb.frontend; | ||
1966 | memset(&info, 0, sizeof(struct i2c_board_info)); | ||
1967 | strlcpy(info.type, "si2168", I2C_NAME_SIZE); | ||
1968 | info.addr = 0x64; | ||
1969 | info.platform_data = &si2168_config; | ||
1970 | request_module(info.type); | ||
1971 | client_demod = i2c_new_device(&i2c_bus->i2c_adap, &info); | ||
1972 | if (client_demod == NULL || | ||
1973 | client_demod->dev.driver == NULL) | ||
1974 | goto frontend_detach; | ||
1975 | if (!try_module_get(client_demod->dev.driver->owner)) { | ||
1976 | i2c_unregister_device(client_demod); | ||
1977 | goto frontend_detach; | ||
1978 | } | ||
1979 | port->i2c_client_demod = client_demod; | ||
1980 | |||
1981 | /* attach tuner */ | ||
1982 | memset(&si2157_config, 0, sizeof(si2157_config)); | ||
1983 | si2157_config.fe = fe0->dvb.frontend; | ||
1984 | memset(&info, 0, sizeof(struct i2c_board_info)); | ||
1985 | strlcpy(info.type, "si2157", I2C_NAME_SIZE); | ||
1986 | info.addr = 0x60; | ||
1987 | info.platform_data = &si2157_config; | ||
1988 | request_module(info.type); | ||
1989 | client_tuner = i2c_new_device(adapter, &info); | ||
1990 | if (client_tuner == NULL || | ||
1991 | client_tuner->dev.driver == NULL) { | ||
1992 | module_put(client_demod->dev.driver->owner); | ||
1993 | i2c_unregister_device(client_demod); | ||
1994 | goto frontend_detach; | ||
1995 | } | ||
1996 | if (!try_module_get(client_tuner->dev.driver->owner)) { | ||
1997 | i2c_unregister_device(client_tuner); | ||
1998 | module_put(client_demod->dev.driver->owner); | ||
1999 | i2c_unregister_device(client_demod); | ||
2000 | port->i2c_client_demod = NULL; | ||
2001 | goto frontend_detach; | ||
2002 | } | ||
2003 | port->i2c_client_tuner = client_tuner; | ||
2004 | break; | ||
1948 | default: | 2005 | default: |
1949 | printk(KERN_INFO "%s: The frontend of your DVB/ATSC card " | 2006 | printk(KERN_INFO "%s: The frontend of your DVB/ATSC card " |
1950 | " isn't supported yet\n", | 2007 | " isn't supported yet\n", |
@@ -2021,7 +2078,8 @@ static int dvb_register(struct cx23885_tsport *port) | |||
2021 | } | 2078 | } |
2022 | case CX23885_BOARD_DVBSKY_T9580: | 2079 | case CX23885_BOARD_DVBSKY_T9580: |
2023 | case CX23885_BOARD_DVBSKY_S950: | 2080 | case CX23885_BOARD_DVBSKY_S950: |
2024 | case CX23885_BOARD_DVBSKY_S952: { | 2081 | case CX23885_BOARD_DVBSKY_S952: |
2082 | case CX23885_BOARD_DVBSKY_T982: { | ||
2025 | u8 eeprom[256]; /* 24C02 i2c eeprom */ | 2083 | u8 eeprom[256]; /* 24C02 i2c eeprom */ |
2026 | 2084 | ||
2027 | if (port->nr > 2) | 2085 | if (port->nr > 2) |
diff --git a/drivers/media/pci/cx23885/cx23885-input.c b/drivers/media/pci/cx23885/cx23885-input.c index a1f489444355..088799c3b49b 100644 --- a/drivers/media/pci/cx23885/cx23885-input.c +++ b/drivers/media/pci/cx23885/cx23885-input.c | |||
@@ -93,6 +93,7 @@ void cx23885_input_rx_work_handler(struct cx23885_dev *dev, u32 events) | |||
93 | case CX23885_BOARD_TT_CT2_4500_CI: | 93 | case CX23885_BOARD_TT_CT2_4500_CI: |
94 | case CX23885_BOARD_DVBSKY_S950: | 94 | case CX23885_BOARD_DVBSKY_S950: |
95 | case CX23885_BOARD_DVBSKY_S952: | 95 | case CX23885_BOARD_DVBSKY_S952: |
96 | case CX23885_BOARD_DVBSKY_T982: | ||
96 | /* | 97 | /* |
97 | * The only boards we handle right now. However other boards | 98 | * The only boards we handle right now. However other boards |
98 | * using the CX2388x integrated IR controller should be similar | 99 | * using the CX2388x integrated IR controller should be similar |
@@ -151,6 +152,7 @@ static int cx23885_input_ir_start(struct cx23885_dev *dev) | |||
151 | case CX23885_BOARD_TT_CT2_4500_CI: | 152 | case CX23885_BOARD_TT_CT2_4500_CI: |
152 | case CX23885_BOARD_DVBSKY_S950: | 153 | case CX23885_BOARD_DVBSKY_S950: |
153 | case CX23885_BOARD_DVBSKY_S952: | 154 | case CX23885_BOARD_DVBSKY_S952: |
155 | case CX23885_BOARD_DVBSKY_T982: | ||
154 | /* | 156 | /* |
155 | * The IR controller on this board only returns pulse widths. | 157 | * The IR controller on this board only returns pulse widths. |
156 | * Any other mode setting will fail to set up the device. | 158 | * Any other mode setting will fail to set up the device. |
@@ -322,6 +324,7 @@ int cx23885_input_init(struct cx23885_dev *dev) | |||
322 | case CX23885_BOARD_DVBSKY_S950C: | 324 | case CX23885_BOARD_DVBSKY_S950C: |
323 | case CX23885_BOARD_DVBSKY_S950: | 325 | case CX23885_BOARD_DVBSKY_S950: |
324 | case CX23885_BOARD_DVBSKY_S952: | 326 | case CX23885_BOARD_DVBSKY_S952: |
327 | case CX23885_BOARD_DVBSKY_T982: | ||
325 | /* Integrated CX23885 IR controller */ | 328 | /* Integrated CX23885 IR controller */ |
326 | driver_type = RC_DRIVER_IR_RAW; | 329 | driver_type = RC_DRIVER_IR_RAW; |
327 | allowed_protos = RC_BIT_ALL; | 330 | allowed_protos = RC_BIT_ALL; |
diff --git a/drivers/media/pci/cx23885/cx23885.h b/drivers/media/pci/cx23885/cx23885.h index 58c5038c816b..cf4efa461ce2 100644 --- a/drivers/media/pci/cx23885/cx23885.h +++ b/drivers/media/pci/cx23885/cx23885.h | |||
@@ -98,6 +98,7 @@ | |||
98 | #define CX23885_BOARD_TT_CT2_4500_CI 48 | 98 | #define CX23885_BOARD_TT_CT2_4500_CI 48 |
99 | #define CX23885_BOARD_DVBSKY_S950 49 | 99 | #define CX23885_BOARD_DVBSKY_S950 49 |
100 | #define CX23885_BOARD_DVBSKY_S952 50 | 100 | #define CX23885_BOARD_DVBSKY_S952 50 |
101 | #define CX23885_BOARD_DVBSKY_T982 51 | ||
101 | 102 | ||
102 | #define GPIO_0 0x00000001 | 103 | #define GPIO_0 0x00000001 |
103 | #define GPIO_1 0x00000002 | 104 | #define GPIO_1 0x00000002 |