All of lore.kernel.org
 help / color / mirror / Atom feed
From: Boris Brezillon <boris.brezillon@free-electrons.com>
To: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Cc: Stephen Boyd <stephen.boyd@linaro.org>,
	Michael Turquette <mturquette@baylibre.com>,
	Stephen Boyd <sboyd@codeaurora.org>,
	linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 02/34] clk: at91: Migrate to clk_hw based registration and OF APIs
Date: Tue, 7 Jun 2016 18:40:59 +0200	[thread overview]
Message-ID: <20160607184059.6c83477f@bbrezillon> (raw)
In-Reply-To: <20160607163621.GN3363@piout.net>

On Tue, 7 Jun 2016 18:36:21 +0200
Alexandre Belloni <alexandre.belloni@free-electrons.com> wrote:

> On 01/06/2016 at 16:15:01 -0700, Stephen Boyd wrote :
> > Now that we have clk_hw based provider APIs to register clks, we
> > can get rid of struct clk pointers in this driver, allowing us to
> > move closer to a clear split of consumer and provider clk APIs.
> > 
> > Cc: Alexandre Belloni <alexandre.belloni@free-electrons.com>
> > Cc: Boris Brezillon <boris.brezillon@free-electrons.com>
> > Signed-off-by: Stephen Boyd <stephen.boyd@linaro.org>  
> 
> Well, apart the same comment about alignement:
> 
> Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
> Tested-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>

Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>

> 
> > ---
> > 
> > See commit 58657d189a2f and it's children for details on this
> > new registration API.
> > 
> >  drivers/clk/at91/clk-generated.c    | 30 +++++++------
> >  drivers/clk/at91/clk-h32mx.c        |  8 ++--
> >  drivers/clk/at91/clk-main.c         | 88 ++++++++++++++++++++++---------------
> >  drivers/clk/at91/clk-master.c       | 21 +++++----
> >  drivers/clk/at91/clk-peripheral.c   | 39 +++++++++-------
> >  drivers/clk/at91/clk-pll.c          | 21 +++++----
> >  drivers/clk/at91/clk-plldiv.c       | 24 +++++-----
> >  drivers/clk/at91/clk-programmable.c | 22 ++++++----
> >  drivers/clk/at91/clk-slow.c         | 88 ++++++++++++++++++++++---------------
> >  drivers/clk/at91/clk-smd.c          | 22 ++++++----
> >  drivers/clk/at91/clk-system.c       | 22 ++++++----
> >  drivers/clk/at91/clk-usb.c          | 69 +++++++++++++++++------------
> >  drivers/clk/at91/clk-utmi.c         | 22 ++++++----
> >  13 files changed, 277 insertions(+), 199 deletions(-)
> > 
> > diff --git a/drivers/clk/at91/clk-generated.c b/drivers/clk/at91/clk-generated.c
> > index e1aa210dd7aa..8f1585b3abe5 100644
> > --- a/drivers/clk/at91/clk-generated.c
> > +++ b/drivers/clk/at91/clk-generated.c
> > @@ -233,14 +233,16 @@ static void clk_generated_startup(struct clk_generated *gck)  
> >  					>> AT91_PMC_PCR_GCKDIV_OFFSET;  
> >  }
> >  
> > -static struct clk * __init
> > -at91_clk_register_generated(struct regmap *regmap,  spinlock_t *lock, const char
> > -			    *name, const char **parent_names, u8 num_parents,
> > -			    u8 id, const struct clk_range *range)
> > +static struct clk_hw * __init
> > +at91_clk_register_generated(struct regmap *regmap, spinlock_t *lock,
> > +			    const char *name, const char **parent_names,
> > +			    u8 num_parents, u8 id,
> > +			    const struct clk_range *range)
> >  {
> >  	struct clk_generated *gck;
> > -	struct clk *clk = NULL;
> >  	struct clk_init_data init;
> > +	struct clk_hw *hw;
> > +	int ret;
> >  
> >  	gck = kzalloc(sizeof(*gck), GFP_KERNEL);
> >  	if (!gck)
> > @@ -258,13 +260,15 @@ at91_clk_register_generated(struct regmap *regmap,  spinlock_t *lock, const char
> >  	gck->lock = lock;
> >  	gck->range = *range;
> >  
> > -	clk = clk_register(NULL, &gck->hw);
> > -	if (IS_ERR(clk))
> > +	hw = &gck->hw;
> > +	ret = clk_hw_register(NULL, &gck->hw);
> > +	if (ret) {
> >  		kfree(gck);
> > -	else
> > +		hw = ERR_PTR(ret);
> > +	} else
> >  		clk_generated_startup(gck);
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  void __init of_sama5d2_clk_generated_setup(struct device_node *np)
> > @@ -272,7 +276,7 @@ void __init of_sama5d2_clk_generated_setup(struct device_node *np)
> >  	int num;
> >  	u32 id;
> >  	const char *name;
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	unsigned int num_parents;
> >  	const char *parent_names[GENERATED_SOURCE_MAX];
> >  	struct device_node *gcknp;
> > @@ -306,13 +310,13 @@ void __init of_sama5d2_clk_generated_setup(struct device_node *np)
> >  		of_at91_get_clk_range(gcknp, "atmel,clk-output-range",
> >  				      &range);
> >  
> > -		clk = at91_clk_register_generated(regmap, &pmc_pcr_lock, name,
> > +		hw = at91_clk_register_generated(regmap, &pmc_pcr_lock, name,
> >  						  parent_names, num_parents,
> >  						  id, &range);
> > -		if (IS_ERR(clk))
> > +		if (IS_ERR(hw))
> >  			continue;
> >  
> > -		of_clk_add_provider(gcknp, of_clk_src_simple_get, clk);
> > +		of_clk_add_hw_provider(gcknp, of_clk_hw_simple_get, hw);
> >  	}
> >  }
> >  CLK_OF_DECLARE(of_sama5d2_clk_generated_setup, "atmel,sama5d2-clk-generated",
> > diff --git a/drivers/clk/at91/clk-h32mx.c b/drivers/clk/at91/clk-h32mx.c
> > index 8e20c8a76db7..e0daa4a31f88 100644
> > --- a/drivers/clk/at91/clk-h32mx.c
> > +++ b/drivers/clk/at91/clk-h32mx.c
> > @@ -92,7 +92,7 @@ static void __init of_sama5d4_clk_h32mx_setup(struct device_node *np)
> >  	struct clk_init_data init;
> >  	const char *parent_name;
> >  	struct regmap *regmap;
> > -	struct clk *clk;
> > +	int ret;
> >  
> >  	regmap = syscon_node_to_regmap(of_get_parent(np));
> >  	if (IS_ERR(regmap))
> > @@ -113,13 +113,13 @@ static void __init of_sama5d4_clk_h32mx_setup(struct device_node *np)
> >  	h32mxclk->hw.init = &init;
> >  	h32mxclk->regmap = regmap;
> >  
> > -	clk = clk_register(NULL, &h32mxclk->hw);
> > -	if (IS_ERR(clk)) {
> > +	ret = clk_hw_register(NULL, &h32mxclk->hw);
> > +	if (ret) {
> >  		kfree(h32mxclk);
> >  		return;
> >  	}
> >  
> > -	of_clk_add_provider(np, of_clk_src_simple_get, clk);
> > +	of_clk_add_hw_provider(np, of_clk_hw_simple_get, &h32mxclk->hw);
> >  }
> >  CLK_OF_DECLARE(of_sama5d4_clk_h32mx_setup, "atmel,sama5d4-clk-h32mx",
> >  	       of_sama5d4_clk_h32mx_setup);
> > diff --git a/drivers/clk/at91/clk-main.c b/drivers/clk/at91/clk-main.c
> > index 58b5baca670c..c813c27f2e58 100644
> > --- a/drivers/clk/at91/clk-main.c
> > +++ b/drivers/clk/at91/clk-main.c
> > @@ -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);
> > diff --git a/drivers/clk/at91/clk-master.c b/drivers/clk/at91/clk-master.c
> > index d1021e106191..e9cba9fc26d7 100644
> > --- a/drivers/clk/at91/clk-master.c
> > +++ b/drivers/clk/at91/clk-master.c
> > @@ -120,7 +120,7 @@ static const struct clk_ops master_ops = {
> >  	.get_parent = clk_master_get_parent,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91_clk_register_master(struct regmap *regmap,
> >  		const char *name, int num_parents,
> >  		const char **parent_names,
> > @@ -128,8 +128,9 @@ at91_clk_register_master(struct regmap *regmap,
> >  		const struct clk_master_characteristics *characteristics)
> >  {
> >  	struct clk_master *master;
> > -	struct clk *clk = NULL;
> >  	struct clk_init_data init;
> > +	struct clk_hw *hw;
> > +	int ret;
> >  
> >  	if (!name || !num_parents || !parent_names)
> >  		return ERR_PTR(-EINVAL);
> > @@ -149,12 +150,14 @@ at91_clk_register_master(struct regmap *regmap,
> >  	master->characteristics = characteristics;
> >  	master->regmap = regmap;
> >  
> > -	clk = clk_register(NULL, &master->hw);
> > -	if (IS_ERR(clk)) {
> > +	hw = &master->hw;
> > +	ret = clk_hw_register(NULL, &master->hw);
> > +	if (ret) {
> >  		kfree(master);
> > +		hw = ERR_PTR(ret);
> >  	}
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  
> > @@ -198,7 +201,7 @@ static void __init
> >  of_at91_clk_master_setup(struct device_node *np,
> >  			 const struct clk_master_layout *layout)
> >  {
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	unsigned int num_parents;
> >  	const char *parent_names[MASTER_SOURCE_MAX];
> >  	const char *name = np->name;
> > @@ -221,13 +224,13 @@ of_at91_clk_master_setup(struct device_node *np,
> >  	if (IS_ERR(regmap))
> >  		return;
> >  
> > -	clk = at91_clk_register_master(regmap, name, num_parents,
> > +	hw = at91_clk_register_master(regmap, name, num_parents,
> >  				       parent_names, layout,
> >  				       characteristics);
> > -	if (IS_ERR(clk))
> > +	if (IS_ERR(hw))
> >  		goto out_free_characteristics;
> >  
> > -	of_clk_add_provider(np, of_clk_src_simple_get, clk);
> > +	of_clk_add_hw_provider(np, of_clk_hw_simple_get, hw);
> >  	return;
> >  
> >  out_free_characteristics:
> > diff --git a/drivers/clk/at91/clk-peripheral.c b/drivers/clk/at91/clk-peripheral.c
> > index fd160728e990..dc29fd979d3f 100644
> > --- a/drivers/clk/at91/clk-peripheral.c
> > +++ b/drivers/clk/at91/clk-peripheral.c
> > @@ -104,13 +104,14 @@ static const struct clk_ops peripheral_ops = {
> >  	.is_enabled = clk_peripheral_is_enabled,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91_clk_register_peripheral(struct regmap *regmap, const char *name,
> >  			     const char *parent_name, u32 id)
> >  {
> >  	struct clk_peripheral *periph;
> > -	struct clk *clk = NULL;
> >  	struct clk_init_data init;
> > +	struct clk_hw *hw;
> > +	int ret;
> >  
> >  	if (!name || !parent_name || id > PERIPHERAL_ID_MAX)
> >  		return ERR_PTR(-EINVAL);
> > @@ -129,11 +130,14 @@ at91_clk_register_peripheral(struct regmap *regmap, const char *name,
> >  	periph->hw.init = &init;
> >  	periph->regmap = regmap;
> >  
> > -	clk = clk_register(NULL, &periph->hw);
> > -	if (IS_ERR(clk))
> > +	hw = &periph->hw;
> > +	ret = clk_hw_register(NULL, &periph->hw);
> > +	if (ret) {
> >  		kfree(periph);
> > +		hw = ERR_PTR(ret);
> > +	}
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  static void clk_sam9x5_peripheral_autodiv(struct clk_sam9x5_peripheral *periph)
> > @@ -327,14 +331,15 @@ static const struct clk_ops sam9x5_peripheral_ops = {
> >  	.set_rate = clk_sam9x5_peripheral_set_rate,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91_clk_register_sam9x5_peripheral(struct regmap *regmap, spinlock_t *lock,
> >  				    const char *name, const char *parent_name,
> >  				    u32 id, const struct clk_range *range)
> >  {
> >  	struct clk_sam9x5_peripheral *periph;
> > -	struct clk *clk = NULL;
> >  	struct clk_init_data init;
> > +	struct clk_hw *hw;
> > +	int ret;
> >  
> >  	if (!name || !parent_name)
> >  		return ERR_PTR(-EINVAL);
> > @@ -357,13 +362,15 @@ at91_clk_register_sam9x5_peripheral(struct regmap *regmap, spinlock_t *lock,
> >  	periph->auto_div = true;
> >  	periph->range = *range;
> >  
> > -	clk = clk_register(NULL, &periph->hw);
> > -	if (IS_ERR(clk))
> > +	hw = &periph->hw;
> > +	ret = clk_hw_register(NULL, &periph->hw);
> > +	if (ret) {
> >  		kfree(periph);
> > -	else
> > +		hw = ERR_PTR(ret);
> > +	} else
> >  		clk_sam9x5_peripheral_autodiv(periph);
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  static void __init
> > @@ -371,7 +378,7 @@ of_at91_clk_periph_setup(struct device_node *np, u8 type)
> >  {
> >  	int num;
> >  	u32 id;
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	const char *parent_name;
> >  	const char *name;
> >  	struct device_node *periphclknp;
> > @@ -400,7 +407,7 @@ of_at91_clk_periph_setup(struct device_node *np, u8 type)
> >  			name = periphclknp->name;
> >  
> >  		if (type == PERIPHERAL_AT91RM9200) {
> > -			clk = at91_clk_register_peripheral(regmap, name,
> > +			hw = at91_clk_register_peripheral(regmap, name,
> >  							   parent_name, id);
> >  		} else {
> >  			struct clk_range range = CLK_RANGE(0, 0);
> > @@ -409,17 +416,17 @@ of_at91_clk_periph_setup(struct device_node *np, u8 type)
> >  					      "atmel,clk-output-range",
> >  					      &range);
> >  
> > -			clk = at91_clk_register_sam9x5_peripheral(regmap,
> > +			hw = at91_clk_register_sam9x5_peripheral(regmap,
> >  								  &pmc_pcr_lock,
> >  								  name,
> >  								  parent_name,
> >  								  id, &range);
> >  		}
> >  
> > -		if (IS_ERR(clk))
> > +		if (IS_ERR(hw))
> >  			continue;
> >  
> > -		of_clk_add_provider(periphclknp, of_clk_src_simple_get, clk);
> > +		of_clk_add_hw_provider(periphclknp, of_clk_hw_simple_get, hw);
> >  	}
> >  }
> >  
> > diff --git a/drivers/clk/at91/clk-pll.c b/drivers/clk/at91/clk-pll.c
> > index fb2e0b56d4b7..45ad168e1496 100644
> > --- a/drivers/clk/at91/clk-pll.c
> > +++ b/drivers/clk/at91/clk-pll.c
> > @@ -296,17 +296,18 @@ static const struct clk_ops pll_ops = {
> >  	.set_rate = clk_pll_set_rate,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91_clk_register_pll(struct regmap *regmap, const char *name,
> >  		      const char *parent_name, u8 id,
> >  		      const struct clk_pll_layout *layout,
> >  		      const struct clk_pll_characteristics *characteristics)
> >  {
> >  	struct clk_pll *pll;
> > -	struct clk *clk = NULL;
> > +	struct clk_hw *hw;
> >  	struct clk_init_data init;
> >  	int offset = PLL_REG(id);
> >  	unsigned int pllr;
> > +	int ret;
> >  
> >  	if (id > PLL_MAX_ID)
> >  		return ERR_PTR(-EINVAL);
> > @@ -330,12 +331,14 @@ at91_clk_register_pll(struct regmap *regmap, const char *name,
> >  	pll->div = PLL_DIV(pllr);
> >  	pll->mul = PLL_MUL(pllr, layout);
> >  
> > -	clk = clk_register(NULL, &pll->hw);
> > -	if (IS_ERR(clk)) {
> > +	hw = &pll->hw;
> > +	ret = clk_hw_register(NULL, &pll->hw);
> > +	if (ret) {
> >  		kfree(pll);
> > +		hw = ERR_PTR(ret);
> >  	}
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  
> > @@ -465,7 +468,7 @@ of_at91_clk_pll_setup(struct device_node *np,
> >  		      const struct clk_pll_layout *layout)
> >  {
> >  	u32 id;
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	struct regmap *regmap;
> >  	const char *parent_name;
> >  	const char *name = np->name;
> > @@ -486,12 +489,12 @@ of_at91_clk_pll_setup(struct device_node *np,
> >  	if (!characteristics)
> >  		return;
> >  
> > -	clk = at91_clk_register_pll(regmap, name, parent_name, id, layout,
> > +	hw = at91_clk_register_pll(regmap, name, parent_name, id, layout,
> >  				    characteristics);
> > -	if (IS_ERR(clk))
> > +	if (IS_ERR(hw))
> >  		goto out_free_characteristics;
> >  
> > -	of_clk_add_provider(np, of_clk_src_simple_get, clk);
> > +	of_clk_add_hw_provider(np, of_clk_hw_simple_get, hw);
> >  	return;
> >  
> >  out_free_characteristics:
> > diff --git a/drivers/clk/at91/clk-plldiv.c b/drivers/clk/at91/clk-plldiv.c
> > index 2bed26481027..b4afaf22f3fd 100644
> > --- a/drivers/clk/at91/clk-plldiv.c
> > +++ b/drivers/clk/at91/clk-plldiv.c
> > @@ -75,13 +75,14 @@ static const struct clk_ops plldiv_ops = {
> >  	.set_rate = clk_plldiv_set_rate,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91_clk_register_plldiv(struct regmap *regmap, const char *name,
> >  			 const char *parent_name)
> >  {
> >  	struct clk_plldiv *plldiv;
> > -	struct clk *clk = NULL;
> > +	struct clk_hw *hw;
> >  	struct clk_init_data init;
> > +	int ret;
> >  
> >  	plldiv = kzalloc(sizeof(*plldiv), GFP_KERNEL);
> >  	if (!plldiv)
> > @@ -96,18 +97,20 @@ at91_clk_register_plldiv(struct regmap *regmap, const char *name,
> >  	plldiv->hw.init = &init;
> >  	plldiv->regmap = regmap;
> >  
> > -	clk = clk_register(NULL, &plldiv->hw);
> > -
> > -	if (IS_ERR(clk))
> > +	hw = &plldiv->hw;
> > +	ret = clk_hw_register(NULL, &plldiv->hw);
> > +	if (ret) {
> >  		kfree(plldiv);
> > +		hw = ERR_PTR(ret);
> > +	}
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  static void __init
> >  of_at91sam9x5_clk_plldiv_setup(struct device_node *np)
> >  {
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	const char *parent_name;
> >  	const char *name = np->name;
> >  	struct regmap *regmap;
> > @@ -120,12 +123,11 @@ of_at91sam9x5_clk_plldiv_setup(struct device_node *np)
> >  	if (IS_ERR(regmap))
> >  		return;
> >  
> > -	clk = at91_clk_register_plldiv(regmap, name, parent_name);
> > -	if (IS_ERR(clk))
> > +	hw = at91_clk_register_plldiv(regmap, name, parent_name);
> > +	if (IS_ERR(hw))
> >  		return;
> >  
> > -	of_clk_add_provider(np, of_clk_src_simple_get, clk);
> > -	return;
> > +	of_clk_add_hw_provider(np, of_clk_hw_simple_get, hw);
> >  }
> >  CLK_OF_DECLARE(at91sam9x5_clk_plldiv, "atmel,at91sam9x5-clk-plldiv",
> >  	       of_at91sam9x5_clk_plldiv_setup);
> > diff --git a/drivers/clk/at91/clk-programmable.c b/drivers/clk/at91/clk-programmable.c
> > index 10f846cc8db1..4e30899753e6 100644
> > --- a/drivers/clk/at91/clk-programmable.c
> > +++ b/drivers/clk/at91/clk-programmable.c
> > @@ -170,15 +170,16 @@ static const struct clk_ops programmable_ops = {
> >  	.set_rate = clk_programmable_set_rate,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91_clk_register_programmable(struct regmap *regmap,
> >  			       const char *name, const char **parent_names,
> >  			       u8 num_parents, u8 id,
> >  			       const struct clk_programmable_layout *layout)
> >  {
> >  	struct clk_programmable *prog;
> > -	struct clk *clk = NULL;
> > +	struct clk_hw *hw;
> >  	struct clk_init_data init;
> > +	int ret;
> >  
> >  	if (id > PROG_ID_MAX)
> >  		return ERR_PTR(-EINVAL);
> > @@ -198,11 +199,14 @@ at91_clk_register_programmable(struct regmap *regmap,
> >  	prog->hw.init = &init;
> >  	prog->regmap = regmap;
> >  
> > -	clk = clk_register(NULL, &prog->hw);
> > -	if (IS_ERR(clk))
> > +	hw = &prog->hw;
> > +	ret = clk_hw_register(NULL, &prog->hw);
> > +	if (ret) {
> >  		kfree(prog);
> > +		hw = &prog->hw;
> > +	}
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  static const struct clk_programmable_layout at91rm9200_programmable_layout = {
> > @@ -229,7 +233,7 @@ of_at91_clk_prog_setup(struct device_node *np,
> >  {
> >  	int num;
> >  	u32 id;
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	unsigned int num_parents;
> >  	const char *parent_names[PROG_SOURCE_MAX];
> >  	const char *name;
> > @@ -257,13 +261,13 @@ of_at91_clk_prog_setup(struct device_node *np,
> >  		if (of_property_read_string(np, "clock-output-names", &name))
> >  			name = progclknp->name;
> >  
> > -		clk = at91_clk_register_programmable(regmap, name,
> > +		hw = at91_clk_register_programmable(regmap, name,
> >  						     parent_names, num_parents,
> >  						     id, layout);
> > -		if (IS_ERR(clk))
> > +		if (IS_ERR(hw))
> >  			continue;
> >  
> > -		of_clk_add_provider(progclknp, of_clk_src_simple_get, clk);
> > +		of_clk_add_hw_provider(progclknp, of_clk_hw_simple_get, hw);
> >  	}
> >  }
> >  
> > diff --git a/drivers/clk/at91/clk-slow.c b/drivers/clk/at91/clk-slow.c
> > index 61090b1146cf..cd831e19ba72 100644
> > --- a/drivers/clk/at91/clk-slow.c
> > +++ b/drivers/clk/at91/clk-slow.c
> > @@ -111,7 +111,7 @@ static const struct clk_ops slow_osc_ops = {
> >  	.is_prepared = clk_slow_osc_is_prepared,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91_clk_register_slow_osc(void __iomem *sckcr,
> >  			   const char *name,
> >  			   const char *parent_name,
> > @@ -119,8 +119,9 @@ at91_clk_register_slow_osc(void __iomem *sckcr,
> >  			   bool bypass)
> >  {
> >  	struct clk_slow_osc *osc;
> > -	struct clk *clk = NULL;
> > +	struct clk_hw *hw;
> >  	struct clk_init_data init;
> > +	int ret;
> >  
> >  	if (!sckcr || !name || !parent_name)
> >  		return ERR_PTR(-EINVAL);
> > @@ -143,17 +144,20 @@ at91_clk_register_slow_osc(void __iomem *sckcr,
> >  		writel((readl(sckcr) & ~AT91_SCKC_OSC32EN) | AT91_SCKC_OSC32BYP,
> >  		       sckcr);
> >  
> > -	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;
> >  }
> >  
> >  void __init of_at91sam9x5_clk_slow_osc_setup(struct device_node *np,
> >  					     void __iomem *sckcr)
> >  {
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	const char *parent_name;
> >  	const char *name = np->name;
> >  	u32 startup;
> > @@ -164,12 +168,12 @@ void __init of_at91sam9x5_clk_slow_osc_setup(struct device_node *np,
> >  	of_property_read_u32(np, "atmel,startup-time-usec", &startup);
> >  	bypass = of_property_read_bool(np, "atmel,osc-bypass");
> >  
> > -	clk = at91_clk_register_slow_osc(sckcr, name, parent_name, startup,
> > +	hw = at91_clk_register_slow_osc(sckcr, name, parent_name, startup,
> >  					 bypass);
> > -	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);
> >  }
> >  
> >  static unsigned long clk_slow_rc_osc_recalc_rate(struct clk_hw *hw,
> > @@ -223,7 +227,7 @@ static const struct clk_ops slow_rc_osc_ops = {
> >  	.recalc_accuracy = clk_slow_rc_osc_recalc_accuracy,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91_clk_register_slow_rc_osc(void __iomem *sckcr,
> >  			      const char *name,
> >  			      unsigned long frequency,
> > @@ -231,8 +235,9 @@ at91_clk_register_slow_rc_osc(void __iomem *sckcr,
> >  			      unsigned long startup)
> >  {
> >  	struct clk_slow_rc_osc *osc;
> > -	struct clk *clk = NULL;
> > +	struct clk_hw *hw;
> >  	struct clk_init_data init;
> > +	int ret;
> >  
> >  	if (!sckcr || !name)
> >  		return ERR_PTR(-EINVAL);
> > @@ -253,17 +258,20 @@ at91_clk_register_slow_rc_osc(void __iomem *sckcr,
> >  	osc->accuracy = accuracy;
> >  	osc->startup_usec = startup;
> >  
> > -	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;
> >  }
> >  
> >  void __init of_at91sam9x5_clk_slow_rc_osc_setup(struct device_node *np,
> >  						void __iomem *sckcr)
> >  {
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	u32 frequency = 0;
> >  	u32 accuracy = 0;
> >  	u32 startup = 0;
> > @@ -274,12 +282,12 @@ void __init of_at91sam9x5_clk_slow_rc_osc_setup(struct device_node *np,
> >  	of_property_read_u32(np, "clock-accuracy", &accuracy);
> >  	of_property_read_u32(np, "atmel,startup-time-usec", &startup);
> >  
> > -	clk = at91_clk_register_slow_rc_osc(sckcr, name, frequency, accuracy,
> > +	hw = at91_clk_register_slow_rc_osc(sckcr, name, frequency, accuracy,
> >  					    startup);
> > -	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);
> >  }
> >  
> >  static int clk_sam9x5_slow_set_parent(struct clk_hw *hw, u8 index)
> > @@ -321,15 +329,16 @@ static const struct clk_ops sam9x5_slow_ops = {
> >  	.get_parent = clk_sam9x5_slow_get_parent,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91_clk_register_sam9x5_slow(void __iomem *sckcr,
> >  			      const char *name,
> >  			      const char **parent_names,
> >  			      int num_parents)
> >  {
> >  	struct clk_sam9x5_slow *slowck;
> > -	struct clk *clk = NULL;
> > +	struct clk_hw *hw;
> >  	struct clk_init_data init;
> > +	int ret;
> >  
> >  	if (!sckcr || !name || !parent_names || !num_parents)
> >  		return ERR_PTR(-EINVAL);
> > @@ -348,17 +357,20 @@ at91_clk_register_sam9x5_slow(void __iomem *sckcr,
> >  	slowck->sckcr = sckcr;
> >  	slowck->parent = !!(readl(sckcr) & AT91_SCKC_OSCSEL);
> >  
> > -	clk = clk_register(NULL, &slowck->hw);
> > -	if (IS_ERR(clk))
> > +	hw = &slowck->hw;
> > +	ret = clk_hw_register(NULL, &slowck->hw);
> > +	if (ret) {
> >  		kfree(slowck);
> > +		hw = ERR_PTR(ret);
> > +	}
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  void __init of_at91sam9x5_clk_slow_setup(struct device_node *np,
> >  					 void __iomem *sckcr)
> >  {
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	const char *parent_names[2];
> >  	unsigned int num_parents;
> >  	const char *name = np->name;
> > @@ -371,12 +383,12 @@ void __init of_at91sam9x5_clk_slow_setup(struct device_node *np,
> >  
> >  	of_property_read_string(np, "clock-output-names", &name);
> >  
> > -	clk = at91_clk_register_sam9x5_slow(sckcr, name, parent_names,
> > +	hw = at91_clk_register_sam9x5_slow(sckcr, 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);
> >  }
> >  
> >  static u8 clk_sam9260_slow_get_parent(struct clk_hw *hw)
> > @@ -393,15 +405,16 @@ static const struct clk_ops sam9260_slow_ops = {
> >  	.get_parent = clk_sam9260_slow_get_parent,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91_clk_register_sam9260_slow(struct regmap *regmap,
> >  			       const char *name,
> >  			       const char **parent_names,
> >  			       int num_parents)
> >  {
> >  	struct clk_sam9260_slow *slowck;
> > -	struct clk *clk = NULL;
> > +	struct clk_hw *hw;
> >  	struct clk_init_data init;
> > +	int ret;
> >  
> >  	if (!name)
> >  		return ERR_PTR(-EINVAL);
> > @@ -422,16 +435,19 @@ at91_clk_register_sam9260_slow(struct regmap *regmap,
> >  	slowck->hw.init = &init;
> >  	slowck->regmap = regmap;
> >  
> > -	clk = clk_register(NULL, &slowck->hw);
> > -	if (IS_ERR(clk))
> > +	hw = &slowck->hw;
> > +	ret = clk_hw_register(NULL, &slowck->hw);
> > +	if (ret) {
> >  		kfree(slowck);
> > +		hw = ERR_PTR(ret);
> > +	}
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  static void __init of_at91sam9260_clk_slow_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;
> > @@ -448,12 +464,12 @@ static void __init of_at91sam9260_clk_slow_setup(struct device_node *np)
> >  
> >  	of_property_read_string(np, "clock-output-names", &name);
> >  
> > -	clk = at91_clk_register_sam9260_slow(regmap, name, parent_names,
> > +	hw = at91_clk_register_sam9260_slow(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(at91sam9260_clk_slow, "atmel,at91sam9260-clk-slow",
> > diff --git a/drivers/clk/at91/clk-smd.c b/drivers/clk/at91/clk-smd.c
> > index 3c04b069d5b8..965c662b90a5 100644
> > --- a/drivers/clk/at91/clk-smd.c
> > +++ b/drivers/clk/at91/clk-smd.c
> > @@ -111,13 +111,14 @@ static const struct clk_ops at91sam9x5_smd_ops = {
> >  	.set_rate = at91sam9x5_clk_smd_set_rate,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91sam9x5_clk_register_smd(struct regmap *regmap, const char *name,
> >  			    const char **parent_names, u8 num_parents)
> >  {
> >  	struct at91sam9x5_clk_smd *smd;
> > -	struct clk *clk = NULL;
> > +	struct clk_hw *hw;
> >  	struct clk_init_data init;
> > +	int ret;
> >  
> >  	smd = kzalloc(sizeof(*smd), GFP_KERNEL);
> >  	if (!smd)
> > @@ -132,16 +133,19 @@ at91sam9x5_clk_register_smd(struct regmap *regmap, const char *name,
> >  	smd->hw.init = &init;
> >  	smd->regmap = regmap;
> >  
> > -	clk = clk_register(NULL, &smd->hw);
> > -	if (IS_ERR(clk))
> > +	hw = &smd->hw;
> > +	ret = clk_hw_register(NULL, &smd->hw);
> > +	if (ret) {
> >  		kfree(smd);
> > +		hw = ERR_PTR(ret);
> > +	}
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  static void __init of_at91sam9x5_clk_smd_setup(struct device_node *np)
> >  {
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	unsigned int num_parents;
> >  	const char *parent_names[SMD_SOURCE_MAX];
> >  	const char *name = np->name;
> > @@ -159,12 +163,12 @@ static void __init of_at91sam9x5_clk_smd_setup(struct device_node *np)
> >  	if (IS_ERR(regmap))
> >  		return;
> >  
> > -	clk = at91sam9x5_clk_register_smd(regmap, name, parent_names,
> > +	hw = at91sam9x5_clk_register_smd(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_smd, "atmel,at91sam9x5-clk-smd",
> >  	       of_at91sam9x5_clk_smd_setup);
> > diff --git a/drivers/clk/at91/clk-system.c b/drivers/clk/at91/clk-system.c
> > index 8f35d8172909..86a36809765d 100644
> > --- a/drivers/clk/at91/clk-system.c
> > +++ b/drivers/clk/at91/clk-system.c
> > @@ -88,13 +88,14 @@ static const struct clk_ops system_ops = {
> >  	.is_prepared = clk_system_is_prepared,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91_clk_register_system(struct regmap *regmap, const char *name,
> >  			 const char *parent_name, u8 id)
> >  {
> >  	struct clk_system *sys;
> > -	struct clk *clk = NULL;
> > +	struct clk_hw *hw;
> >  	struct clk_init_data init;
> > +	int ret;
> >  
> >  	if (!parent_name || id > SYSTEM_MAX_ID)
> >  		return ERR_PTR(-EINVAL);
> > @@ -113,18 +114,21 @@ at91_clk_register_system(struct regmap *regmap, const char *name,
> >  	sys->hw.init = &init;
> >  	sys->regmap = regmap;
> >  
> > -	clk = clk_register(NULL, &sys->hw);
> > -	if (IS_ERR(clk))
> > +	hw = &sys->hw;
> > +	ret = clk_hw_register(NULL, &sys->hw);
> > +	if (ret) {
> >  		kfree(sys);
> > +		hw = ERR_PTR(ret);
> > +	}
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  static void __init of_at91rm9200_clk_sys_setup(struct device_node *np)
> >  {
> >  	int num;
> >  	u32 id;
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	const char *name;
> >  	struct device_node *sysclknp;
> >  	const char *parent_name;
> > @@ -147,11 +151,11 @@ static void __init of_at91rm9200_clk_sys_setup(struct device_node *np)
> >  
> >  		parent_name = of_clk_get_parent_name(sysclknp, 0);
> >  
> > -		clk = at91_clk_register_system(regmap, name, parent_name, id);
> > -		if (IS_ERR(clk))
> > +		hw = at91_clk_register_system(regmap, name, parent_name, id);
> > +		if (IS_ERR(hw))
> >  			continue;
> >  
> > -		of_clk_add_provider(sysclknp, of_clk_src_simple_get, clk);
> > +		of_clk_add_hw_provider(sysclknp, of_clk_hw_simple_get, hw);
> >  	}
> >  }
> >  CLK_OF_DECLARE(at91rm9200_clk_sys, "atmel,at91rm9200-clk-system",
> > diff --git a/drivers/clk/at91/clk-usb.c b/drivers/clk/at91/clk-usb.c
> > index d80bdb0a8b02..791770a563fc 100644
> > --- a/drivers/clk/at91/clk-usb.c
> > +++ b/drivers/clk/at91/clk-usb.c
> > @@ -192,13 +192,14 @@ static const struct clk_ops at91sam9n12_usb_ops = {
> >  	.set_rate = at91sam9x5_clk_usb_set_rate,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91sam9x5_clk_register_usb(struct regmap *regmap, const char *name,
> >  			    const char **parent_names, u8 num_parents)
> >  {
> >  	struct at91sam9x5_clk_usb *usb;
> > -	struct clk *clk = NULL;
> > +	struct clk_hw *hw;
> >  	struct clk_init_data init;
> > +	int ret;
> >  
> >  	usb = kzalloc(sizeof(*usb), GFP_KERNEL);
> >  	if (!usb)
> > @@ -214,20 +215,24 @@ at91sam9x5_clk_register_usb(struct regmap *regmap, const char *name,
> >  	usb->hw.init = &init;
> >  	usb->regmap = regmap;
> >  
> > -	clk = clk_register(NULL, &usb->hw);
> > -	if (IS_ERR(clk))
> > +	hw = &usb->hw;
> > +	ret = clk_hw_register(NULL, &usb->hw);
> > +	if (ret) {
> >  		kfree(usb);
> > +		hw = ERR_PTR(ret);
> > +	}
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91sam9n12_clk_register_usb(struct regmap *regmap, const char *name,
> >  			     const char *parent_name)
> >  {
> >  	struct at91sam9x5_clk_usb *usb;
> > -	struct clk *clk = NULL;
> > +	struct clk_hw *hw;
> >  	struct clk_init_data init;
> > +	int ret;
> >  
> >  	usb = kzalloc(sizeof(*usb), GFP_KERNEL);
> >  	if (!usb)
> > @@ -242,11 +247,14 @@ at91sam9n12_clk_register_usb(struct regmap *regmap, const char *name,
> >  	usb->hw.init = &init;
> >  	usb->regmap = regmap;
> >  
> > -	clk = clk_register(NULL, &usb->hw);
> > -	if (IS_ERR(clk))
> > +	hw = &usb->hw;
> > +	ret = clk_hw_register(NULL, &usb->hw);
> > +	if (ret) {
> >  		kfree(usb);
> > +		hw = ERR_PTR(ret);
> > +	}
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  static unsigned long at91rm9200_clk_usb_recalc_rate(struct clk_hw *hw,
> > @@ -334,13 +342,14 @@ static const struct clk_ops at91rm9200_usb_ops = {
> >  	.set_rate = at91rm9200_clk_usb_set_rate,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91rm9200_clk_register_usb(struct regmap *regmap, const char *name,
> >  			    const char *parent_name, const u32 *divisors)
> >  {
> >  	struct at91rm9200_clk_usb *usb;
> > -	struct clk *clk = NULL;
> > +	struct clk_hw *hw;
> >  	struct clk_init_data init;
> > +	int ret;
> >  
> >  	usb = kzalloc(sizeof(*usb), GFP_KERNEL);
> >  	if (!usb)
> > @@ -356,16 +365,19 @@ at91rm9200_clk_register_usb(struct regmap *regmap, const char *name,
> >  	usb->regmap = regmap;
> >  	memcpy(usb->divisors, divisors, sizeof(usb->divisors));
> >  
> > -	clk = clk_register(NULL, &usb->hw);
> > -	if (IS_ERR(clk))
> > +	hw = &usb->hw;
> > +	ret = clk_hw_register(NULL, &usb->hw);
> > +	if (ret) {
> >  		kfree(usb);
> > +		hw = ERR_PTR(ret);
> > +	}
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  static void __init of_at91sam9x5_clk_usb_setup(struct device_node *np)
> >  {
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	unsigned int num_parents;
> >  	const char *parent_names[USB_SOURCE_MAX];
> >  	const char *name = np->name;
> > @@ -383,19 +395,19 @@ static void __init of_at91sam9x5_clk_usb_setup(struct device_node *np)
> >  	if (IS_ERR(regmap))
> >  		return;
> >  
> > -	clk = at91sam9x5_clk_register_usb(regmap, name, parent_names,
> > -					  num_parents);
> > -	if (IS_ERR(clk))
> > +	hw = at91sam9x5_clk_register_usb(regmap, name, parent_names,
> > +					 num_parents);
> > +	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_usb, "atmel,at91sam9x5-clk-usb",
> >  	       of_at91sam9x5_clk_usb_setup);
> >  
> >  static void __init of_at91sam9n12_clk_usb_setup(struct device_node *np)
> >  {
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	const char *parent_name;
> >  	const char *name = np->name;
> >  	struct regmap *regmap;
> > @@ -410,18 +422,18 @@ static void __init of_at91sam9n12_clk_usb_setup(struct device_node *np)
> >  	if (IS_ERR(regmap))
> >  		return;
> >  
> > -	clk = at91sam9n12_clk_register_usb(regmap, name, parent_name);
> > -	if (IS_ERR(clk))
> > +	hw = at91sam9n12_clk_register_usb(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(at91sam9n12_clk_usb, "atmel,at91sam9n12-clk-usb",
> >  	       of_at91sam9n12_clk_usb_setup);
> >  
> >  static void __init of_at91rm9200_clk_usb_setup(struct device_node *np)
> >  {
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	const char *parent_name;
> >  	const char *name = np->name;
> >  	u32 divisors[4] = {0, 0, 0, 0};
> > @@ -440,12 +452,11 @@ static void __init of_at91rm9200_clk_usb_setup(struct device_node *np)
> >  	regmap = syscon_node_to_regmap(of_get_parent(np));
> >  	if (IS_ERR(regmap))
> >  		return;
> > -
> > -	clk = at91rm9200_clk_register_usb(regmap, name, parent_name, divisors);
> > -	if (IS_ERR(clk))
> > +	hw = at91rm9200_clk_register_usb(regmap, name, parent_name, divisors);
> > +	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_usb, "atmel,at91rm9200-clk-usb",
> >  	       of_at91rm9200_clk_usb_setup);
> > diff --git a/drivers/clk/at91/clk-utmi.c b/drivers/clk/at91/clk-utmi.c
> > index 61fcf399e58c..aadabd9d1e2b 100644
> > --- a/drivers/clk/at91/clk-utmi.c
> > +++ b/drivers/clk/at91/clk-utmi.c
> > @@ -77,13 +77,14 @@ static const struct clk_ops utmi_ops = {
> >  	.recalc_rate = clk_utmi_recalc_rate,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91_clk_register_utmi(struct regmap *regmap,
> >  		       const char *name, const char *parent_name)
> >  {
> >  	struct clk_utmi *utmi;
> > -	struct clk *clk = NULL;
> > +	struct clk_hw *hw;
> >  	struct clk_init_data init;
> > +	int ret;
> >  
> >  	utmi = kzalloc(sizeof(*utmi), GFP_KERNEL);
> >  	if (!utmi)
> > @@ -98,16 +99,19 @@ at91_clk_register_utmi(struct regmap *regmap,
> >  	utmi->hw.init = &init;
> >  	utmi->regmap = regmap;
> >  
> > -	clk = clk_register(NULL, &utmi->hw);
> > -	if (IS_ERR(clk))
> > +	hw = &utmi->hw;
> > +	ret = clk_hw_register(NULL, &utmi->hw);
> > +	if (ret) {
> >  		kfree(utmi);
> > +		hw = ERR_PTR(ret);
> > +	}
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  static void __init of_at91sam9x5_clk_utmi_setup(struct device_node *np)
> >  {
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	const char *parent_name;
> >  	const char *name = np->name;
> >  	struct regmap *regmap;
> > @@ -120,11 +124,11 @@ static void __init of_at91sam9x5_clk_utmi_setup(struct device_node *np)
> >  	if (IS_ERR(regmap))
> >  		return;
> >  
> > -	clk = at91_clk_register_utmi(regmap, name, parent_name);
> > -	if (IS_ERR(clk))
> > +	hw = at91_clk_register_utmi(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);
> >  	return;
> >  }
> >  CLK_OF_DECLARE(at91sam9x5_clk_utmi, "atmel,at91sam9x5-clk-utmi",
> > -- 
> > 2.7.4
> >   
> 



-- 
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

WARNING: multiple messages have this Message-ID (diff)
From: boris.brezillon@free-electrons.com (Boris Brezillon)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 02/34] clk: at91: Migrate to clk_hw based registration and OF APIs
Date: Tue, 7 Jun 2016 18:40:59 +0200	[thread overview]
Message-ID: <20160607184059.6c83477f@bbrezillon> (raw)
In-Reply-To: <20160607163621.GN3363@piout.net>

On Tue, 7 Jun 2016 18:36:21 +0200
Alexandre Belloni <alexandre.belloni@free-electrons.com> wrote:

> On 01/06/2016 at 16:15:01 -0700, Stephen Boyd wrote :
> > Now that we have clk_hw based provider APIs to register clks, we
> > can get rid of struct clk pointers in this driver, allowing us to
> > move closer to a clear split of consumer and provider clk APIs.
> > 
> > Cc: Alexandre Belloni <alexandre.belloni@free-electrons.com>
> > Cc: Boris Brezillon <boris.brezillon@free-electrons.com>
> > Signed-off-by: Stephen Boyd <stephen.boyd@linaro.org>  
> 
> Well, apart the same comment about alignement:
> 
> Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
> Tested-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>

Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>

> 
> > ---
> > 
> > See commit 58657d189a2f and it's children for details on this
> > new registration API.
> > 
> >  drivers/clk/at91/clk-generated.c    | 30 +++++++------
> >  drivers/clk/at91/clk-h32mx.c        |  8 ++--
> >  drivers/clk/at91/clk-main.c         | 88 ++++++++++++++++++++++---------------
> >  drivers/clk/at91/clk-master.c       | 21 +++++----
> >  drivers/clk/at91/clk-peripheral.c   | 39 +++++++++-------
> >  drivers/clk/at91/clk-pll.c          | 21 +++++----
> >  drivers/clk/at91/clk-plldiv.c       | 24 +++++-----
> >  drivers/clk/at91/clk-programmable.c | 22 ++++++----
> >  drivers/clk/at91/clk-slow.c         | 88 ++++++++++++++++++++++---------------
> >  drivers/clk/at91/clk-smd.c          | 22 ++++++----
> >  drivers/clk/at91/clk-system.c       | 22 ++++++----
> >  drivers/clk/at91/clk-usb.c          | 69 +++++++++++++++++------------
> >  drivers/clk/at91/clk-utmi.c         | 22 ++++++----
> >  13 files changed, 277 insertions(+), 199 deletions(-)
> > 
> > diff --git a/drivers/clk/at91/clk-generated.c b/drivers/clk/at91/clk-generated.c
> > index e1aa210dd7aa..8f1585b3abe5 100644
> > --- a/drivers/clk/at91/clk-generated.c
> > +++ b/drivers/clk/at91/clk-generated.c
> > @@ -233,14 +233,16 @@ static void clk_generated_startup(struct clk_generated *gck)  
> >  					>> AT91_PMC_PCR_GCKDIV_OFFSET;  
> >  }
> >  
> > -static struct clk * __init
> > -at91_clk_register_generated(struct regmap *regmap,  spinlock_t *lock, const char
> > -			    *name, const char **parent_names, u8 num_parents,
> > -			    u8 id, const struct clk_range *range)
> > +static struct clk_hw * __init
> > +at91_clk_register_generated(struct regmap *regmap, spinlock_t *lock,
> > +			    const char *name, const char **parent_names,
> > +			    u8 num_parents, u8 id,
> > +			    const struct clk_range *range)
> >  {
> >  	struct clk_generated *gck;
> > -	struct clk *clk = NULL;
> >  	struct clk_init_data init;
> > +	struct clk_hw *hw;
> > +	int ret;
> >  
> >  	gck = kzalloc(sizeof(*gck), GFP_KERNEL);
> >  	if (!gck)
> > @@ -258,13 +260,15 @@ at91_clk_register_generated(struct regmap *regmap,  spinlock_t *lock, const char
> >  	gck->lock = lock;
> >  	gck->range = *range;
> >  
> > -	clk = clk_register(NULL, &gck->hw);
> > -	if (IS_ERR(clk))
> > +	hw = &gck->hw;
> > +	ret = clk_hw_register(NULL, &gck->hw);
> > +	if (ret) {
> >  		kfree(gck);
> > -	else
> > +		hw = ERR_PTR(ret);
> > +	} else
> >  		clk_generated_startup(gck);
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  void __init of_sama5d2_clk_generated_setup(struct device_node *np)
> > @@ -272,7 +276,7 @@ void __init of_sama5d2_clk_generated_setup(struct device_node *np)
> >  	int num;
> >  	u32 id;
> >  	const char *name;
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	unsigned int num_parents;
> >  	const char *parent_names[GENERATED_SOURCE_MAX];
> >  	struct device_node *gcknp;
> > @@ -306,13 +310,13 @@ void __init of_sama5d2_clk_generated_setup(struct device_node *np)
> >  		of_at91_get_clk_range(gcknp, "atmel,clk-output-range",
> >  				      &range);
> >  
> > -		clk = at91_clk_register_generated(regmap, &pmc_pcr_lock, name,
> > +		hw = at91_clk_register_generated(regmap, &pmc_pcr_lock, name,
> >  						  parent_names, num_parents,
> >  						  id, &range);
> > -		if (IS_ERR(clk))
> > +		if (IS_ERR(hw))
> >  			continue;
> >  
> > -		of_clk_add_provider(gcknp, of_clk_src_simple_get, clk);
> > +		of_clk_add_hw_provider(gcknp, of_clk_hw_simple_get, hw);
> >  	}
> >  }
> >  CLK_OF_DECLARE(of_sama5d2_clk_generated_setup, "atmel,sama5d2-clk-generated",
> > diff --git a/drivers/clk/at91/clk-h32mx.c b/drivers/clk/at91/clk-h32mx.c
> > index 8e20c8a76db7..e0daa4a31f88 100644
> > --- a/drivers/clk/at91/clk-h32mx.c
> > +++ b/drivers/clk/at91/clk-h32mx.c
> > @@ -92,7 +92,7 @@ static void __init of_sama5d4_clk_h32mx_setup(struct device_node *np)
> >  	struct clk_init_data init;
> >  	const char *parent_name;
> >  	struct regmap *regmap;
> > -	struct clk *clk;
> > +	int ret;
> >  
> >  	regmap = syscon_node_to_regmap(of_get_parent(np));
> >  	if (IS_ERR(regmap))
> > @@ -113,13 +113,13 @@ static void __init of_sama5d4_clk_h32mx_setup(struct device_node *np)
> >  	h32mxclk->hw.init = &init;
> >  	h32mxclk->regmap = regmap;
> >  
> > -	clk = clk_register(NULL, &h32mxclk->hw);
> > -	if (IS_ERR(clk)) {
> > +	ret = clk_hw_register(NULL, &h32mxclk->hw);
> > +	if (ret) {
> >  		kfree(h32mxclk);
> >  		return;
> >  	}
> >  
> > -	of_clk_add_provider(np, of_clk_src_simple_get, clk);
> > +	of_clk_add_hw_provider(np, of_clk_hw_simple_get, &h32mxclk->hw);
> >  }
> >  CLK_OF_DECLARE(of_sama5d4_clk_h32mx_setup, "atmel,sama5d4-clk-h32mx",
> >  	       of_sama5d4_clk_h32mx_setup);
> > diff --git a/drivers/clk/at91/clk-main.c b/drivers/clk/at91/clk-main.c
> > index 58b5baca670c..c813c27f2e58 100644
> > --- a/drivers/clk/at91/clk-main.c
> > +++ b/drivers/clk/at91/clk-main.c
> > @@ -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);
> > diff --git a/drivers/clk/at91/clk-master.c b/drivers/clk/at91/clk-master.c
> > index d1021e106191..e9cba9fc26d7 100644
> > --- a/drivers/clk/at91/clk-master.c
> > +++ b/drivers/clk/at91/clk-master.c
> > @@ -120,7 +120,7 @@ static const struct clk_ops master_ops = {
> >  	.get_parent = clk_master_get_parent,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91_clk_register_master(struct regmap *regmap,
> >  		const char *name, int num_parents,
> >  		const char **parent_names,
> > @@ -128,8 +128,9 @@ at91_clk_register_master(struct regmap *regmap,
> >  		const struct clk_master_characteristics *characteristics)
> >  {
> >  	struct clk_master *master;
> > -	struct clk *clk = NULL;
> >  	struct clk_init_data init;
> > +	struct clk_hw *hw;
> > +	int ret;
> >  
> >  	if (!name || !num_parents || !parent_names)
> >  		return ERR_PTR(-EINVAL);
> > @@ -149,12 +150,14 @@ at91_clk_register_master(struct regmap *regmap,
> >  	master->characteristics = characteristics;
> >  	master->regmap = regmap;
> >  
> > -	clk = clk_register(NULL, &master->hw);
> > -	if (IS_ERR(clk)) {
> > +	hw = &master->hw;
> > +	ret = clk_hw_register(NULL, &master->hw);
> > +	if (ret) {
> >  		kfree(master);
> > +		hw = ERR_PTR(ret);
> >  	}
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  
> > @@ -198,7 +201,7 @@ static void __init
> >  of_at91_clk_master_setup(struct device_node *np,
> >  			 const struct clk_master_layout *layout)
> >  {
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	unsigned int num_parents;
> >  	const char *parent_names[MASTER_SOURCE_MAX];
> >  	const char *name = np->name;
> > @@ -221,13 +224,13 @@ of_at91_clk_master_setup(struct device_node *np,
> >  	if (IS_ERR(regmap))
> >  		return;
> >  
> > -	clk = at91_clk_register_master(regmap, name, num_parents,
> > +	hw = at91_clk_register_master(regmap, name, num_parents,
> >  				       parent_names, layout,
> >  				       characteristics);
> > -	if (IS_ERR(clk))
> > +	if (IS_ERR(hw))
> >  		goto out_free_characteristics;
> >  
> > -	of_clk_add_provider(np, of_clk_src_simple_get, clk);
> > +	of_clk_add_hw_provider(np, of_clk_hw_simple_get, hw);
> >  	return;
> >  
> >  out_free_characteristics:
> > diff --git a/drivers/clk/at91/clk-peripheral.c b/drivers/clk/at91/clk-peripheral.c
> > index fd160728e990..dc29fd979d3f 100644
> > --- a/drivers/clk/at91/clk-peripheral.c
> > +++ b/drivers/clk/at91/clk-peripheral.c
> > @@ -104,13 +104,14 @@ static const struct clk_ops peripheral_ops = {
> >  	.is_enabled = clk_peripheral_is_enabled,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91_clk_register_peripheral(struct regmap *regmap, const char *name,
> >  			     const char *parent_name, u32 id)
> >  {
> >  	struct clk_peripheral *periph;
> > -	struct clk *clk = NULL;
> >  	struct clk_init_data init;
> > +	struct clk_hw *hw;
> > +	int ret;
> >  
> >  	if (!name || !parent_name || id > PERIPHERAL_ID_MAX)
> >  		return ERR_PTR(-EINVAL);
> > @@ -129,11 +130,14 @@ at91_clk_register_peripheral(struct regmap *regmap, const char *name,
> >  	periph->hw.init = &init;
> >  	periph->regmap = regmap;
> >  
> > -	clk = clk_register(NULL, &periph->hw);
> > -	if (IS_ERR(clk))
> > +	hw = &periph->hw;
> > +	ret = clk_hw_register(NULL, &periph->hw);
> > +	if (ret) {
> >  		kfree(periph);
> > +		hw = ERR_PTR(ret);
> > +	}
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  static void clk_sam9x5_peripheral_autodiv(struct clk_sam9x5_peripheral *periph)
> > @@ -327,14 +331,15 @@ static const struct clk_ops sam9x5_peripheral_ops = {
> >  	.set_rate = clk_sam9x5_peripheral_set_rate,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91_clk_register_sam9x5_peripheral(struct regmap *regmap, spinlock_t *lock,
> >  				    const char *name, const char *parent_name,
> >  				    u32 id, const struct clk_range *range)
> >  {
> >  	struct clk_sam9x5_peripheral *periph;
> > -	struct clk *clk = NULL;
> >  	struct clk_init_data init;
> > +	struct clk_hw *hw;
> > +	int ret;
> >  
> >  	if (!name || !parent_name)
> >  		return ERR_PTR(-EINVAL);
> > @@ -357,13 +362,15 @@ at91_clk_register_sam9x5_peripheral(struct regmap *regmap, spinlock_t *lock,
> >  	periph->auto_div = true;
> >  	periph->range = *range;
> >  
> > -	clk = clk_register(NULL, &periph->hw);
> > -	if (IS_ERR(clk))
> > +	hw = &periph->hw;
> > +	ret = clk_hw_register(NULL, &periph->hw);
> > +	if (ret) {
> >  		kfree(periph);
> > -	else
> > +		hw = ERR_PTR(ret);
> > +	} else
> >  		clk_sam9x5_peripheral_autodiv(periph);
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  static void __init
> > @@ -371,7 +378,7 @@ of_at91_clk_periph_setup(struct device_node *np, u8 type)
> >  {
> >  	int num;
> >  	u32 id;
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	const char *parent_name;
> >  	const char *name;
> >  	struct device_node *periphclknp;
> > @@ -400,7 +407,7 @@ of_at91_clk_periph_setup(struct device_node *np, u8 type)
> >  			name = periphclknp->name;
> >  
> >  		if (type == PERIPHERAL_AT91RM9200) {
> > -			clk = at91_clk_register_peripheral(regmap, name,
> > +			hw = at91_clk_register_peripheral(regmap, name,
> >  							   parent_name, id);
> >  		} else {
> >  			struct clk_range range = CLK_RANGE(0, 0);
> > @@ -409,17 +416,17 @@ of_at91_clk_periph_setup(struct device_node *np, u8 type)
> >  					      "atmel,clk-output-range",
> >  					      &range);
> >  
> > -			clk = at91_clk_register_sam9x5_peripheral(regmap,
> > +			hw = at91_clk_register_sam9x5_peripheral(regmap,
> >  								  &pmc_pcr_lock,
> >  								  name,
> >  								  parent_name,
> >  								  id, &range);
> >  		}
> >  
> > -		if (IS_ERR(clk))
> > +		if (IS_ERR(hw))
> >  			continue;
> >  
> > -		of_clk_add_provider(periphclknp, of_clk_src_simple_get, clk);
> > +		of_clk_add_hw_provider(periphclknp, of_clk_hw_simple_get, hw);
> >  	}
> >  }
> >  
> > diff --git a/drivers/clk/at91/clk-pll.c b/drivers/clk/at91/clk-pll.c
> > index fb2e0b56d4b7..45ad168e1496 100644
> > --- a/drivers/clk/at91/clk-pll.c
> > +++ b/drivers/clk/at91/clk-pll.c
> > @@ -296,17 +296,18 @@ static const struct clk_ops pll_ops = {
> >  	.set_rate = clk_pll_set_rate,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91_clk_register_pll(struct regmap *regmap, const char *name,
> >  		      const char *parent_name, u8 id,
> >  		      const struct clk_pll_layout *layout,
> >  		      const struct clk_pll_characteristics *characteristics)
> >  {
> >  	struct clk_pll *pll;
> > -	struct clk *clk = NULL;
> > +	struct clk_hw *hw;
> >  	struct clk_init_data init;
> >  	int offset = PLL_REG(id);
> >  	unsigned int pllr;
> > +	int ret;
> >  
> >  	if (id > PLL_MAX_ID)
> >  		return ERR_PTR(-EINVAL);
> > @@ -330,12 +331,14 @@ at91_clk_register_pll(struct regmap *regmap, const char *name,
> >  	pll->div = PLL_DIV(pllr);
> >  	pll->mul = PLL_MUL(pllr, layout);
> >  
> > -	clk = clk_register(NULL, &pll->hw);
> > -	if (IS_ERR(clk)) {
> > +	hw = &pll->hw;
> > +	ret = clk_hw_register(NULL, &pll->hw);
> > +	if (ret) {
> >  		kfree(pll);
> > +		hw = ERR_PTR(ret);
> >  	}
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  
> > @@ -465,7 +468,7 @@ of_at91_clk_pll_setup(struct device_node *np,
> >  		      const struct clk_pll_layout *layout)
> >  {
> >  	u32 id;
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	struct regmap *regmap;
> >  	const char *parent_name;
> >  	const char *name = np->name;
> > @@ -486,12 +489,12 @@ of_at91_clk_pll_setup(struct device_node *np,
> >  	if (!characteristics)
> >  		return;
> >  
> > -	clk = at91_clk_register_pll(regmap, name, parent_name, id, layout,
> > +	hw = at91_clk_register_pll(regmap, name, parent_name, id, layout,
> >  				    characteristics);
> > -	if (IS_ERR(clk))
> > +	if (IS_ERR(hw))
> >  		goto out_free_characteristics;
> >  
> > -	of_clk_add_provider(np, of_clk_src_simple_get, clk);
> > +	of_clk_add_hw_provider(np, of_clk_hw_simple_get, hw);
> >  	return;
> >  
> >  out_free_characteristics:
> > diff --git a/drivers/clk/at91/clk-plldiv.c b/drivers/clk/at91/clk-plldiv.c
> > index 2bed26481027..b4afaf22f3fd 100644
> > --- a/drivers/clk/at91/clk-plldiv.c
> > +++ b/drivers/clk/at91/clk-plldiv.c
> > @@ -75,13 +75,14 @@ static const struct clk_ops plldiv_ops = {
> >  	.set_rate = clk_plldiv_set_rate,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91_clk_register_plldiv(struct regmap *regmap, const char *name,
> >  			 const char *parent_name)
> >  {
> >  	struct clk_plldiv *plldiv;
> > -	struct clk *clk = NULL;
> > +	struct clk_hw *hw;
> >  	struct clk_init_data init;
> > +	int ret;
> >  
> >  	plldiv = kzalloc(sizeof(*plldiv), GFP_KERNEL);
> >  	if (!plldiv)
> > @@ -96,18 +97,20 @@ at91_clk_register_plldiv(struct regmap *regmap, const char *name,
> >  	plldiv->hw.init = &init;
> >  	plldiv->regmap = regmap;
> >  
> > -	clk = clk_register(NULL, &plldiv->hw);
> > -
> > -	if (IS_ERR(clk))
> > +	hw = &plldiv->hw;
> > +	ret = clk_hw_register(NULL, &plldiv->hw);
> > +	if (ret) {
> >  		kfree(plldiv);
> > +		hw = ERR_PTR(ret);
> > +	}
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  static void __init
> >  of_at91sam9x5_clk_plldiv_setup(struct device_node *np)
> >  {
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	const char *parent_name;
> >  	const char *name = np->name;
> >  	struct regmap *regmap;
> > @@ -120,12 +123,11 @@ of_at91sam9x5_clk_plldiv_setup(struct device_node *np)
> >  	if (IS_ERR(regmap))
> >  		return;
> >  
> > -	clk = at91_clk_register_plldiv(regmap, name, parent_name);
> > -	if (IS_ERR(clk))
> > +	hw = at91_clk_register_plldiv(regmap, name, parent_name);
> > +	if (IS_ERR(hw))
> >  		return;
> >  
> > -	of_clk_add_provider(np, of_clk_src_simple_get, clk);
> > -	return;
> > +	of_clk_add_hw_provider(np, of_clk_hw_simple_get, hw);
> >  }
> >  CLK_OF_DECLARE(at91sam9x5_clk_plldiv, "atmel,at91sam9x5-clk-plldiv",
> >  	       of_at91sam9x5_clk_plldiv_setup);
> > diff --git a/drivers/clk/at91/clk-programmable.c b/drivers/clk/at91/clk-programmable.c
> > index 10f846cc8db1..4e30899753e6 100644
> > --- a/drivers/clk/at91/clk-programmable.c
> > +++ b/drivers/clk/at91/clk-programmable.c
> > @@ -170,15 +170,16 @@ static const struct clk_ops programmable_ops = {
> >  	.set_rate = clk_programmable_set_rate,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91_clk_register_programmable(struct regmap *regmap,
> >  			       const char *name, const char **parent_names,
> >  			       u8 num_parents, u8 id,
> >  			       const struct clk_programmable_layout *layout)
> >  {
> >  	struct clk_programmable *prog;
> > -	struct clk *clk = NULL;
> > +	struct clk_hw *hw;
> >  	struct clk_init_data init;
> > +	int ret;
> >  
> >  	if (id > PROG_ID_MAX)
> >  		return ERR_PTR(-EINVAL);
> > @@ -198,11 +199,14 @@ at91_clk_register_programmable(struct regmap *regmap,
> >  	prog->hw.init = &init;
> >  	prog->regmap = regmap;
> >  
> > -	clk = clk_register(NULL, &prog->hw);
> > -	if (IS_ERR(clk))
> > +	hw = &prog->hw;
> > +	ret = clk_hw_register(NULL, &prog->hw);
> > +	if (ret) {
> >  		kfree(prog);
> > +		hw = &prog->hw;
> > +	}
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  static const struct clk_programmable_layout at91rm9200_programmable_layout = {
> > @@ -229,7 +233,7 @@ of_at91_clk_prog_setup(struct device_node *np,
> >  {
> >  	int num;
> >  	u32 id;
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	unsigned int num_parents;
> >  	const char *parent_names[PROG_SOURCE_MAX];
> >  	const char *name;
> > @@ -257,13 +261,13 @@ of_at91_clk_prog_setup(struct device_node *np,
> >  		if (of_property_read_string(np, "clock-output-names", &name))
> >  			name = progclknp->name;
> >  
> > -		clk = at91_clk_register_programmable(regmap, name,
> > +		hw = at91_clk_register_programmable(regmap, name,
> >  						     parent_names, num_parents,
> >  						     id, layout);
> > -		if (IS_ERR(clk))
> > +		if (IS_ERR(hw))
> >  			continue;
> >  
> > -		of_clk_add_provider(progclknp, of_clk_src_simple_get, clk);
> > +		of_clk_add_hw_provider(progclknp, of_clk_hw_simple_get, hw);
> >  	}
> >  }
> >  
> > diff --git a/drivers/clk/at91/clk-slow.c b/drivers/clk/at91/clk-slow.c
> > index 61090b1146cf..cd831e19ba72 100644
> > --- a/drivers/clk/at91/clk-slow.c
> > +++ b/drivers/clk/at91/clk-slow.c
> > @@ -111,7 +111,7 @@ static const struct clk_ops slow_osc_ops = {
> >  	.is_prepared = clk_slow_osc_is_prepared,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91_clk_register_slow_osc(void __iomem *sckcr,
> >  			   const char *name,
> >  			   const char *parent_name,
> > @@ -119,8 +119,9 @@ at91_clk_register_slow_osc(void __iomem *sckcr,
> >  			   bool bypass)
> >  {
> >  	struct clk_slow_osc *osc;
> > -	struct clk *clk = NULL;
> > +	struct clk_hw *hw;
> >  	struct clk_init_data init;
> > +	int ret;
> >  
> >  	if (!sckcr || !name || !parent_name)
> >  		return ERR_PTR(-EINVAL);
> > @@ -143,17 +144,20 @@ at91_clk_register_slow_osc(void __iomem *sckcr,
> >  		writel((readl(sckcr) & ~AT91_SCKC_OSC32EN) | AT91_SCKC_OSC32BYP,
> >  		       sckcr);
> >  
> > -	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;
> >  }
> >  
> >  void __init of_at91sam9x5_clk_slow_osc_setup(struct device_node *np,
> >  					     void __iomem *sckcr)
> >  {
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	const char *parent_name;
> >  	const char *name = np->name;
> >  	u32 startup;
> > @@ -164,12 +168,12 @@ void __init of_at91sam9x5_clk_slow_osc_setup(struct device_node *np,
> >  	of_property_read_u32(np, "atmel,startup-time-usec", &startup);
> >  	bypass = of_property_read_bool(np, "atmel,osc-bypass");
> >  
> > -	clk = at91_clk_register_slow_osc(sckcr, name, parent_name, startup,
> > +	hw = at91_clk_register_slow_osc(sckcr, name, parent_name, startup,
> >  					 bypass);
> > -	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);
> >  }
> >  
> >  static unsigned long clk_slow_rc_osc_recalc_rate(struct clk_hw *hw,
> > @@ -223,7 +227,7 @@ static const struct clk_ops slow_rc_osc_ops = {
> >  	.recalc_accuracy = clk_slow_rc_osc_recalc_accuracy,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91_clk_register_slow_rc_osc(void __iomem *sckcr,
> >  			      const char *name,
> >  			      unsigned long frequency,
> > @@ -231,8 +235,9 @@ at91_clk_register_slow_rc_osc(void __iomem *sckcr,
> >  			      unsigned long startup)
> >  {
> >  	struct clk_slow_rc_osc *osc;
> > -	struct clk *clk = NULL;
> > +	struct clk_hw *hw;
> >  	struct clk_init_data init;
> > +	int ret;
> >  
> >  	if (!sckcr || !name)
> >  		return ERR_PTR(-EINVAL);
> > @@ -253,17 +258,20 @@ at91_clk_register_slow_rc_osc(void __iomem *sckcr,
> >  	osc->accuracy = accuracy;
> >  	osc->startup_usec = startup;
> >  
> > -	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;
> >  }
> >  
> >  void __init of_at91sam9x5_clk_slow_rc_osc_setup(struct device_node *np,
> >  						void __iomem *sckcr)
> >  {
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	u32 frequency = 0;
> >  	u32 accuracy = 0;
> >  	u32 startup = 0;
> > @@ -274,12 +282,12 @@ void __init of_at91sam9x5_clk_slow_rc_osc_setup(struct device_node *np,
> >  	of_property_read_u32(np, "clock-accuracy", &accuracy);
> >  	of_property_read_u32(np, "atmel,startup-time-usec", &startup);
> >  
> > -	clk = at91_clk_register_slow_rc_osc(sckcr, name, frequency, accuracy,
> > +	hw = at91_clk_register_slow_rc_osc(sckcr, name, frequency, accuracy,
> >  					    startup);
> > -	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);
> >  }
> >  
> >  static int clk_sam9x5_slow_set_parent(struct clk_hw *hw, u8 index)
> > @@ -321,15 +329,16 @@ static const struct clk_ops sam9x5_slow_ops = {
> >  	.get_parent = clk_sam9x5_slow_get_parent,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91_clk_register_sam9x5_slow(void __iomem *sckcr,
> >  			      const char *name,
> >  			      const char **parent_names,
> >  			      int num_parents)
> >  {
> >  	struct clk_sam9x5_slow *slowck;
> > -	struct clk *clk = NULL;
> > +	struct clk_hw *hw;
> >  	struct clk_init_data init;
> > +	int ret;
> >  
> >  	if (!sckcr || !name || !parent_names || !num_parents)
> >  		return ERR_PTR(-EINVAL);
> > @@ -348,17 +357,20 @@ at91_clk_register_sam9x5_slow(void __iomem *sckcr,
> >  	slowck->sckcr = sckcr;
> >  	slowck->parent = !!(readl(sckcr) & AT91_SCKC_OSCSEL);
> >  
> > -	clk = clk_register(NULL, &slowck->hw);
> > -	if (IS_ERR(clk))
> > +	hw = &slowck->hw;
> > +	ret = clk_hw_register(NULL, &slowck->hw);
> > +	if (ret) {
> >  		kfree(slowck);
> > +		hw = ERR_PTR(ret);
> > +	}
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  void __init of_at91sam9x5_clk_slow_setup(struct device_node *np,
> >  					 void __iomem *sckcr)
> >  {
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	const char *parent_names[2];
> >  	unsigned int num_parents;
> >  	const char *name = np->name;
> > @@ -371,12 +383,12 @@ void __init of_at91sam9x5_clk_slow_setup(struct device_node *np,
> >  
> >  	of_property_read_string(np, "clock-output-names", &name);
> >  
> > -	clk = at91_clk_register_sam9x5_slow(sckcr, name, parent_names,
> > +	hw = at91_clk_register_sam9x5_slow(sckcr, 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);
> >  }
> >  
> >  static u8 clk_sam9260_slow_get_parent(struct clk_hw *hw)
> > @@ -393,15 +405,16 @@ static const struct clk_ops sam9260_slow_ops = {
> >  	.get_parent = clk_sam9260_slow_get_parent,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91_clk_register_sam9260_slow(struct regmap *regmap,
> >  			       const char *name,
> >  			       const char **parent_names,
> >  			       int num_parents)
> >  {
> >  	struct clk_sam9260_slow *slowck;
> > -	struct clk *clk = NULL;
> > +	struct clk_hw *hw;
> >  	struct clk_init_data init;
> > +	int ret;
> >  
> >  	if (!name)
> >  		return ERR_PTR(-EINVAL);
> > @@ -422,16 +435,19 @@ at91_clk_register_sam9260_slow(struct regmap *regmap,
> >  	slowck->hw.init = &init;
> >  	slowck->regmap = regmap;
> >  
> > -	clk = clk_register(NULL, &slowck->hw);
> > -	if (IS_ERR(clk))
> > +	hw = &slowck->hw;
> > +	ret = clk_hw_register(NULL, &slowck->hw);
> > +	if (ret) {
> >  		kfree(slowck);
> > +		hw = ERR_PTR(ret);
> > +	}
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  static void __init of_at91sam9260_clk_slow_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;
> > @@ -448,12 +464,12 @@ static void __init of_at91sam9260_clk_slow_setup(struct device_node *np)
> >  
> >  	of_property_read_string(np, "clock-output-names", &name);
> >  
> > -	clk = at91_clk_register_sam9260_slow(regmap, name, parent_names,
> > +	hw = at91_clk_register_sam9260_slow(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(at91sam9260_clk_slow, "atmel,at91sam9260-clk-slow",
> > diff --git a/drivers/clk/at91/clk-smd.c b/drivers/clk/at91/clk-smd.c
> > index 3c04b069d5b8..965c662b90a5 100644
> > --- a/drivers/clk/at91/clk-smd.c
> > +++ b/drivers/clk/at91/clk-smd.c
> > @@ -111,13 +111,14 @@ static const struct clk_ops at91sam9x5_smd_ops = {
> >  	.set_rate = at91sam9x5_clk_smd_set_rate,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91sam9x5_clk_register_smd(struct regmap *regmap, const char *name,
> >  			    const char **parent_names, u8 num_parents)
> >  {
> >  	struct at91sam9x5_clk_smd *smd;
> > -	struct clk *clk = NULL;
> > +	struct clk_hw *hw;
> >  	struct clk_init_data init;
> > +	int ret;
> >  
> >  	smd = kzalloc(sizeof(*smd), GFP_KERNEL);
> >  	if (!smd)
> > @@ -132,16 +133,19 @@ at91sam9x5_clk_register_smd(struct regmap *regmap, const char *name,
> >  	smd->hw.init = &init;
> >  	smd->regmap = regmap;
> >  
> > -	clk = clk_register(NULL, &smd->hw);
> > -	if (IS_ERR(clk))
> > +	hw = &smd->hw;
> > +	ret = clk_hw_register(NULL, &smd->hw);
> > +	if (ret) {
> >  		kfree(smd);
> > +		hw = ERR_PTR(ret);
> > +	}
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  static void __init of_at91sam9x5_clk_smd_setup(struct device_node *np)
> >  {
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	unsigned int num_parents;
> >  	const char *parent_names[SMD_SOURCE_MAX];
> >  	const char *name = np->name;
> > @@ -159,12 +163,12 @@ static void __init of_at91sam9x5_clk_smd_setup(struct device_node *np)
> >  	if (IS_ERR(regmap))
> >  		return;
> >  
> > -	clk = at91sam9x5_clk_register_smd(regmap, name, parent_names,
> > +	hw = at91sam9x5_clk_register_smd(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_smd, "atmel,at91sam9x5-clk-smd",
> >  	       of_at91sam9x5_clk_smd_setup);
> > diff --git a/drivers/clk/at91/clk-system.c b/drivers/clk/at91/clk-system.c
> > index 8f35d8172909..86a36809765d 100644
> > --- a/drivers/clk/at91/clk-system.c
> > +++ b/drivers/clk/at91/clk-system.c
> > @@ -88,13 +88,14 @@ static const struct clk_ops system_ops = {
> >  	.is_prepared = clk_system_is_prepared,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91_clk_register_system(struct regmap *regmap, const char *name,
> >  			 const char *parent_name, u8 id)
> >  {
> >  	struct clk_system *sys;
> > -	struct clk *clk = NULL;
> > +	struct clk_hw *hw;
> >  	struct clk_init_data init;
> > +	int ret;
> >  
> >  	if (!parent_name || id > SYSTEM_MAX_ID)
> >  		return ERR_PTR(-EINVAL);
> > @@ -113,18 +114,21 @@ at91_clk_register_system(struct regmap *regmap, const char *name,
> >  	sys->hw.init = &init;
> >  	sys->regmap = regmap;
> >  
> > -	clk = clk_register(NULL, &sys->hw);
> > -	if (IS_ERR(clk))
> > +	hw = &sys->hw;
> > +	ret = clk_hw_register(NULL, &sys->hw);
> > +	if (ret) {
> >  		kfree(sys);
> > +		hw = ERR_PTR(ret);
> > +	}
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  static void __init of_at91rm9200_clk_sys_setup(struct device_node *np)
> >  {
> >  	int num;
> >  	u32 id;
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	const char *name;
> >  	struct device_node *sysclknp;
> >  	const char *parent_name;
> > @@ -147,11 +151,11 @@ static void __init of_at91rm9200_clk_sys_setup(struct device_node *np)
> >  
> >  		parent_name = of_clk_get_parent_name(sysclknp, 0);
> >  
> > -		clk = at91_clk_register_system(regmap, name, parent_name, id);
> > -		if (IS_ERR(clk))
> > +		hw = at91_clk_register_system(regmap, name, parent_name, id);
> > +		if (IS_ERR(hw))
> >  			continue;
> >  
> > -		of_clk_add_provider(sysclknp, of_clk_src_simple_get, clk);
> > +		of_clk_add_hw_provider(sysclknp, of_clk_hw_simple_get, hw);
> >  	}
> >  }
> >  CLK_OF_DECLARE(at91rm9200_clk_sys, "atmel,at91rm9200-clk-system",
> > diff --git a/drivers/clk/at91/clk-usb.c b/drivers/clk/at91/clk-usb.c
> > index d80bdb0a8b02..791770a563fc 100644
> > --- a/drivers/clk/at91/clk-usb.c
> > +++ b/drivers/clk/at91/clk-usb.c
> > @@ -192,13 +192,14 @@ static const struct clk_ops at91sam9n12_usb_ops = {
> >  	.set_rate = at91sam9x5_clk_usb_set_rate,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91sam9x5_clk_register_usb(struct regmap *regmap, const char *name,
> >  			    const char **parent_names, u8 num_parents)
> >  {
> >  	struct at91sam9x5_clk_usb *usb;
> > -	struct clk *clk = NULL;
> > +	struct clk_hw *hw;
> >  	struct clk_init_data init;
> > +	int ret;
> >  
> >  	usb = kzalloc(sizeof(*usb), GFP_KERNEL);
> >  	if (!usb)
> > @@ -214,20 +215,24 @@ at91sam9x5_clk_register_usb(struct regmap *regmap, const char *name,
> >  	usb->hw.init = &init;
> >  	usb->regmap = regmap;
> >  
> > -	clk = clk_register(NULL, &usb->hw);
> > -	if (IS_ERR(clk))
> > +	hw = &usb->hw;
> > +	ret = clk_hw_register(NULL, &usb->hw);
> > +	if (ret) {
> >  		kfree(usb);
> > +		hw = ERR_PTR(ret);
> > +	}
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91sam9n12_clk_register_usb(struct regmap *regmap, const char *name,
> >  			     const char *parent_name)
> >  {
> >  	struct at91sam9x5_clk_usb *usb;
> > -	struct clk *clk = NULL;
> > +	struct clk_hw *hw;
> >  	struct clk_init_data init;
> > +	int ret;
> >  
> >  	usb = kzalloc(sizeof(*usb), GFP_KERNEL);
> >  	if (!usb)
> > @@ -242,11 +247,14 @@ at91sam9n12_clk_register_usb(struct regmap *regmap, const char *name,
> >  	usb->hw.init = &init;
> >  	usb->regmap = regmap;
> >  
> > -	clk = clk_register(NULL, &usb->hw);
> > -	if (IS_ERR(clk))
> > +	hw = &usb->hw;
> > +	ret = clk_hw_register(NULL, &usb->hw);
> > +	if (ret) {
> >  		kfree(usb);
> > +		hw = ERR_PTR(ret);
> > +	}
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  static unsigned long at91rm9200_clk_usb_recalc_rate(struct clk_hw *hw,
> > @@ -334,13 +342,14 @@ static const struct clk_ops at91rm9200_usb_ops = {
> >  	.set_rate = at91rm9200_clk_usb_set_rate,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91rm9200_clk_register_usb(struct regmap *regmap, const char *name,
> >  			    const char *parent_name, const u32 *divisors)
> >  {
> >  	struct at91rm9200_clk_usb *usb;
> > -	struct clk *clk = NULL;
> > +	struct clk_hw *hw;
> >  	struct clk_init_data init;
> > +	int ret;
> >  
> >  	usb = kzalloc(sizeof(*usb), GFP_KERNEL);
> >  	if (!usb)
> > @@ -356,16 +365,19 @@ at91rm9200_clk_register_usb(struct regmap *regmap, const char *name,
> >  	usb->regmap = regmap;
> >  	memcpy(usb->divisors, divisors, sizeof(usb->divisors));
> >  
> > -	clk = clk_register(NULL, &usb->hw);
> > -	if (IS_ERR(clk))
> > +	hw = &usb->hw;
> > +	ret = clk_hw_register(NULL, &usb->hw);
> > +	if (ret) {
> >  		kfree(usb);
> > +		hw = ERR_PTR(ret);
> > +	}
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  static void __init of_at91sam9x5_clk_usb_setup(struct device_node *np)
> >  {
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	unsigned int num_parents;
> >  	const char *parent_names[USB_SOURCE_MAX];
> >  	const char *name = np->name;
> > @@ -383,19 +395,19 @@ static void __init of_at91sam9x5_clk_usb_setup(struct device_node *np)
> >  	if (IS_ERR(regmap))
> >  		return;
> >  
> > -	clk = at91sam9x5_clk_register_usb(regmap, name, parent_names,
> > -					  num_parents);
> > -	if (IS_ERR(clk))
> > +	hw = at91sam9x5_clk_register_usb(regmap, name, parent_names,
> > +					 num_parents);
> > +	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_usb, "atmel,at91sam9x5-clk-usb",
> >  	       of_at91sam9x5_clk_usb_setup);
> >  
> >  static void __init of_at91sam9n12_clk_usb_setup(struct device_node *np)
> >  {
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	const char *parent_name;
> >  	const char *name = np->name;
> >  	struct regmap *regmap;
> > @@ -410,18 +422,18 @@ static void __init of_at91sam9n12_clk_usb_setup(struct device_node *np)
> >  	if (IS_ERR(regmap))
> >  		return;
> >  
> > -	clk = at91sam9n12_clk_register_usb(regmap, name, parent_name);
> > -	if (IS_ERR(clk))
> > +	hw = at91sam9n12_clk_register_usb(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(at91sam9n12_clk_usb, "atmel,at91sam9n12-clk-usb",
> >  	       of_at91sam9n12_clk_usb_setup);
> >  
> >  static void __init of_at91rm9200_clk_usb_setup(struct device_node *np)
> >  {
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	const char *parent_name;
> >  	const char *name = np->name;
> >  	u32 divisors[4] = {0, 0, 0, 0};
> > @@ -440,12 +452,11 @@ static void __init of_at91rm9200_clk_usb_setup(struct device_node *np)
> >  	regmap = syscon_node_to_regmap(of_get_parent(np));
> >  	if (IS_ERR(regmap))
> >  		return;
> > -
> > -	clk = at91rm9200_clk_register_usb(regmap, name, parent_name, divisors);
> > -	if (IS_ERR(clk))
> > +	hw = at91rm9200_clk_register_usb(regmap, name, parent_name, divisors);
> > +	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_usb, "atmel,at91rm9200-clk-usb",
> >  	       of_at91rm9200_clk_usb_setup);
> > diff --git a/drivers/clk/at91/clk-utmi.c b/drivers/clk/at91/clk-utmi.c
> > index 61fcf399e58c..aadabd9d1e2b 100644
> > --- a/drivers/clk/at91/clk-utmi.c
> > +++ b/drivers/clk/at91/clk-utmi.c
> > @@ -77,13 +77,14 @@ static const struct clk_ops utmi_ops = {
> >  	.recalc_rate = clk_utmi_recalc_rate,
> >  };
> >  
> > -static struct clk * __init
> > +static struct clk_hw * __init
> >  at91_clk_register_utmi(struct regmap *regmap,
> >  		       const char *name, const char *parent_name)
> >  {
> >  	struct clk_utmi *utmi;
> > -	struct clk *clk = NULL;
> > +	struct clk_hw *hw;
> >  	struct clk_init_data init;
> > +	int ret;
> >  
> >  	utmi = kzalloc(sizeof(*utmi), GFP_KERNEL);
> >  	if (!utmi)
> > @@ -98,16 +99,19 @@ at91_clk_register_utmi(struct regmap *regmap,
> >  	utmi->hw.init = &init;
> >  	utmi->regmap = regmap;
> >  
> > -	clk = clk_register(NULL, &utmi->hw);
> > -	if (IS_ERR(clk))
> > +	hw = &utmi->hw;
> > +	ret = clk_hw_register(NULL, &utmi->hw);
> > +	if (ret) {
> >  		kfree(utmi);
> > +		hw = ERR_PTR(ret);
> > +	}
> >  
> > -	return clk;
> > +	return hw;
> >  }
> >  
> >  static void __init of_at91sam9x5_clk_utmi_setup(struct device_node *np)
> >  {
> > -	struct clk *clk;
> > +	struct clk_hw *hw;
> >  	const char *parent_name;
> >  	const char *name = np->name;
> >  	struct regmap *regmap;
> > @@ -120,11 +124,11 @@ static void __init of_at91sam9x5_clk_utmi_setup(struct device_node *np)
> >  	if (IS_ERR(regmap))
> >  		return;
> >  
> > -	clk = at91_clk_register_utmi(regmap, name, parent_name);
> > -	if (IS_ERR(clk))
> > +	hw = at91_clk_register_utmi(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);
> >  	return;
> >  }
> >  CLK_OF_DECLARE(at91sam9x5_clk_utmi, "atmel,at91sam9x5-clk-utmi",
> > -- 
> > 2.7.4
> >   
> 



-- 
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

  reply	other threads:[~2016-06-07 16:40 UTC|newest]

Thread overview: 172+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-01 23:14 [PATCH 00/34] Convert clk providers to clk_hw based APIs (part 1) Stephen Boyd
2016-06-01 23:14 ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 01/34] clk: qcom: Migrate to clk_hw based registration and OF APIs Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 02/34] clk: at91: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-06-07 16:36   ` Alexandre Belloni
2016-06-07 16:36     ` Alexandre Belloni
2016-06-07 16:40     ` Boris Brezillon [this message]
2016-06-07 16:40       ` Boris Brezillon
2016-09-15  0:39       ` Stephen Boyd
2016-09-15  0:39         ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 03/34] clk: highbank: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-06-02  1:02   ` Rob Herring
2016-06-02  1:02     ` Rob Herring
2016-06-30 19:25   ` Stephen Boyd
2016-06-30 19:25     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 04/34] clk: bcm2835: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-06-02 18:25   ` Eric Anholt
2016-06-02 18:25     ` Eric Anholt
2016-09-15  0:36     ` Stephen Boyd
2016-09-15  0:36       ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 05/34] clk: bcm: iproc: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-06-02 17:22   ` Ray Jui
2016-06-02 17:22     ` Ray Jui
2016-06-30 19:27   ` Stephen Boyd
2016-06-30 19:27     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 06/34] clk: bcm: kona: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-08-24 23:08   ` Stephen Boyd
2016-08-24 23:08     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 07/34] clk: berlin: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-06-05 17:41   ` Alexandre Belloni
2016-06-05 17:41     ` Alexandre Belloni
2016-06-07  8:40     ` Stephen Boyd
2016-06-07  8:40       ` Stephen Boyd
2016-06-07 16:33       ` Alexandre Belloni
2016-06-07 16:33         ` Alexandre Belloni
2016-06-01 23:15 ` [PATCH 08/34] clk: asm9260: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-08-24 23:09   ` Stephen Boyd
2016-08-24 23:09     ` Stephen Boyd
2016-08-24 23:10   ` Stephen Boyd
2016-08-24 23:10     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 09/34] clk: axi-clkgen: Migrate to clk_hw based OF and registration APIs Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-08-24 23:11   ` Stephen Boyd
2016-08-24 23:11     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 10/34] clk: axm5516: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-08-24 23:12   ` Stephen Boyd
2016-08-24 23:12     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 11/34] clk: cdce: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-08-24 23:13   ` Stephen Boyd
2016-08-24 23:13     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 12/34] clk: cdce925: Migrate to clk_hw based OF and provider APIs Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-08-25  0:19   ` Stephen Boyd
2016-08-25  0:19     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 13/34] clk: clps711x: Migrate to clk_hw based OF and registration APIs Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-08-25  0:20   ` Stephen Boyd
2016-08-25  0:20     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 14/34] clk: cs2000: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-08-25  0:21   ` Stephen Boyd
2016-08-25  0:21     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 15/34] clk: efm32gg: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-08-25  0:22   ` Stephen Boyd
2016-08-25  0:22     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 16/34] clk: ls1x: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-08-19  0:09   ` Stephen Boyd
2016-08-19  0:09     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 17/34] clk: maxgen: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-06-07 18:50   ` Javier Martinez Canillas
2016-06-07 18:50     ` Javier Martinez Canillas
2016-06-07 18:55     ` Javier Martinez Canillas
2016-06-07 18:55       ` Javier Martinez Canillas
2016-08-16 20:06       ` Stephen Boyd
2016-08-16 20:06         ` Stephen Boyd
2016-08-17  3:00         ` Javier Martinez Canillas
2016-08-17  3:00           ` Javier Martinez Canillas
2016-06-01 23:15 ` [PATCH 18/34] clk: mb86s7x: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-08-25  0:27   ` Stephen Boyd
2016-08-25  0:27     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 19/34] clk: moxart: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-08-25  0:25   ` Stephen Boyd
2016-08-25  0:25     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 20/34] clk: nomadik: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-06-02 12:06   ` Linus Walleij
2016-06-02 12:06     ` Linus Walleij
2016-06-30 19:26   ` Stephen Boyd
2016-06-30 19:26     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 21/34] clk: nspire: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-08-25  0:25   ` Stephen Boyd
2016-08-25  0:25     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 22/34] clk: palmas: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-08-25  0:25   ` Stephen Boyd
2016-08-25  0:25     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 23/34] clk: pwm: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-08-25  0:25   ` Stephen Boyd
2016-08-25  0:25     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 24/34] clk: rk808: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-08-25  0:30   ` Stephen Boyd
2016-08-25  0:30     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 25/34] clk: s2mps11: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-06-03  7:18   ` Krzysztof Kozlowski
2016-06-03  7:18     ` Krzysztof Kozlowski
2016-06-08  7:22   ` Andi Shyti
2016-06-08  7:22     ` Andi Shyti
2016-06-30 19:29   ` Stephen Boyd
2016-06-30 19:29     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 26/34] clk: scpi: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-08-25  0:30   ` Stephen Boyd
2016-08-25  0:30     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 27/34] clk: si514: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-08-25  0:30   ` Stephen Boyd
2016-08-25  0:30     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 28/34] clk: si5351: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-08-25  0:30   ` Stephen Boyd
2016-08-25  0:30     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 29/34] clk: si570: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-08-25  0:30   ` Stephen Boyd
2016-08-25  0:30     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 30/34] clk: stm32f3: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-06-06 13:48   ` Daniel Thompson
2016-06-06 13:48     ` Daniel Thompson
2016-06-07  8:37     ` Stephen Boyd
2016-06-07  8:37       ` Stephen Boyd
2016-06-07  8:37       ` Stephen Boyd
2016-06-30 19:28   ` Stephen Boyd
2016-06-30 19:28     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 31/34] clk: twl6040: Migrate to clk_hw based " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-08-25  0:34   ` Stephen Boyd
2016-08-25  0:34     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 32/34] clk: u300: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-06-02 12:06   ` Linus Walleij
2016-06-02 12:06     ` Linus Walleij
2016-06-30 19:26   ` Stephen Boyd
2016-06-30 19:26     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 33/34] clk: vt8500: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-08-25  0:36   ` Stephen Boyd
2016-08-25  0:36     ` Stephen Boyd
2016-06-01 23:15 ` [PATCH 34/34] clk: wm831x: " Stephen Boyd
2016-06-01 23:15   ` Stephen Boyd
2016-08-25  0:36   ` Stephen Boyd
2016-08-25  0:36     ` Stephen Boyd

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160607184059.6c83477f@bbrezillon \
    --to=boris.brezillon@free-electrons.com \
    --cc=alexandre.belloni@free-electrons.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-clk@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mturquette@baylibre.com \
    --cc=sboyd@codeaurora.org \
    --cc=stephen.boyd@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.