[linux-dvb] Linux DVB on Mac PowerPC (Yellow Dog Linux - Freecom USB and DEC2000-t)

Tim Hewett tghewett1 at onetel.com
Thu Dec 29 22:18:25 CET 2005


Johannes,

I have tested a merge of your patch and my removal of le16_to_cpu
on the latest CVS of the old dvb-kernel tree (the new v4l one doesn't
work for the DEC2000, there is a problem with setting the hardware
stream filters). It works fine.

HTH,

Tim.


On 18 Dec 2005, at 19:06, Johannes Stezenbach wrote:

> Hi Tim,
>
> On Mon, Dec 12, 2005, Tim Hewett wrote:
>> On 12 Dec 2005, at 12:11, Johannes Stezenbach wrote:
>>
>>>
>>> le16_to_cpu() does nothing on Intel.  But IIRC those le16_to_cpu()
>>> calls were added because of some other PPC user's complaints.
>>>
>>> See rev 1.63 in
>>> http://linuxtv.org/cgi-bin/viewcvs.cgi/v4l-dvb/linux/drivers/media/
>>> dvb/ttusb-dec/ttusb_dec.c?rev=1.77&root=v4l&view=log
>>>
>>> I need to check this. Does someone have a hint for me?
>
> As usual, no one cared to look into it :-(
>
> http://lwn.net/Articles/2.6-kernel-api/ suggests that
> the endianness of idProduct etc. changed in 2.6.11.
>
> So if someone cares about backwards compatibility with
> 2.6.10 or older on big endian platforms: I don't.
>
>
>>> Anyway, I noticed before that the switch() statement lacks a default
>>> label. Of course I thought "it can't happen, because _probe() won't
>>> be called for a wrong id"...
>>
>> At one point I was getting the printk after the second switch saying
>> "dvb-ttusb-dec: A frontend driver was not found for device 0x0810"
>> when the DEC2000's id is 0x1008. This was with the DEC having
>> been put into slave mode using my Mandrake 9.1 Pentium III (which
>> the DEC always worked fine with), then plugged into the iBook's
>> USB while still in slave mode - I think this allowed the driver to  
>> get
>> past the first switch without an exception. This was all before the
>> le19_to_cpu() calls were removed. It leaves me wondering whether
>> higher level kernel functions, e.g. the generic USB module, are
>> already resolving the byte ordering in the USB id, which is then
>> undone by the calls to le19_to_cpu() in the DEC driver on the PPC
>> arch. Clearly the printk shows that there is opposite byte ordering
>> to that expected by the switch.
>
> I'd like to commit the error handling fixes below, could you test  
> this?
>
> Thanks,
> Johannes
>
>
> Index: linux/drivers/media/dvb/ttusb-dec/ttusb_dec.c
> ===================================================================
> RCS file: /cvs/video4linux/v4l-dvb/linux/drivers/media/dvb/ttusb- 
> dec/ttusb_dec.c,v
> retrieving revision 1.77
> diff -u -p -r1.77 ttusb_dec.c
> --- linux/drivers/media/dvb/ttusb-dec/ttusb_dec.c	9 Dec 2005  
> 21:53:00 -0000	1.77
> +++ linux/drivers/media/dvb/ttusb-dec/ttusb_dec.c	18 Dec 2005  
> 18:48:19 -0000
> @@ -1601,6 +1601,7 @@ static int ttusb_dec_probe(struct usb_in
>  {
>  	struct usb_device *udev;
>  	struct ttusb_dec *dec;
> +	int rc;
>
>  	dprintk("%s\n", __FUNCTION__);
>
> @@ -1627,15 +1628,23 @@ static int ttusb_dec_probe(struct usb_in
>  	case 0x1009:
>  		ttusb_dec_set_model(dec, TTUSB_DEC2540T);
>  		break;
> +	default:
> +		printk("%s: invalid product id %04x\n",
> +		       __FUNCTION__, le16_to_cpu(id->idProduct));
> +		kfree(dec);
> +		return -ENXIO;
>  	}
>
>  	dec->udev = udev;
>
> -	if (ttusb_dec_init_usb(dec))
> -		return 0;
> -	if (ttusb_dec_init_stb(dec)) {
> +	if ((rc = ttusb_dec_init_usb(dec))) {
> +		kfree(dec);
> +		return rc;
> +	}
> +	if ((rc = ttusb_dec_init_stb(dec))) {
>  		ttusb_dec_exit_usb(dec);
> -		return 0;
> +		kfree(dec);
> +		return rc;
>  	}
>  	ttusb_dec_init_dvb(dec);
>
> @@ -1649,6 +1658,8 @@ static int ttusb_dec_probe(struct usb_in
>  	case 0x1009:
>  		dec->fe = ttusbdecfe_dvbt_attach(&fe_config);
>  		break;
> +	default:
> +		BUG();
>  	}
>
>  	if (dec->fe == NULL) {
>




More information about the linux-dvb mailing list