|
@@ -1451,8 +1451,22 @@ unknown:
|
|
|
struct usb_configuration *c;
|
|
struct usb_configuration *c;
|
|
|
|
|
|
|
|
c = cdev->config;
|
|
c = cdev->config;
|
|
|
- if (c && c->setup)
|
|
|
|
|
|
|
+ if (!c)
|
|
|
|
|
+ goto done;
|
|
|
|
|
+
|
|
|
|
|
+ /* try current config's setup */
|
|
|
|
|
+ if (c->setup) {
|
|
|
value = c->setup(c, ctrl);
|
|
value = c->setup(c, ctrl);
|
|
|
|
|
+ goto done;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /* try the only function in the current config */
|
|
|
|
|
+ if (!list_is_singular(&c->functions))
|
|
|
|
|
+ goto done;
|
|
|
|
|
+ f = list_first_entry(&c->functions, struct usb_function,
|
|
|
|
|
+ list);
|
|
|
|
|
+ if (f->setup)
|
|
|
|
|
+ value = f->setup(f, ctrl);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
goto done;
|
|
goto done;
|