]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - sound/soc/omap/mcbsp.c
Merge tag 'sound-3.7' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
[karo-tx-linux.git] / sound / soc / omap / mcbsp.c
index a681a9a8b8463824618a8c671d7cd12d6501006f..afb8d4f1bedfac70eb98492ce5b4c023bb9d0752 100644 (file)
@@ -24,6 +24,7 @@
 #include <linux/delay.h>
 #include <linux/io.h>
 #include <linux/slab.h>
+#include <linux/pm_runtime.h>
 
 #include <linux/platform_data/asoc-ti-mcbsp.h>
 
@@ -728,50 +729,39 @@ void omap_mcbsp_stop(struct omap_mcbsp *mcbsp, int tx, int rx)
 
 int omap2_mcbsp_set_clks_src(struct omap_mcbsp *mcbsp, u8 fck_src_id)
 {
+       struct clk *fck_src;
        const char *src;
+       int r;
 
        if (fck_src_id == MCBSP_CLKS_PAD_SRC)
-               src = "clks_ext";
+               src = "pad_fck";
        else if (fck_src_id == MCBSP_CLKS_PRCM_SRC)
-               src = "clks_fclk";
+               src = "prcm_fck";
        else
                return -EINVAL;
 
-       if (mcbsp->pdata->set_clk_src)
-               return mcbsp->pdata->set_clk_src(mcbsp->dev, mcbsp->fclk, src);
-       else
+       fck_src = clk_get(mcbsp->dev, src);
+       if (IS_ERR(fck_src)) {
+               dev_err(mcbsp->dev, "CLKS: could not clk_get() %s\n", src);
                return -EINVAL;
-}
-
-int omap_mcbsp_6pin_src_mux(struct omap_mcbsp *mcbsp, u8 mux)
-{
-       const char *signal, *src;
+       }
 
-       if (!mcbsp->pdata->mux_signal)
-               return -EINVAL;
+       pm_runtime_put_sync(mcbsp->dev);
 
-       switch (mux) {
-       case CLKR_SRC_CLKR:
-               signal = "clkr";
-               src = "clkr";
-               break;
-       case CLKR_SRC_CLKX:
-               signal = "clkr";
-               src = "clkx";
-               break;
-       case FSR_SRC_FSR:
-               signal = "fsr";
-               src = "fsr";
-               break;
-       case FSR_SRC_FSX:
-               signal = "fsr";
-               src = "fsx";
-               break;
-       default:
-               return -EINVAL;
+       r = clk_set_parent(mcbsp->fclk, fck_src);
+       if (r) {
+               dev_err(mcbsp->dev, "CLKS: could not clk_set_parent() to %s\n",
+                       src);
+               clk_put(fck_src);
+               return r;
        }
 
-       return mcbsp->pdata->mux_signal(mcbsp->dev, signal, src);
+       pm_runtime_get_sync(mcbsp->dev);
+
+       clk_put(fck_src);
+
+       return 0;
+
 }
 
 #define max_thres(m)                   (mcbsp->pdata->buffer_size)