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: Felipe Balbi <balbi@ti.com>
This commit is contained in:
parent
790d3a5ab6
commit
b774212ea5
|
@ -91,6 +91,9 @@ struct usb_phy {
|
|||
int (*init)(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 */
|
||||
int (*set_power)(struct usb_phy *x,
|
||||
unsigned mA);
|
||||
|
@ -160,6 +163,24 @@ usb_phy_shutdown(struct usb_phy *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 */
|
||||
#if IS_ENABLED(CONFIG_USB_PHY)
|
||||
extern struct usb_phy *usb_get_phy(enum usb_phy_type type);
|
||||
|
|
Loading…
Reference in New Issue