lib/list_sort: simplify and remove MAX_LIST_LENGTH_BITS
[sfrench/cifs-2.6.git] / drivers / clk / clk-divider.c
index e5a17265cfaf390fa1c2a77990917240e85a2edc..3f9ff78c4a2a9fe941fcdf8fd87ae113e52921d5 100644 (file)
  * parent - fixed parent.  No clk_set_parent support
  */
 
+static inline u32 clk_div_readl(struct clk_divider *divider)
+{
+       if (divider->flags & CLK_DIVIDER_BIG_ENDIAN)
+               return ioread32be(divider->reg);
+
+       return readl(divider->reg);
+}
+
+static inline void clk_div_writel(struct clk_divider *divider, u32 val)
+{
+       if (divider->flags & CLK_DIVIDER_BIG_ENDIAN)
+               iowrite32be(val, divider->reg);
+       else
+               writel(val, divider->reg);
+}
+
 static unsigned int _get_table_maxdiv(const struct clk_div_table *table,
                                      u8 width)
 {
@@ -135,7 +151,7 @@ static unsigned long clk_divider_recalc_rate(struct clk_hw *hw,
        struct clk_divider *divider = to_clk_divider(hw);
        unsigned int val;
 
-       val = clk_readl(divider->reg) >> divider->shift;
+       val = clk_div_readl(divider) >> divider->shift;
        val &= clk_div_mask(divider->width);
 
        return divider_recalc_rate(hw, parent_rate, val, divider->table,
@@ -370,7 +386,7 @@ static long clk_divider_round_rate(struct clk_hw *hw, unsigned long rate,
        if (divider->flags & CLK_DIVIDER_READ_ONLY) {
                u32 val;
 
-               val = clk_readl(divider->reg) >> divider->shift;
+               val = clk_div_readl(divider) >> divider->shift;
                val &= clk_div_mask(divider->width);
 
                return divider_ro_round_rate(hw, rate, prate, divider->table,
@@ -420,11 +436,11 @@ static int clk_divider_set_rate(struct clk_hw *hw, unsigned long rate,
        if (divider->flags & CLK_DIVIDER_HIWORD_MASK) {
                val = clk_div_mask(divider->width) << (divider->shift + 16);
        } else {
-               val = clk_readl(divider->reg);
+               val = clk_div_readl(divider);
                val &= ~(clk_div_mask(divider->width) << divider->shift);
        }
        val |= (u32)value << divider->shift;
-       clk_writel(val, divider->reg);
+       clk_div_writel(divider, val);
 
        if (divider->lock)
                spin_unlock_irqrestore(divider->lock, flags);
@@ -475,7 +491,7 @@ static struct clk_hw *_register_divider(struct device *dev, const char *name,
                init.ops = &clk_divider_ro_ops;
        else
                init.ops = &clk_divider_ops;
-       init.flags = flags | CLK_IS_BASIC;
+       init.flags = flags;
        init.parent_names = (parent_name ? &parent_name: NULL);
        init.num_parents = (parent_name ? 1 : 0);