
To actually use the gadget the peripheral driver must be probed and we must call g_dnl_clear_detach(). Otherwise acm_stdio_start() will always fail to find a UDC on DT platforms.
Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com Signed-off-by: Caleb Connolly caleb.connolly@linaro.org --- drivers/usb/gadget/f_acm.c | 9 +++++++++ 1 file changed, 9 insertions(+)
diff --git a/drivers/usb/gadget/f_acm.c b/drivers/usb/gadget/f_acm.c index de42e0189e8d..ba216128ab27 100644 --- a/drivers/usb/gadget/f_acm.c +++ b/drivers/usb/gadget/f_acm.c @@ -622,14 +622,23 @@ static void acm_stdio_puts(struct stdio_dev *dev, const char *str) }
static int acm_stdio_start(struct stdio_dev *dev) { + struct udevice *udc; int ret;
if (dev->priv) { /* function already exist */ return 0; }
+ ret = udc_device_get_by_index(0, &udc); + if (ret) { + pr_err("USB init failed: %d\n", ret); + return ret; + } + + g_dnl_clear_detach(); + ret = g_dnl_register("usb_serial_acm"); if (ret) return ret;