diff options
author | Paul Walmsley <paul@pwsan.com> | 2010-10-08 13:40:19 -0400 |
---|---|---|
committer | Paul Walmsley <paul@pwsan.com> | 2010-10-08 13:40:19 -0400 |
commit | cf4c87abe238ec17cd0255b4e21abd949d7f811e (patch) | |
tree | feffd8e664e1718ab4dc0d4ba83c26fe5b8d4be3 /arch/arm/mach-omap2/mcbsp.c | |
parent | 829e5b127a33d3baa227e87636032f36cd4c05fc (diff) |
OMAP: McBSP: implement McBSP CLKR and FSR signal muxing via mach-omap2/mcbsp.c
The OMAP ASoC McBSP code implemented CLKR and FSR signal muxing via
direct System Control Module writes on OMAP2+. This required the
omap_ctrl_{read,write}l() functions to be exported, which is against
policy: the only code that should call those functions directly is
OMAP core code, not device drivers. omap_ctrl_{read,write}*() are no
longer exported, so the driver no longer builds as a module.
Fix the pinmuxing part of the problem by removing calls to
omap_ctrl_{read,write}l() from the OMAP ASoC McBSP code and
implementing signal muxing functions in arch/arm/mach-omap2/mcbsp.c.
Due to the unfortunate way that McBSP support is implemented in ASoC
and the OMAP tree, these symbols must be exported for use by
sound/soc/omap/omap-mcbsp.c.
Going forward, the McBSP device driver should be moved from
arch/arm/*omap* into drivers/ or sound/soc/*, and the CPU DAI driver
should be implemented as a platform_driver as many other ASoC CPU DAI
drivers are. These two steps should resolve many of the layering
problems, which will rapidly reappear during a McBSP hwmod/PM runtime
conversion.
Signed-off-by: Paul Walmsley <paul@pwsan.com>
Acked-by: Jarkko Nikula <jhnikula@gmail.com>
Acked-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'arch/arm/mach-omap2/mcbsp.c')
-rw-r--r-- | arch/arm/mach-omap2/mcbsp.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/mcbsp.c b/arch/arm/mach-omap2/mcbsp.c index 88b8790e4fec..4c9c999dfa4a 100644 --- a/arch/arm/mach-omap2/mcbsp.c +++ b/arch/arm/mach-omap2/mcbsp.c | |||
@@ -22,7 +22,37 @@ | |||
22 | #include <plat/dma.h> | 22 | #include <plat/dma.h> |
23 | #include <plat/cpu.h> | 23 | #include <plat/cpu.h> |
24 | #include <plat/mcbsp.h> | 24 | #include <plat/mcbsp.h> |
25 | #include <plat/control.h> | ||
25 | 26 | ||
27 | /* McBSP internal signal muxing functions */ | ||
28 | |||
29 | void omap2_mcbsp1_mux_clkr_src(u8 mux) | ||
30 | { | ||
31 | u32 v; | ||
32 | |||
33 | v = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0); | ||
34 | if (mux == CLKR_SRC_CLKR) | ||
35 | v &= OMAP2_MCBSP1_CLKR_MASK; | ||
36 | else if (mux == CLKR_SRC_CLKX) | ||
37 | v |= OMAP2_MCBSP1_CLKR_MASK; | ||
38 | omap_ctrl_writel(v, OMAP2_CONTROL_DEVCONF0); | ||
39 | } | ||
40 | EXPORT_SYMBOL(omap2_mcbsp1_mux_clkr_src); | ||
41 | |||
42 | void omap2_mcbsp1_mux_fsr_src(u8 mux) | ||
43 | { | ||
44 | u32 v; | ||
45 | |||
46 | v = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0); | ||
47 | if (mux == FSR_SRC_FSR) | ||
48 | v &= OMAP2_MCBSP1_FSR_MASK; | ||
49 | else if (mux == FSR_SRC_FSX) | ||
50 | v |= OMAP2_MCBSP1_FSR_MASK; | ||
51 | omap_ctrl_writel(v, OMAP2_CONTROL_DEVCONF0); | ||
52 | } | ||
53 | EXPORT_SYMBOL(omap2_mcbsp1_mux_fsr_src); | ||
54 | |||
55 | /* Platform data */ | ||
26 | 56 | ||
27 | #ifdef CONFIG_ARCH_OMAP2420 | 57 | #ifdef CONFIG_ARCH_OMAP2420 |
28 | static struct omap_mcbsp_platform_data omap2420_mcbsp_pdata[] = { | 58 | static struct omap_mcbsp_platform_data omap2420_mcbsp_pdata[] = { |