>>881のつづき。
修正の方針は、Alternate Settingsが複数ある場合はSet-Interfaceするという、
なんか、今見直してみると自分でもなんでこうしたんだか、みたいな?
OBEX(f_obex.c)の方に悪影響がないといいんですが。
--- drivers/usb/core/hub.c.org_2.6.35 2010-08-02 07:11:14.000000000 +0900
+++ drivers/usb/core/hub.c 2010-09-02 22:37:07.000000000 +0900
@@ -3689,7 +3689,8 @@
struct usb_interface_descriptor *desc;
desc = &intf->cur_altsetting->desc;
- if (desc->bAlternateSetting == 0) {
+ if (udev->actconfig->desc.bNumInterfaces <= 1 &&
+ desc->bAlternateSetting == 0) {
usb_disable_interface(udev, intf, true);
usb_enable_interface(udev, intf, true);
ret = 0;
>>882の方針変更しました。
Interfaceが複数ある場合、0番だけSet-Interfaceする。他はdisable/enableだけ。
ここの部分のちょっと前にこんなコメントがあるんです。
/* Put interfaces back into the same altsettings as before.
* Don't bother to send the Set-Interface request for interfaces
* that were already in altsetting 0; besides being unnecessary,
* many devices can't handle it. Instead just reset the host-side
* endpoint state.
*/
これ見て、今のコードのif文、逆じゃないの?と思ったんですよね。
↓の変更でも、recfriioで録画できてます。
--- drivers/usb/core/hub.c.org_2.6.35 2010-08-02 07:11:14.000000000 +0900
+++ drivers/usb/core/hub.c 2010-09-04 17:23:04.000000000 +0900
@@ -3689,7 +3689,7 @@
struct usb_interface_descriptor *desc;
desc = &intf->cur_altsetting->desc;
- if (desc->bAlternateSetting == 0) {
+ if (desc->bAlternateSetting > 0) {
usb_disable_interface(udev, intf, true);
usb_enable_interface(udev, intf, true);
ret = 0;