Locking in the clk API, part 2: clk_prepare/clk_unprepare
Russell King - ARM Linux
linux at arm.linux.org.uk
Fri Feb 4 08:20:40 EST 2011
On Fri, Feb 04, 2011 at 08:45:34PM +0800, Richard Zhao wrote:
> > == Implementation ==
> >
> > Basically:
> >
> > struct clk {
> > const struct clk_ops *ops
> > int enable_count;
> > spinlock_t enable_lock;
> > int prepare_count;
> > struct mutex prepare_lock;
> > };
> >
> > int clk_enable(struct clk *clk)
> > {
> > int ret = 0;
> >
> > spin_lock(&clk->enable_lock);
> > if (!clk->enable_count)
> > ret = clk->ops->enable(clk);
> >
> > if (!ret)
> > clk->enable_count++;
> > spin_unlock(&clk->enable_lock);
> >
> > return ret;
> > }
> Why do we not call parent's clk_enable in this function? For flexible? How many
> different cases is causing us to move the effert to platform clock driver?
You may notice that struct clk above doesn't have a parent.
More information about the linux-arm-kernel
mailing list