usb: gadget: dwc2_udc_otg: implement pullup()
Pullup is used by the usb framework in order to do software-controlled usb_gadget_connect() and usb_gadget_disconnect(). Implement pullup() for dwc2 using the SOFT_DISCONNECT bit in the dctl register: * when pullup is on, clear SOFT_DISCONNECT * when pullup is off, set SOFT_DISCONNECT This is especially useful when a gadget disconnection is initiated but no board_usb_cleanup() is called. Signed-off-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>
This commit is contained in:
parent
66b5847b30
commit
2383e8f4ae
@ -236,6 +236,14 @@ static int udc_enable(struct dwc2_udc *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int dwc2_gadget_pullup(struct usb_gadget *g, int is_on)
|
||||
{
|
||||
clrsetbits_le32(®->dctl, SOFT_DISCONNECT,
|
||||
is_on ? 0 : SOFT_DISCONNECT);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if !CONFIG_IS_ENABLED(DM_USB_GADGET)
|
||||
/*
|
||||
Register entry point for the peripheral controller driver.
|
||||
@ -805,6 +813,7 @@ static void dwc2_fifo_flush(struct usb_ep *_ep)
|
||||
}
|
||||
|
||||
static const struct usb_gadget_ops dwc2_udc_ops = {
|
||||
.pullup = dwc2_gadget_pullup,
|
||||
/* current versions must always be self-powered */
|
||||
#if CONFIG_IS_ENABLED(DM_USB_GADGET)
|
||||
.udc_start = dwc2_gadget_start,
|
||||
|
Loading…
Reference in New Issue
Block a user