Hi,

On Tue, 20 Jun 2017 12:09:22 +0200 Marek Vasut wrote:
> On 06/20/2017 11:59 AM, patrice.chot...@st.com wrote:
> > From: Patrice Chotard <patrice.chot...@st.com>
> > 
> > Use an array to save enabled clocks reference and deasserted resets
> > in order to respectively disabled and asserted them in case of error
> > during probe() or during driver removal.
> > 
> > Signed-off-by: Patrice Chotard <patrice.chot...@st.com>
> 
> Nitpicks below
> 
> > ---
> > 
> > v7: _ replace clk_count() and reset_count() by 
> > ofnode_count_phandle_with_args()
> > 
> > v6: _ none
> > 
> > v5:         _ none
> > 
> > v4: _ update the memory allocation for deasserted resets and enabled
> >       clocks reference list. Replace lists by arrays.
> >     _ usage of new RESET and CLOCK methods clk_count(), reset_count(),
> >       reset_assert_all() and clk_disable_all().
> > 
> > v3: _ keep enabled clocks and deasserted resets reference in list in order 
> > to
> >       disable clock or assert resets in error path or in .remove callback
> >     _ use struct generic_ehci * instead of struct udevice * as parameter for
> >       ehci_release_resets() and ehci_release_clocks()
> > 
> >  drivers/usb/host/ehci-generic.c | 125 
> > ++++++++++++++++++++++++++++++++--------
> >  1 file changed, 101 insertions(+), 24 deletions(-)
> > 
> > diff --git a/drivers/usb/host/ehci-generic.c 
> > b/drivers/usb/host/ehci-generic.c
> > index 2116ae1..388b242 100644
> > --- a/drivers/usb/host/ehci-generic.c
> > +++ b/drivers/usb/host/ehci-generic.c
> > @@ -11,6 +11,8 @@
> >  #include <dm.h>
> >  #include "ehci.h"
> >  
> > +#include <dm/ofnode.h>
> > +
> >  /*
> >   * Even though here we don't explicitly use "struct ehci_ctrl"
> >   * ehci_register() expects it to be the first thing that resides in
> > @@ -18,43 +20,119 @@
> >   */
> >  struct generic_ehci {
> >     struct ehci_ctrl ctrl;
> > +   struct clk *clocks;
> > +   struct reset_ctl *resets;
> > +   int clock_count;
> > +   int reset_count;
> >  };
> >  
> >  static int ehci_usb_probe(struct udevice *dev)
> >  {
> > +   struct generic_ehci *priv = dev_get_priv(dev);
> >     struct ehci_hccr *hccr;
> >     struct ehci_hcor *hcor;
> > -   int i;
> > -
> > -   for (i = 0; ; i++) {
> > -           struct clk clk;
> > -           int ret;
> > -
> > -           ret = clk_get_by_index(dev, i, &clk);
> > -           if (ret < 0)
> > -                   break;
> > -           if (clk_enable(&clk))
> > -                   error("failed to enable clock %d\n", i);
> > -           clk_free(&clk);
> > -   }
> > +   int i, err, ret, clock_nb, reset_nb;
> > +
> > +   err = 0;
> > +   priv->clock_count = 0;
> > +   clock_nb = ofnode_count_phandle_with_args(dev_ofnode(dev), "clocks",
> > +                                             "#clock-cells");
> > +   if (clock_nb > 0) {
> > +           priv->clocks = devm_kmalloc(dev, sizeof(struct clk) * clock_nb,
> > +                                       GFP_KERNEL);
> 
> devm_kzalloc()
>
devm_kcalloc(dev, clock_nb, sizeof()...)


Lothar Waßmann
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to