Re: [CDC-ACM] Linux USB "Reduced" CDC-ACM driver

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

 



Am Donnerstag 23 April 2009 15:57:55 schrieb Vincent:
> Thanks for your reply.
>
> > Get a usbmon trace showing a loss of data.
>
> I don't have this tool on my environment ... I'll get it, thanks for the
> tip.
>

You can find a HOWTO under Documentation/usb/usbmon.txt
in your kernel tree.

>  		list_del(&buf->list);
>
>  		rcv->buffer = buf;
> +	        if (acm->dev->quirks == TI_EZ430U)
> +                    rcv->urb->interval = 0xFF;

As I said this is a separate issue.

>  		usb_fill_bulk_urb(rcv->urb, acm->dev,
>  				  acm->rx_endpoint,
> @@ -916,7 +918,7 @@ static int acm_probe (struct usb_interfa
>  	num_rx_buf = (quirks == SINGLE_RX_URB) ? 1 : ACM_NR;
>
>  	/* handle quirks deadly to normal probing*/
> -	if (quirks == NO_UNION_NORMAL) {
> +	if (quirks == NO_UNION_NORMAL || quirks == TI_EZ430U) {

I don't understand why you define a quirk here. These devices should
be autodetectable by comparing the number of the probed interface
and the number of the data interface from the union descriptor.

>  		data_interface = usb_ifnum_to_if(usb_dev, 1);
>  		control_interface = usb_ifnum_to_if(usb_dev, 0);
>  		goto skip_normal_probe;
> @@ -1012,7 +1014,7 @@ skip_normal_probe:
>
>  	/*workaround for switched interfaces */
>  	if (data_interface->cur_altsetting->desc.bInterfaceClass !=
> CDC_DATA_INTERFACE_TYPE) {
> -		if (control_interface->cur_altsetting->desc.bInterfaceClass ==
> CDC_DATA_INTERFACE_TYPE) {
> +		if ( (control_interface->cur_altsetting->desc.bInterfaceClass ==
> CDC_DATA_INTERFACE_TYPE) || (quirks == TI_EZ430U) ) {
>  			struct usb_interface *t;
>  			dev_dbg(&intf->dev,"Your device has switched interfaces.\n");
>
> @@ -1038,7 +1040,7 @@ skip_normal_probe:
>  		return -EINVAL;
>
>  	epctrl = &control_interface->cur_altsetting->endpoint[0].desc;
> -	epread = &data_interface->cur_altsetting->endpoint[0].desc;
> +	epread = (quirks == TI_EZ430U) ?
> &data_interface->cur_altsetting->endpoint[1].desc :
> &data_interface->cur_altsetting->endpoint[0].desc;
>  	epwrite = &data_interface->cur_altsetting->endpoint[1].desc;

This should not be done. If we know a device violates the spec by having
only a single interface we should search the endpoints and not hardcode
the endpoints.

	Regards
		Oliver

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux