usb: r8a66597: Add optional DM VBUS regulator support

Add DM regulator support for toggling VBUS, this is useful on boards
which control the VBUS e.g. through GPIO.

Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
Cc: Chris Brandt <chris.brandt@renesas.com>
This commit is contained in:
Marek Vasut 2019-08-22 17:53:04 +02:00 committed by Marek Vasut
parent 8b54830154
commit 769a9cd4bb
2 changed files with 30 additions and 0 deletions

View File

@ -11,6 +11,7 @@
#include <usb.h>
#include <asm/io.h>
#include <linux/iopoll.h>
#include <power/regulator.h>
#include "r8a66597.h"
@ -818,9 +819,27 @@ static int r8a66597_usb_probe(struct udevice *dev)
{
struct r8a66597 *priv = dev_get_priv(dev);
struct usb_bus_priv *bus_priv = dev_get_uclass_priv(dev);
int ret;
bus_priv->desc_before_addr = true;
if (CONFIG_IS_ENABLED(DM_REGULATOR)) {
ret = device_get_supply_regulator(dev, "vbus-supply",
&priv->vbus_supply);
if (ret) {
dev_err(dev,
"can't get VBUS supply\n");
return ret;
}
ret = regulator_set_enable(priv->vbus_supply, true);
if (ret) {
dev_err(dev,
"can't enable VBUS supply\n");
return ret;
}
}
disable_controller(priv);
mdelay(100);
@ -838,9 +857,19 @@ static int r8a66597_usb_probe(struct udevice *dev)
static int r8a66597_usb_remove(struct udevice *dev)
{
struct r8a66597 *priv = dev_get_priv(dev);
int ret;
disable_controller(priv);
if (CONFIG_IS_ENABLED(DM_REGULATOR)) {
ret = regulator_set_enable(priv->vbus_supply, false);
if (ret) {
dev_err(dev,
"can't disable VBUS supply\n");
return ret;
}
}
return 0;
}

View File

@ -396,6 +396,7 @@ struct r8a66597 {
unsigned short port_change;
u16 speed; /* HSMODE or FSMODE or LSMODE */
unsigned char rh_devnum;
struct udevice *vbus_supply;
};
static inline u16 r8a66597_read(struct r8a66597 *r8a66597, unsigned long offset)