diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-07 20:07:31 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-07 20:07:31 -0400 |
commit | faa38b5e0e092914764cdba9f83d31a3f794d182 (patch) | |
tree | b3e5921bdc36378033b4910eb4f29cb0dfc486e0 /arch/arm/mach-ep93xx/core.c | |
parent | 78417334b5cb6e1f915b8fdcc4fce3f1a1b4420c (diff) | |
parent | 74bf40f0793fed9e01eb6164c2ce63e8c27ca205 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6: (214 commits)
ALSA: hda - Add pin-fix for HP dc5750
ALSA: als4000: Fix potentially invalid DMA mode setup
ALSA: als4000: enable burst mode
ALSA: hda - Fix initial capsrc selection in patch_alc269()
ASoC: TWL4030: Capture route runtime DAPM ordering fix
ALSA: hda - Add PC-beep whitelist for an Intel board
ALSA: hda - More relax for pending period handling
ALSA: hda - Define AC_FMT_* constants
ALSA: hda - Fix beep frequency on IDT 92HD73xx and 92HD71Bxx codecs
ALSA: hda - Add support for HDMI HBR passthrough
ALSA: hda - Set Stream Type in Stream Format according to AES0
ALSA: hda - Fix Thinkpad X300 so SPDIF is not exposed
ALSA: hda - FIX to not expose SPDIF on Thinkpad X301, since it does not have the ability to use SPDIF
ASoC: wm9081: fix resource reclaim in wm9081_register error path
ASoC: wm8978: fix a memory leak if a wm8978_register fail
ASoC: wm8974: fix a memory leak if another WM8974 is registered
ASoC: wm8961: fix resource reclaim in wm8961_register error path
ASoC: wm8955: fix resource reclaim in wm8955_register error path
ASoC: wm8940: fix a memory leak if wm8940_register return error
ASoC: wm8904: fix resource reclaim in wm8904_register error path
...
Diffstat (limited to 'arch/arm/mach-ep93xx/core.c')
-rw-r--r-- | arch/arm/mach-ep93xx/core.c | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c index 8e37a045188..4cb55d3902f 100644 --- a/arch/arm/mach-ep93xx/core.c +++ b/arch/arm/mach-ep93xx/core.c | |||
@@ -758,6 +758,73 @@ void ep93xx_keypad_release_gpio(struct platform_device *pdev) | |||
758 | } | 758 | } |
759 | EXPORT_SYMBOL(ep93xx_keypad_release_gpio); | 759 | EXPORT_SYMBOL(ep93xx_keypad_release_gpio); |
760 | 760 | ||
761 | /************************************************************************* | ||
762 | * EP93xx I2S audio peripheral handling | ||
763 | *************************************************************************/ | ||
764 | static struct resource ep93xx_i2s_resource[] = { | ||
765 | { | ||
766 | .start = EP93XX_I2S_PHYS_BASE, | ||
767 | .end = EP93XX_I2S_PHYS_BASE + 0x100 - 1, | ||
768 | .flags = IORESOURCE_MEM, | ||
769 | }, | ||
770 | }; | ||
771 | |||
772 | static struct platform_device ep93xx_i2s_device = { | ||
773 | .name = "ep93xx-i2s", | ||
774 | .id = -1, | ||
775 | .num_resources = ARRAY_SIZE(ep93xx_i2s_resource), | ||
776 | .resource = ep93xx_i2s_resource, | ||
777 | }; | ||
778 | |||
779 | void __init ep93xx_register_i2s(void) | ||
780 | { | ||
781 | platform_device_register(&ep93xx_i2s_device); | ||
782 | } | ||
783 | |||
784 | #define EP93XX_SYSCON_DEVCFG_I2S_MASK (EP93XX_SYSCON_DEVCFG_I2SONSSP | \ | ||
785 | EP93XX_SYSCON_DEVCFG_I2SONAC97) | ||
786 | |||
787 | #define EP93XX_I2SCLKDIV_MASK (EP93XX_SYSCON_I2SCLKDIV_ORIDE | \ | ||
788 | EP93XX_SYSCON_I2SCLKDIV_SPOL) | ||
789 | |||
790 | int ep93xx_i2s_acquire(unsigned i2s_pins, unsigned i2s_config) | ||
791 | { | ||
792 | unsigned val; | ||
793 | |||
794 | /* Sanity check */ | ||
795 | if (i2s_pins & ~EP93XX_SYSCON_DEVCFG_I2S_MASK) | ||
796 | return -EINVAL; | ||
797 | if (i2s_config & ~EP93XX_I2SCLKDIV_MASK) | ||
798 | return -EINVAL; | ||
799 | |||
800 | /* Must have only one of I2SONSSP/I2SONAC97 set */ | ||
801 | if ((i2s_pins & EP93XX_SYSCON_DEVCFG_I2SONSSP) == | ||
802 | (i2s_pins & EP93XX_SYSCON_DEVCFG_I2SONAC97)) | ||
803 | return -EINVAL; | ||
804 | |||
805 | ep93xx_devcfg_clear_bits(EP93XX_SYSCON_DEVCFG_I2S_MASK); | ||
806 | ep93xx_devcfg_set_bits(i2s_pins); | ||
807 | |||
808 | /* | ||
809 | * This is potentially racy with the clock api for i2s_mclk, sclk and | ||
810 | * lrclk. Since the i2s driver is the only user of those clocks we | ||
811 | * rely on it to prevent parallel use of this function and the | ||
812 | * clock api for the i2s clocks. | ||
813 | */ | ||
814 | val = __raw_readl(EP93XX_SYSCON_I2SCLKDIV); | ||
815 | val &= ~EP93XX_I2SCLKDIV_MASK; | ||
816 | val |= i2s_config; | ||
817 | ep93xx_syscon_swlocked_write(val, EP93XX_SYSCON_I2SCLKDIV); | ||
818 | |||
819 | return 0; | ||
820 | } | ||
821 | EXPORT_SYMBOL(ep93xx_i2s_acquire); | ||
822 | |||
823 | void ep93xx_i2s_release(void) | ||
824 | { | ||
825 | ep93xx_devcfg_clear_bits(EP93XX_SYSCON_DEVCFG_I2S_MASK); | ||
826 | } | ||
827 | EXPORT_SYMBOL(ep93xx_i2s_release); | ||
761 | 828 | ||
762 | extern void ep93xx_gpio_init(void); | 829 | extern void ep93xx_gpio_init(void); |
763 | 830 | ||