Skip to content

Commit

Permalink
Merge branch 'mxc-audio' into for-2.6.34
Browse files Browse the repository at this point in the history
Conflicts:
	arch/arm/plat-mxc/Makefile (dual add)
	sound/soc/imx/mx27vis_wm8974.c (API updates & removal)
  • Loading branch information
Mark Brown committed Jan 17, 2010
2 parents a421296 + b05f5c1 commit 9135f6d
Show file tree
Hide file tree
Showing 14 changed files with 1,755 additions and 1,950 deletions.
4 changes: 4 additions & 0 deletions arch/arm/plat-mxc/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,7 @@ obj-$(CONFIG_USB_EHCI_MXC) += ehci.o
obj-$(CONFIG_MXC_ULPI) += ulpi.o
obj-$(CONFIG_ARCH_MXC_AUDMUX_V1) += audmux-v1.o
obj-$(CONFIG_ARCH_MXC_AUDMUX_V2) += audmux-v2.o
ifdef CONFIG_SND_IMX_SOC
obj-y += ssi-fiq.o
obj-y += ssi-fiq-ksym.o
endif
20 changes: 20 additions & 0 deletions arch/arm/plat-mxc/ssi-fiq-ksym.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/*
* Exported ksyms for the SSI FIQ handler
*
* Copyright (C) 2009, Sascha Hauer <s.hauer@pengutronix.de>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/

#include <linux/module.h>

#include <mach/ssi.h>

EXPORT_SYMBOL(imx_ssi_fiq_tx_buffer);
EXPORT_SYMBOL(imx_ssi_fiq_rx_buffer);
EXPORT_SYMBOL(imx_ssi_fiq_start);
EXPORT_SYMBOL(imx_ssi_fiq_end);
EXPORT_SYMBOL(imx_ssi_fiq_base);

134 changes: 134 additions & 0 deletions arch/arm/plat-mxc/ssi-fiq.S
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
/*
* Copyright (C) 2009 Sascha Hauer <s.hauer@pengutronix.de>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/

#include <linux/linkage.h>
#include <asm/assembler.h>

/*
* r8 = bit 0-15: tx offset, bit 16-31: tx buffer size
* r9 = bit 0-15: rx offset, bit 16-31: rx buffer size
*/

#define SSI_STX0 0x00
#define SSI_SRX0 0x08
#define SSI_SISR 0x14
#define SSI_SIER 0x18
#define SSI_SACNT 0x38

#define SSI_SACNT_AC97EN (1 << 0)

#define SSI_SIER_TFE0_EN (1 << 0)
#define SSI_SISR_TFE0 (1 << 0)
#define SSI_SISR_RFF0 (1 << 2)
#define SSI_SIER_RFF0_EN (1 << 2)

.text
.global imx_ssi_fiq_start
.global imx_ssi_fiq_end
.global imx_ssi_fiq_base
.global imx_ssi_fiq_rx_buffer
.global imx_ssi_fiq_tx_buffer

imx_ssi_fiq_start:
ldr r12, imx_ssi_fiq_base

/* TX */
ldr r11, imx_ssi_fiq_tx_buffer

/* shall we send? */
ldr r13, [r12, #SSI_SIER]
tst r13, #SSI_SIER_TFE0_EN
beq 1f

/* TX FIFO empty? */
ldr r13, [r12, #SSI_SISR]
tst r13, #SSI_SISR_TFE0
beq 1f

mov r10, #0x10000
sub r10, #1
and r10, r10, r8 /* r10: current buffer offset */

add r11, r11, r10

ldrh r13, [r11]
strh r13, [r12, #SSI_STX0]

ldrh r13, [r11, #2]
strh r13, [r12, #SSI_STX0]

ldrh r13, [r11, #4]
strh r13, [r12, #SSI_STX0]

ldrh r13, [r11, #6]
strh r13, [r12, #SSI_STX0]

add r10, #8
lsr r13, r8, #16 /* r13: buffer size */
cmp r10, r13
lslgt r8, r13, #16
addle r8, #8
1:
/* RX */

/* shall we receive? */
ldr r13, [r12, #SSI_SIER]
tst r13, #SSI_SIER_RFF0_EN
beq 1f

/* RX FIFO full? */
ldr r13, [r12, #SSI_SISR]
tst r13, #SSI_SISR_RFF0
beq 1f

ldr r11, imx_ssi_fiq_rx_buffer

mov r10, #0x10000
sub r10, #1
and r10, r10, r9 /* r10: current buffer offset */

add r11, r11, r10

ldr r13, [r12, #SSI_SACNT]
tst r13, #SSI_SACNT_AC97EN

ldr r13, [r12, #SSI_SRX0]
strh r13, [r11]

ldr r13, [r12, #SSI_SRX0]
strh r13, [r11, #2]

/* dummy read to skip slot 12 */
ldrne r13, [r12, #SSI_SRX0]

ldr r13, [r12, #SSI_SRX0]
strh r13, [r11, #4]

ldr r13, [r12, #SSI_SRX0]
strh r13, [r11, #6]

/* dummy read to skip slot 12 */
ldrne r13, [r12, #SSI_SRX0]

add r10, #8
lsr r13, r9, #16 /* r13: buffer size */
cmp r10, r13
lslgt r9, r13, #16
addle r9, #8

1:
@ return from FIQ
subs pc, lr, #4
imx_ssi_fiq_base:
.word 0x0
imx_ssi_fiq_rx_buffer:
.word 0x0
imx_ssi_fiq_tx_buffer:
.word 0x0
imx_ssi_fiq_end:

20 changes: 6 additions & 14 deletions sound/soc/imx/Kconfig
Original file line number Diff line number Diff line change
@@ -1,21 +1,13 @@
config SND_MX1_MX2_SOC
tristate "SoC Audio for Freecale i.MX1x i.MX2x CPUs"
depends on ARCH_MX2 || ARCH_MX1
config SND_IMX_SOC
tristate "SoC Audio for Freecale i.MX CPUs"
depends on ARCH_MXC && BROKEN
select SND_PCM
select FIQ
select SND_SOC_AC97_BUS
help
Say Y or M if you want to add support for codecs attached to
the MX1 or MX2 SSI interface.
the i.MX SSI interface.

config SND_MXC_SOC_SSI
tristate

config SND_SOC_MX27VIS_WM8974
tristate "SoC Audio support for MX27 - WM8974 Visstrim_sm10 board"
depends on SND_MX1_MX2_SOC && MACH_MX27 && MACH_IMX27_VISSTRIM_M10
select SND_MXC_SOC_SSI
select SND_SOC_WM8974
help
Say Y if you want to add support for SoC audio on Visstrim SM10
board with WM8974.


12 changes: 6 additions & 6 deletions sound/soc/imx/Makefile
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# i.MX Platform Support
snd-soc-mx1_mx2-objs := mx1_mx2-pcm.o
snd-soc-mxc-ssi-objs := mxc-ssi.o
snd-soc-imx-objs := imx-ssi.o imx-pcm-fiq.o

obj-$(CONFIG_SND_MX1_MX2_SOC) += snd-soc-mx1_mx2.o
obj-$(CONFIG_SND_MXC_SOC_SSI) += snd-soc-mxc-ssi.o
ifdef CONFIG_MACH_MX27
snd-soc-imx-objs += imx-pcm-dma-mx2.o
endif

obj-$(CONFIG_SND_IMX_SOC) += snd-soc-imx.o

# i.MX Machine Support
snd-soc-mx27vis-wm8974-objs := mx27vis_wm8974.o
obj-$(CONFIG_SND_SOC_MX27VIS_WM8974) += snd-soc-mx27vis-wm8974.o
Loading

0 comments on commit 9135f6d

Please sign in to comment.