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

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

 



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.

> Maybe I am dense, but this supposes that you have two interfaces.
> It seems to me we have some kind of misunderstanding. Could you please
> 1. post "lsusb -v" for your device?


Bus 001 Device 004: ID 0451:f432 Texas Instruments, Inc.
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0         8
  idVendor           0x0451 Texas Instruments, Inc.
  idProduct          0xf432
  bcdDevice            1.00
  iManufacturer           1 Texas Instruments
  iProduct                2 Texas Instruments MSP-FET430UIF
  iSerial                 3 83FF598CDEC5112C
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           85
    bNumInterfaces          2
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           3
      bInterfaceClass         2 Communications
      bInterfaceSubClass      2 Abstract (modem)
      bInterfaceProtocol      1 AT-commands (v.25ter)
      iInterface              5 MSP430 Application UART
      CDC Header:
        bcdCDC               1.10
      CDC Call Management:
        bmCapabilities       0x00
        bDataInterface          0
      CDC ACM:
        bmCapabilities       0x02
          line coding and serial state
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval             255
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x03  EP 3 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval             255
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval             255
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 No Subclass
      bInterfaceProtocol      0 None
      iInterface              4 MSP430 Debug-Interface
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.01
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength     694
         Report Descriptors:
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1
Device Status:     0x0000
  (Bus Powered)


> 2. Repost the patch made with "diff -up"?

diff -up linux-orig/drivers/usb/class/cdc-acm.c
linux-new/drivers/usb/class/cdc-acm.c
--- linux-orig/drivers/usb/class/cdc-acm.c	2009-01-22 06:00:07.000000000 -0500
+++ linux-new/drivers/usb/class/cdc-acm.c	2009-04-19 10:34:01.000000000 -0400
@@ -445,6 +445,8 @@ urbs:
 		list_del(&buf->list);
 
 		rcv->buffer = buf;
+	        if (acm->dev->quirks == TI_EZ430U)
+                    rcv->urb->interval = 0xFF;
 
 		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) {
 		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;
 
 
@@ -1370,6 +1372,9 @@ static struct usb_device_id acm_ids[] = 
 	{ USB_DEVICE(0x0572, 0x1321), /* Conexant USB MODEM CX93010 */
 	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
 	},
+        { USB_DEVICE(0x0451, 0xF432), /* TI TUSB3410 */
+            .driver_info = TI_EZ430U,
+        },
 
 	/* control interfaces with various AT-command sets */
 	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
diff -up linux-orig/drivers/usb/class/cdc-acm.h
linux-new/drivers/usb/class/cdc-acm.h
--- linux-orig/drivers/usb/class/cdc-acm.h	2009-01-22 06:00:07.000000000 -0500
+++ linux-new/drivers/usb/class/cdc-acm.h	2009-04-19 10:34:01.000000000 -0400
@@ -134,3 +134,5 @@ struct acm {
 /* constants describing various quirks and errors */
 #define NO_UNION_NORMAL			1
 #define SINGLE_RX_URB			2
+#define TI_EZ430U                       3
+


Thanks for your help,

Regards.


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