aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/em28xx/em28xx-cards.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video/em28xx/em28xx-cards.c')
-rw-r--r--drivers/media/video/em28xx/em28xx-cards.c50
1 files changed, 43 insertions, 7 deletions
diff --git a/drivers/media/video/em28xx/em28xx-cards.c b/drivers/media/video/em28xx/em28xx-cards.c
index c0fd5c6feeac..82da205047be 100644
--- a/drivers/media/video/em28xx/em28xx-cards.c
+++ b/drivers/media/video/em28xx/em28xx-cards.c
@@ -225,6 +225,14 @@ static struct em28xx_reg_seq silvercrest_reg_seq[] = {
225 { -1, -1, -1, -1}, 225 { -1, -1, -1, -1},
226}; 226};
227 227
228static struct em28xx_reg_seq vc211a_enable[] = {
229 {EM28XX_R08_GPIO, 0xff, 0x07, 10},
230 {EM28XX_R08_GPIO, 0xff, 0x0f, 10},
231 {EM28XX_R08_GPIO, 0xff, 0x0b, 10},
232 { -1, -1, -1, -1},
233};
234
235
228/* 236/*
229 * Board definitions 237 * Board definitions
230 */ 238 */
@@ -829,7 +837,7 @@ struct em28xx_board em28xx_boards[] = {
829 .mts_firmware = 1, 837 .mts_firmware = 1,
830 .has_dvb = 1, 838 .has_dvb = 1,
831 .dvb_gpio = hauppauge_wintv_hvr_900_digital, 839 .dvb_gpio = hauppauge_wintv_hvr_900_digital,
832 .ir_codes = &ir_codes_hauppauge_new_table, 840 .ir_codes = &ir_codes_rc5_hauppauge_new_table,
833 .decoder = EM28XX_TVP5150, 841 .decoder = EM28XX_TVP5150,
834 .input = { { 842 .input = { {
835 .type = EM28XX_VMUX_TELEVISION, 843 .type = EM28XX_VMUX_TELEVISION,
@@ -1009,6 +1017,23 @@ struct em28xx_board em28xx_boards[] = {
1009 .amux = EM28XX_AMUX_LINE_IN, 1017 .amux = EM28XX_AMUX_LINE_IN,
1010 } }, 1018 } },
1011 }, 1019 },
1020 [EM2800_BOARD_VC211A] = {
1021 .name = "Actionmaster/LinXcel/Digitus VC211A",
1022 .is_em2800 = 1,
1023 .tuner_type = TUNER_ABSENT, /* Capture-only board */
1024 .decoder = EM28XX_SAA711X,
1025 .input = { {
1026 .type = EM28XX_VMUX_COMPOSITE1,
1027 .vmux = SAA7115_COMPOSITE0,
1028 .amux = EM28XX_AMUX_LINE_IN,
1029 .gpio = vc211a_enable,
1030 }, {
1031 .type = EM28XX_VMUX_SVIDEO,
1032 .vmux = SAA7115_SVIDEO3,
1033 .amux = EM28XX_AMUX_LINE_IN,
1034 .gpio = vc211a_enable,
1035 } },
1036 },
1012 [EM2800_BOARD_LEADTEK_WINFAST_USBII] = { 1037 [EM2800_BOARD_LEADTEK_WINFAST_USBII] = {
1013 .name = "Leadtek Winfast USB II", 1038 .name = "Leadtek Winfast USB II",
1014 .is_em2800 = 1, 1039 .is_em2800 = 1,
@@ -1381,10 +1406,14 @@ struct em28xx_board em28xx_boards[] = {
1381 }, 1406 },
1382 [EM2882_BOARD_TERRATEC_HYBRID_XS] = { 1407 [EM2882_BOARD_TERRATEC_HYBRID_XS] = {
1383 .name = "Terratec Hybrid XS (em2882)", 1408 .name = "Terratec Hybrid XS (em2882)",
1384 .valid = EM28XX_BOARD_NOT_VALIDATED,
1385 .tuner_type = TUNER_XC2028, 1409 .tuner_type = TUNER_XC2028,
1386 .tuner_gpio = default_tuner_gpio, 1410 .tuner_gpio = default_tuner_gpio,
1411 .mts_firmware = 1,
1387 .decoder = EM28XX_TVP5150, 1412 .decoder = EM28XX_TVP5150,
1413 .has_dvb = 1,
1414 .dvb_gpio = hauppauge_wintv_hvr_900_digital,
1415 .ir_codes = &ir_codes_terratec_cinergy_xs_table,
1416 .xclk = EM28XX_XCLK_FREQUENCY_12MHZ,
1388 .input = { { 1417 .input = { {
1389 .type = EM28XX_VMUX_TELEVISION, 1418 .type = EM28XX_VMUX_TELEVISION,
1390 .vmux = TVP5150_COMPOSITE0, 1419 .vmux = TVP5150_COMPOSITE0,
@@ -1608,6 +1637,8 @@ struct usb_device_id em28xx_id_table[] = {
1608 .driver_info = EM2820_BOARD_UNKNOWN }, 1637 .driver_info = EM2820_BOARD_UNKNOWN },
1609 { USB_DEVICE(0xeb1a, 0x2861), 1638 { USB_DEVICE(0xeb1a, 0x2861),
1610 .driver_info = EM2820_BOARD_UNKNOWN }, 1639 .driver_info = EM2820_BOARD_UNKNOWN },
1640 { USB_DEVICE(0xeb1a, 0x2862),
1641 .driver_info = EM2820_BOARD_UNKNOWN },
1611 { USB_DEVICE(0xeb1a, 0x2870), 1642 { USB_DEVICE(0xeb1a, 0x2870),
1612 .driver_info = EM2820_BOARD_UNKNOWN }, 1643 .driver_info = EM2820_BOARD_UNKNOWN },
1613 { USB_DEVICE(0xeb1a, 0x2881), 1644 { USB_DEVICE(0xeb1a, 0x2881),
@@ -2050,6 +2081,7 @@ static void em28xx_setup_xc3028(struct em28xx *dev, struct xc2028_ctrl *ctl)
2050 switch (dev->model) { 2081 switch (dev->model) {
2051 case EM2880_BOARD_EMPIRE_DUAL_TV: 2082 case EM2880_BOARD_EMPIRE_DUAL_TV:
2052 case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900: 2083 case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900:
2084 case EM2882_BOARD_TERRATEC_HYBRID_XS:
2053 ctl->demod = XC3028_FE_ZARLINK456; 2085 ctl->demod = XC3028_FE_ZARLINK456;
2054 break; 2086 break;
2055 case EM2880_BOARD_TERRATEC_HYBRID_XS: 2087 case EM2880_BOARD_TERRATEC_HYBRID_XS:
@@ -2227,6 +2259,7 @@ static int em28xx_hint_board(struct em28xx *dev)
2227/* ----------------------------------------------------------------------- */ 2259/* ----------------------------------------------------------------------- */
2228void em28xx_register_i2c_ir(struct em28xx *dev) 2260void em28xx_register_i2c_ir(struct em28xx *dev)
2229{ 2261{
2262 struct i2c_board_info info;
2230 const unsigned short addr_list[] = { 2263 const unsigned short addr_list[] = {
2231 0x30, 0x47, I2C_CLIENT_END 2264 0x30, 0x47, I2C_CLIENT_END
2232 }; 2265 };
@@ -2234,9 +2267,9 @@ void em28xx_register_i2c_ir(struct em28xx *dev)
2234 if (disable_ir) 2267 if (disable_ir)
2235 return; 2268 return;
2236 2269
2237 memset(&dev->info, 0, sizeof(&dev->info)); 2270 memset(&info, 0, sizeof(struct i2c_board_info));
2238 memset(&dev->init_data, 0, sizeof(dev->init_data)); 2271 memset(&dev->init_data, 0, sizeof(dev->init_data));
2239 strlcpy(dev->info.type, "ir_video", I2C_NAME_SIZE); 2272 strlcpy(info.type, "ir_video", I2C_NAME_SIZE);
2240 2273
2241 /* detect & configure */ 2274 /* detect & configure */
2242 switch (dev->model) { 2275 switch (dev->model) {
@@ -2259,8 +2292,8 @@ void em28xx_register_i2c_ir(struct em28xx *dev)
2259 } 2292 }
2260 2293
2261 if (dev->init_data.name) 2294 if (dev->init_data.name)
2262 dev->info.platform_data = &dev->init_data; 2295 info.platform_data = &dev->init_data;
2263 i2c_new_probed_device(&dev->i2c_adap, &dev->info, addr_list); 2296 i2c_new_probed_device(&dev->i2c_adap, &info, addr_list);
2264} 2297}
2265 2298
2266void em28xx_card_setup(struct em28xx *dev) 2299void em28xx_card_setup(struct em28xx *dev)
@@ -2524,6 +2557,9 @@ static int em28xx_init_dev(struct em28xx **devhandle, struct usb_device *udev,
2524 dev->chip_id = retval; 2557 dev->chip_id = retval;
2525 2558
2526 switch (dev->chip_id) { 2559 switch (dev->chip_id) {
2560 case CHIP_ID_EM2800:
2561 em28xx_info("chip ID is em2800\n");
2562 break;
2527 case CHIP_ID_EM2710: 2563 case CHIP_ID_EM2710:
2528 em28xx_info("chip ID is em2710\n"); 2564 em28xx_info("chip ID is em2710\n");
2529 break; 2565 break;
@@ -2650,7 +2686,7 @@ static int em28xx_init_dev(struct em28xx **devhandle, struct usb_device *udev,
2650 em28xx_init_extension(dev); 2686 em28xx_init_extension(dev);
2651 2687
2652 /* Save some power by putting tuner to sleep */ 2688 /* Save some power by putting tuner to sleep */
2653 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_standby); 2689 v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_power, 0);
2654 2690
2655 return 0; 2691 return 0;
2656 2692