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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html