> This it930x-based device has an issue with si2068. > > When the si2168 firmware that came with the device is replaced > by a new one, any I2C data received from the tuner will be > replaced by 0xff. > > Probably, the vendor firmware has some patch specifically > designed for this device. So, we can't replace by the generic > firmware. > > The right solution would be to extract the si2168 firmware from > the original driver and ask the driver to load the specifically > designed firmware, but, while we don't have that, the next best > solution is to just keep the original firmware at the device. Unfortunately, after applying these four patches it doesn't work for me. The messages when inserting the stick: [ 244.133448] i2c i2c-1: Added multiplexed i2c bus 2 [ 244.133455] si2168 1-0067: Silicon Labs Si2168-B40 successfully identified [ 244.133458] si2168 1-0067: firmware version: B 4.0.2 [ 244.133500] usb 2-1: DVB: registering adapter 0 frontend 0 (Silicon Labs Si2168)... [ 244.133514] dvbdev: dvb_create_media_entity: media entity 'Silicon Labs Si2168' registered. [ 244.138367] si2157 2-0063: Silicon Labs Si2147/2148/2157/2158 successfully attached [ 244.156956] usb 2-1: dvb_usb_v2: 'Logilink VG0022A' successfully initialized and connected The messages when starting VLC: [ 260.490253] si2157 2-0063: found a 'Silicon Labs Si2147-A30' [ 260.541347] si2157 2-0063: firmware version: 3.0.5 But it doesn't work. :( g > > For more details, see the discussions at: > https://lore.kernel.org/linux-media/20191002141359.30166-2-gonsolo@xxxxxxxxx/ > > Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@xxxxxxxxxx> > --- > drivers/media/usb/dvb-usb-v2/af9035.c | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/drivers/media/usb/dvb-usb-v2/af9035.c b/drivers/media/usb/dvb-usb-v2/af9035.c > index 3afd18733614..e555483c3077 100644 > --- a/drivers/media/usb/dvb-usb-v2/af9035.c > +++ b/drivers/media/usb/dvb-usb-v2/af9035.c > @@ -1255,6 +1255,23 @@ static int it930x_frontend_attach(struct dvb_usb_adapter *adap) > si2168_config.fe = &adap->fe[0]; > si2168_config.ts_mode = SI2168_TS_SERIAL; > > + /* > + * HACK: The Logilink VG0022A has a bug: when the si2168 > + * firmware that came with the device is replaced by a new > + * one, the I2C transfers to the tuner will return just 0xff. > + * > + * Probably, the vendor firmware has some patch specifically > + * designed for this device. So, we can't replace by the > + * generic firmware. The right solution would be to extract > + * the si2168 firmware from the original driver and ask the > + * driver to load the specifically designed firmware, but, > + * while we don't have that, the next best solution is to just > + * keep the original firmware at the device. > + */ > + if (le16_to_cpu(d->udev->descriptor.idVendor) == USB_VID_DEXATEK && > + le16_to_cpu(d->udev->descriptor.idProduct) == 0x0100) > + si2168_config.dont_load_firmware = true; > + > state->af9033_config[adap->id].fe = &adap->fe[0]; > state->af9033_config[adap->id].ops = &state->ops; > ret = af9035_add_i2c_dev(d, "si2168", > @@ -2121,6 +2138,8 @@ static const struct usb_device_id af9035_id_table[] = { > &it930x_props, "ITE 9303 Generic", NULL) }, > { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_TD310, > &it930x_props, "AVerMedia TD310 DVB-T2", NULL) }, > + { DVB_USB_DEVICE(USB_VID_DEXATEK, 0x0100, > + &it930x_props, "Logilink VG0022A", NULL) }, > { } > }; > MODULE_DEVICE_TABLE(usb, af9035_id_table); > -- > 2.21.0 >