aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video
diff options
context:
space:
mode:
authorDevin Heitmueller <dheitmueller@kernellabs.com>2009-06-18 23:33:54 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-06-23 02:14:21 -0400
commit19859229d7d98bc2d582ff45045dd7f73d649383 (patch)
treecdbed4c93686baea5375d29c103d3a31c35365c6 /drivers/media/video
parentcdf7bfa8926fb26d5900103ae09eb5f3eddb95cc (diff)
V4L/DVB (12101): em28xx: add support for EVGA inDtube
Add support for the EVGA inDtube. Both ATSC and analog side validated as fully functional. Thanks to Jake Crimmins from EVGA for providing the correct GPIO info. Thanks to Alan Hagge for doing all the device testing. Thanks to Greg Williamson for providing hardware for testing. Cc: Jake Crimmins <jcrimmins@evga.com> Cc: Alan Hagge <ahagge@gmail.com> Cc: Greg Williamson <cheeseboy16@gmail.com> Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video')
-rw-r--r--drivers/media/video/em28xx/em28xx-cards.c48
-rw-r--r--drivers/media/video/em28xx/em28xx-dvb.c1
-rw-r--r--drivers/media/video/em28xx/em28xx.h1
3 files changed, 50 insertions, 0 deletions
diff --git a/drivers/media/video/em28xx/em28xx-cards.c b/drivers/media/video/em28xx/em28xx-cards.c
index 0b6e5c7c3466..972c4addc406 100644
--- a/drivers/media/video/em28xx/em28xx-cards.c
+++ b/drivers/media/video/em28xx/em28xx-cards.c
@@ -139,6 +139,24 @@ static struct em28xx_reg_seq kworld_330u_digital[] = {
139 { -1, -1, -1, -1}, 139 { -1, -1, -1, -1},
140}; 140};
141 141
142/* Evga inDtube
143 GPIO0 - Enable digital power (s5h1409) - low to enable
144 GPIO1 - Enable analog power (tvp5150/emp202) - low to enable
145 GPIO4 - xc3028 reset
146 GOP3 - s5h1409 reset
147 */
148static struct em28xx_reg_seq evga_indtube_analog[] = {
149 {EM28XX_R08_GPIO, 0x79, 0xff, 60},
150 { -1, -1, -1, -1},
151};
152
153static struct em28xx_reg_seq evga_indtube_digital[] = {
154 {EM28XX_R08_GPIO, 0x7a, 0xff, 1},
155 {EM2880_R04_GPO, 0x04, 0xff, 10},
156 {EM2880_R04_GPO, 0x0c, 0xff, 1},
157 { -1, -1, -1, -1},
158};
159
142/* Callback for the most boards */ 160/* Callback for the most boards */
143static struct em28xx_reg_seq default_tuner_gpio[] = { 161static struct em28xx_reg_seq default_tuner_gpio[] = {
144 {EM28XX_R08_GPIO, EM_GPIO_4, EM_GPIO_4, 10}, 162 {EM28XX_R08_GPIO, EM_GPIO_4, EM_GPIO_4, 10},
@@ -1449,6 +1467,31 @@ struct em28xx_board em28xx_boards[] = {
1449 .gpio = terratec_av350_unmute_gpio, 1467 .gpio = terratec_av350_unmute_gpio,
1450 } }, 1468 } },
1451 }, 1469 },
1470 [EM2882_BOARD_EVGA_INDTUBE] = {
1471 .name = "Evga inDtube",
1472 .tuner_type = TUNER_XC2028,
1473 .tuner_gpio = default_tuner_gpio,
1474 .decoder = EM28XX_TVP5150,
1475 .mts_firmware = 1,
1476 .has_dvb = 1,
1477 .dvb_gpio = evga_indtube_digital,
1478 .input = { {
1479 .type = EM28XX_VMUX_TELEVISION,
1480 .vmux = TVP5150_COMPOSITE0,
1481 .amux = EM28XX_AMUX_VIDEO,
1482 .gpio = evga_indtube_analog,
1483 }, {
1484 .type = EM28XX_VMUX_COMPOSITE1,
1485 .vmux = TVP5150_COMPOSITE1,
1486 .amux = EM28XX_AMUX_LINE_IN,
1487 .gpio = evga_indtube_analog,
1488 }, {
1489 .type = EM28XX_VMUX_SVIDEO,
1490 .vmux = TVP5150_SVIDEO,
1491 .amux = EM28XX_AMUX_LINE_IN,
1492 .gpio = evga_indtube_analog,
1493 } },
1494 },
1452}; 1495};
1453const unsigned int em28xx_bcount = ARRAY_SIZE(em28xx_boards); 1496const unsigned int em28xx_bcount = ARRAY_SIZE(em28xx_boards);
1454 1497
@@ -1571,6 +1614,7 @@ static struct em28xx_hash_table em28xx_eeprom_hash[] = {
1571 {0x72cc5a8b, EM2820_BOARD_PROLINK_PLAYTV_BOX4_USB2, TUNER_YMEC_TVF_5533MF}, 1614 {0x72cc5a8b, EM2820_BOARD_PROLINK_PLAYTV_BOX4_USB2, TUNER_YMEC_TVF_5533MF},
1572 {0x966a0441, EM2880_BOARD_KWORLD_DVB_310U, TUNER_XC2028}, 1615 {0x966a0441, EM2880_BOARD_KWORLD_DVB_310U, TUNER_XC2028},
1573 {0x9567eb1a, EM2880_BOARD_EMPIRE_DUAL_TV, TUNER_XC2028}, 1616 {0x9567eb1a, EM2880_BOARD_EMPIRE_DUAL_TV, TUNER_XC2028},
1617 {0xcee44a99, EM2882_BOARD_EVGA_INDTUBE, TUNER_XC2028},
1574}; 1618};
1575 1619
1576/* I2C devicelist hash table for devices with generic USB IDs */ 1620/* I2C devicelist hash table for devices with generic USB IDs */
@@ -1834,6 +1878,10 @@ static void em28xx_setup_xc3028(struct em28xx *dev, struct xc2028_ctrl *ctl)
1834 ctl->demod = XC3028_FE_CHINA; 1878 ctl->demod = XC3028_FE_CHINA;
1835 ctl->fname = XC2028_DEFAULT_FIRMWARE; 1879 ctl->fname = XC2028_DEFAULT_FIRMWARE;
1836 break; 1880 break;
1881 case EM2882_BOARD_EVGA_INDTUBE:
1882 ctl->demod = XC3028_FE_CHINA;
1883 ctl->fname = XC3028L_DEFAULT_FIRMWARE;
1884 break;
1837 default: 1885 default:
1838 ctl->demod = XC3028_FE_OREN538; 1886 ctl->demod = XC3028_FE_OREN538;
1839 } 1887 }
diff --git a/drivers/media/video/em28xx/em28xx-dvb.c b/drivers/media/video/em28xx/em28xx-dvb.c
index 563dd2b1c8e9..e7b47c8da8f3 100644
--- a/drivers/media/video/em28xx/em28xx-dvb.c
+++ b/drivers/media/video/em28xx/em28xx-dvb.c
@@ -445,6 +445,7 @@ static int dvb_init(struct em28xx *dev)
445 } 445 }
446 break; 446 break;
447 case EM2883_BOARD_KWORLD_HYBRID_330U: 447 case EM2883_BOARD_KWORLD_HYBRID_330U:
448 case EM2882_BOARD_EVGA_INDTUBE:
448 dvb->frontend = dvb_attach(s5h1409_attach, 449 dvb->frontend = dvb_attach(s5h1409_attach,
449 &em28xx_s5h1409_with_xc3028, 450 &em28xx_s5h1409_with_xc3028,
450 &dev->i2c_adap); 451 &dev->i2c_adap);
diff --git a/drivers/media/video/em28xx/em28xx.h b/drivers/media/video/em28xx/em28xx.h
index 8bf81be1da61..813ce45c2f99 100644
--- a/drivers/media/video/em28xx/em28xx.h
+++ b/drivers/media/video/em28xx/em28xx.h
@@ -106,6 +106,7 @@
106#define EM2860_BOARD_TERRATEC_GRABBY 67 106#define EM2860_BOARD_TERRATEC_GRABBY 67
107#define EM2860_BOARD_TERRATEC_AV350 68 107#define EM2860_BOARD_TERRATEC_AV350 68
108#define EM2882_BOARD_KWORLD_ATSC_315U 69 108#define EM2882_BOARD_KWORLD_ATSC_315U 69
109#define EM2882_BOARD_EVGA_INDTUBE 70
109 110
110/* Limits minimum and default number of buffers */ 111/* Limits minimum and default number of buffers */
111#define EM28XX_MIN_BUF 4 112#define EM28XX_MIN_BUF 4