]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/clk/clk-multiplier.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
[linux.git] / drivers / clk / clk-multiplier.c
index 3c86f859c199f4f19b43d6fadaa483bffab5797e..e507aa958da91683ec83837df28fc48be4b7bafa 100644 (file)
@@ -7,10 +7,27 @@
 #include <linux/clk-provider.h>
 #include <linux/err.h>
 #include <linux/export.h>
+#include <linux/io.h>
 #include <linux/kernel.h>
 #include <linux/of.h>
 #include <linux/slab.h>
 
+static inline u32 clk_mult_readl(struct clk_multiplier *mult)
+{
+       if (mult->flags & CLK_MULTIPLIER_BIG_ENDIAN)
+               return ioread32be(mult->reg);
+
+       return readl(mult->reg);
+}
+
+static inline void clk_mult_writel(struct clk_multiplier *mult, u32 val)
+{
+       if (mult->flags & CLK_MULTIPLIER_BIG_ENDIAN)
+               iowrite32be(val, mult->reg);
+       else
+               writel(val, mult->reg);
+}
+
 static unsigned long __get_mult(struct clk_multiplier *mult,
                                unsigned long rate,
                                unsigned long parent_rate)
@@ -27,7 +44,7 @@ static unsigned long clk_multiplier_recalc_rate(struct clk_hw *hw,
        struct clk_multiplier *mult = to_clk_multiplier(hw);
        unsigned long val;
 
-       val = clk_readl(mult->reg) >> mult->shift;
+       val = clk_mult_readl(mult) >> mult->shift;
        val &= GENMASK(mult->width - 1, 0);
 
        if (!val && mult->flags & CLK_MULTIPLIER_ZERO_BYPASS)
@@ -118,10 +135,10 @@ static int clk_multiplier_set_rate(struct clk_hw *hw, unsigned long rate,
        else
                __acquire(mult->lock);
 
-       val = clk_readl(mult->reg);
+       val = clk_mult_readl(mult);
        val &= ~GENMASK(mult->width + mult->shift - 1, mult->shift);
        val |= factor << mult->shift;
-       clk_writel(val, mult->reg);
+       clk_mult_writel(mult, val);
 
        if (mult->lock)
                spin_unlock_irqrestore(mult->lock, flags);