forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
kernel/drivers/media/usb/em28xx/em28xx-cards.c
....@@ -1958,7 +1958,7 @@
19581958 } },
19591959 },
19601960 [EM2882_BOARD_TERRATEC_HYBRID_XS] = {
1961
- .name = "Terratec Cinnergy Hybrid T USB XS (em2882)",
1961
+ .name = "Terratec Cinergy Hybrid T USB XS (em2882)",
19621962 .tuner_type = TUNER_XC2028,
19631963 .tuner_gpio = default_tuner_gpio,
19641964 .mts_firmware = 1,
....@@ -2398,6 +2398,20 @@
23982398 .ir_codes = RC_MAP_PINNACLE_PCTV_HD,
23992399 },
24002400 /*
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
+ /*
24012415 * 2013:025f PCTV tripleStick (292e).
24022416 * Empia EM28178, Silicon Labs Si2168, Silicon Labs Si2157
24032417 */
....@@ -2486,6 +2500,44 @@
24862500 .has_dual_ts = 1,
24872501 .ir_codes = RC_MAP_HAUPPAUGE,
24882502 .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
+ } },
24892541 },
24902542 };
24912543 EXPORT_SYMBOL_GPL(em28xx_boards);
....@@ -2666,6 +2718,8 @@
26662718 .driver_info = EM2860_BOARD_EASYCAP },
26672719 { USB_DEVICE(0x1b80, 0xe425),
26682720 .driver_info = EM2874_BOARD_MAXMEDIA_UB425_TC },
2721
+ { USB_DEVICE(0x1f4d, 0x1abe),
2722
+ .driver_info = EM2860_BOARD_MYGICA_IGRABBER },
26692723 { USB_DEVICE(0x2304, 0x0242),
26702724 .driver_info = EM2884_BOARD_PCTV_510E },
26712725 { USB_DEVICE(0x2013, 0x0251),
....@@ -2678,6 +2732,10 @@
26782732 .driver_info = EM2765_BOARD_SPEEDLINK_VAD_LAPLACE },
26792733 { USB_DEVICE(0x2013, 0x0258),
26802734 .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 },
26812739 { USB_DEVICE(0x2013, 0x025f),
26822740 .driver_info = EM28178_BOARD_PCTV_292E },
26832741 { USB_DEVICE(0x2013, 0x0264), /* Hauppauge WinTV-soloHD 292e SE */
....@@ -2696,6 +2754,8 @@
26962754 .driver_info = EM28178_BOARD_PLEX_PX_BCUD },
26972755 { USB_DEVICE(0xeb1a, 0x5051), /* Ion Video 2 PC MKII / Startech svid2usb23 / Raygo R12-41373 */
26982756 .driver_info = EM2860_BOARD_TVP5150_REFERENCE_DESIGN },
2757
+ { USB_DEVICE(0x1b80, 0xe349), /* Magix USB Videowandler-2 */
2758
+ .driver_info = EM2861_BOARD_MAGIX_VIDEOWANDLER2 },
26992759 { },
27002760 };
27012761 MODULE_DEVICE_TABLE(usb, em28xx_id_table);
....@@ -3572,13 +3632,12 @@
35723632 static int em28xx_duplicate_dev(struct em28xx *dev)
35733633 {
35743634 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);
35763636
35773637 if (!sec_dev) {
35783638 dev->dev_next = NULL;
35793639 return -ENOMEM;
35803640 }
3581
- memcpy(sec_dev, dev, sizeof(*sec_dev));
35823641 /* Check to see next free device and mark as used */
35833642 do {
35843643 nr = find_first_zero_bit(em28xx_devused, EM28XX_MAXBOARDS);
....@@ -3822,6 +3881,8 @@
38223881 goto err_free;
38233882 }
38243883
3884
+ kref_init(&dev->ref);
3885
+
38253886 dev->devno = nr;
38263887 dev->model = id->driver_info;
38273888 dev->alt = -1;
....@@ -3922,6 +3983,8 @@
39223983 }
39233984
39243985 if (dev->board.has_dual_ts && em28xx_duplicate_dev(dev) == 0) {
3986
+ kref_init(&dev->dev_next->ref);
3987
+
39253988 dev->dev_next->ts = SECONDARY_TS;
39263989 dev->dev_next->alt = -1;
39273990 dev->dev_next->is_audio_only = has_vendor_audio &&
....@@ -3976,11 +4039,7 @@
39764039 em28xx_write_reg(dev, 0x0b, 0x82);
39774040 mdelay(100);
39784041 }
3979
-
3980
- kref_init(&dev->dev_next->ref);
39814042 }
3982
-
3983
- kref_init(&dev->ref);
39844043
39854044 request_modules(dev);
39864045
....@@ -4036,11 +4095,8 @@
40364095
40374096 em28xx_close_extension(dev);
40384097
4039
- if (dev->dev_next) {
4040
- em28xx_close_extension(dev->dev_next);
4098
+ if (dev->dev_next)
40414099 em28xx_release_resources(dev->dev_next);
4042
- }
4043
-
40444100 em28xx_release_resources(dev);
40454101
40464102 if (dev->dev_next) {