diff mbox

[v2] clk: x86: add "mclk" alias for Baytrail/Cherrytrail

Message ID 1487622236-16901-1-git-send-email-pierre-louis.bossart@linux.intel.com (mailing list archive)
State Awaiting Upstream, archived
Headers show

Commit Message

Pierre-Louis Bossart Feb. 20, 2017, 8:23 p.m. UTC
Due to timing requirements, TI and Conexant manage the audio
reference clock from their ASoC codec drivers using the "mclk"
string. This patch adds another lookup for the "pmc_plt_clk_3"
clock to avoid Intel-specific tests in those codec drivers and
use code as-is.

To avoid a leak, clk_add_alias() is not used in this patch.
Instead the lookup is created manually as part of the .probe()
step and dropped in the .remove() step.

"pmc_plt_clk_3" is used exclusively for audio on all known
Baytrail/CherryTrail designs and is e.g. routed on the MCLK
(pin 26) of the MinnowBoardMAX Turbot LSE connector.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
---
 drivers/clk/x86/clk-pmc-atom.c | 7 +++++++
 1 file changed, 7 insertions(+)

Comments

Pierre-Louis Bossart March 20, 2017, 1:47 a.m. UTC | #1
On 2/20/17 2:23 PM, Pierre-Louis Bossart wrote:
> Due to timing requirements, TI and Conexant manage the audio
> reference clock from their ASoC codec drivers using the "mclk"
> string. This patch adds another lookup for the "pmc_plt_clk_3"
> clock to avoid Intel-specific tests in those codec drivers and
> use code as-is.
>
> To avoid a leak, clk_add_alias() is not used in this patch.
> Instead the lookup is created manually as part of the .probe()
> step and dropped in the .remove() step.
>
> "pmc_plt_clk_3" is used exclusively for audio on all known
> Baytrail/CherryTrail designs and is e.g. routed on the MCLK
> (pin 26) of the MinnowBoardMAX Turbot LSE connector.
>
> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>

Was there any objection or feedback on this patch?
The functionality is needed for a couple of audio drivers from Conexant 
and Dialog initially written for ARM platforms.
Thanks
-Pierre


> ---
>  drivers/clk/x86/clk-pmc-atom.c | 7 +++++++
>  1 file changed, 7 insertions(+)
>
> diff --git a/drivers/clk/x86/clk-pmc-atom.c b/drivers/clk/x86/clk-pmc-atom.c
> index 2b60577..fafc991 100644
> --- a/drivers/clk/x86/clk-pmc-atom.c
> +++ b/drivers/clk/x86/clk-pmc-atom.c
> @@ -54,6 +54,7 @@ struct clk_plt_data {
>  	struct clk_plt_fixed **parents;
>  	u8 nparents;
>  	struct clk_plt *clks[PMC_CLK_NUM];
> +	struct clk_lookup *mclk_lookup;
>  };
>
>  /* Return an index in parent table */
> @@ -337,6 +338,11 @@ static int plt_clk_probe(struct platform_device *pdev)
>  			goto err_unreg_clk_plt;
>  		}
>  	}
> +	data->mclk_lookup = clkdev_hw_create(&data->clks[3]->hw, "mclk", NULL);
> +	if (IS_ERR(data->mclk_lookup)) {
> +		err = PTR_ERR(data->mclk_lookup);
> +		goto err_unreg_clk_plt;
> +	}
>
>  	plt_clk_free_parent_names_loop(parent_names, data->nparents);
>
> @@ -356,6 +362,7 @@ static int plt_clk_remove(struct platform_device *pdev)
>
>  	data = platform_get_drvdata(pdev);
>
> +	clkdev_drop(data->mclk_lookup);
>  	plt_clk_unregister_loop(data, PMC_CLK_NUM);
>  	plt_clk_unregister_parents(data);
>  	return 0;
>
Stephen Boyd April 19, 2017, 4:53 p.m. UTC | #2
On 02/20, Pierre-Louis Bossart wrote:
> Due to timing requirements, TI and Conexant manage the audio
> reference clock from their ASoC codec drivers using the "mclk"
> string. This patch adds another lookup for the "pmc_plt_clk_3"
> clock to avoid Intel-specific tests in those codec drivers and
> use code as-is.
> 
> To avoid a leak, clk_add_alias() is not used in this patch.
> Instead the lookup is created manually as part of the .probe()
> step and dropped in the .remove() step.
> 
> "pmc_plt_clk_3" is used exclusively for audio on all known
> Baytrail/CherryTrail designs and is e.g. routed on the MCLK
> (pin 26) of the MinnowBoardMAX Turbot LSE connector.
> 
> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> ---

Applied to clk-next
diff mbox

Patch

diff --git a/drivers/clk/x86/clk-pmc-atom.c b/drivers/clk/x86/clk-pmc-atom.c
index 2b60577..fafc991 100644
--- a/drivers/clk/x86/clk-pmc-atom.c
+++ b/drivers/clk/x86/clk-pmc-atom.c
@@ -54,6 +54,7 @@  struct clk_plt_data {
 	struct clk_plt_fixed **parents;
 	u8 nparents;
 	struct clk_plt *clks[PMC_CLK_NUM];
+	struct clk_lookup *mclk_lookup;
 };
 
 /* Return an index in parent table */
@@ -337,6 +338,11 @@  static int plt_clk_probe(struct platform_device *pdev)
 			goto err_unreg_clk_plt;
 		}
 	}
+	data->mclk_lookup = clkdev_hw_create(&data->clks[3]->hw, "mclk", NULL);
+	if (IS_ERR(data->mclk_lookup)) {
+		err = PTR_ERR(data->mclk_lookup);
+		goto err_unreg_clk_plt;
+	}
 
 	plt_clk_free_parent_names_loop(parent_names, data->nparents);
 
@@ -356,6 +362,7 @@  static int plt_clk_remove(struct platform_device *pdev)
 
 	data = platform_get_drvdata(pdev);
 
+	clkdev_drop(data->mclk_lookup);
 	plt_clk_unregister_loop(data, PMC_CLK_NUM);
 	plt_clk_unregister_parents(data);
 	return 0;