diff options
author | Takashi Iwai <tiwai@suse.de> | 2012-09-22 18:31:08 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2012-09-22 18:31:08 +0200 |
commit | 3d98c21d064bfbb8c6fddc659471acb4950320fa (patch) | |
tree | a506fbe4cca3616f328cdf761a45d0a09ce38237 /sound/soc/omap/mcbsp.c | |
parent | ALSA: hda - add PCI identifier for Intel 5 Series/3400 (diff) | |
parent | Merge tag 'v3.6-rc6' into for-3.7 (diff) | |
download | linux-dev-3d98c21d064bfbb8c6fddc659471acb4950320fa.tar.xz linux-dev-3d98c21d064bfbb8c6fddc659471acb4950320fa.zip |
Merge tag 'asoc-3.7' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-next
ASoC: Updates for v3.7
Lots and lots of driver specific cleanups and enhancements but the only
substantial framework feature this time round is the compressed API
binding:
- Addition of ASoC bindings for the compressed API, used by the mid-x86
drivers.
- Lots of cleanups and API refreshes for CODEC drivers and DaVinci.
- Conversion of OMAP to dmaengine.
- New machine driver for Wolfson Microelectronics Bells.
- New CODEC driver for Wolfson Microelectronics WM0010.
Diffstat (limited to 'sound/soc/omap/mcbsp.c')
-rw-r--r-- | sound/soc/omap/mcbsp.c | 54 |
1 files changed, 22 insertions, 32 deletions
diff --git a/sound/soc/omap/mcbsp.c b/sound/soc/omap/mcbsp.c index d33c48baaf71..bc06175e6367 100644 --- a/sound/soc/omap/mcbsp.c +++ b/sound/soc/omap/mcbsp.c @@ -24,6 +24,7 @@ #include <linux/delay.h> #include <linux/io.h> #include <linux/slab.h> +#include <linux/pm_runtime.h> #include <plat/mcbsp.h> @@ -726,50 +727,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) |