diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-09 07:07:14 +0900 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-09 07:07:14 +0900 | 
| commit | f5a246eab9a268f51ba8189ea5b098a1bfff200e (patch) | |
| tree | a6ff7169e0bcaca498d9aec8b0624de1b74eaecb /arch/arm/mach-omap2/mcbsp.c | |
| parent | d5bbd43d5f450c3fca058f5b85f3dfb4e8cc88c9 (diff) | |
| parent | 7ff34ad80b7080fafaac8efa9ef0061708eddd51 (diff) | |
| download | olio-linux-3.10-f5a246eab9a268f51ba8189ea5b098a1bfff200e.tar.xz olio-linux-3.10-f5a246eab9a268f51ba8189ea5b098a1bfff200e.zip  | |
Merge tag 'sound-3.7' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound updates from Takashi Iwai:
 "This contains pretty many small commits covering fairly large range of
  files in sound/ directory.  Partly because of additional API support
  and partly because of constantly developed ASoC and ARM stuff.
  Some highlights:
   - Introduced the helper function and documentation for exposing the
     channel map via control API, as discussed in Plumbers; most of PCI
     drivers are covered, will follow more drivers later
   - Most of drivers have been replaced with the new PM callbacks (if
     the bus is supported)
   - HD-audio controller got the support of runtime PM and the support
     of D3 clock-stop.  Also changing the power_save option in sysfs
     kicks off immediately to enable / disable the power-save mode.
   - Another significant code change in HD-audio is the rewrite of
     firmware loading code.  Other than that, most of changes in
     HD-audio are continued cleanups and standardization for the generic
     auto parser and bug fixes (HBR, device-specific fixups), in
     addition to the support of channel-map API.
   - Addition of ASoC bindings for the compressed API, used by the
     mid-x86 drivers.
   - Lots of cleanups and API refreshes for ASoC codec drivers and
     DaVinci.
   - Conversion of OMAP to dmaengine.
   - New machine driver for Wolfson Microelectronics Bells.
   - New CODEC driver for Wolfson Microelectronics WM0010.
   - Enhancements to the ux500 and wm2000 drivers
   - A new driver for DA9055 and the support for regulator bypass mode."
Fix up various arm soc header file reorg conflicts.
* tag 'sound-3.7' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (339 commits)
  ALSA: hda - Add new codec ALC283 ALC290 support
  ALSA: hda - avoid unneccesary indices on "Headphone Jack" controls
  ALSA: hda - fix indices on boost volume on Conexant
  ALSA: aloop - add locking to timer access
  ALSA: hda - Fix hang caused by race during suspend.
  sound: Remove unnecessary semicolon
  ALSA: hda/realtek - Fix detection of ALC271X codec
  ALSA: hda - Add inverted internal mic quirk for Lenovo IdeaPad U310
  ALSA: hda - make Realtek/Sigmatel/Conexant use the generic unsol event
  ALSA: hda - make a generic unsol event handler
  ASoC: codecs: Add DA9055 codec driver
  ASoC: eukrea-tlv320: Convert it to platform driver
  ALSA: ASoC: add DT bindings for CS4271
  ASoC: wm_hubs: Ensure volume updates are handled during class W startup
  ASoC: wm5110: Adding missing volume update bits
  ASoC: wm5110: Add OUT3R support
  ASoC: wm5110: Add AEC loopback support
  ASoC: wm5110: Rename EPOUT to HPOUT3
  ASoC: arizona: Add more clock rates
  ASoC: arizona: Add more DSP options for mixer input muxes
  ...
Diffstat (limited to 'arch/arm/mach-omap2/mcbsp.c')
| -rw-r--r-- | arch/arm/mach-omap2/mcbsp.c | 126 | 
1 files changed, 7 insertions, 119 deletions
diff --git a/arch/arm/mach-omap2/mcbsp.c b/arch/arm/mach-omap2/mcbsp.c index 7d47407d6d4..37f8f948047 100644 --- a/arch/arm/mach-omap2/mcbsp.c +++ b/arch/arm/mach-omap2/mcbsp.c @@ -15,6 +15,7 @@  #include <linux/clk.h>  #include <linux/err.h>  #include <linux/io.h> +#include <linux/of.h>  #include <linux/platform_device.h>  #include <linux/slab.h>  #include <linux/platform_data/asoc-ti-mcbsp.h> @@ -23,8 +24,6 @@  #include <plat/omap_device.h>  #include <linux/pm_runtime.h> -#include "control.h" -  /*   * FIXME: Find a mechanism to enable/disable runtime the McBSP ICLK autoidle.   * Sidetone needs non-gated ICLK and sidetone autoidle is broken. @@ -32,112 +31,6 @@  #include "cm2xxx_3xxx.h"  #include "cm-regbits-34xx.h" -/* McBSP1 internal signal muxing function for OMAP2/3 */ -static int omap2_mcbsp1_mux_rx_clk(struct device *dev, const char *signal, -				   const char *src) -{ -	u32 v; - -	v = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0); - -	if (!strcmp(signal, "clkr")) { -		if (!strcmp(src, "clkr")) -			v &= ~OMAP2_MCBSP1_CLKR_MASK; -		else if (!strcmp(src, "clkx")) -			v |= OMAP2_MCBSP1_CLKR_MASK; -		else -			return -EINVAL; -	} else if (!strcmp(signal, "fsr")) { -		if (!strcmp(src, "fsr")) -			v &= ~OMAP2_MCBSP1_FSR_MASK; -		else if (!strcmp(src, "fsx")) -			v |= OMAP2_MCBSP1_FSR_MASK; -		else -			return -EINVAL; -	} else { -		return -EINVAL; -	} - -	omap_ctrl_writel(v, OMAP2_CONTROL_DEVCONF0); - -	return 0; -} - -/* McBSP4 internal signal muxing function for OMAP4 */ -#define OMAP4_CONTROL_MCBSPLP_ALBCTRLRX_FSX	(1 << 31) -#define OMAP4_CONTROL_MCBSPLP_ALBCTRLRX_CLKX	(1 << 30) -static int omap4_mcbsp4_mux_rx_clk(struct device *dev, const char *signal, -				   const char *src) -{ -	u32 v; - -	/* -	 * In CONTROL_MCBSPLP register only bit 30 (CLKR mux), and bit 31 (FSR -	 * mux) is used */ -	v = omap4_ctrl_pad_readl(OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_MCBSPLP); - -	if (!strcmp(signal, "clkr")) { -		if (!strcmp(src, "clkr")) -			v &= ~OMAP4_CONTROL_MCBSPLP_ALBCTRLRX_CLKX; -		else if (!strcmp(src, "clkx")) -			v |= OMAP4_CONTROL_MCBSPLP_ALBCTRLRX_CLKX; -		else -			return -EINVAL; -	} else if (!strcmp(signal, "fsr")) { -		if (!strcmp(src, "fsr")) -			v &= ~OMAP4_CONTROL_MCBSPLP_ALBCTRLRX_FSX; -		else if (!strcmp(src, "fsx")) -			v |= OMAP4_CONTROL_MCBSPLP_ALBCTRLRX_FSX; -		else -			return -EINVAL; -	} else { -		return -EINVAL; -	} - -	omap4_ctrl_pad_writel(v, OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_MCBSPLP); - -	return 0; -} - -/* McBSP CLKS source switching function */ -static int omap2_mcbsp_set_clk_src(struct device *dev, struct clk *clk, -				   const char *src) -{ -	struct clk *fck_src; -	char *fck_src_name; -	int r; - -	if (!strcmp(src, "clks_ext")) -		fck_src_name = "pad_fck"; -	else if (!strcmp(src, "clks_fclk")) -		fck_src_name = "prcm_fck"; -	else -		return -EINVAL; - -	fck_src = clk_get(dev, fck_src_name); -	if (IS_ERR_OR_NULL(fck_src)) { -		pr_err("omap-mcbsp: %s: could not clk_get() %s\n", "clks", -		       fck_src_name); -		return -EINVAL; -	} - -	pm_runtime_put_sync(dev); - -	r = clk_set_parent(clk, fck_src); -	if (IS_ERR_VALUE(r)) { -		pr_err("omap-mcbsp: %s: could not clk_set_parent() to %s\n", -		       "clks", fck_src_name); -		clk_put(fck_src); -		return -EINVAL; -	} - -	pm_runtime_get_sync(dev); - -	clk_put(fck_src); - -	return 0; -} -  static int omap3_enable_st_clock(unsigned int id, bool enable)  {  	unsigned int w; @@ -179,17 +72,11 @@ static int __init omap_init_mcbsp(struct omap_hwmod *oh, void *unused)  		pdata->reg_size = 4;  		pdata->has_ccr = true;  	} -	pdata->set_clk_src = omap2_mcbsp_set_clk_src; - -	/* On OMAP2/3 the McBSP1 port has 6 pin configuration */ -	if (id == 1 && oh->class->rev < MCBSP_CONFIG_TYPE4) -		pdata->mux_signal = omap2_mcbsp1_mux_rx_clk; -	/* On OMAP4 the McBSP4 port has 6 pin configuration */ -	if (id == 4 && oh->class->rev == MCBSP_CONFIG_TYPE4) -		pdata->mux_signal = omap4_mcbsp4_mux_rx_clk; - -	if (oh->class->rev == MCBSP_CONFIG_TYPE3) { +	if (oh->class->rev == MCBSP_CONFIG_TYPE2) { +		/* The FIFO has 128 locations */ +		pdata->buffer_size = 0x80; +	} else if (oh->class->rev == MCBSP_CONFIG_TYPE3) {  		if (id == 2)  			/* The FIFO has 1024 + 256 locations */  			pdata->buffer_size = 0x500; @@ -225,7 +112,8 @@ static int __init omap_init_mcbsp(struct omap_hwmod *oh, void *unused)  static int __init omap2_mcbsp_init(void)  { -	omap_hwmod_for_each_by_class("mcbsp", omap_init_mcbsp, NULL); +	if (!of_have_populated_dt()) +		omap_hwmod_for_each_by_class("mcbsp", omap_init_mcbsp, NULL);  	return 0;  }  |