Consider a multi-configuration composition in which the last configuration uses OS descriptors. Since this configuration will be sent first, the host may choose this config if it matches the choosing criteria and ignore the user configured order of the multi-config composition. Moreover linux based hosts do not re-order the received configurations based on their indices but process them in FIFO order. This may result in the host never choosing the user desired configuration because of the re-order caused by sending the OS descriptor config first. To avoid this, follow the user configured order and do not handle OS descriptor config separately. Signed-off-by: Elson Roy Serrao <quic_eserrao@xxxxxxxxxxx> --- drivers/usb/gadget/composite.c | 9 --------- 1 file changed, 9 deletions(-) diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c index fa7dd6c..685003a 100644 --- a/drivers/usb/gadget/composite.c +++ b/drivers/usb/gadget/composite.c @@ -589,18 +589,9 @@ static int config_desc(struct usb_composite_dev *cdev, unsigned w_value) w_value &= 0xff; pos = &cdev->configs; - c = cdev->os_desc_config; - if (c) - goto check_config; - while ((pos = pos->next) != &cdev->configs) { c = list_entry(pos, typeof(*c), list); - /* skip OS Descriptors config which is handled separately */ - if (c == cdev->os_desc_config) - continue; - -check_config: /* ignore configs that won't work at this speed */ switch (speed) { case USB_SPEED_SUPER_PLUS: -- 2.7.4