Commit b774212e authored by Felipe Balbi's avatar Felipe Balbi

usb: phy: introduce ->set_vbus() method

this method will be used to enable or disable
the charge pump.

Whenever we have DRD devices, we need to be
able to turn VBUS on or off whenever we want.

Note that in the ideal case, this would be
controlled by the ID-pin Interrupt, but not
all devices have ID-pin properly routed since
manufacturers can choose to save that trace
if they're building a host-only product out
of a DRD IP.

This is also useful during debugging where
we might not have the proper cable hanging
around.
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent 790d3a5a
...@@ -91,6 +91,9 @@ struct usb_phy { ...@@ -91,6 +91,9 @@ struct usb_phy {
int (*init)(struct usb_phy *x); int (*init)(struct usb_phy *x);
void (*shutdown)(struct usb_phy *x); void (*shutdown)(struct usb_phy *x);
/* enable/disable VBUS */
int (*set_vbus)(struct usb_phy *x, int on);
/* effective for B devices, ignored for A-peripheral */ /* effective for B devices, ignored for A-peripheral */
int (*set_power)(struct usb_phy *x, int (*set_power)(struct usb_phy *x,
unsigned mA); unsigned mA);
...@@ -160,6 +163,24 @@ usb_phy_shutdown(struct usb_phy *x) ...@@ -160,6 +163,24 @@ usb_phy_shutdown(struct usb_phy *x)
x->shutdown(x); x->shutdown(x);
} }
static inline int
usb_phy_vbus_on(struct usb_phy *x)
{
if (!x->set_vbus)
return 0;
return x->set_vbus(x, true);
}
static inline int
usb_phy_vbus_off(struct usb_phy *x)
{
if (!x->set_vbus)
return 0;
return x->set_vbus(x, false);
}
/* for usb host and peripheral controller drivers */ /* for usb host and peripheral controller drivers */
#if IS_ENABLED(CONFIG_USB_PHY) #if IS_ENABLED(CONFIG_USB_PHY)
extern struct usb_phy *usb_get_phy(enum usb_phy_type type); extern struct usb_phy *usb_get_phy(enum usb_phy_type type);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment