Re: OOPS after connection Droids MuIn USB display

Erik Slagter
2011-05-10T18:25:57Z

[-- Attachment #1.1: Type: text/plain, Size: 466 bytes --]

On 07-05-11 22:02, Greg KH wrote:
> On Sat, May 07, 2011 at 09:02:49AM +0200, Erik Slagter wrote:
>>> Congratulations and thanks for explaining the details.
>> And now my big question is, can this be fixed upstream? ;-)
> Yes, if someone sends us a patch :)

Hi Greg,

Maxin John has been so kind as to make a patch which I tested and
tweaked a tiny bit. The attached patch set should do the trick. Does
this suffice this way?

Thanks,
Erik Slagter.

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: diff-cdc-acm.c --]
[-- Type: text/x-csrc; name="diff-cdc-acm.c", Size: 1254 bytes --]

--- cdc-acm.c-dist 2011-05-10 19:42:37.000000000 +0200
+++ cdc-acm.c 2011-05-10 19:50:07.000000000 +0200
@@ -946,7 +946,7 @@
u8 ac_management_function = 0;
u8 call_management_function = 0;
int call_interface_num = -1;
- int data_interface_num;
+ int data_interface_num = -1;
unsigned long quirks;
int num_rx_buf;
int i;
@@ -1030,7 +1030,11 @@
if (!union_header) {
if (call_interface_num > 0) {
dev_dbg(&intf->dev, "No union descriptor, using call management descriptor\n");
- data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = call_interface_num));
+ /* quirks for Droids MuIn LCD */
+ if (quirks & NO_DATA_INTERFACE)
+ data_interface = usb_ifnum_to_if(usb_dev, 0);
+ else
+ data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = call_interface_num));
control_interface = intf;
} else {
if (intf->cur_altsetting->desc.bNumEndpoints != 3) {
@@ -1622,6 +1626,11 @@
.driver_info = NOT_A_MODEM,
},

+ /* Support for Droids MuIn LCD */
+ { USB_DEVICE(0x04d8, 0x000b),
+ .driver_info = NO_DATA_INTERFACE,
+ },
+
/* control interfaces without any protocol set */
{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
USB_CDC_PROTO_NONE) },

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.3: diff-cdc-acm.h --]
[-- Type: text/x-chdr; name="diff-cdc-acm.h", Size: 240 bytes --]

--- cdc-acm.h-dist 2011-05-10 19:43:18.000000000 +0200
+++ cdc-acm.h 2011-05-10 19:43:40.000000000 +0200
@@ -137,3 +137,4 @@
#define SINGLE_RX_URB 2
#define NO_CAP_LINE 4
#define NOT_A_MODEM 8
+#define NO_DATA_INTERFACE 16