clk: sunxi: make factors clock mux mask configurable
authorChen-Yu Tsai <wens@csie.org>
Mon, 20 Oct 2014 14:10:26 +0000 (22:10 +0800)
committerMaxime Ripard <maxime.ripard@free-electrons.com>
Tue, 21 Oct 2014 19:40:56 +0000 (21:40 +0200)
Some of the factors-style clocks on the A80 have different widths
for the mux values in the registers.

Add a .muxmask field to clk_factors_config to make it configurable.
Passing a bitmask instead of a width parameter will allow reuse
in case we support table-based muxes in the future.

Signed-off-by: Chen-Yu Tsai <wens@csie.org>
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
drivers/clk/sunxi/clk-factors.c
drivers/clk/sunxi/clk-factors.h
drivers/clk/sunxi/clk-mod0.c
drivers/clk/sunxi/clk-sun8i-mbus.c
drivers/clk/sunxi/clk-sunxi.c

index f83ba097126c6e72c22517a66f17034474e8ebf2..5521e866fa5efe8387f5f60e01b3441662b49ddc 100644 (file)
@@ -224,7 +224,7 @@ struct clk * __init sunxi_factors_register(struct device_node *node,
                /* set up gate properties */
                mux->reg = reg;
                mux->shift = data->mux;
-               mux->mask = SUNXI_FACTORS_MUX_MASK;
+               mux->mask = data->muxmask;
                mux->lock = factors->lock;
                mux_hw = &mux->hw;
        }
index 9913840018d3fdb4f4717a4636b68f8dc6f4a6e6..912238fde1324224863035da8a5836b5c276e8a0 100644 (file)
@@ -7,8 +7,6 @@
 
 #define SUNXI_FACTORS_NOT_APPLICABLE   (0)
 
-#define SUNXI_FACTORS_MUX_MASK 0x3
-
 struct clk_factors_config {
        u8 nshift;
        u8 nwidth;
@@ -24,6 +22,7 @@ struct clk_factors_config {
 struct factors_data {
        int enable;
        int mux;
+       int muxmask;
        struct clk_factors_config *table;
        void (*getter) (u32 *rate, u32 parent_rate, u8 *n, u8 *k, u8 *m, u8 *p);
        const char *name;
index 4a563850ee6ee3a158a286b8a1cfb37ed713569b..da0524eaee9406aff6c2d73f8b56b82c12360a16 100644 (file)
@@ -70,6 +70,7 @@ static struct clk_factors_config sun4i_a10_mod0_config = {
 static const struct factors_data sun4i_a10_mod0_data __initconst = {
        .enable = 31,
        .mux = 24,
+       .muxmask = BIT(1) | BIT(0),
        .table = &sun4i_a10_mod0_config,
        .getter = sun4i_a10_get_mod0_factors,
 };
index 8e49b44cee41d9df81ffa666cf812a3fffcdd7af..ef49786eefd3caa5b6f856287635a973213a14b3 100644 (file)
@@ -60,6 +60,7 @@ static struct clk_factors_config sun8i_a23_mbus_config = {
 static const struct factors_data sun8i_a23_mbus_data __initconst = {
        .enable = 31,
        .mux = 24,
+       .muxmask = BIT(1) | BIT(0),
        .table = &sun8i_a23_mbus_config,
        .getter = sun8i_a23_get_mbus_factors,
 };
index d5dc951264cab957bcf2522bc61a9c62395c6432..636b8d772d4a3d34a95e2d55d007ec956744098f 100644 (file)
@@ -514,6 +514,7 @@ static const struct factors_data sun4i_apb1_data __initconst = {
 static const struct factors_data sun7i_a20_out_data __initconst = {
        .enable = 31,
        .mux = 24,
+       .muxmask = BIT(1) | BIT(0),
        .table = &sun7i_a20_out_config,
        .getter = sun7i_a20_get_out_factors,
 };