|
@@ -385,8 +385,9 @@ int rsnd_adg_probe(struct platform_device *pdev,
|
|
|
{
|
|
|
struct rsnd_adg *adg;
|
|
|
struct device *dev = rsnd_priv_to_dev(priv);
|
|
|
- struct clk *clk;
|
|
|
+ struct clk *clk, *clk_orig;
|
|
|
int i;
|
|
|
+ bool use_old_style = false;
|
|
|
|
|
|
adg = devm_kzalloc(dev, sizeof(*adg), GFP_KERNEL);
|
|
|
if (!adg) {
|
|
@@ -394,10 +395,39 @@ int rsnd_adg_probe(struct platform_device *pdev,
|
|
|
return -ENOMEM;
|
|
|
}
|
|
|
|
|
|
- adg->clk[CLKA] = clk_get(NULL, "audio_clk_a");
|
|
|
- adg->clk[CLKB] = clk_get(NULL, "audio_clk_b");
|
|
|
- adg->clk[CLKC] = clk_get(NULL, "audio_clk_c");
|
|
|
- adg->clk[CLKI] = clk_get(NULL, "audio_clk_internal");
|
|
|
+ clk_orig = clk_get(dev, NULL);
|
|
|
+ adg->clk[CLKA] = clk_get(dev, "clk_a");
|
|
|
+ adg->clk[CLKB] = clk_get(dev, "clk_b");
|
|
|
+ adg->clk[CLKC] = clk_get(dev, "clk_c");
|
|
|
+ adg->clk[CLKI] = clk_get(dev, "clk_i");
|
|
|
+
|
|
|
+ /*
|
|
|
+ * It request device dependent audio clock.
|
|
|
+ * But above all clks will indicate rsnd module clock
|
|
|
+ * if platform doesn't it
|
|
|
+ */
|
|
|
+ for_each_rsnd_clk(clk, adg, i) {
|
|
|
+ if (clk_orig == clk) {
|
|
|
+ dev_warn(dev,
|
|
|
+ "doesn't have device dependent clock, use independent clock\n");
|
|
|
+ use_old_style = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+ * note:
|
|
|
+ * these exist in order to keep compatible with
|
|
|
+ * platform which has device independent audio clock,
|
|
|
+ * but will be removed soon
|
|
|
+ */
|
|
|
+ if (use_old_style) {
|
|
|
+ adg->clk[CLKA] = clk_get(NULL, "audio_clk_a");
|
|
|
+ adg->clk[CLKB] = clk_get(NULL, "audio_clk_b");
|
|
|
+ adg->clk[CLKC] = clk_get(NULL, "audio_clk_c");
|
|
|
+ adg->clk[CLKI] = clk_get(NULL, "audio_clk_internal");
|
|
|
+ }
|
|
|
+
|
|
|
for_each_rsnd_clk(clk, adg, i) {
|
|
|
if (IS_ERR(clk)) {
|
|
|
dev_err(dev, "Audio clock failed\n");
|