[linux-dvb] Re: [video4linux-cvs] [hg:v4l-dvb] Add support for Opera S1- DVB-USB

Michael Krufky mkrufky at linuxtv.org
Thu Apr 19 20:25:00 CEST 2007


Marco Gittler wrote:
>>> +/* I2C */
>>> +
>>>     
>>
>> Looks like i2c is using the 8-bit addresses instead of 7-bit
>> addresses, just
>> like how m920x, gl861 and au6610 did at first...  This needs to be fixed.
>>   
> this seem very difficult. the device uses 16 bit (or better 2 byte for
> addressing something)
> the big problem ist that f.e. 0xb880 must READ data (remote-code) and
> another example
> voltage switch: the adress changes from 0xb600 to 0xb601. (both write to
> device)
> 
> so is not using standard i2c addresses and must be complete other handled.
> i mean a wrapper for the address stuff must be ni to make if full i2c
> comaptible.
> 
> the device is not the best i every saw ;), so the design is also not so
> nice.
> 
> any help how the convert from the addr to i2c addr can be done is welcome.

OK.  We will have time to revisit this issue -- just try to keep it in the back
of your mind.

>>  
>>> +static int opera1_usb_i2c_msgxfer(struct dvb_usb_device *dev, u16 addr,
>>> +               u8 * buf, u16 len, int flag)
>>> +{
>>> + int ret = 0;
>>> + u8 request;
>>> + u16 value;
>>> +
>>> + if (!dev) {
>>> +     info("no usb_device");
>>> +     return -EINVAL;
>>> + }
>>> + if (mutex_lock_interruptible(&dev->usb_mutex) < 0)
>>> +     return -EAGAIN;
>>> +
>>> + request = (addr & 0xff00) >> 8;
>>> + if (!request)
>>> +     request = 0xb1;
>>> + value = (addr & 0xff);
>>> + if (flag & OPERA_READ_MSG) {
>>> +     value |= 0x01;
>>> + }
>>> + if (request == 0xa0)
>>> +     value = 0xe600;
>>> + ret = opera1_xilinx_rw(dev->udev, request, value, buf, len, flag);
>>> +
>>> + mutex_unlock(&dev->usb_mutex);
>>> + return ret;
>>> +}
>>> +

[snip]

>>> +static int opera1_tuner_attach(struct dvb_usb_adapter *adap)
>>> +{
>>> + adap->pll_addr = 0xc0;
>>> + adap->pll_desc = &dvb_pll_opera1;
>>> + adap->fe->ops.tuner_ops.set_params = dvb_usb_tuner_set_params_i2c;
>>>     
>>
>> We should be using "dvb_attach(dvb_pll_attach, adap->fe, 0x60,
>> &adap->dev->i2c_adap, &dvb_pll_opera1)" here, instead.
>>
>> also, please note the usage of 8-bit i2c addr instead of standard 7-bit.
>>
>>
>>   
> done, except the i2c addr (reason is like above)

fine.  Once the i2c handling is converted, we'll change this as appropriate.
This will be OK in the meantime.

>>> + return 0;
>>> +}
>>> +

[snip]

>>> +static struct dvb_usb_device_properties opera1_properties = {
>>> + .caps = DVB_USB_IS_AN_I2C_ADAPTER,
>>> + .usb_ctrl = CYPRESS_FX2,
>>> + .firmware = "opera.fw",
>>>     
>>
>> Please see the other firmware names...  we should conform to the
>> standard, and
>> name it:
>>
>> "dvb-usb-opera-01.fw"
>>   
> done
> firmware extract utility is coming soon

OK.


> 
> ------------------------------------------------------------------------
> 

Thanks for the patch....  Please remember that your sign-off is required with
every patch, in order for us to apply it to the kernel source.

For THIS patch below, I submit my own:

Signed-off-by: Michael Krufky <mkrufky at linuxtv.org>

Please respond to this email with yours.

...there is still one trivial whitespace problem, though.  see below:


> diff -r c8b73ec18b42 linux/drivers/media/dvb/dvb-usb/dvb-usb-ids.h
> --- a/linux/drivers/media/dvb/dvb-usb/dvb-usb-ids.h	Thu Apr 19 12:04:50 2007 -0300
> +++ b/linux/drivers/media/dvb/dvb-usb/dvb-usb-ids.h	Thu Apr 19 19:04:37 2007 +0200
> @@ -32,13 +32,13 @@
>  #define USB_VID_LITEON				0x04ca
>  #define USB_VID_MEDION				0x1660
>  #define USB_VID_MSI				0x0db0
> +#define USB_VID_OPERA1				0x695c
>  #define USB_VID_PINNACLE			0x2304
>  #define USB_VID_VISIONPLUS			0x13d3
>  #define USB_VID_TWINHAN				0x1822
>  #define USB_VID_ULTIMA_ELECTRONIC		0x05d8
>  #define USB_VID_UNIWILL				0x1584
>  #define USB_VID_WIDEVIEW			0x14aa
> -#define USB_VID_OPERA1				0x695c
>  
>  /* Product IDs */
>  #define USB_PID_ADSTECH_USB2_COLD			0xa333
> diff -r c8b73ec18b42 linux/drivers/media/dvb/dvb-usb/opera1.c
> --- a/linux/drivers/media/dvb/dvb-usb/opera1.c	Thu Apr 19 12:04:50 2007 -0300
> +++ b/linux/drivers/media/dvb/dvb-usb/opera1.c	Thu Apr 19 19:53:36 2007 +0200
> @@ -256,9 +256,8 @@ static int opera1_frontend_attach(struct
>  
>  static int opera1_tuner_attach(struct dvb_usb_adapter *adap)
>  {
> -	adap->pll_addr = 0xc0;
> -	adap->pll_desc = &dvb_pll_opera1;
> -	adap->fe->ops.tuner_ops.set_params = dvb_usb_tuner_set_params_i2c;
> +	dvb_attach(dvb_pll_attach, adap->fe, 0xc0,
> +				  &adap->dev->i2c_adap, &dvb_pll_opera1);

the 1st char of "&adap->dev .......  "  should line up directly below the 1st
char of "dvb_pll_attach".  not a big problem, but should be fixed before commit.

>  	return 0;
>  }
>  
> @@ -478,7 +477,7 @@ static struct dvb_usb_device_properties 
>  static struct dvb_usb_device_properties opera1_properties = {
>  	.caps = DVB_USB_IS_AN_I2C_ADAPTER,
>  	.usb_ctrl = CYPRESS_FX2,
> -	.firmware = "opera.fw",
> +	.firmware = "dvb-usb-opera-01.fw",
>  	.size_of_priv = sizeof(struct opera1_state),
>  
>  	.power_ctrl = opera1_power_ctrl,
> @@ -533,7 +532,7 @@ static int opera1_probe(struct usb_inter
>  	if (udev->descriptor.idProduct == USB_PID_OPERA1_WARM &&
>  		udev->descriptor.idVendor == USB_VID_OPERA1 &&
>  		(d == NULL
> -			|| opera1_xilinx_load_firmware(udev, "opera1-fpga.fw") != 0)
> +			|| opera1_xilinx_load_firmware(udev, "dvb-usb-opera1-fpga.fw") != 0)
>  		) {
>  		return -EINVAL;
>  	}
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> linux-dvb mailing list
> linux-dvb at linuxtv.org
> http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb


-- 
Michael Krufky




More information about the linux-dvb mailing list