{
        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) {
                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");