aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlli Salonen <olli.salonen@iki.fi>2014-10-30 16:48:27 -0400
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2014-11-03 13:19:29 -0500
commit61b103e85a87a5106833fea7b9a21637d9ba2d47 (patch)
tree78c938fd15a4e1fc9ac6ae040bbdedd8f5b8e67a
parentc4e7b893a59b8ec3c24c15ff2b73e334d13047d2 (diff)
[media] cx23885: add support for TechnoTrend CT2-4500 CI
TechnoTrend CT2-4500 CI is a PCIe device with DVB-T2/C tuner. It is similar to DVBSky T980C, just with different PCI ID and remote controller. Signed-off-by: Olli Salonen <olli.salonen@iki.fi> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
-rw-r--r--drivers/media/pci/cx23885/cx23885-cards.c14
-rw-r--r--drivers/media/pci/cx23885/cx23885-dvb.c8
-rw-r--r--drivers/media/pci/cx23885/cx23885-input.c8
-rw-r--r--drivers/media/pci/cx23885/cx23885.h1
4 files changed, 28 insertions, 3 deletions
diff --git a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx23885/cx23885-cards.c
index d9ba48cfb41f..9c7e8ac31cce 100644
--- a/drivers/media/pci/cx23885/cx23885-cards.c
+++ b/drivers/media/pci/cx23885/cx23885-cards.c
@@ -688,6 +688,10 @@ struct cx23885_board cx23885_boards[] = {
688 .name = "DVBSky S950C", 688 .name = "DVBSky S950C",
689 .portb = CX23885_MPEG_DVB, 689 .portb = CX23885_MPEG_DVB,
690 }, 690 },
691 [CX23885_BOARD_TT_CT2_4500_CI] = {
692 .name = "Technotrend TT-budget CT2-4500 CI",
693 .portb = CX23885_MPEG_DVB,
694 },
691}; 695};
692const unsigned int cx23885_bcount = ARRAY_SIZE(cx23885_boards); 696const unsigned int cx23885_bcount = ARRAY_SIZE(cx23885_boards);
693 697
@@ -955,6 +959,10 @@ struct cx23885_subid cx23885_subids[] = {
955 .subvendor = 0x4254, 959 .subvendor = 0x4254,
956 .subdevice = 0x950c, 960 .subdevice = 0x950c,
957 .card = CX23885_BOARD_DVBSKY_S950C, 961 .card = CX23885_BOARD_DVBSKY_S950C,
962 }, {
963 .subvendor = 0x13c2,
964 .subdevice = 0x3013,
965 .card = CX23885_BOARD_TT_CT2_4500_CI,
958 }, 966 },
959}; 967};
960const unsigned int cx23885_idcount = ARRAY_SIZE(cx23885_subids); 968const unsigned int cx23885_idcount = ARRAY_SIZE(cx23885_subids);
@@ -1559,6 +1567,7 @@ void cx23885_gpio_setup(struct cx23885_dev *dev)
1559 break; 1567 break;
1560 case CX23885_BOARD_DVBSKY_T980C: 1568 case CX23885_BOARD_DVBSKY_T980C:
1561 case CX23885_BOARD_DVBSKY_S950C: 1569 case CX23885_BOARD_DVBSKY_S950C:
1570 case CX23885_BOARD_TT_CT2_4500_CI:
1562 /* 1571 /*
1563 * GPIO-0 INTA from CiMax, input 1572 * GPIO-0 INTA from CiMax, input
1564 * GPIO-1 reset CiMax, output, high active 1573 * GPIO-1 reset CiMax, output, high active
@@ -1671,6 +1680,7 @@ int cx23885_ir_init(struct cx23885_dev *dev)
1671 case CX23885_BOARD_DVBSKY_T9580: 1680 case CX23885_BOARD_DVBSKY_T9580:
1672 case CX23885_BOARD_DVBSKY_T980C: 1681 case CX23885_BOARD_DVBSKY_T980C:
1673 case CX23885_BOARD_DVBSKY_S950C: 1682 case CX23885_BOARD_DVBSKY_S950C:
1683 case CX23885_BOARD_TT_CT2_4500_CI:
1674 if (!enable_885_ir) 1684 if (!enable_885_ir)
1675 break; 1685 break;
1676 dev->sd_ir = cx23885_find_hw(dev, CX23885_HW_AV_CORE); 1686 dev->sd_ir = cx23885_find_hw(dev, CX23885_HW_AV_CORE);
@@ -1720,6 +1730,7 @@ void cx23885_ir_fini(struct cx23885_dev *dev)
1720 case CX23885_BOARD_DVBSKY_T9580: 1730 case CX23885_BOARD_DVBSKY_T9580:
1721 case CX23885_BOARD_DVBSKY_T980C: 1731 case CX23885_BOARD_DVBSKY_T980C:
1722 case CX23885_BOARD_DVBSKY_S950C: 1732 case CX23885_BOARD_DVBSKY_S950C:
1733 case CX23885_BOARD_TT_CT2_4500_CI:
1723 cx23885_irq_remove(dev, PCI_MSK_AV_CORE); 1734 cx23885_irq_remove(dev, PCI_MSK_AV_CORE);
1724 /* sd_ir is a duplicate pointer to the AV Core, just clear it */ 1735 /* sd_ir is a duplicate pointer to the AV Core, just clear it */
1725 dev->sd_ir = NULL; 1736 dev->sd_ir = NULL;
@@ -1770,6 +1781,7 @@ void cx23885_ir_pci_int_enable(struct cx23885_dev *dev)
1770 case CX23885_BOARD_DVBSKY_T9580: 1781 case CX23885_BOARD_DVBSKY_T9580:
1771 case CX23885_BOARD_DVBSKY_T980C: 1782 case CX23885_BOARD_DVBSKY_T980C:
1772 case CX23885_BOARD_DVBSKY_S950C: 1783 case CX23885_BOARD_DVBSKY_S950C:
1784 case CX23885_BOARD_TT_CT2_4500_CI:
1773 if (dev->sd_ir) 1785 if (dev->sd_ir)
1774 cx23885_irq_add_enable(dev, PCI_MSK_AV_CORE); 1786 cx23885_irq_add_enable(dev, PCI_MSK_AV_CORE);
1775 break; 1787 break;
@@ -1875,6 +1887,7 @@ void cx23885_card_setup(struct cx23885_dev *dev)
1875 case CX23885_BOARD_PROF_8000: 1887 case CX23885_BOARD_PROF_8000:
1876 case CX23885_BOARD_DVBSKY_T980C: 1888 case CX23885_BOARD_DVBSKY_T980C:
1877 case CX23885_BOARD_DVBSKY_S950C: 1889 case CX23885_BOARD_DVBSKY_S950C:
1890 case CX23885_BOARD_TT_CT2_4500_CI:
1878 ts1->gen_ctrl_val = 0x5; /* Parallel */ 1891 ts1->gen_ctrl_val = 0x5; /* Parallel */
1879 ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 1892 ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */
1880 ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 1893 ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
@@ -1995,6 +2008,7 @@ void cx23885_card_setup(struct cx23885_dev *dev)
1995 case CX23885_BOARD_DVBSKY_T9580: 2008 case CX23885_BOARD_DVBSKY_T9580:
1996 case CX23885_BOARD_DVBSKY_T980C: 2009 case CX23885_BOARD_DVBSKY_T980C:
1997 case CX23885_BOARD_DVBSKY_S950C: 2010 case CX23885_BOARD_DVBSKY_S950C:
2011 case CX23885_BOARD_TT_CT2_4500_CI:
1998 dev->sd_cx25840 = v4l2_i2c_new_subdev(&dev->v4l2_dev, 2012 dev->sd_cx25840 = v4l2_i2c_new_subdev(&dev->v4l2_dev,
1999 &dev->i2c_bus[2].i2c_adap, 2013 &dev->i2c_bus[2].i2c_adap,
2000 "cx25840", 0x88 >> 1, NULL); 2014 "cx25840", 0x88 >> 1, NULL);
diff --git a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/cx23885-dvb.c
index f82eb1881ac2..5e6caed6e389 100644
--- a/drivers/media/pci/cx23885/cx23885-dvb.c
+++ b/drivers/media/pci/cx23885/cx23885-dvb.c
@@ -1766,6 +1766,7 @@ static int dvb_register(struct cx23885_tsport *port)
1766 } 1766 }
1767 break; 1767 break;
1768 case CX23885_BOARD_DVBSKY_T980C: 1768 case CX23885_BOARD_DVBSKY_T980C:
1769 case CX23885_BOARD_TT_CT2_4500_CI:
1769 i2c_bus = &dev->i2c_bus[1]; 1770 i2c_bus = &dev->i2c_bus[1];
1770 i2c_bus2 = &dev->i2c_bus[0]; 1771 i2c_bus2 = &dev->i2c_bus[0];
1771 1772
@@ -1938,7 +1939,8 @@ static int dvb_register(struct cx23885_tsport *port)
1938 break; 1939 break;
1939 } 1940 }
1940 case CX23885_BOARD_DVBSKY_S950C: 1941 case CX23885_BOARD_DVBSKY_S950C:
1941 case CX23885_BOARD_DVBSKY_T980C: { 1942 case CX23885_BOARD_DVBSKY_T980C:
1943 case CX23885_BOARD_TT_CT2_4500_CI: {
1942 u8 eeprom[256]; /* 24C02 i2c eeprom */ 1944 u8 eeprom[256]; /* 24C02 i2c eeprom */
1943 1945
1944 /* attach CI */ 1946 /* attach CI */
@@ -1985,8 +1987,8 @@ static int dvb_register(struct cx23885_tsport *port)
1985 dev->i2c_bus[0].i2c_client.addr = 0xa0 >> 1; 1987 dev->i2c_bus[0].i2c_client.addr = 0xa0 >> 1;
1986 tveeprom_read(&dev->i2c_bus[0].i2c_client, eeprom, 1988 tveeprom_read(&dev->i2c_bus[0].i2c_client, eeprom,
1987 sizeof(eeprom)); 1989 sizeof(eeprom));
1988 printk(KERN_INFO "DVBSky T980C/S950C MAC address: %pM\n", 1990 printk(KERN_INFO "%s MAC address: %pM\n",
1989 eeprom + 0xc0); 1991 cx23885_boards[dev->board].name, eeprom + 0xc0);
1990 memcpy(port->frontends.adapter.proposed_mac, eeprom + 0xc0, 6); 1992 memcpy(port->frontends.adapter.proposed_mac, eeprom + 0xc0, 6);
1991 break; 1993 break;
1992 } 1994 }
diff --git a/drivers/media/pci/cx23885/cx23885-input.c b/drivers/media/pci/cx23885/cx23885-input.c
index 0bf6839cb04d..12d8a3de7df4 100644
--- a/drivers/media/pci/cx23885/cx23885-input.c
+++ b/drivers/media/pci/cx23885/cx23885-input.c
@@ -90,6 +90,7 @@ void cx23885_input_rx_work_handler(struct cx23885_dev *dev, u32 events)
90 case CX23885_BOARD_DVBSKY_T9580: 90 case CX23885_BOARD_DVBSKY_T9580:
91 case CX23885_BOARD_DVBSKY_T980C: 91 case CX23885_BOARD_DVBSKY_T980C:
92 case CX23885_BOARD_DVBSKY_S950C: 92 case CX23885_BOARD_DVBSKY_S950C:
93 case CX23885_BOARD_TT_CT2_4500_CI:
93 /* 94 /*
94 * The only boards we handle right now. However other boards 95 * The only boards we handle right now. However other boards
95 * using the CX2388x integrated IR controller should be similar 96 * using the CX2388x integrated IR controller should be similar
@@ -145,6 +146,7 @@ static int cx23885_input_ir_start(struct cx23885_dev *dev)
145 case CX23885_BOARD_DVBSKY_T9580: 146 case CX23885_BOARD_DVBSKY_T9580:
146 case CX23885_BOARD_DVBSKY_T980C: 147 case CX23885_BOARD_DVBSKY_T980C:
147 case CX23885_BOARD_DVBSKY_S950C: 148 case CX23885_BOARD_DVBSKY_S950C:
149 case CX23885_BOARD_TT_CT2_4500_CI:
148 /* 150 /*
149 * The IR controller on this board only returns pulse widths. 151 * The IR controller on this board only returns pulse widths.
150 * Any other mode setting will fail to set up the device. 152 * Any other mode setting will fail to set up the device.
@@ -319,6 +321,12 @@ int cx23885_input_init(struct cx23885_dev *dev)
319 allowed_protos = RC_BIT_ALL; 321 allowed_protos = RC_BIT_ALL;
320 rc_map = RC_MAP_DVBSKY; 322 rc_map = RC_MAP_DVBSKY;
321 break; 323 break;
324 case CX23885_BOARD_TT_CT2_4500_CI:
325 /* Integrated CX23885 IR controller */
326 driver_type = RC_DRIVER_IR_RAW;
327 allowed_protos = RC_BIT_ALL;
328 rc_map = RC_MAP_TT_1500;
329 break;
322 default: 330 default:
323 return -ENODEV; 331 return -ENODEV;
324 } 332 }
diff --git a/drivers/media/pci/cx23885/cx23885.h b/drivers/media/pci/cx23885/cx23885.h
index f6f6974ee824..7eee2ea18ede 100644
--- a/drivers/media/pci/cx23885/cx23885.h
+++ b/drivers/media/pci/cx23885/cx23885.h
@@ -95,6 +95,7 @@
95#define CX23885_BOARD_DVBSKY_T9580 45 95#define CX23885_BOARD_DVBSKY_T9580 45
96#define CX23885_BOARD_DVBSKY_T980C 46 96#define CX23885_BOARD_DVBSKY_T980C 46
97#define CX23885_BOARD_DVBSKY_S950C 47 97#define CX23885_BOARD_DVBSKY_S950C 47
98#define CX23885_BOARD_TT_CT2_4500_CI 48
98 99
99#define GPIO_0 0x00000001 100#define GPIO_0 0x00000001
100#define GPIO_1 0x00000002 101#define GPIO_1 0x00000002