diff options
Diffstat (limited to 'drivers/media/video/em28xx/em28xx-cards.c')
-rw-r--r-- | drivers/media/video/em28xx/em28xx-cards.c | 50 |
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 | ||
228 | static 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 | /* ----------------------------------------------------------------------- */ |
2228 | void em28xx_register_i2c_ir(struct em28xx *dev) | 2260 | void 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 | ||
2266 | void em28xx_card_setup(struct em28xx *dev) | 2299 | void 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 | ||