Re: [PATCH 3/4] media: af9035: add support for Logilink VG0022A

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

 



> 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
> 



[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