clk: at91: Migrate to clk_hw based registration and OF APIs
[cascardo/linux.git] / drivers / clk / at91 / clk-main.c
index 58b5bac..c813c27 100644 (file)
@@ -128,15 +128,16 @@ static const struct clk_ops main_osc_ops = {
        .is_prepared = clk_main_osc_is_prepared,
 };
 
-static struct clk * __init
+static struct clk_hw * __init
 at91_clk_register_main_osc(struct regmap *regmap,
                           const char *name,
                           const char *parent_name,
                           bool bypass)
 {
        struct clk_main_osc *osc;
-       struct clk *clk = NULL;
        struct clk_init_data init;
+       struct clk_hw *hw;
+       int ret;
 
        if (!name || !parent_name)
                return ERR_PTR(-EINVAL);
@@ -160,16 +161,19 @@ at91_clk_register_main_osc(struct regmap *regmap,
                                   AT91_PMC_MOSCEN,
                                   AT91_PMC_OSCBYPASS | AT91_PMC_KEY);
 
-       clk = clk_register(NULL, &osc->hw);
-       if (IS_ERR(clk))
+       hw = &osc->hw;
+       ret = clk_hw_register(NULL, &osc->hw);
+       if (ret) {
                kfree(osc);
+               hw = ERR_PTR(ret);
+       }
 
-       return clk;
+       return hw;
 }
 
 static void __init of_at91rm9200_clk_main_osc_setup(struct device_node *np)
 {
-       struct clk *clk;
+       struct clk_hw *hw;
        const char *name = np->name;
        const char *parent_name;
        struct regmap *regmap;
@@ -183,11 +187,11 @@ static void __init of_at91rm9200_clk_main_osc_setup(struct device_node *np)
        if (IS_ERR(regmap))
                return;
 
-       clk = at91_clk_register_main_osc(regmap, name, parent_name, bypass);
-       if (IS_ERR(clk))
+       hw = at91_clk_register_main_osc(regmap, name, parent_name, bypass);
+       if (IS_ERR(hw))
                return;
 
-       of_clk_add_provider(np, of_clk_src_simple_get, clk);
+       of_clk_add_hw_provider(np, of_clk_hw_simple_get, hw);
 }
 CLK_OF_DECLARE(at91rm9200_clk_main_osc, "atmel,at91rm9200-clk-main-osc",
               of_at91rm9200_clk_main_osc_setup);
@@ -271,14 +275,15 @@ static const struct clk_ops main_rc_osc_ops = {
        .recalc_accuracy = clk_main_rc_osc_recalc_accuracy,
 };
 
-static struct clk * __init
+static struct clk_hw * __init
 at91_clk_register_main_rc_osc(struct regmap *regmap,
                              const char *name,
                              u32 frequency, u32 accuracy)
 {
        struct clk_main_rc_osc *osc;
-       struct clk *clk = NULL;
        struct clk_init_data init;
+       struct clk_hw *hw;
+       int ret;
 
        if (!name || !frequency)
                return ERR_PTR(-EINVAL);
@@ -298,16 +303,19 @@ at91_clk_register_main_rc_osc(struct regmap *regmap,
        osc->frequency = frequency;
        osc->accuracy = accuracy;
 
-       clk = clk_register(NULL, &osc->hw);
-       if (IS_ERR(clk))
+       hw = &osc->hw;
+       ret = clk_hw_register(NULL, hw);
+       if (ret) {
                kfree(osc);
+               hw = ERR_PTR(ret);
+       }
 
-       return clk;
+       return hw;
 }
 
 static void __init of_at91sam9x5_clk_main_rc_osc_setup(struct device_node *np)
 {
-       struct clk *clk;
+       struct clk_hw *hw;
        u32 frequency = 0;
        u32 accuracy = 0;
        const char *name = np->name;
@@ -321,11 +329,11 @@ static void __init of_at91sam9x5_clk_main_rc_osc_setup(struct device_node *np)
        if (IS_ERR(regmap))
                return;
 
-       clk = at91_clk_register_main_rc_osc(regmap, name, frequency, accuracy);
-       if (IS_ERR(clk))
+       hw = at91_clk_register_main_rc_osc(regmap, name, frequency, accuracy);
+       if (IS_ERR(hw))
                return;
 
-       of_clk_add_provider(np, of_clk_src_simple_get, clk);
+       of_clk_add_hw_provider(np, of_clk_hw_simple_get, hw);
 }
 CLK_OF_DECLARE(at91sam9x5_clk_main_rc_osc, "atmel,at91sam9x5-clk-main-rc-osc",
               of_at91sam9x5_clk_main_rc_osc_setup);
@@ -395,14 +403,15 @@ static const struct clk_ops rm9200_main_ops = {
        .recalc_rate = clk_rm9200_main_recalc_rate,
 };
 
-static struct clk * __init
+static struct clk_hw * __init
 at91_clk_register_rm9200_main(struct regmap *regmap,
                              const char *name,
                              const char *parent_name)
 {
        struct clk_rm9200_main *clkmain;
-       struct clk *clk = NULL;
        struct clk_init_data init;
+       struct clk_hw *hw;
+       int ret;
 
        if (!name)
                return ERR_PTR(-EINVAL);
@@ -423,16 +432,19 @@ at91_clk_register_rm9200_main(struct regmap *regmap,
        clkmain->hw.init = &init;
        clkmain->regmap = regmap;
 
-       clk = clk_register(NULL, &clkmain->hw);
-       if (IS_ERR(clk))
+       hw = &clkmain->hw;
+       ret = clk_hw_register(NULL, &clkmain->hw);
+       if (ret) {
                kfree(clkmain);
+               hw = ERR_PTR(ret);
+       }
 
-       return clk;
+       return hw;
 }
 
 static void __init of_at91rm9200_clk_main_setup(struct device_node *np)
 {
-       struct clk *clk;
+       struct clk_hw *hw;
        const char *parent_name;
        const char *name = np->name;
        struct regmap *regmap;
@@ -444,11 +456,11 @@ static void __init of_at91rm9200_clk_main_setup(struct device_node *np)
        if (IS_ERR(regmap))
                return;
 
-       clk = at91_clk_register_rm9200_main(regmap, name, parent_name);
-       if (IS_ERR(clk))
+       hw = at91_clk_register_rm9200_main(regmap, name, parent_name);
+       if (IS_ERR(hw))
                return;
 
-       of_clk_add_provider(np, of_clk_src_simple_get, clk);
+       of_clk_add_hw_provider(np, of_clk_hw_simple_get, hw);
 }
 CLK_OF_DECLARE(at91rm9200_clk_main, "atmel,at91rm9200-clk-main",
               of_at91rm9200_clk_main_setup);
@@ -529,16 +541,17 @@ static const struct clk_ops sam9x5_main_ops = {
        .get_parent = clk_sam9x5_main_get_parent,
 };
 
-static struct clk * __init
+static struct clk_hw * __init
 at91_clk_register_sam9x5_main(struct regmap *regmap,
                              const char *name,
                              const char **parent_names,
                              int num_parents)
 {
        struct clk_sam9x5_main *clkmain;
-       struct clk *clk = NULL;
        struct clk_init_data init;
        unsigned int status;
+       struct clk_hw *hw;
+       int ret;
 
        if (!name)
                return ERR_PTR(-EINVAL);
@@ -561,16 +574,19 @@ at91_clk_register_sam9x5_main(struct regmap *regmap,
        regmap_read(clkmain->regmap, AT91_CKGR_MOR, &status);
        clkmain->parent = status & AT91_PMC_MOSCEN ? 1 : 0;
 
-       clk = clk_register(NULL, &clkmain->hw);
-       if (IS_ERR(clk))
+       hw = &clkmain->hw;
+       ret = clk_hw_register(NULL, &clkmain->hw);
+       if (ret) {
                kfree(clkmain);
+               hw = ERR_PTR(ret);
+       }
 
-       return clk;
+       return hw;
 }
 
 static void __init of_at91sam9x5_clk_main_setup(struct device_node *np)
 {
-       struct clk *clk;
+       struct clk_hw *hw;
        const char *parent_names[2];
        unsigned int num_parents;
        const char *name = np->name;
@@ -587,12 +603,12 @@ static void __init of_at91sam9x5_clk_main_setup(struct device_node *np)
 
        of_property_read_string(np, "clock-output-names", &name);
 
-       clk = at91_clk_register_sam9x5_main(regmap, name, parent_names,
+       hw = at91_clk_register_sam9x5_main(regmap, name, parent_names,
                                            num_parents);
-       if (IS_ERR(clk))
+       if (IS_ERR(hw))
                return;
 
-       of_clk_add_provider(np, of_clk_src_simple_get, clk);
+       of_clk_add_hw_provider(np, of_clk_hw_simple_get, hw);
 }
 CLK_OF_DECLARE(at91sam9x5_clk_main, "atmel,at91sam9x5-clk-main",
               of_at91sam9x5_clk_main_setup);