diff options
author | Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> | 2017-02-20 15:23:56 -0500 |
---|---|---|
committer | Stephen Boyd <sboyd@codeaurora.org> | 2017-04-19 12:52:32 -0400 |
commit | 41ee7caf59e1c68d696162523cdf1fa7f717a731 (patch) | |
tree | 8e9d88329c9ed73e61db1bdf8c0b616fa13dbb34 /drivers/clk/x86 | |
parent | 8973aa4aecac223548366ca81818309a0f0efa6d (diff) |
clk: x86: add "mclk" alias for Baytrail/Cherrytrail
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>
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
Diffstat (limited to 'drivers/clk/x86')
-rw-r--r-- | drivers/clk/x86/clk-pmc-atom.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/clk/x86/clk-pmc-atom.c b/drivers/clk/x86/clk-pmc-atom.c index 2b60577703ef..fafc99120dc2 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 { | |||
54 | struct clk_plt_fixed **parents; | 54 | struct clk_plt_fixed **parents; |
55 | u8 nparents; | 55 | u8 nparents; |
56 | struct clk_plt *clks[PMC_CLK_NUM]; | 56 | struct clk_plt *clks[PMC_CLK_NUM]; |
57 | struct clk_lookup *mclk_lookup; | ||
57 | }; | 58 | }; |
58 | 59 | ||
59 | /* Return an index in parent table */ | 60 | /* Return an index in parent table */ |
@@ -337,6 +338,11 @@ static int plt_clk_probe(struct platform_device *pdev) | |||
337 | goto err_unreg_clk_plt; | 338 | goto err_unreg_clk_plt; |
338 | } | 339 | } |
339 | } | 340 | } |
341 | data->mclk_lookup = clkdev_hw_create(&data->clks[3]->hw, "mclk", NULL); | ||
342 | if (IS_ERR(data->mclk_lookup)) { | ||
343 | err = PTR_ERR(data->mclk_lookup); | ||
344 | goto err_unreg_clk_plt; | ||
345 | } | ||
340 | 346 | ||
341 | plt_clk_free_parent_names_loop(parent_names, data->nparents); | 347 | plt_clk_free_parent_names_loop(parent_names, data->nparents); |
342 | 348 | ||
@@ -356,6 +362,7 @@ static int plt_clk_remove(struct platform_device *pdev) | |||
356 | 362 | ||
357 | data = platform_get_drvdata(pdev); | 363 | data = platform_get_drvdata(pdev); |
358 | 364 | ||
365 | clkdev_drop(data->mclk_lookup); | ||
359 | plt_clk_unregister_loop(data, PMC_CLK_NUM); | 366 | plt_clk_unregister_loop(data, PMC_CLK_NUM); |
360 | plt_clk_unregister_parents(data); | 367 | plt_clk_unregister_parents(data); |
361 | return 0; | 368 | return 0; |