aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/pci/cx23885/cx23885-cards.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/pci/cx23885/cx23885-cards.c')
-rw-r--r--drivers/media/pci/cx23885/cx23885-cards.c131
1 files changed, 131 insertions, 0 deletions
diff --git a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx23885/cx23885-cards.c
index 88c257d1161b..db99ca2613ba 100644
--- a/drivers/media/pci/cx23885/cx23885-cards.c
+++ b/drivers/media/pci/cx23885/cx23885-cards.c
@@ -680,6 +680,32 @@ struct cx23885_board cx23885_boards[] = {
680 .portb = CX23885_MPEG_DVB, 680 .portb = CX23885_MPEG_DVB,
681 .portc = CX23885_MPEG_DVB, 681 .portc = CX23885_MPEG_DVB,
682 }, 682 },
683 [CX23885_BOARD_DVBSKY_T980C] = {
684 .name = "DVBSky T980C",
685 .portb = CX23885_MPEG_DVB,
686 },
687 [CX23885_BOARD_DVBSKY_S950C] = {
688 .name = "DVBSky S950C",
689 .portb = CX23885_MPEG_DVB,
690 },
691 [CX23885_BOARD_TT_CT2_4500_CI] = {
692 .name = "Technotrend TT-budget CT2-4500 CI",
693 .portb = CX23885_MPEG_DVB,
694 },
695 [CX23885_BOARD_DVBSKY_S950] = {
696 .name = "DVBSky S950",
697 .portb = CX23885_MPEG_DVB,
698 },
699 [CX23885_BOARD_DVBSKY_S952] = {
700 .name = "DVBSky S952",
701 .portb = CX23885_MPEG_DVB,
702 .portc = CX23885_MPEG_DVB,
703 },
704 [CX23885_BOARD_DVBSKY_T982] = {
705 .name = "DVBSky T982",
706 .portb = CX23885_MPEG_DVB,
707 .portc = CX23885_MPEG_DVB,
708 },
683}; 709};
684const unsigned int cx23885_bcount = ARRAY_SIZE(cx23885_boards); 710const unsigned int cx23885_bcount = ARRAY_SIZE(cx23885_boards);
685 711
@@ -939,6 +965,30 @@ struct cx23885_subid cx23885_subids[] = {
939 .subvendor = 0x4254, 965 .subvendor = 0x4254,
940 .subdevice = 0x9580, 966 .subdevice = 0x9580,
941 .card = CX23885_BOARD_DVBSKY_T9580, 967 .card = CX23885_BOARD_DVBSKY_T9580,
968 }, {
969 .subvendor = 0x4254,
970 .subdevice = 0x980c,
971 .card = CX23885_BOARD_DVBSKY_T980C,
972 }, {
973 .subvendor = 0x4254,
974 .subdevice = 0x950c,
975 .card = CX23885_BOARD_DVBSKY_S950C,
976 }, {
977 .subvendor = 0x13c2,
978 .subdevice = 0x3013,
979 .card = CX23885_BOARD_TT_CT2_4500_CI,
980 }, {
981 .subvendor = 0x4254,
982 .subdevice = 0x0950,
983 .card = CX23885_BOARD_DVBSKY_S950,
984 }, {
985 .subvendor = 0x4254,
986 .subdevice = 0x0952,
987 .card = CX23885_BOARD_DVBSKY_S952,
988 }, {
989 .subvendor = 0x4254,
990 .subdevice = 0x0982,
991 .card = CX23885_BOARD_DVBSKY_T982,
942 }, 992 },
943}; 993};
944const unsigned int cx23885_idcount = ARRAY_SIZE(cx23885_subids); 994const unsigned int cx23885_idcount = ARRAY_SIZE(cx23885_subids);
@@ -1534,6 +1584,8 @@ void cx23885_gpio_setup(struct cx23885_dev *dev)
1534 mdelay(60); 1584 mdelay(60);
1535 break; 1585 break;
1536 case CX23885_BOARD_DVBSKY_T9580: 1586 case CX23885_BOARD_DVBSKY_T9580:
1587 case CX23885_BOARD_DVBSKY_S952:
1588 case CX23885_BOARD_DVBSKY_T982:
1537 /* enable GPIO3-18 pins */ 1589 /* enable GPIO3-18 pins */
1538 cx_write(MC417_CTL, 0x00000037); 1590 cx_write(MC417_CTL, 0x00000037);
1539 cx23885_gpio_enable(dev, GPIO_2 | GPIO_11, 1); 1591 cx23885_gpio_enable(dev, GPIO_2 | GPIO_11, 1);
@@ -1541,6 +1593,45 @@ void cx23885_gpio_setup(struct cx23885_dev *dev)
1541 mdelay(100); 1593 mdelay(100);
1542 cx23885_gpio_set(dev, GPIO_2 | GPIO_11); 1594 cx23885_gpio_set(dev, GPIO_2 | GPIO_11);
1543 break; 1595 break;
1596 case CX23885_BOARD_DVBSKY_T980C:
1597 case CX23885_BOARD_DVBSKY_S950C:
1598 case CX23885_BOARD_TT_CT2_4500_CI:
1599 /*
1600 * GPIO-0 INTA from CiMax, input
1601 * GPIO-1 reset CiMax, output, high active
1602 * GPIO-2 reset demod, output, low active
1603 * GPIO-3 to GPIO-10 data/addr for CAM
1604 * GPIO-11 ~CS0 to CiMax1
1605 * GPIO-12 ~CS1 to CiMax2
1606 * GPIO-13 ADL0 load LSB addr
1607 * GPIO-14 ADL1 load MSB addr
1608 * GPIO-15 ~RDY from CiMax
1609 * GPIO-17 ~RD to CiMax
1610 * GPIO-18 ~WR to CiMax
1611 */
1612
1613 cx_set(GP0_IO, 0x00060002); /* GPIO 1/2 as output */
1614 cx_clear(GP0_IO, 0x00010004); /* GPIO 0 as input */
1615 mdelay(100); /* reset delay */
1616 cx_set(GP0_IO, 0x00060004); /* GPIO as out, reset high */
1617 cx_clear(GP0_IO, 0x00010002);
1618 cx_write(MC417_CTL, 0x00000037); /* enable GPIO3-18 pins */
1619
1620 /* GPIO-15 IN as ~ACK, rest as OUT */
1621 cx_write(MC417_OEN, 0x00001000);
1622
1623 /* ~RD, ~WR high; ADL0, ADL1 low; ~CS0, ~CS1 high */
1624 cx_write(MC417_RWD, 0x0000c300);
1625
1626 /* enable irq */
1627 cx_write(GPIO_ISM, 0x00000000); /* INTERRUPTS active low */
1628 break;
1629 case CX23885_BOARD_DVBSKY_S950:
1630 cx23885_gpio_enable(dev, GPIO_2, 1);
1631 cx23885_gpio_clear(dev, GPIO_2);
1632 msleep(100);
1633 cx23885_gpio_set(dev, GPIO_2);
1634 break;
1544 } 1635 }
1545} 1636}
1546 1637
@@ -1621,6 +1712,13 @@ int cx23885_ir_init(struct cx23885_dev *dev)
1621 case CX23885_BOARD_MYGICA_X8507: 1712 case CX23885_BOARD_MYGICA_X8507:
1622 case CX23885_BOARD_TBS_6980: 1713 case CX23885_BOARD_TBS_6980:
1623 case CX23885_BOARD_TBS_6981: 1714 case CX23885_BOARD_TBS_6981:
1715 case CX23885_BOARD_DVBSKY_T9580:
1716 case CX23885_BOARD_DVBSKY_T980C:
1717 case CX23885_BOARD_DVBSKY_S950C:
1718 case CX23885_BOARD_TT_CT2_4500_CI:
1719 case CX23885_BOARD_DVBSKY_S950:
1720 case CX23885_BOARD_DVBSKY_S952:
1721 case CX23885_BOARD_DVBSKY_T982:
1624 if (!enable_885_ir) 1722 if (!enable_885_ir)
1625 break; 1723 break;
1626 dev->sd_ir = cx23885_find_hw(dev, CX23885_HW_AV_CORE); 1724 dev->sd_ir = cx23885_find_hw(dev, CX23885_HW_AV_CORE);
@@ -1667,6 +1765,13 @@ void cx23885_ir_fini(struct cx23885_dev *dev)
1667 case CX23885_BOARD_MYGICA_X8507: 1765 case CX23885_BOARD_MYGICA_X8507:
1668 case CX23885_BOARD_TBS_6980: 1766 case CX23885_BOARD_TBS_6980:
1669 case CX23885_BOARD_TBS_6981: 1767 case CX23885_BOARD_TBS_6981:
1768 case CX23885_BOARD_DVBSKY_T9580:
1769 case CX23885_BOARD_DVBSKY_T980C:
1770 case CX23885_BOARD_DVBSKY_S950C:
1771 case CX23885_BOARD_TT_CT2_4500_CI:
1772 case CX23885_BOARD_DVBSKY_S950:
1773 case CX23885_BOARD_DVBSKY_S952:
1774 case CX23885_BOARD_DVBSKY_T982:
1670 cx23885_irq_remove(dev, PCI_MSK_AV_CORE); 1775 cx23885_irq_remove(dev, PCI_MSK_AV_CORE);
1671 /* 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 */
1672 dev->sd_ir = NULL; 1777 dev->sd_ir = NULL;
@@ -1714,6 +1819,13 @@ void cx23885_ir_pci_int_enable(struct cx23885_dev *dev)
1714 case CX23885_BOARD_MYGICA_X8507: 1819 case CX23885_BOARD_MYGICA_X8507:
1715 case CX23885_BOARD_TBS_6980: 1820 case CX23885_BOARD_TBS_6980:
1716 case CX23885_BOARD_TBS_6981: 1821 case CX23885_BOARD_TBS_6981:
1822 case CX23885_BOARD_DVBSKY_T9580:
1823 case CX23885_BOARD_DVBSKY_T980C:
1824 case CX23885_BOARD_DVBSKY_S950C:
1825 case CX23885_BOARD_TT_CT2_4500_CI:
1826 case CX23885_BOARD_DVBSKY_S950:
1827 case CX23885_BOARD_DVBSKY_S952:
1828 case CX23885_BOARD_DVBSKY_T982:
1717 if (dev->sd_ir) 1829 if (dev->sd_ir)
1718 cx23885_irq_add_enable(dev, PCI_MSK_AV_CORE); 1830 cx23885_irq_add_enable(dev, PCI_MSK_AV_CORE);
1719 break; 1831 break;
@@ -1817,6 +1929,10 @@ void cx23885_card_setup(struct cx23885_dev *dev)
1817 case CX23885_BOARD_TEVII_S471: 1929 case CX23885_BOARD_TEVII_S471:
1818 case CX23885_BOARD_DVBWORLD_2005: 1930 case CX23885_BOARD_DVBWORLD_2005:
1819 case CX23885_BOARD_PROF_8000: 1931 case CX23885_BOARD_PROF_8000:
1932 case CX23885_BOARD_DVBSKY_T980C:
1933 case CX23885_BOARD_DVBSKY_S950C:
1934 case CX23885_BOARD_TT_CT2_4500_CI:
1935 case CX23885_BOARD_DVBSKY_S950:
1820 ts1->gen_ctrl_val = 0x5; /* Parallel */ 1936 ts1->gen_ctrl_val = 0x5; /* Parallel */
1821 ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 1937 ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */
1822 ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 1938 ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
@@ -1865,6 +1981,7 @@ void cx23885_card_setup(struct cx23885_dev *dev)
1865 ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 1981 ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
1866 break; 1982 break;
1867 case CX23885_BOARD_DVBSKY_T9580: 1983 case CX23885_BOARD_DVBSKY_T9580:
1984 case CX23885_BOARD_DVBSKY_T982:
1868 ts1->gen_ctrl_val = 0x5; /* Parallel */ 1985 ts1->gen_ctrl_val = 0x5; /* Parallel */
1869 ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 1986 ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */
1870 ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 1987 ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
@@ -1872,6 +1989,14 @@ void cx23885_card_setup(struct cx23885_dev *dev)
1872 ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 1989 ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */
1873 ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 1990 ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
1874 break; 1991 break;
1992 case CX23885_BOARD_DVBSKY_S952:
1993 ts1->gen_ctrl_val = 0x5; /* Parallel */
1994 ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */
1995 ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
1996 ts2->gen_ctrl_val = 0xe; /* Serial bus */
1997 ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */
1998 ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
1999 break;
1875 case CX23885_BOARD_HAUPPAUGE_HVR1250: 2000 case CX23885_BOARD_HAUPPAUGE_HVR1250:
1876 case CX23885_BOARD_HAUPPAUGE_HVR1500: 2001 case CX23885_BOARD_HAUPPAUGE_HVR1500:
1877 case CX23885_BOARD_HAUPPAUGE_HVR1500Q: 2002 case CX23885_BOARD_HAUPPAUGE_HVR1500Q:
@@ -1935,6 +2060,12 @@ void cx23885_card_setup(struct cx23885_dev *dev)
1935 case CX23885_BOARD_TBS_6980: 2060 case CX23885_BOARD_TBS_6980:
1936 case CX23885_BOARD_TBS_6981: 2061 case CX23885_BOARD_TBS_6981:
1937 case CX23885_BOARD_DVBSKY_T9580: 2062 case CX23885_BOARD_DVBSKY_T9580:
2063 case CX23885_BOARD_DVBSKY_T980C:
2064 case CX23885_BOARD_DVBSKY_S950C:
2065 case CX23885_BOARD_TT_CT2_4500_CI:
2066 case CX23885_BOARD_DVBSKY_S950:
2067 case CX23885_BOARD_DVBSKY_S952:
2068 case CX23885_BOARD_DVBSKY_T982:
1938 dev->sd_cx25840 = v4l2_i2c_new_subdev(&dev->v4l2_dev, 2069 dev->sd_cx25840 = v4l2_i2c_new_subdev(&dev->v4l2_dev,
1939 &dev->i2c_bus[2].i2c_adap, 2070 &dev->i2c_bus[2].i2c_adap,
1940 "cx25840", 0x88 >> 1, NULL); 2071 "cx25840", 0x88 >> 1, NULL);