Re: [PATCH] usb/phy-generic: Add support for OTG VBUS supply control

From: Peter Chen
Date: Fri May 29 2020 - 03:20:21 EST


On 20-05-29 07:47:37, Mike Looijmans wrote:
>
> Met vriendelijke groet / kind regards,
>
> Mike Looijmans
> System Expert
>
>
> TOPIC Embedded Products B.V.
> Materiaalweg 4, 5681 RJ Best
> The Netherlands
>
> T: +31 (0) 499 33 69 69
> E: mike.looijmans@xxxxxxxxxxxxxxxxx
> W: https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.topicproducts.com%2F&data=02%7C01%7Cpeter.chen%40nxp.com%7Cc8a5e33bbd3141b57d5408d80393cff2%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C637263280668758097&sdata=e5yJuVtOJ9%2BUqmRl6HNk14Fd0%2FPR2jQAhOl1vHtYJKg%3D&reserved=0
>
> Please consider the environment before printing this e-mail
> On 28-05-2020 13:20, Peter Chen wrote:
> > On 20-05-26 16:50:51, Mike Looijmans wrote:
> > > This enables support for VBUS on boards where the power is supplied
> > > by a regulator. The regulator is enabled when the USB port enters
> > > HOST mode.
> > >
> > Why you don't do this at your host controller driver?
>
> That was my first thought too, but it made more sense to do it here. It's
> about how things are connected on the board, and not about the controller.
> Also makes for a consistent devicetree when using different SOCs on the same
> carrier board.

A standard interface is: port_power for hc_driver, but seems the xHCI
doesn't implement it.

>
> I already needed this driver to properly reset the USB phy, which the
> controller driver also did not do. So it made sense to add the vbus power
> control to this driver too.
>
> If you have a strong preference for the controller driver, I can move this
> to the DWC3 driver which happens to be the controller for the latest batch
> of SOMs.
>

You may ask Mathias or Felipe for comments where is suitable for vbus
regulator.

> > > +
> > > nop->dev = dev;
> > > nop->phy.dev = nop->dev;
> > > nop->phy.label = "nop-xceiv";
> > > @@ -278,6 +319,7 @@ int usb_phy_gen_create_phy(struct device *dev, struct usb_phy_generic *nop)
> > > nop->phy.otg->usb_phy = &nop->phy;
> > > nop->phy.otg->set_host = nop_set_host;
> > > nop->phy.otg->set_peripheral = nop_set_peripheral;
> > > + nop->phy.otg->set_vbus = nop_set_vbus;

OTG is dead, even USB-IF has refused OTG test since 2019-09, you may
avoid to use OTG structure.

Peter


> > > return 0;
> > > }
> > > diff --git a/drivers/usb/phy/phy-generic.h b/drivers/usb/phy/phy-generic.h
> > > index 7ee80211a688..a3663639ea1e 100644
> > > --- a/drivers/usb/phy/phy-generic.h
> > > +++ b/drivers/usb/phy/phy-generic.h
> > > @@ -14,7 +14,9 @@ struct usb_phy_generic {
> > > struct gpio_desc *gpiod_reset;
> > > struct gpio_desc *gpiod_vbus;
> > > struct regulator *vbus_draw;
> > > + struct regulator *vbus_reg;
> > > bool vbus_draw_enabled;
> > > + bool vbus_reg_enabled;
> > > unsigned long mA;
> > > unsigned int vbus;
> > > };
> > > --
> > > 2.17.1
> > >
>
> --
> Mike Looijmans
>

--

Thanks,
Peter Chen