diff options
-rw-r--r-- | hw/usb_gadget_common.c | 63 |
1 files changed, 27 insertions, 36 deletions
diff --git a/hw/usb_gadget_common.c b/hw/usb_gadget_common.c index 70d6c51..2ecef99 100644 --- a/hw/usb_gadget_common.c +++ b/hw/usb_gadget_common.c @@ -255,13 +255,7 @@ static int simple_id_to_gadget(struct usb_gadget_id *gadget_id, gadget->attrs.idProduct = 0x685d; break; - case USB_FUNCTION_RNDIS: - n_configs = 1; - functions[0][0] = USB_FUNCTION_RNDIS; - functions[0][1] = 0; - gadget->attrs.idProduct = 0x6863; - break; - + /* MTP, ACM, SDB */ case USB_FUNCTION_MTP | USB_FUNCTION_ACM: n_configs = 1; functions[0][0] = USB_FUNCTION_MTP; @@ -295,15 +289,7 @@ static int simple_id_to_gadget(struct usb_gadget_id *gadget_id, gadget->attrs.idProduct = 0x6860; break; - case USB_FUNCTION_RNDIS | USB_FUNCTION_SDB: - n_configs = 1; - functions[0][0] = USB_FUNCTION_RNDIS; - functions[0][1] = USB_FUNCTION_SDB; - functions[0][2] = 0; - gadget->attrs.idProduct = 0x6864; - break; - -#if 0 + /* DIAG */ case USB_FUNCTION_MTP | USB_FUNCTION_ACM | USB_FUNCTION_SDB | USB_FUNCTION_DIAG: n_configs = 1; functions[0][0] = USB_FUNCTION_MTP; @@ -314,13 +300,19 @@ static int simple_id_to_gadget(struct usb_gadget_id *gadget_id, gadget->attrs.idProduct = 0x6860; break; - case USB_FUNCTION_RNDIS | USB_FUNCTION_SDB | USB_FUNCTION_ACM | USB_FUNCTION_DIAG: + /* RNDIS */ + case USB_FUNCTION_RNDIS: n_configs = 1; functions[0][0] = USB_FUNCTION_RNDIS; - functions[0][1] = USB_FUNCTION_SDB; - functions[0][2] = USB_FUNCTION_ACM; - functions[0][3] = USB_FUNCTION_DIAG; - functions[0][4] = 0; + functions[0][1] = 0; + gadget->attrs.idProduct = 0x6863; + break; + + case USB_FUNCTION_SDB | USB_FUNCTION_RNDIS: + n_configs = 1; + functions[0][0] = USB_FUNCTION_SDB; + functions[0][1] = USB_FUNCTION_RNDIS; + functions[0][2] = 0; gadget->attrs.idProduct = 0x6864; break; @@ -331,40 +323,39 @@ static int simple_id_to_gadget(struct usb_gadget_id *gadget_id, functions[0][2] = 0; gadget->attrs.idProduct = 0x6864; break; -#endif - case USB_FUNCTION_ACM | USB_FUNCTION_SDB | USB_FUNCTION_DM: + case USB_FUNCTION_ACM | USB_FUNCTION_SDB | USB_FUNCTION_RNDIS: n_configs = 1; functions[0][0] = USB_FUNCTION_ACM; functions[0][1] = USB_FUNCTION_SDB; - functions[0][2] = USB_FUNCTION_DM; + functions[0][2] = USB_FUNCTION_RNDIS; functions[0][3] = 0; - gadget->attrs.idProduct = 0x6860; + gadget->attrs.idProduct = 0x6864; break; - case USB_FUNCTION_DIAG | USB_FUNCTION_ACM | USB_FUNCTION_RMNET: + /* RMNET */ + case USB_FUNCTION_DIAG | USB_FUNCTION_RMNET: n_configs = 1; functions[0][0] = USB_FUNCTION_DIAG; - functions[0][1] = USB_FUNCTION_ACM; - functions[0][2] = USB_FUNCTION_RMNET; - functions[0][3] = 0; + functions[0][1] = USB_FUNCTION_RMNET; + functions[0][2] = 0; gadget->attrs.idProduct = 0x685d; break; - case USB_FUNCTION_RNDIS | USB_FUNCTION_SDB | USB_FUNCTION_ACM: + /* DM */ + case USB_FUNCTION_ACM | USB_FUNCTION_SDB | USB_FUNCTION_DM: n_configs = 1; - functions[0][0] = USB_FUNCTION_RNDIS; + functions[0][0] = USB_FUNCTION_ACM; functions[0][1] = USB_FUNCTION_SDB; - functions[0][2] = USB_FUNCTION_ACM; + functions[0][2] = USB_FUNCTION_DM; functions[0][3] = 0; - gadget->attrs.idProduct = 0x6864; + gadget->attrs.idProduct = 0x6860; break; - }; - if (n_configs > 2 || n_configs <= 0) { + default: ret = -EINVAL; goto free_gadget; - } + }; n_functions = __builtin_popcount(gadget_id->function_mask); |