diff options
-rw-r--r-- | arch/arm/plat-mxc/include/mach/ssi.h | 3 | ||||
-rw-r--r-- | sound/soc/imx/imx-ssi.c | 11 |
2 files changed, 12 insertions, 2 deletions
diff --git a/arch/arm/plat-mxc/include/mach/ssi.h b/arch/arm/plat-mxc/include/mach/ssi.h index c34ded523f10..63f3c2804239 100644 --- a/arch/arm/plat-mxc/include/mach/ssi.h +++ b/arch/arm/plat-mxc/include/mach/ssi.h | |||
@@ -10,6 +10,9 @@ struct imx_ssi_platform_data { | |||
10 | unsigned int flags; | 10 | unsigned int flags; |
11 | #define IMX_SSI_DMA (1 << 0) | 11 | #define IMX_SSI_DMA (1 << 0) |
12 | #define IMX_SSI_USE_AC97 (1 << 1) | 12 | #define IMX_SSI_USE_AC97 (1 << 1) |
13 | #define IMX_SSI_NET (1 << 2) | ||
14 | #define IMX_SSI_SYN (1 << 3) | ||
15 | #define IMX_SSI_USE_I2S_SLAVE (1 << 4) | ||
13 | void (*ac97_reset) (struct snd_ac97 *ac97); | 16 | void (*ac97_reset) (struct snd_ac97 *ac97); |
14 | void (*ac97_warm_reset)(struct snd_ac97 *ac97); | 17 | void (*ac97_warm_reset)(struct snd_ac97 *ac97); |
15 | }; | 18 | }; |
diff --git a/sound/soc/imx/imx-ssi.c b/sound/soc/imx/imx-ssi.c index 80b4fee2442b..50f51624c535 100644 --- a/sound/soc/imx/imx-ssi.c +++ b/sound/soc/imx/imx-ssi.c | |||
@@ -83,8 +83,6 @@ static int imx_ssi_set_dai_tdm_slot(struct snd_soc_dai *cpu_dai, | |||
83 | /* | 83 | /* |
84 | * SSI DAI format configuration. | 84 | * SSI DAI format configuration. |
85 | * Should only be called when port is inactive (i.e. SSIEN = 0). | 85 | * Should only be called when port is inactive (i.e. SSIEN = 0). |
86 | * Note: We don't use the I2S modes but instead manually configure the | ||
87 | * SSI for I2S because the I2S mode is only a register preset. | ||
88 | */ | 86 | */ |
89 | static int imx_ssi_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt) | 87 | static int imx_ssi_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt) |
90 | { | 88 | { |
@@ -99,6 +97,10 @@ static int imx_ssi_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt) | |||
99 | /* data on rising edge of bclk, frame low 1clk before data */ | 97 | /* data on rising edge of bclk, frame low 1clk before data */ |
100 | strcr |= SSI_STCR_TFSI | SSI_STCR_TEFS | SSI_STCR_TXBIT0; | 98 | strcr |= SSI_STCR_TFSI | SSI_STCR_TEFS | SSI_STCR_TXBIT0; |
101 | scr |= SSI_SCR_NET; | 99 | scr |= SSI_SCR_NET; |
100 | if (ssi->flags & IMX_SSI_USE_I2S_SLAVE) { | ||
101 | scr &= ~SSI_I2S_MODE_MASK; | ||
102 | scr |= SSI_SCR_I2S_MODE_SLAVE; | ||
103 | } | ||
102 | break; | 104 | break; |
103 | case SND_SOC_DAIFMT_LEFT_J: | 105 | case SND_SOC_DAIFMT_LEFT_J: |
104 | /* data on rising edge of bclk, frame high with data */ | 106 | /* data on rising edge of bclk, frame high with data */ |
@@ -143,6 +145,11 @@ static int imx_ssi_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt) | |||
143 | 145 | ||
144 | strcr |= SSI_STCR_TFEN0; | 146 | strcr |= SSI_STCR_TFEN0; |
145 | 147 | ||
148 | if (ssi->flags & IMX_SSI_NET) | ||
149 | scr |= SSI_SCR_NET; | ||
150 | if (ssi->flags & IMX_SSI_SYN) | ||
151 | scr |= SSI_SCR_SYN; | ||
152 | |||
146 | writel(strcr, ssi->base + SSI_STCR); | 153 | writel(strcr, ssi->base + SSI_STCR); |
147 | writel(strcr, ssi->base + SSI_SRCR); | 154 | writel(strcr, ssi->base + SSI_SRCR); |
148 | writel(scr, ssi->base + SSI_SCR); | 155 | writel(scr, ssi->base + SSI_SCR); |