Am 18.02.2020 um 09:35 schrieb Patrick Delaunay: > Add support for clock with driver model. > > This patch don't added dependency because when CONFIG_CLK > is not activated the clk function are stubbed. > > Signed-off-by: Patrick Delaunay <patrick.delau...@st.com>
Reviewed-by: Simon Goldschmidt <simon.k.r.goldschm...@gmail.com> > --- > > Changes in v4: None > Changes in v3: None > Changes in v2: None > > drivers/usb/host/dwc2.c | 30 +++++++++++++++++++++++++++++- > 1 file changed, 29 insertions(+), 1 deletion(-) > > diff --git a/drivers/usb/host/dwc2.c b/drivers/usb/host/dwc2.c > index 5e7ffaddd9..d56d0e61b5 100644 > --- a/drivers/usb/host/dwc2.c > +++ b/drivers/usb/host/dwc2.c > @@ -5,14 +5,15 @@ > */ > > #include <common.h> > +#include <clk.h> > #include <cpu_func.h> > #include <dm.h> > #include <errno.h> > #include <generic-phy.h> > -#include <usb.h> > #include <malloc.h> > #include <memalign.h> > #include <phys2bus.h> > +#include <usb.h> > #include <usbroothubdes.h> > #include <wait_bit.h> > #include <asm/io.h> > @@ -39,6 +40,7 @@ struct dwc2_priv { > struct udevice *vbus_supply; > #endif > struct phy phy; > + struct clk_bulk clks; > #else > uint8_t *aligned_buffer; > uint8_t *status_buffer; > @@ -1377,6 +1379,26 @@ static int dwc2_shutdown_phy(struct udevice *dev) > return 0; > } > > +static int dwc2_clk_init(struct udevice *dev) > +{ > + struct dwc2_priv *priv = dev_get_priv(dev); > + int ret; > + > + ret = clk_get_bulk(dev, &priv->clks); > + if (ret == -ENOSYS || ret == -ENOENT) > + return 0; > + if (ret) > + return ret; > + > + ret = clk_enable_bulk(&priv->clks); > + if (ret) { > + clk_release_bulk(&priv->clks); > + return ret; > + } > + > + return 0; > +} > + > static int dwc2_usb_probe(struct udevice *dev) > { > struct dwc2_priv *priv = dev_get_priv(dev); > @@ -1385,6 +1407,10 @@ static int dwc2_usb_probe(struct udevice *dev) > > bus_priv->desc_before_addr = true; > > + ret = dwc2_clk_init(dev); > + if (ret) > + return ret; > + > ret = dwc2_setup_phy(dev); > if (ret) > return ret; > @@ -1410,6 +1436,8 @@ static int dwc2_usb_remove(struct udevice *dev) > dwc2_uninit_common(priv->regs); > > reset_release_bulk(&priv->resets); > + clk_disable_bulk(&priv->clks); > + clk_release_bulk(&priv->clks); > > return 0; > } >