OSDN Git Service

clk: ingenic: Add support for clocks whose gate bit is inverted
authorPaul Cercueil <paul@crapouillou.net>
Sun, 20 May 2018 16:31:12 +0000 (16:31 +0000)
committerStephen Boyd <sboyd@kernel.org>
Sat, 2 Jun 2018 06:21:09 +0000 (23:21 -0700)
Support the clocks which are gated when their gate bit is cleared
instead of set.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
drivers/clk/ingenic/cgu.c
drivers/clk/ingenic/cgu.h

index 56a712c..4b31145 100644 (file)
@@ -43,7 +43,8 @@ static inline bool
 ingenic_cgu_gate_get(struct ingenic_cgu *cgu,
                     const struct ingenic_cgu_gate_info *info)
 {
-       return readl(cgu->base + info->reg) & BIT(info->bit);
+       return !!(readl(cgu->base + info->reg) & BIT(info->bit))
+               ^ info->clear_to_gate;
 }
 
 /**
@@ -62,7 +63,7 @@ ingenic_cgu_gate_set(struct ingenic_cgu *cgu,
 {
        u32 clkgr = readl(cgu->base + info->reg);
 
-       if (val)
+       if (val ^ info->clear_to_gate)
                clkgr |= BIT(info->bit);
        else
                clkgr &= ~BIT(info->bit);
index 9da3491..4d2e3fa 100644 (file)
@@ -111,10 +111,12 @@ struct ingenic_cgu_fixdiv_info {
  * struct ingenic_cgu_gate_info - information about a clock gate
  * @reg: offset of the gate control register within the CGU
  * @bit: offset of the bit in the register that controls the gate
+ * @clear_to_gate: if set, the clock is gated when the bit is cleared
  */
 struct ingenic_cgu_gate_info {
        unsigned reg;
        u8 bit;
+       bool clear_to_gate;
 };
 
 /**