aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/clk
diff options
context:
space:
mode:
authorMaxime Ripard <maxime.ripard@free-electrons.com>2013-07-23 03:25:56 -0400
committerMaxime Ripard <maxime.ripard@free-electrons.com>2013-08-26 04:48:45 -0400
commit70855bb5c608e4ac9dde5b669c3cf56914b713a2 (patch)
treec0c631e7d65531367c4f050e3fe86f38c4d9695f /drivers/clk
parent81ba6c5e7b1c995083ccaab1c74ac9e0be6ef4d1 (diff)
clk: sunxi: Allow to specify the divider width from the dividers data
The divider width used to be hardcoded. Some A31 dividers are no longer with the hardcoded width, so we need to make it specific to each divider and set it in the dividers data. Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> Reviewed-by: Emilio López <emilio@elopez.com.ar>
Diffstat (limited to 'drivers/clk')
-rw-r--r--drivers/clk/sunxi/clk-sunxi.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/drivers/clk/sunxi/clk-sunxi.c b/drivers/clk/sunxi/clk-sunxi.c
index 5fac1aa87bdb..2cafda88b7f6 100644
--- a/drivers/clk/sunxi/clk-sunxi.c
+++ b/drivers/clk/sunxi/clk-sunxi.c
@@ -279,26 +279,28 @@ static void __init sunxi_mux_clk_setup(struct device_node *node,
279 * sunxi_divider_clk_setup() - Setup function for simple divider clocks 279 * sunxi_divider_clk_setup() - Setup function for simple divider clocks
280 */ 280 */
281 281
282#define SUNXI_DIVISOR_WIDTH 2
283
284struct div_data { 282struct div_data {
285 u8 shift; 283 u8 shift;
286 u8 pow; 284 u8 pow;
285 u8 width;
287}; 286};
288 287
289static const __initconst struct div_data sun4i_axi_data = { 288static const __initconst struct div_data sun4i_axi_data = {
290 .shift = 0, 289 .shift = 0,
291 .pow = 0, 290 .pow = 0,
291 .width = 2,
292}; 292};
293 293
294static const __initconst struct div_data sun4i_ahb_data = { 294static const __initconst struct div_data sun4i_ahb_data = {
295 .shift = 4, 295 .shift = 4,
296 .pow = 1, 296 .pow = 1,
297 .width = 2,
297}; 298};
298 299
299static const __initconst struct div_data sun4i_apb0_data = { 300static const __initconst struct div_data sun4i_apb0_data = {
300 .shift = 8, 301 .shift = 8,
301 .pow = 1, 302 .pow = 1,
303 .width = 2,
302}; 304};
303 305
304static void __init sunxi_divider_clk_setup(struct device_node *node, 306static void __init sunxi_divider_clk_setup(struct device_node *node,
@@ -314,7 +316,7 @@ static void __init sunxi_divider_clk_setup(struct device_node *node,
314 clk_parent = of_clk_get_parent_name(node, 0); 316 clk_parent = of_clk_get_parent_name(node, 0);
315 317
316 clk = clk_register_divider(NULL, clk_name, clk_parent, 0, 318 clk = clk_register_divider(NULL, clk_name, clk_parent, 0,
317 reg, data->shift, SUNXI_DIVISOR_WIDTH, 319 reg, data->shift, data->width,
318 data->pow ? CLK_DIVIDER_POWER_OF_TWO : 0, 320 data->pow ? CLK_DIVIDER_POWER_OF_TWO : 0,
319 &clk_lock); 321 &clk_lock);
320 if (clk) { 322 if (clk) {