I managed to get the implementation working for us using the following dirty 
patch for kernel 3.14,
-----------------------------------------------------------------------------------------------------
diff -u -r a/drivers/usb/gadget/f_fs.c b/drivers/usb/gadget/f_fs.c
--- a/drivers/usb/gadget/f_fs.c 2014-06-11 21:02:49.000000000 +0200
+++ b/drivers/usb/gadget/f_fs.c 2015-10-08 11:34:29.177420065 +0200
@@ -1449,8 +1449,9 @@
                break;
 
        case HID_DT_HID:
-               pr_vdebug("hid descriptor\n");
-               if (length != sizeof(struct hid_descriptor))
+               pr_vdebug("hid or sc device class descriptor\n");
+               if (length != sizeof(struct hid_descriptor) &&
+                               length != 0x36)
                        goto inv_length;
                break;
 
-----------------------------------------------------------------------------------------------------

It turns out that our main problem was passing the smart card device class 
descriptor to FunctionFS as the code in f_fs.c incorrectly identified our 
descriptor as a HID descriptor since HID_DT_HID == 0x21 which corresponds to 
the bDescriptorType value for a smart card device class descriptor. It looks 
like FunctionFS does not make provision for class descriptors specific to 
certain interfaces.

I also had to remove "USB wakeup signalling" from dwFeatures in our smart card 
class descriptor to get the implementation working on Windows.

This might help someone someday :-)

Cheers,
Pieter



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

Reply via email to