usb: gadget: Update usb_assign_descriptors for SuperSpeedPlus
Add the 'ssp_descriptors' parameter to the usb_assign_descriptors() function. This allows a function driver to add descriptors for SuperSpeedPlus speeds if it supports it. Also update all uses of this function in the gadget subsystem so that they pass NULL for the ssp_descriptors parameters. Signed-off-by: John Youn <johnyoun@synopsys.com> Signed-off-by: Felipe Balbi <balbi@kernel.org>
This commit is contained in:
parent
f228a8de24
commit
eaef50c760
19 changed files with 24 additions and 19 deletions
|
@ -163,7 +163,8 @@ EXPORT_SYMBOL_GPL(usb_copy_descriptors);
|
||||||
int usb_assign_descriptors(struct usb_function *f,
|
int usb_assign_descriptors(struct usb_function *f,
|
||||||
struct usb_descriptor_header **fs,
|
struct usb_descriptor_header **fs,
|
||||||
struct usb_descriptor_header **hs,
|
struct usb_descriptor_header **hs,
|
||||||
struct usb_descriptor_header **ss)
|
struct usb_descriptor_header **ss,
|
||||||
|
struct usb_descriptor_header **ssp)
|
||||||
{
|
{
|
||||||
struct usb_gadget *g = f->config->cdev->gadget;
|
struct usb_gadget *g = f->config->cdev->gadget;
|
||||||
|
|
||||||
|
|
|
@ -685,7 +685,7 @@ acm_bind(struct usb_configuration *c, struct usb_function *f)
|
||||||
acm_ss_out_desc.bEndpointAddress = acm_fs_out_desc.bEndpointAddress;
|
acm_ss_out_desc.bEndpointAddress = acm_fs_out_desc.bEndpointAddress;
|
||||||
|
|
||||||
status = usb_assign_descriptors(f, acm_fs_function, acm_hs_function,
|
status = usb_assign_descriptors(f, acm_fs_function, acm_hs_function,
|
||||||
acm_ss_function);
|
acm_ss_function, NULL);
|
||||||
if (status)
|
if (status)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
|
|
@ -786,7 +786,7 @@ ecm_bind(struct usb_configuration *c, struct usb_function *f)
|
||||||
fs_ecm_notify_desc.bEndpointAddress;
|
fs_ecm_notify_desc.bEndpointAddress;
|
||||||
|
|
||||||
status = usb_assign_descriptors(f, ecm_fs_function, ecm_hs_function,
|
status = usb_assign_descriptors(f, ecm_fs_function, ecm_hs_function,
|
||||||
ecm_ss_function);
|
ecm_ss_function, NULL);
|
||||||
if (status)
|
if (status)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
|
|
@ -309,7 +309,7 @@ static int eem_bind(struct usb_configuration *c, struct usb_function *f)
|
||||||
eem_ss_out_desc.bEndpointAddress = eem_fs_out_desc.bEndpointAddress;
|
eem_ss_out_desc.bEndpointAddress = eem_fs_out_desc.bEndpointAddress;
|
||||||
|
|
||||||
status = usb_assign_descriptors(f, eem_fs_function, eem_hs_function,
|
status = usb_assign_descriptors(f, eem_fs_function, eem_hs_function,
|
||||||
eem_ss_function);
|
eem_ss_function, NULL);
|
||||||
if (status)
|
if (status)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
|
|
@ -646,7 +646,7 @@ static int hidg_bind(struct usb_configuration *c, struct usb_function *f)
|
||||||
hidg_fs_out_ep_desc.bEndpointAddress;
|
hidg_fs_out_ep_desc.bEndpointAddress;
|
||||||
|
|
||||||
status = usb_assign_descriptors(f, hidg_fs_descriptors,
|
status = usb_assign_descriptors(f, hidg_fs_descriptors,
|
||||||
hidg_hs_descriptors, NULL);
|
hidg_hs_descriptors, NULL, NULL);
|
||||||
if (status)
|
if (status)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
|
|
@ -211,7 +211,7 @@ autoconf_fail:
|
||||||
ss_loop_sink_desc.bEndpointAddress = fs_loop_sink_desc.bEndpointAddress;
|
ss_loop_sink_desc.bEndpointAddress = fs_loop_sink_desc.bEndpointAddress;
|
||||||
|
|
||||||
ret = usb_assign_descriptors(f, fs_loopback_descs, hs_loopback_descs,
|
ret = usb_assign_descriptors(f, fs_loopback_descs, hs_loopback_descs,
|
||||||
ss_loopback_descs);
|
ss_loopback_descs, NULL);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
|
@ -3093,7 +3093,7 @@ static int fsg_bind(struct usb_configuration *c, struct usb_function *f)
|
||||||
fsg_ss_bulk_out_comp_desc.bMaxBurst = max_burst;
|
fsg_ss_bulk_out_comp_desc.bMaxBurst = max_burst;
|
||||||
|
|
||||||
ret = usb_assign_descriptors(f, fsg_fs_function, fsg_hs_function,
|
ret = usb_assign_descriptors(f, fsg_fs_function, fsg_hs_function,
|
||||||
fsg_ss_function);
|
fsg_ss_function, NULL);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto autoconf_fail;
|
goto autoconf_fail;
|
||||||
|
|
||||||
|
|
|
@ -1432,7 +1432,7 @@ static int ncm_bind(struct usb_configuration *c, struct usb_function *f)
|
||||||
fs_ncm_notify_desc.bEndpointAddress;
|
fs_ncm_notify_desc.bEndpointAddress;
|
||||||
|
|
||||||
status = usb_assign_descriptors(f, ncm_fs_function, ncm_hs_function,
|
status = usb_assign_descriptors(f, ncm_fs_function, ncm_hs_function,
|
||||||
NULL);
|
NULL, NULL);
|
||||||
if (status)
|
if (status)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
|
|
@ -364,7 +364,8 @@ static int obex_bind(struct usb_configuration *c, struct usb_function *f)
|
||||||
obex_hs_ep_out_desc.bEndpointAddress =
|
obex_hs_ep_out_desc.bEndpointAddress =
|
||||||
obex_fs_ep_out_desc.bEndpointAddress;
|
obex_fs_ep_out_desc.bEndpointAddress;
|
||||||
|
|
||||||
status = usb_assign_descriptors(f, fs_function, hs_function, NULL);
|
status = usb_assign_descriptors(f, fs_function, hs_function, NULL,
|
||||||
|
NULL);
|
||||||
if (status)
|
if (status)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
|
|
@ -541,7 +541,7 @@ static int pn_bind(struct usb_configuration *c, struct usb_function *f)
|
||||||
|
|
||||||
/* Do not try to bind Phonet twice... */
|
/* Do not try to bind Phonet twice... */
|
||||||
status = usb_assign_descriptors(f, fs_pn_function, hs_pn_function,
|
status = usb_assign_descriptors(f, fs_pn_function, hs_pn_function,
|
||||||
NULL);
|
NULL, NULL);
|
||||||
if (status)
|
if (status)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
|
|
|
@ -1051,7 +1051,7 @@ autoconf_fail:
|
||||||
ss_ep_out_desc.bEndpointAddress = fs_ep_out_desc.bEndpointAddress;
|
ss_ep_out_desc.bEndpointAddress = fs_ep_out_desc.bEndpointAddress;
|
||||||
|
|
||||||
ret = usb_assign_descriptors(f, fs_printer_function,
|
ret = usb_assign_descriptors(f, fs_printer_function,
|
||||||
hs_printer_function, ss_printer_function);
|
hs_printer_function, ss_printer_function, NULL);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
|
@ -783,7 +783,7 @@ rndis_bind(struct usb_configuration *c, struct usb_function *f)
|
||||||
ss_notify_desc.bEndpointAddress = fs_notify_desc.bEndpointAddress;
|
ss_notify_desc.bEndpointAddress = fs_notify_desc.bEndpointAddress;
|
||||||
|
|
||||||
status = usb_assign_descriptors(f, eth_fs_function, eth_hs_function,
|
status = usb_assign_descriptors(f, eth_fs_function, eth_hs_function,
|
||||||
eth_ss_function);
|
eth_ss_function, NULL);
|
||||||
if (status)
|
if (status)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
|
|
@ -236,7 +236,7 @@ static int gser_bind(struct usb_configuration *c, struct usb_function *f)
|
||||||
gser_ss_out_desc.bEndpointAddress = gser_fs_out_desc.bEndpointAddress;
|
gser_ss_out_desc.bEndpointAddress = gser_fs_out_desc.bEndpointAddress;
|
||||||
|
|
||||||
status = usb_assign_descriptors(f, gser_fs_function, gser_hs_function,
|
status = usb_assign_descriptors(f, gser_fs_function, gser_hs_function,
|
||||||
gser_ss_function);
|
gser_ss_function, NULL);
|
||||||
if (status)
|
if (status)
|
||||||
goto fail;
|
goto fail;
|
||||||
dev_dbg(&cdev->gadget->dev, "generic ttyGS%d: %s speed IN/%s OUT/%s\n",
|
dev_dbg(&cdev->gadget->dev, "generic ttyGS%d: %s speed IN/%s OUT/%s\n",
|
||||||
|
|
|
@ -437,7 +437,7 @@ no_iso:
|
||||||
ss_iso_sink_desc.bEndpointAddress = fs_iso_sink_desc.bEndpointAddress;
|
ss_iso_sink_desc.bEndpointAddress = fs_iso_sink_desc.bEndpointAddress;
|
||||||
|
|
||||||
ret = usb_assign_descriptors(f, fs_source_sink_descs,
|
ret = usb_assign_descriptors(f, fs_source_sink_descs,
|
||||||
hs_source_sink_descs, ss_source_sink_descs);
|
hs_source_sink_descs, ss_source_sink_descs, NULL);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
|
@ -362,7 +362,7 @@ geth_bind(struct usb_configuration *c, struct usb_function *f)
|
||||||
fs_subset_out_desc.bEndpointAddress;
|
fs_subset_out_desc.bEndpointAddress;
|
||||||
|
|
||||||
status = usb_assign_descriptors(f, fs_eth_function, hs_eth_function,
|
status = usb_assign_descriptors(f, fs_eth_function, hs_eth_function,
|
||||||
ss_eth_function);
|
ss_eth_function, NULL);
|
||||||
if (status)
|
if (status)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
|
|
@ -2098,7 +2098,7 @@ static int tcm_bind(struct usb_configuration *c, struct usb_function *f)
|
||||||
uasp_fs_cmd_desc.bEndpointAddress = uasp_ss_cmd_desc.bEndpointAddress;
|
uasp_fs_cmd_desc.bEndpointAddress = uasp_ss_cmd_desc.bEndpointAddress;
|
||||||
|
|
||||||
ret = usb_assign_descriptors(f, uasp_fs_function_desc,
|
ret = usb_assign_descriptors(f, uasp_fs_function_desc,
|
||||||
uasp_hs_function_desc, uasp_ss_function_desc);
|
uasp_hs_function_desc, uasp_ss_function_desc, NULL);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto ep_fail;
|
goto ep_fail;
|
||||||
|
|
||||||
|
|
|
@ -721,7 +721,8 @@ f_audio_bind(struct usb_configuration *c, struct usb_function *f)
|
||||||
status = -ENOMEM;
|
status = -ENOMEM;
|
||||||
|
|
||||||
/* copy descriptors, and track endpoint copies */
|
/* copy descriptors, and track endpoint copies */
|
||||||
status = usb_assign_descriptors(f, f_audio_desc, f_audio_desc, NULL);
|
status = usb_assign_descriptors(f, f_audio_desc, f_audio_desc, NULL,
|
||||||
|
NULL);
|
||||||
if (status)
|
if (status)
|
||||||
goto fail;
|
goto fail;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -1100,7 +1100,8 @@ afunc_bind(struct usb_configuration *cfg, struct usb_function *fn)
|
||||||
hs_epout_desc.bEndpointAddress = fs_epout_desc.bEndpointAddress;
|
hs_epout_desc.bEndpointAddress = fs_epout_desc.bEndpointAddress;
|
||||||
hs_epin_desc.bEndpointAddress = fs_epin_desc.bEndpointAddress;
|
hs_epin_desc.bEndpointAddress = fs_epin_desc.bEndpointAddress;
|
||||||
|
|
||||||
ret = usb_assign_descriptors(fn, fs_audio_desc, hs_audio_desc, NULL);
|
ret = usb_assign_descriptors(fn, fs_audio_desc, hs_audio_desc, NULL,
|
||||||
|
NULL);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
|
|
|
@ -1204,7 +1204,8 @@ struct usb_function;
|
||||||
int usb_assign_descriptors(struct usb_function *f,
|
int usb_assign_descriptors(struct usb_function *f,
|
||||||
struct usb_descriptor_header **fs,
|
struct usb_descriptor_header **fs,
|
||||||
struct usb_descriptor_header **hs,
|
struct usb_descriptor_header **hs,
|
||||||
struct usb_descriptor_header **ss);
|
struct usb_descriptor_header **ss,
|
||||||
|
struct usb_descriptor_header **ssp);
|
||||||
void usb_free_all_descriptors(struct usb_function *f);
|
void usb_free_all_descriptors(struct usb_function *f);
|
||||||
|
|
||||||
struct usb_descriptor_header *usb_otg_descriptor_alloc(
|
struct usb_descriptor_header *usb_otg_descriptor_alloc(
|
||||||
|
|
Loading…
Add table
Reference in a new issue