diff options
-rw-r--r-- | sound/soc/cirrus/ep93xx-i2s.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/sound/soc/cirrus/ep93xx-i2s.c b/sound/soc/cirrus/ep93xx-i2s.c index 38c240c97041..0dc3852c4621 100644 --- a/sound/soc/cirrus/ep93xx-i2s.c +++ b/sound/soc/cirrus/ep93xx-i2s.c | |||
@@ -51,7 +51,9 @@ | |||
51 | #define EP93XX_I2S_WRDLEN_24 (1 << 0) | 51 | #define EP93XX_I2S_WRDLEN_24 (1 << 0) |
52 | #define EP93XX_I2S_WRDLEN_32 (2 << 0) | 52 | #define EP93XX_I2S_WRDLEN_32 (2 << 0) |
53 | 53 | ||
54 | #define EP93XX_I2S_LINCTRLDATA_R_JUST (1 << 2) /* Right justify */ | 54 | #define EP93XX_I2S_RXLINCTRLDATA_R_JUST BIT(1) /* Right justify */ |
55 | |||
56 | #define EP93XX_I2S_TXLINCTRLDATA_R_JUST BIT(2) /* Right justify */ | ||
55 | 57 | ||
56 | #define EP93XX_I2S_CLKCFG_LRS (1 << 0) /* lrclk polarity */ | 58 | #define EP93XX_I2S_CLKCFG_LRS (1 << 0) /* lrclk polarity */ |
57 | #define EP93XX_I2S_CLKCFG_CKP (1 << 1) /* Bit clock polarity */ | 59 | #define EP93XX_I2S_CLKCFG_CKP (1 << 1) /* Bit clock polarity */ |
@@ -170,25 +172,25 @@ static int ep93xx_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai, | |||
170 | unsigned int fmt) | 172 | unsigned int fmt) |
171 | { | 173 | { |
172 | struct ep93xx_i2s_info *info = snd_soc_dai_get_drvdata(cpu_dai); | 174 | struct ep93xx_i2s_info *info = snd_soc_dai_get_drvdata(cpu_dai); |
173 | unsigned int clk_cfg, lin_ctrl; | 175 | unsigned int clk_cfg; |
176 | unsigned int txlin_ctrl = 0; | ||
177 | unsigned int rxlin_ctrl = 0; | ||
174 | 178 | ||
175 | clk_cfg = ep93xx_i2s_read_reg(info, EP93XX_I2S_RXCLKCFG); | 179 | clk_cfg = ep93xx_i2s_read_reg(info, EP93XX_I2S_RXCLKCFG); |
176 | lin_ctrl = ep93xx_i2s_read_reg(info, EP93XX_I2S_RXLINCTRLDATA); | ||
177 | 180 | ||
178 | switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { | 181 | switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { |
179 | case SND_SOC_DAIFMT_I2S: | 182 | case SND_SOC_DAIFMT_I2S: |
180 | clk_cfg |= EP93XX_I2S_CLKCFG_REL; | 183 | clk_cfg |= EP93XX_I2S_CLKCFG_REL; |
181 | lin_ctrl &= ~EP93XX_I2S_LINCTRLDATA_R_JUST; | ||
182 | break; | 184 | break; |
183 | 185 | ||
184 | case SND_SOC_DAIFMT_LEFT_J: | 186 | case SND_SOC_DAIFMT_LEFT_J: |
185 | clk_cfg &= ~EP93XX_I2S_CLKCFG_REL; | 187 | clk_cfg &= ~EP93XX_I2S_CLKCFG_REL; |
186 | lin_ctrl &= ~EP93XX_I2S_LINCTRLDATA_R_JUST; | ||
187 | break; | 188 | break; |
188 | 189 | ||
189 | case SND_SOC_DAIFMT_RIGHT_J: | 190 | case SND_SOC_DAIFMT_RIGHT_J: |
190 | clk_cfg &= ~EP93XX_I2S_CLKCFG_REL; | 191 | clk_cfg &= ~EP93XX_I2S_CLKCFG_REL; |
191 | lin_ctrl |= EP93XX_I2S_LINCTRLDATA_R_JUST; | 192 | rxlin_ctrl |= EP93XX_I2S_RXLINCTRLDATA_R_JUST; |
193 | txlin_ctrl |= EP93XX_I2S_TXLINCTRLDATA_R_JUST; | ||
192 | break; | 194 | break; |
193 | 195 | ||
194 | default: | 196 | default: |
@@ -237,8 +239,8 @@ static int ep93xx_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai, | |||
237 | /* Write new register values */ | 239 | /* Write new register values */ |
238 | ep93xx_i2s_write_reg(info, EP93XX_I2S_RXCLKCFG, clk_cfg); | 240 | ep93xx_i2s_write_reg(info, EP93XX_I2S_RXCLKCFG, clk_cfg); |
239 | ep93xx_i2s_write_reg(info, EP93XX_I2S_TXCLKCFG, clk_cfg); | 241 | ep93xx_i2s_write_reg(info, EP93XX_I2S_TXCLKCFG, clk_cfg); |
240 | ep93xx_i2s_write_reg(info, EP93XX_I2S_RXLINCTRLDATA, lin_ctrl); | 242 | ep93xx_i2s_write_reg(info, EP93XX_I2S_RXLINCTRLDATA, rxlin_ctrl); |
241 | ep93xx_i2s_write_reg(info, EP93XX_I2S_TXLINCTRLDATA, lin_ctrl); | 243 | ep93xx_i2s_write_reg(info, EP93XX_I2S_TXLINCTRLDATA, txlin_ctrl); |
242 | return 0; | 244 | return 0; |
243 | } | 245 | } |
244 | 246 | ||