Re: [PATCH] Backport MYGICA T230A adapter

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Vincent.

On 3/13/21 1:36 PM, Vincent Fortier wrote:
Hi all,

(first patch posting so don't hesitate to let me know where to find additional info to improve next time)

My advice is to do this on newer kernel. https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.11.6.tar.xz
So we can share it with the world.
I have all T230* receivers, so i can test t230a and also if it doesn't break the others.

Cheers,

Jan Pieter.


The following patch is a manual backport based on crazycat69 / linux_media git repository:

https://github.com/crazycat69/linux_media/commit/e1ef47d604775c550a8f0d1bda276c113f882c9b?branch=e1ef47d604775c550a8f0d1bda276c113f882c9b&diff=unified


MYGICA T230A support was found on the following thread:
https://forum.libreelec.tv/thread/23142-mygica-t230a/?pageNo=2

Built successfully over commit 069192365e2cec8b47f6e6701fb2aa50f763c602 (March 9th) on media_build git tree with driver snapshot from 2021-03-07-1c5ab1e2286f over Synology 4.4.59 / 4.4.60 kernels. Also built successfully over 3.10.105 using latest compatible snapshot from 2021-01-13 using driver version 2021-01-08-321af22a3d2f (as sadly pre-4.4 support was removed recently).

User thread confirming it to work under Synology NAS under 4.4.59 kernel available here:

https://github.com/th0ma7/synology/issues/9

Much thnx in advance.

- vin

---

diff -uprN ../linuxtv.orig/linux/drivers/media/usb/dvb-usb-v2/dvbsky.c ./linux/drivers/media/usb/dvb-usb-v2/dvbsky.c --- ../linuxtv.orig/linux/drivers/media/usb/dvb-usb-v2/dvbsky.c 2020-11-06 05:40:16.000000000 +0000 +++ ./linux/drivers/media/usb/dvb-usb-v2/dvbsky.c    2021-02-19 14:31:34.405091839 +0000
@@ -529,7 +529,7 @@ static int dvbsky_t330_attach(struct dvb
     return 0;
 }

-static int dvbsky_mygica_t230c_attach(struct dvb_usb_adapter *adap)
+static int dvbsky_mygica_t230_attach(struct dvb_usb_adapter *adap)
 {
     struct dvbsky_state *state = adap_to_priv(adap);
     struct dvb_usb_device *d = adap_to_d(adap);
@@ -541,7 +541,9 @@ static int dvbsky_mygica_t230c_attach(st
     si2168_config.i2c_adapter = &i2c_adapter;
     si2168_config.fe = &adap->fe[0];
     si2168_config.ts_mode = SI2168_TS_PARALLEL;
-    if (le16_to_cpu(d->udev->descriptor.idProduct) == USB_PID_MYGICA_T230C2) +    if (le16_to_cpu(d->udev->descriptor.idProduct) == USB_PID_MYGICA_T230C2 || +        le16_to_cpu(d->udev->descriptor.idProduct) == USB_PID_MYGICA_T230C2_LITE || +        le16_to_cpu(d->udev->descriptor.idProduct) == USB_PID_MYGICA_T230A)
         si2168_config.ts_mode |= SI2168_TS_CLK_MANUAL;
     si2168_config.ts_clock_inv = 1;

@@ -553,19 +555,26 @@ static int dvbsky_mygica_t230c_attach(st

     /* attach tuner */
     si2157_config.fe = adap->fe[0];
-    if (le16_to_cpu(d->udev->descriptor.idProduct) == USB_PID_MYGICA_T230) {
-        si2157_config.if_port = 1;
-        state->i2c_client_tuner = dvb_module_probe("si2157", NULL,
+    switch (le16_to_cpu(d->udev->descriptor.idProduct)) {
+    case USB_PID_MYGICA_T230C:
+    case USB_PID_MYGICA_T230C2:
+    case USB_PID_MYGICA_T230C2_LITE:
+    case USB_PID_MYGICA_T230A: {
+        si2157_config.if_port = 0;
+        state->i2c_client_tuner = dvb_module_probe("si2157", "si2141",
                                i2c_adapter,
                                0x60,
                                &si2157_config);
-    } else {
-        si2157_config.if_port = 0;
-        state->i2c_client_tuner = dvb_module_probe("si2157", "si2141",
+        break;
+    }
+    default: {
+        si2157_config.if_port = 1;
+        state->i2c_client_tuner = dvb_module_probe("si2157", NULL,
                                i2c_adapter,
                                0x60,
                                &si2157_config);
     }
+    }
     if (!state->i2c_client_tuner) {
         dvb_module_release(state->i2c_client_demod);
         return -ENODEV;
@@ -577,14 +586,24 @@ static int dvbsky_mygica_t230c_attach(st

 static int dvbsky_identify_state(struct dvb_usb_device *d, const char **name)
 {
-    dvbsky_gpio_ctrl(d, 0x04, 1);
-    msleep(20);
-    dvbsky_gpio_ctrl(d, 0x83, 0);
-    dvbsky_gpio_ctrl(d, 0xc0, 1);
-    msleep(100);
-    dvbsky_gpio_ctrl(d, 0x83, 1);
-    dvbsky_gpio_ctrl(d, 0xc0, 0);
-    msleep(50);
+    if (le16_to_cpu(d->udev->descriptor.idProduct) == USB_PID_MYGICA_T230A) {
+        dvbsky_gpio_ctrl(d, 0x87, 0);
+        msleep(20);
+        dvbsky_gpio_ctrl(d, 0x86, 1);
+        dvbsky_gpio_ctrl(d, 0x80, 0);
+        msleep(100);
+        dvbsky_gpio_ctrl(d, 0x80, 1);
+        msleep(50);
+    } else {
+        dvbsky_gpio_ctrl(d, 0x04, 1);
+        msleep(20);
+        dvbsky_gpio_ctrl(d, 0x83, 0);
+        dvbsky_gpio_ctrl(d, 0xc0, 1);
+        msleep(100);
+        dvbsky_gpio_ctrl(d, 0x83, 1);
+        dvbsky_gpio_ctrl(d, 0xc0, 0);
+        msleep(50);
+    }

     return WARM;
 }
@@ -719,7 +738,7 @@ static struct dvb_usb_device_properties
     }
 };

-static struct dvb_usb_device_properties mygica_t230c_props = {
+static struct dvb_usb_device_properties mygica_t230_props = {
     .driver_name = KBUILD_MODNAME,
     .owner = THIS_MODULE,
     .adapter_nr = adapter_nr,
@@ -730,7 +749,7 @@ static struct dvb_usb_device_properties
     .generic_bulk_ctrl_delay = DVBSKY_MSG_DELAY,

     .i2c_algo         = &dvbsky_i2c_algo,
-    .frontend_attach  = dvbsky_mygica_t230c_attach,
+    .frontend_attach  = dvbsky_mygica_t230_attach,
     .frontend_detach  = dvbsky_frontend_detach,
     .init             = dvbsky_init,
     .get_rc_config    = dvbsky_get_rc_config,
@@ -778,16 +797,22 @@ static const struct usb_device_id dvbsky
         &dvbsky_s960_props, "Terratec Cinergy S2 Rev.4",
         RC_MAP_DVBSKY) },
     { DVB_USB_DEVICE(USB_VID_CONEXANT, USB_PID_MYGICA_T230,
-        &mygica_t230c_props, "MyGica Mini DVB-(T/T2/C) USB Stick T230",
+        &mygica_t230_props, "MyGica Mini DVB-(T/T2/C) USB Stick T230",
         RC_MAP_TOTAL_MEDIA_IN_HAND_02) },
     { DVB_USB_DEVICE(USB_VID_CONEXANT, USB_PID_MYGICA_T230C,
-        &mygica_t230c_props, "MyGica Mini DVB-(T/T2/C) USB Stick T230C",
+        &mygica_t230_props, "MyGica Mini DVB-(T/T2/C) USB Stick T230C",
         RC_MAP_TOTAL_MEDIA_IN_HAND_02) },
     { DVB_USB_DEVICE(USB_VID_CONEXANT, USB_PID_MYGICA_T230C_LITE,
-        &mygica_t230c_props, "MyGica Mini DVB-(T/T2/C) USB Stick T230C Lite", +        &mygica_t230_props, "MyGica Mini DVB-(T/T2/C) USB Stick T230C Lite",
         NULL) },
     { DVB_USB_DEVICE(USB_VID_CONEXANT, USB_PID_MYGICA_T230C2,
-        &mygica_t230c_props, "MyGica Mini DVB-(T/T2/C) USB Stick T230C v2", +        &mygica_t230_props, "MyGica Mini DVB-(T/T2/C) USB Stick T230C v2",
+        RC_MAP_TOTAL_MEDIA_IN_HAND_02) },
+     { DVB_USB_DEVICE(USB_VID_CONEXANT, USB_PID_MYGICA_T230C2_LITE,
+        &mygica_t230_props, "MyGica Mini DVB-T2 USB Stick T230C Lite v2",
+        RC_MAP_TOTAL_MEDIA_IN_HAND_02) },
+    { DVB_USB_DEVICE(USB_VID_CONEXANT, USB_PID_MYGICA_T230A,
+        &mygica_t230_props, "MyGica Mini DVB-(T/T2/C) USB Stick T230A",
         RC_MAP_TOTAL_MEDIA_IN_HAND_02) },
     { }
 };
diff -uprN ../linuxtv.orig/linux/include/media/dvb-usb-ids.h ./linux/include/media/dvb-usb-ids.h --- ../linuxtv.orig/linux/include/media/dvb-usb-ids.h 2020-05-26 05:40:21.000000000 +0000 +++ ./linux/include/media/dvb-usb-ids.h    2021-02-19 14:27:21.459391941 +0000
@@ -394,6 +394,8 @@
 #define USB_PID_MYGICA_T230C                0xc689
 #define USB_PID_MYGICA_T230C2                0xc68a
 #define USB_PID_MYGICA_T230C_LITE            0xc699
+#define USB_PID_MYGICA_T230C2_LITE            0xc69a
+#define USB_PID_MYGICA_T230A                0x689a
 #define USB_PID_ELGATO_EYETV_DIVERSITY            0x0011
 #define USB_PID_ELGATO_EYETV_DTT            0x0021
 #define USB_PID_ELGATO_EYETV_DTT_2            0x003f






[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux