.. | .. |
---|
1958 | 1958 | } }, |
---|
1959 | 1959 | }, |
---|
1960 | 1960 | [EM2882_BOARD_TERRATEC_HYBRID_XS] = { |
---|
1961 | | - .name = "Terratec Cinnergy Hybrid T USB XS (em2882)", |
---|
| 1961 | + .name = "Terratec Cinergy Hybrid T USB XS (em2882)", |
---|
1962 | 1962 | .tuner_type = TUNER_XC2028, |
---|
1963 | 1963 | .tuner_gpio = default_tuner_gpio, |
---|
1964 | 1964 | .mts_firmware = 1, |
---|
.. | .. |
---|
2398 | 2398 | .ir_codes = RC_MAP_PINNACLE_PCTV_HD, |
---|
2399 | 2399 | }, |
---|
2400 | 2400 | /* |
---|
| 2401 | + * 2013:0259 PCTV DVB-S2 Stick (461e_v2) |
---|
| 2402 | + * Empia EM28178, Montage M88DS3103b, Montage M88TS2022, Allegro A8293 |
---|
| 2403 | + */ |
---|
| 2404 | + [EM28178_BOARD_PCTV_461E_V2] = { |
---|
| 2405 | + .def_i2c_bus = 1, |
---|
| 2406 | + .i2c_speed = EM28XX_I2C_CLK_WAIT_ENABLE | |
---|
| 2407 | + EM28XX_I2C_FREQ_400_KHZ, |
---|
| 2408 | + .name = "PCTV DVB-S2 Stick (461e v2)", |
---|
| 2409 | + .tuner_type = TUNER_ABSENT, |
---|
| 2410 | + .tuner_gpio = pctv_461e, |
---|
| 2411 | + .has_dvb = 1, |
---|
| 2412 | + .ir_codes = RC_MAP_PINNACLE_PCTV_HD, |
---|
| 2413 | + }, |
---|
| 2414 | + /* |
---|
2401 | 2415 | * 2013:025f PCTV tripleStick (292e). |
---|
2402 | 2416 | * Empia EM28178, Silicon Labs Si2168, Silicon Labs Si2157 |
---|
2403 | 2417 | */ |
---|
.. | .. |
---|
2486 | 2500 | .has_dual_ts = 1, |
---|
2487 | 2501 | .ir_codes = RC_MAP_HAUPPAUGE, |
---|
2488 | 2502 | .leds = hauppauge_dualhd_leds, |
---|
| 2503 | + }, |
---|
| 2504 | + /* |
---|
| 2505 | + * 1b80:e349 Magix USB Videowandler-2 |
---|
| 2506 | + * (same chips as Honestech VIDBOX NW03) |
---|
| 2507 | + * Empia EM2860, Philips SAA7113, Empia EMP202, No Tuner |
---|
| 2508 | + */ |
---|
| 2509 | + [EM2861_BOARD_MAGIX_VIDEOWANDLER2] = { |
---|
| 2510 | + .name = "Magix USB Videowandler-2", |
---|
| 2511 | + .tuner_type = TUNER_ABSENT, |
---|
| 2512 | + .decoder = EM28XX_SAA711X, |
---|
| 2513 | + .input = { { |
---|
| 2514 | + .type = EM28XX_VMUX_COMPOSITE, |
---|
| 2515 | + .vmux = SAA7115_COMPOSITE0, |
---|
| 2516 | + .amux = EM28XX_AMUX_LINE_IN, |
---|
| 2517 | + }, { |
---|
| 2518 | + .type = EM28XX_VMUX_SVIDEO, |
---|
| 2519 | + .amux = EM28XX_AMUX_LINE_IN, |
---|
| 2520 | + } }, |
---|
| 2521 | + }, |
---|
| 2522 | + /* |
---|
| 2523 | + * 1f4d:1abe MyGica iGrabber |
---|
| 2524 | + * (same as several other EM2860 devices) |
---|
| 2525 | + * Empia EM2860, Philips SAA7113, Empia EMP202, No Tuner |
---|
| 2526 | + */ |
---|
| 2527 | + [EM2860_BOARD_MYGICA_IGRABBER] = { |
---|
| 2528 | + .name = "MyGica iGrabber", |
---|
| 2529 | + .vchannels = 2, |
---|
| 2530 | + .tuner_type = TUNER_ABSENT, |
---|
| 2531 | + .decoder = EM28XX_SAA711X, |
---|
| 2532 | + .input = { { |
---|
| 2533 | + .type = EM28XX_VMUX_COMPOSITE, |
---|
| 2534 | + .vmux = SAA7115_COMPOSITE0, |
---|
| 2535 | + .amux = EM28XX_AMUX_LINE_IN, |
---|
| 2536 | + }, { |
---|
| 2537 | + .type = EM28XX_VMUX_SVIDEO, |
---|
| 2538 | + .vmux = SAA7115_SVIDEO3, |
---|
| 2539 | + .amux = EM28XX_AMUX_LINE_IN, |
---|
| 2540 | + } }, |
---|
2489 | 2541 | }, |
---|
2490 | 2542 | }; |
---|
2491 | 2543 | EXPORT_SYMBOL_GPL(em28xx_boards); |
---|
.. | .. |
---|
2666 | 2718 | .driver_info = EM2860_BOARD_EASYCAP }, |
---|
2667 | 2719 | { USB_DEVICE(0x1b80, 0xe425), |
---|
2668 | 2720 | .driver_info = EM2874_BOARD_MAXMEDIA_UB425_TC }, |
---|
| 2721 | + { USB_DEVICE(0x1f4d, 0x1abe), |
---|
| 2722 | + .driver_info = EM2860_BOARD_MYGICA_IGRABBER }, |
---|
2669 | 2723 | { USB_DEVICE(0x2304, 0x0242), |
---|
2670 | 2724 | .driver_info = EM2884_BOARD_PCTV_510E }, |
---|
2671 | 2725 | { USB_DEVICE(0x2013, 0x0251), |
---|
.. | .. |
---|
2678 | 2732 | .driver_info = EM2765_BOARD_SPEEDLINK_VAD_LAPLACE }, |
---|
2679 | 2733 | { USB_DEVICE(0x2013, 0x0258), |
---|
2680 | 2734 | .driver_info = EM28178_BOARD_PCTV_461E }, |
---|
| 2735 | + { USB_DEVICE(0x2013, 0x0461), |
---|
| 2736 | + .driver_info = EM28178_BOARD_PCTV_461E_V2 }, |
---|
| 2737 | + { USB_DEVICE(0x2013, 0x0259), |
---|
| 2738 | + .driver_info = EM28178_BOARD_PCTV_461E_V2 }, |
---|
2681 | 2739 | { USB_DEVICE(0x2013, 0x025f), |
---|
2682 | 2740 | .driver_info = EM28178_BOARD_PCTV_292E }, |
---|
2683 | 2741 | { USB_DEVICE(0x2013, 0x0264), /* Hauppauge WinTV-soloHD 292e SE */ |
---|
.. | .. |
---|
2696 | 2754 | .driver_info = EM28178_BOARD_PLEX_PX_BCUD }, |
---|
2697 | 2755 | { USB_DEVICE(0xeb1a, 0x5051), /* Ion Video 2 PC MKII / Startech svid2usb23 / Raygo R12-41373 */ |
---|
2698 | 2756 | .driver_info = EM2860_BOARD_TVP5150_REFERENCE_DESIGN }, |
---|
| 2757 | + { USB_DEVICE(0x1b80, 0xe349), /* Magix USB Videowandler-2 */ |
---|
| 2758 | + .driver_info = EM2861_BOARD_MAGIX_VIDEOWANDLER2 }, |
---|
2699 | 2759 | { }, |
---|
2700 | 2760 | }; |
---|
2701 | 2761 | MODULE_DEVICE_TABLE(usb, em28xx_id_table); |
---|
.. | .. |
---|
3572 | 3632 | static int em28xx_duplicate_dev(struct em28xx *dev) |
---|
3573 | 3633 | { |
---|
3574 | 3634 | int nr; |
---|
3575 | | - struct em28xx *sec_dev = kzalloc(sizeof(*sec_dev), GFP_KERNEL); |
---|
| 3635 | + struct em28xx *sec_dev = kmemdup(dev, sizeof(*sec_dev), GFP_KERNEL); |
---|
3576 | 3636 | |
---|
3577 | 3637 | if (!sec_dev) { |
---|
3578 | 3638 | dev->dev_next = NULL; |
---|
3579 | 3639 | return -ENOMEM; |
---|
3580 | 3640 | } |
---|
3581 | | - memcpy(sec_dev, dev, sizeof(*sec_dev)); |
---|
3582 | 3641 | /* Check to see next free device and mark as used */ |
---|
3583 | 3642 | do { |
---|
3584 | 3643 | nr = find_first_zero_bit(em28xx_devused, EM28XX_MAXBOARDS); |
---|
.. | .. |
---|
3822 | 3881 | goto err_free; |
---|
3823 | 3882 | } |
---|
3824 | 3883 | |
---|
| 3884 | + kref_init(&dev->ref); |
---|
| 3885 | + |
---|
3825 | 3886 | dev->devno = nr; |
---|
3826 | 3887 | dev->model = id->driver_info; |
---|
3827 | 3888 | dev->alt = -1; |
---|
.. | .. |
---|
3922 | 3983 | } |
---|
3923 | 3984 | |
---|
3924 | 3985 | if (dev->board.has_dual_ts && em28xx_duplicate_dev(dev) == 0) { |
---|
| 3986 | + kref_init(&dev->dev_next->ref); |
---|
| 3987 | + |
---|
3925 | 3988 | dev->dev_next->ts = SECONDARY_TS; |
---|
3926 | 3989 | dev->dev_next->alt = -1; |
---|
3927 | 3990 | dev->dev_next->is_audio_only = has_vendor_audio && |
---|
.. | .. |
---|
3976 | 4039 | em28xx_write_reg(dev, 0x0b, 0x82); |
---|
3977 | 4040 | mdelay(100); |
---|
3978 | 4041 | } |
---|
3979 | | - |
---|
3980 | | - kref_init(&dev->dev_next->ref); |
---|
3981 | 4042 | } |
---|
3982 | | - |
---|
3983 | | - kref_init(&dev->ref); |
---|
3984 | 4043 | |
---|
3985 | 4044 | request_modules(dev); |
---|
3986 | 4045 | |
---|
.. | .. |
---|
4036 | 4095 | |
---|
4037 | 4096 | em28xx_close_extension(dev); |
---|
4038 | 4097 | |
---|
4039 | | - if (dev->dev_next) { |
---|
4040 | | - em28xx_close_extension(dev->dev_next); |
---|
| 4098 | + if (dev->dev_next) |
---|
4041 | 4099 | em28xx_release_resources(dev->dev_next); |
---|
4042 | | - } |
---|
4043 | | - |
---|
4044 | 4100 | em28xx_release_resources(dev); |
---|
4045 | 4101 | |
---|
4046 | 4102 | if (dev->dev_next) { |
---|