mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 11:03:43 +02:00
usb: dwc3: gadget: Add support for snps,reserved-endpoints property
The snps,reserved-endpoints property lists the reserved endpoints that shouldn't be used for normal transfers. Add support for that to the driver. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Tested-by: Ferry Toth <fntoth@gmail.com> Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com> Link: https://lore.kernel.org/r/20250212193116.2487289-4-andriy.shevchenko@linux.intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
eafba02054
commit
5425191f85
|
|
@ -3403,14 +3403,53 @@ static int dwc3_gadget_init_endpoint(struct dwc3 *dwc, u8 epnum)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int dwc3_gadget_get_reserved_endpoints(struct dwc3 *dwc, const char *propname,
|
||||
u8 *eps, u8 num)
|
||||
{
|
||||
u8 count;
|
||||
int ret;
|
||||
|
||||
if (!device_property_present(dwc->dev, propname))
|
||||
return 0;
|
||||
|
||||
ret = device_property_count_u8(dwc->dev, propname);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
count = ret;
|
||||
|
||||
ret = device_property_read_u8_array(dwc->dev, propname, eps, min(num, count));
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static int dwc3_gadget_init_endpoints(struct dwc3 *dwc, u8 total)
|
||||
{
|
||||
const char *propname = "snps,reserved-endpoints";
|
||||
u8 epnum;
|
||||
u8 reserved_eps[DWC3_ENDPOINTS_NUM];
|
||||
u8 count;
|
||||
u8 num;
|
||||
int ret;
|
||||
|
||||
INIT_LIST_HEAD(&dwc->gadget->ep_list);
|
||||
|
||||
ret = dwc3_gadget_get_reserved_endpoints(dwc, propname,
|
||||
reserved_eps, ARRAY_SIZE(reserved_eps));
|
||||
if (ret < 0) {
|
||||
dev_err(dwc->dev, "failed to read %s\n", propname);
|
||||
return ret;
|
||||
}
|
||||
count = ret;
|
||||
|
||||
for (epnum = 0; epnum < total; epnum++) {
|
||||
int ret;
|
||||
for (num = 0; num < count; num++) {
|
||||
if (epnum == reserved_eps[num])
|
||||
break;
|
||||
}
|
||||
if (num < count)
|
||||
continue;
|
||||
|
||||
ret = dwc3_gadget_init_endpoint(dwc, epnum);
|
||||
if (ret)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user