lkml.org 
[lkml]   [2011]   [Oct]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v2 4/7] clk: Add simple gated clock
    On Wed, Oct 12, 2011 at 07:59:19AM -0700, Turquette, Mike wrote:
    > On Tue, Oct 11, 2011 at 11:46 PM, Richard Zhao
    > <richard.zhao@freescale.com> wrote:
    > > On Thu, Sep 22, 2011 at 03:26:59PM -0700, Mike Turquette wrote:
    > >> From: Jeremy Kerr <jeremy.kerr@canonical.com>
    > >>
    > >> Signed-off-by: Jeremy Kerr <jeremy.kerr@canonical.com>
    > >> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
    > >> Signed-off-by: Jamie Iles <jamie@jamieiles.com>
    > >> Signed-off-by: Mike Turquette <mturquette@ti.com>
    > >> ---
    > >> Changes since v1:
    > >> Add copyright header
    > >> Fold in Jamie's patch for set-to-disable clks
    > >> Use BIT macro instead of shift
    > >>
    > >>  drivers/clk/Kconfig    |    4 ++
    > >>  drivers/clk/Makefile   |    1 +
    > >>  drivers/clk/clk-gate.c |   78 ++++++++++++++++++++++++++++++++++++++++++++++++
    > >>  include/linux/clk.h    |   13 ++++++++
    > >>  4 files changed, 96 insertions(+), 0 deletions(-)
    > >>  create mode 100644 drivers/clk/clk-gate.c
    > >
    > > I feel hard to tell the tree the clk parent, at register/init time. For the
    > > simple gate clk, the only way is to set .get_parent. But normally, for clk
    > > without any divider we set .get_parent to NULL. Maybe we can put .parent to
    > > struct clk_hw?
    >
    > For non-mux clocks, whose parent is *always* going to be the same, you
    > should create a duplicate .parent in the clk_hw_* structure and then
    > have .get_parent return clk_hw_*->parent.

    Maybe I do not understand what you mean here, but I think there is
    something missing in the gate.

    >
    > This is analogous to the way clk_hw_fixed returns clk_hw_fixed->rate
    > when .recalc is called on it.
    >
    > >> +
    > >> +static unsigned long clk_gate_get_rate(struct clk_hw *clk)
    > >> +{
    > >> +     return clk_get_rate(clk_get_parent(clk->clk));
    > >> +}

    clk_get_parent goes down to clk_gate_set_enable_ops.get_parent below...

    > >> +
    > >> +
    > >> +struct clk_hw_ops clk_gate_set_enable_ops = {
    > >> +     .recalc_rate = clk_gate_get_rate,
    > >> +     .enable = clk_gate_enable_set,
    > >> +     .disable = clk_gate_disable_clear,
    > >> +};

    ...but this does not have a get_parent pointer, so clk_get_parent()
    for a gate always returns NULL which means that a gate never has
    a valid rate.

    Sascha

    --
    Pengutronix e.K. | |
    Industrial Linux Solutions | http://www.pengutronix.de/ |
    Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
    Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2011-10-16 20:29    [W:2.225 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site