All of lore.kernel.org
 help / color / mirror / Atom feed
From: mturquette@ti.com (Turquette, Mike)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 05/13] clk: clk-gate: Create clk_gate_endisable()
Date: Wed, 18 Apr 2012 14:02:40 -0700	[thread overview]
Message-ID: <CAJOA=zO+aNE8mn=1oBDPG5eTnyQnzeTp23ofwZMz67NFK3O_Jw@mail.gmail.com> (raw)
In-Reply-To: <5c01b4d3c28b8c34d88be3b3db0c9959c41f4bfe.1334660431.git.viresh.kumar@st.com>

On Tue, Apr 17, 2012 at 4:15 AM, Viresh Kumar <viresh.kumar@st.com> wrote:
> This patch tries to remove duplicate code for clk_gate clocks. This creates
> another routine clk_gate_endisable() which will take care of enable/disable
> clock with knowledge of CLK_GATE_SET_TO_DISABLE flag.
>
> It works on following logic:
>
> For enabling clock, enable = 1
> ? ? ? ?set2dis = 1 ? ? -> clear bit ? ?-> set = 0
> ? ? ? ?set2dis = 0 ? ? -> set bit ? ? ?-> set = 1
>
> For disabling clock, enable = 0
> ? ? ? ?set2dis = 1 ? ? -> set bit ? ? ?-> set = 1
> ? ? ? ?set2dis = 0 ? ? -> clear bit ? ?-> set = 0
>
> So, result is always: enable xor set2dis.
>
> Signed-off-by: Viresh Kumar <viresh.kumar@st.com>

Hi Viresh,

Looks good to me.  I'll take into my -next branch.

Thanks,
Mike

> ---
> ?drivers/clk/clk-gate.c | ? 54 ++++++++++++++++++++++-------------------------
> ?1 files changed, 25 insertions(+), 29 deletions(-)
>
> diff --git a/drivers/clk/clk-gate.c b/drivers/clk/clk-gate.c
> index 288fb5e..f8d70b5 100644
> --- a/drivers/clk/clk-gate.c
> +++ b/drivers/clk/clk-gate.c
> @@ -28,32 +28,38 @@
>
> ?#define to_clk_gate(_hw) container_of(_hw, struct clk_gate, hw)
>
> -static void clk_gate_set_bit(struct clk_gate *gate)
> +/*
> + * It works on following logic:
> + *
> + * For enabling clock, enable = 1
> + * ? ? set2dis = 1 ? ? -> clear bit ? ?-> set = 0
> + * ? ? set2dis = 0 ? ? -> set bit ? ? ?-> set = 1
> + *
> + * For disabling clock, enable = 0
> + * ? ? set2dis = 1 ? ? -> set bit ? ? ?-> set = 1
> + * ? ? set2dis = 0 ? ? -> clear bit ? ?-> set = 0
> + *
> + * So, result is always: enable xor set2dis.
> + */
> +static void clk_gate_endisable(struct clk_hw *hw, int enable)
> ?{
> - ? ? ? u32 reg;
> + ? ? ? struct clk_gate *gate = to_clk_gate(hw);
> + ? ? ? int set = gate->flags & CLK_GATE_SET_TO_DISABLE ? 1 : 0;
> ? ? ? ?unsigned long flags = 0;
> + ? ? ? u32 reg;
> +
> + ? ? ? set ^= enable;
>
> ? ? ? ?if (gate->lock)
> ? ? ? ? ? ? ? ?spin_lock_irqsave(gate->lock, flags);
>
> ? ? ? ?reg = readl(gate->reg);
> - ? ? ? reg |= BIT(gate->bit_idx);
> - ? ? ? writel(reg, gate->reg);
> -
> - ? ? ? if (gate->lock)
> - ? ? ? ? ? ? ? spin_unlock_irqrestore(gate->lock, flags);
> -}
> -
> -static void clk_gate_clear_bit(struct clk_gate *gate)
> -{
> - ? ? ? u32 reg;
> - ? ? ? unsigned long flags = 0;
>
> - ? ? ? if (gate->lock)
> - ? ? ? ? ? ? ? spin_lock_irqsave(gate->lock, flags);
> + ? ? ? if (set)
> + ? ? ? ? ? ? ? reg |= BIT(gate->bit_idx);
> + ? ? ? else
> + ? ? ? ? ? ? ? reg &= ~BIT(gate->bit_idx);
>
> - ? ? ? reg = readl(gate->reg);
> - ? ? ? reg &= ~BIT(gate->bit_idx);
> ? ? ? ?writel(reg, gate->reg);
>
> ? ? ? ?if (gate->lock)
> @@ -62,24 +68,14 @@ static void clk_gate_clear_bit(struct clk_gate *gate)
>
> ?static int clk_gate_enable(struct clk_hw *hw)
> ?{
> - ? ? ? struct clk_gate *gate = to_clk_gate(hw);
> -
> - ? ? ? if (gate->flags & CLK_GATE_SET_TO_DISABLE)
> - ? ? ? ? ? ? ? clk_gate_clear_bit(gate);
> - ? ? ? else
> - ? ? ? ? ? ? ? clk_gate_set_bit(gate);
> + ? ? ? clk_gate_endisable(hw, 1);
>
> ? ? ? ?return 0;
> ?}
>
> ?static void clk_gate_disable(struct clk_hw *hw)
> ?{
> - ? ? ? struct clk_gate *gate = to_clk_gate(hw);
> -
> - ? ? ? if (gate->flags & CLK_GATE_SET_TO_DISABLE)
> - ? ? ? ? ? ? ? clk_gate_set_bit(gate);
> - ? ? ? else
> - ? ? ? ? ? ? ? clk_gate_clear_bit(gate);
> + ? ? ? clk_gate_endisable(hw, 0);
> ?}
>
> ?static int clk_gate_is_enabled(struct clk_hw *hw)
> --
> 1.7.9
>

  reply	other threads:[~2012-04-18 21:02 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-17 11:15 [PATCH 00/13] SPEAr: Move to common clock framework Viresh Kumar
2012-04-17 11:15 ` [PATCH 01/13] CLKDEV: Add helper routines to allocate and add clkdevs for given struct clk * Viresh Kumar
2012-04-17 11:15 ` [PATCH 02/13] clk: Fix typo in comment Viresh Kumar
2012-04-18 21:04   ` Turquette, Mike
2012-04-17 11:15 ` [PATCH 03/13] " Viresh Kumar
2012-04-17 11:15 ` [PATCH 04/13] clk: clk-private: Add DEFINE_CLK macro Viresh Kumar
2012-04-18 21:01   ` Turquette, Mike
2012-04-17 11:15 ` [PATCH 05/13] clk: clk-gate: Create clk_gate_endisable() Viresh Kumar
2012-04-18 21:02   ` Turquette, Mike [this message]
2012-04-17 11:15 ` [PATCH 06/13] clk: Don't set clk->new_rate twice Viresh Kumar
2012-04-18 21:08   ` Turquette, Mike
2012-04-17 11:15 ` [PATCH 07/13] clk: clk_set_rate() must fail if CLK_SET_RATE_GATE is set and clk is enabled Viresh Kumar
2012-04-17 11:15 ` [PATCH 08/13] SPEAr: clk: Add VCO-PLL Synthesizer clock Viresh Kumar
2012-04-17 11:15 ` [PATCH 09/13] SPEAr: clk: Add Auxiliary " Viresh Kumar
2012-04-17 18:51   ` Sascha Hauer
2012-04-17 20:30     ` Arnd Bergmann
2012-04-18 20:01       ` Sascha Hauer
2012-04-17 11:15 ` [PATCH 10/13] SPEAr: clk: Add Fractional " Viresh Kumar
2012-04-17 11:15 ` [PATCH 11/13] SPEAr: clk: Add General Purpose Timer " Viresh Kumar
2012-04-17 11:15 ` [PATCH 13/13] SPEAr: Call clk_prepare() before calling clk_enable Viresh Kumar
2012-04-17 17:46   ` Sergei Shtylyov
2012-04-18 21:17   ` Turquette, Mike
     [not found]     ` <CAOh2x=maawrRjHhE3oGXfMOvsUbCkp9gWA_Kq-S0Dh7r6co6VA@mail.gmail.com>
2012-04-19 18:56       ` Turquette, Mike
2012-04-17 14:34 ` [PATCH 00/13] SPEAr: Move to common clock framework Arnd Bergmann
2012-04-17 14:57   ` Shawn Guo
2012-04-18 20:49     ` Turquette, Mike
2012-04-18 20:45   ` Turquette, Mike
2012-04-18 21:13     ` Sascha Hauer
2012-04-18 21:22       ` Turquette, Mike
2012-04-18 21:25         ` Turquette, Mike
     [not found]           ` <CAOh2x=nhZLQejWJb1Wdv=G9vU0hq+8CO0SSx95qQUJogL5ftNQ@mail.gmail.com>
2012-04-19  0:17             ` Turquette, Mike
2012-04-19  8:57           ` Arnd Bergmann
2012-04-19  9:16             ` Viresh Kumar
2012-04-19 10:53               ` Arnd Bergmann
2012-04-19 19:01             ` Turquette, Mike

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAJOA=zO+aNE8mn=1oBDPG5eTnyQnzeTp23ofwZMz67NFK3O_Jw@mail.gmail.com' \
    --to=mturquette@ti.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.