Commit 1e2fa4cf authored by Mark Brown's avatar Mark Brown

Merge remote-tracking branches 'asoc/fix/db1200', 'asoc/fix/dwc',...

Merge remote-tracking branches 'asoc/fix/db1200', 'asoc/fix/dwc', 'asoc/fix/imx-ssi', 'asoc/fix/maintainers', 'asoc/fix/rt5645', 'asoc/fix/sgtl5000' and 'asoc/fix/tas2552' into asoc-linus
...@@ -11378,15 +11378,6 @@ W: http://oops.ghostprotocols.net:81/blog ...@@ -11378,15 +11378,6 @@ W: http://oops.ghostprotocols.net:81/blog
S: Maintained S: Maintained
F: drivers/net/wireless/wl3501* F: drivers/net/wireless/wl3501*
WM97XX TOUCHSCREEN DRIVERS
M: Mark Brown <broonie@kernel.org>
M: Liam Girdwood <lrg@slimlogic.co.uk>
L: linux-input@vger.kernel.org
W: https://github.com/CirrusLogic/linux-drivers/wiki
S: Supported
F: drivers/input/touchscreen/*wm97*
F: include/linux/wm97xx.h
WOLFSON MICROELECTRONICS DRIVERS WOLFSON MICROELECTRONICS DRIVERS
L: patches@opensource.wolfsonmicro.com L: patches@opensource.wolfsonmicro.com
T: git https://github.com/CirrusLogic/linux-drivers.git T: git https://github.com/CirrusLogic/linux-drivers.git
......
...@@ -129,6 +129,8 @@ static struct snd_soc_dai_link db1300_i2s_dai = { ...@@ -129,6 +129,8 @@ static struct snd_soc_dai_link db1300_i2s_dai = {
.cpu_dai_name = "au1xpsc_i2s.2", .cpu_dai_name = "au1xpsc_i2s.2",
.platform_name = "au1xpsc-pcm.2", .platform_name = "au1xpsc-pcm.2",
.codec_name = "wm8731.0-001b", .codec_name = "wm8731.0-001b",
.dai_fmt = SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_NB_NF |
SND_SOC_DAIFMT_CBM_CFM,
.ops = &db1200_i2s_wm8731_ops, .ops = &db1200_i2s_wm8731_ops,
}; };
...@@ -146,6 +148,8 @@ static struct snd_soc_dai_link db1550_i2s_dai = { ...@@ -146,6 +148,8 @@ static struct snd_soc_dai_link db1550_i2s_dai = {
.cpu_dai_name = "au1xpsc_i2s.3", .cpu_dai_name = "au1xpsc_i2s.3",
.platform_name = "au1xpsc-pcm.3", .platform_name = "au1xpsc-pcm.3",
.codec_name = "wm8731.0-001b", .codec_name = "wm8731.0-001b",
.dai_fmt = SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_NB_NF |
SND_SOC_DAIFMT_CBM_CFM,
.ops = &db1200_i2s_wm8731_ops, .ops = &db1200_i2s_wm8731_ops,
}; };
......
...@@ -519,11 +519,11 @@ static const struct snd_kcontrol_new rt5645_snd_controls[] = { ...@@ -519,11 +519,11 @@ static const struct snd_kcontrol_new rt5645_snd_controls[] = {
RT5645_L_VOL_SFT + 1, RT5645_R_VOL_SFT + 1, 63, 0, adc_vol_tlv), RT5645_L_VOL_SFT + 1, RT5645_R_VOL_SFT + 1, 63, 0, adc_vol_tlv),
/* ADC Boost Volume Control */ /* ADC Boost Volume Control */
SOC_DOUBLE_TLV("STO1 ADC Boost Gain", RT5645_ADC_BST_VOL1, SOC_DOUBLE_TLV("ADC Boost Capture Volume", RT5645_ADC_BST_VOL1,
RT5645_STO1_ADC_L_BST_SFT, RT5645_STO1_ADC_R_BST_SFT, 3, 0, RT5645_STO1_ADC_L_BST_SFT, RT5645_STO1_ADC_R_BST_SFT, 3, 0,
adc_bst_tlv), adc_bst_tlv),
SOC_DOUBLE_TLV("STO2 ADC Boost Gain", RT5645_ADC_BST_VOL1, SOC_DOUBLE_TLV("Mono ADC Boost Capture Volume", RT5645_ADC_BST_VOL2,
RT5645_STO2_ADC_L_BST_SFT, RT5645_STO2_ADC_R_BST_SFT, 3, 0, RT5645_MONO_ADC_L_BST_SFT, RT5645_MONO_ADC_R_BST_SFT, 3, 0,
adc_bst_tlv), adc_bst_tlv),
/* I2S2 function select */ /* I2S2 function select */
......
...@@ -39,8 +39,8 @@ ...@@ -39,8 +39,8 @@
#define RT5645_STO1_ADC_DIG_VOL 0x1c #define RT5645_STO1_ADC_DIG_VOL 0x1c
#define RT5645_MONO_ADC_DIG_VOL 0x1d #define RT5645_MONO_ADC_DIG_VOL 0x1d
#define RT5645_ADC_BST_VOL1 0x1e #define RT5645_ADC_BST_VOL1 0x1e
/* Mixer - D-D */
#define RT5645_ADC_BST_VOL2 0x20 #define RT5645_ADC_BST_VOL2 0x20
/* Mixer - D-D */
#define RT5645_STO1_ADC_MIXER 0x27 #define RT5645_STO1_ADC_MIXER 0x27
#define RT5645_MONO_ADC_MIXER 0x28 #define RT5645_MONO_ADC_MIXER 0x28
#define RT5645_AD_DA_MIXER 0x29 #define RT5645_AD_DA_MIXER 0x29
...@@ -315,12 +315,14 @@ ...@@ -315,12 +315,14 @@
#define RT5645_STO1_ADC_R_BST_SFT 12 #define RT5645_STO1_ADC_R_BST_SFT 12
#define RT5645_STO1_ADC_COMP_MASK (0x3 << 10) #define RT5645_STO1_ADC_COMP_MASK (0x3 << 10)
#define RT5645_STO1_ADC_COMP_SFT 10 #define RT5645_STO1_ADC_COMP_SFT 10
#define RT5645_STO2_ADC_L_BST_MASK (0x3 << 8)
#define RT5645_STO2_ADC_L_BST_SFT 8 /* ADC Boost Volume Control (0x20) */
#define RT5645_STO2_ADC_R_BST_MASK (0x3 << 6) #define RT5645_MONO_ADC_L_BST_MASK (0x3 << 14)
#define RT5645_STO2_ADC_R_BST_SFT 6 #define RT5645_MONO_ADC_L_BST_SFT 14
#define RT5645_STO2_ADC_COMP_MASK (0x3 << 4) #define RT5645_MONO_ADC_R_BST_MASK (0x3 << 12)
#define RT5645_STO2_ADC_COMP_SFT 4 #define RT5645_MONO_ADC_R_BST_SFT 12
#define RT5645_MONO_ADC_COMP_MASK (0x3 << 10)
#define RT5645_MONO_ADC_COMP_SFT 10
/* Stereo2 ADC Mixer Control (0x26) */ /* Stereo2 ADC Mixer Control (0x26) */
#define RT5645_STO2_ADC_SRC_MASK (0x1 << 15) #define RT5645_STO2_ADC_SRC_MASK (0x1 << 15)
......
...@@ -1376,8 +1376,8 @@ static int sgtl5000_probe(struct snd_soc_codec *codec) ...@@ -1376,8 +1376,8 @@ static int sgtl5000_probe(struct snd_soc_codec *codec)
sgtl5000->micbias_resistor << SGTL5000_BIAS_R_SHIFT); sgtl5000->micbias_resistor << SGTL5000_BIAS_R_SHIFT);
snd_soc_update_bits(codec, SGTL5000_CHIP_MIC_CTRL, snd_soc_update_bits(codec, SGTL5000_CHIP_MIC_CTRL,
SGTL5000_BIAS_R_MASK, SGTL5000_BIAS_VOLT_MASK,
sgtl5000->micbias_voltage << SGTL5000_BIAS_R_SHIFT); sgtl5000->micbias_voltage << SGTL5000_BIAS_VOLT_SHIFT);
/* /*
* disable DAP * disable DAP
* TODO: * TODO:
...@@ -1549,7 +1549,7 @@ static int sgtl5000_i2c_probe(struct i2c_client *client, ...@@ -1549,7 +1549,7 @@ static int sgtl5000_i2c_probe(struct i2c_client *client,
else { else {
sgtl5000->micbias_voltage = 0; sgtl5000->micbias_voltage = 0;
dev_err(&client->dev, dev_err(&client->dev,
"Unsuitable MicBias resistor\n"); "Unsuitable MicBias voltage\n");
} }
} else { } else {
sgtl5000->micbias_voltage = 0; sgtl5000->micbias_voltage = 0;
......
...@@ -549,7 +549,7 @@ static struct snd_soc_dai_driver tas2552_dai[] = { ...@@ -549,7 +549,7 @@ static struct snd_soc_dai_driver tas2552_dai[] = {
/* /*
* DAC digital volumes. From -7 to 24 dB in 1 dB steps * DAC digital volumes. From -7 to 24 dB in 1 dB steps
*/ */
static DECLARE_TLV_DB_SCALE(dac_tlv, -7, 100, 0); static DECLARE_TLV_DB_SCALE(dac_tlv, -700, 100, 0);
static const char * const tas2552_din_source_select[] = { static const char * const tas2552_din_source_select[] = {
"Muted", "Muted",
......
...@@ -131,23 +131,32 @@ static inline void i2s_clear_irqs(struct dw_i2s_dev *dev, u32 stream) ...@@ -131,23 +131,32 @@ static inline void i2s_clear_irqs(struct dw_i2s_dev *dev, u32 stream)
if (stream == SNDRV_PCM_STREAM_PLAYBACK) { if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
i2s_write_reg(dev->i2s_base, TOR(i), 0); i2s_read_reg(dev->i2s_base, TOR(i));
} else { } else {
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
i2s_write_reg(dev->i2s_base, ROR(i), 0); i2s_read_reg(dev->i2s_base, ROR(i));
} }
} }
static void i2s_start(struct dw_i2s_dev *dev, static void i2s_start(struct dw_i2s_dev *dev,
struct snd_pcm_substream *substream) struct snd_pcm_substream *substream)
{ {
u32 i, irq;
i2s_write_reg(dev->i2s_base, IER, 1); i2s_write_reg(dev->i2s_base, IER, 1);
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
for (i = 0; i < 4; i++) {
irq = i2s_read_reg(dev->i2s_base, IMR(i));
i2s_write_reg(dev->i2s_base, IMR(i), irq & ~0x30);
}
i2s_write_reg(dev->i2s_base, ITER, 1); i2s_write_reg(dev->i2s_base, ITER, 1);
else } else {
for (i = 0; i < 4; i++) {
irq = i2s_read_reg(dev->i2s_base, IMR(i));
i2s_write_reg(dev->i2s_base, IMR(i), irq & ~0x03);
}
i2s_write_reg(dev->i2s_base, IRER, 1); i2s_write_reg(dev->i2s_base, IRER, 1);
}
i2s_write_reg(dev->i2s_base, CER, 1); i2s_write_reg(dev->i2s_base, CER, 1);
} }
......
...@@ -95,7 +95,8 @@ static int imx_ssi_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt) ...@@ -95,7 +95,8 @@ static int imx_ssi_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
case SND_SOC_DAIFMT_I2S: case SND_SOC_DAIFMT_I2S:
/* data on rising edge of bclk, frame low 1clk before data */ /* data on rising edge of bclk, frame low 1clk before data */
strcr |= SSI_STCR_TFSI | SSI_STCR_TEFS | SSI_STCR_TXBIT0; strcr |= SSI_STCR_TXBIT0 | SSI_STCR_TSCKP | SSI_STCR_TFSI |
SSI_STCR_TEFS;
scr |= SSI_SCR_NET; scr |= SSI_SCR_NET;
if (ssi->flags & IMX_SSI_USE_I2S_SLAVE) { if (ssi->flags & IMX_SSI_USE_I2S_SLAVE) {
scr &= ~SSI_I2S_MODE_MASK; scr &= ~SSI_I2S_MODE_MASK;
...@@ -104,33 +105,31 @@ static int imx_ssi_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt) ...@@ -104,33 +105,31 @@ static int imx_ssi_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
break; break;
case SND_SOC_DAIFMT_LEFT_J: case SND_SOC_DAIFMT_LEFT_J:
/* data on rising edge of bclk, frame high with data */ /* data on rising edge of bclk, frame high with data */
strcr |= SSI_STCR_TXBIT0; strcr |= SSI_STCR_TXBIT0 | SSI_STCR_TSCKP;
break; break;
case SND_SOC_DAIFMT_DSP_B: case SND_SOC_DAIFMT_DSP_B:
/* data on rising edge of bclk, frame high with data */ /* data on rising edge of bclk, frame high with data */
strcr |= SSI_STCR_TFSL | SSI_STCR_TXBIT0; strcr |= SSI_STCR_TXBIT0 | SSI_STCR_TSCKP | SSI_STCR_TFSL;
break; break;
case SND_SOC_DAIFMT_DSP_A: case SND_SOC_DAIFMT_DSP_A:
/* data on rising edge of bclk, frame high 1clk before data */ /* data on rising edge of bclk, frame high 1clk before data */
strcr |= SSI_STCR_TFSL | SSI_STCR_TXBIT0 | SSI_STCR_TEFS; strcr |= SSI_STCR_TXBIT0 | SSI_STCR_TSCKP | SSI_STCR_TFSL |
SSI_STCR_TEFS;
break; break;
} }
/* DAI clock inversion */ /* DAI clock inversion */
switch (fmt & SND_SOC_DAIFMT_INV_MASK) { switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
case SND_SOC_DAIFMT_IB_IF: case SND_SOC_DAIFMT_IB_IF:
strcr |= SSI_STCR_TFSI; strcr ^= SSI_STCR_TSCKP | SSI_STCR_TFSI;
strcr &= ~SSI_STCR_TSCKP;
break; break;
case SND_SOC_DAIFMT_IB_NF: case SND_SOC_DAIFMT_IB_NF:
strcr &= ~(SSI_STCR_TSCKP | SSI_STCR_TFSI); strcr ^= SSI_STCR_TSCKP;
break; break;
case SND_SOC_DAIFMT_NB_IF: case SND_SOC_DAIFMT_NB_IF:
strcr |= SSI_STCR_TFSI | SSI_STCR_TSCKP; strcr ^= SSI_STCR_TFSI;
break; break;
case SND_SOC_DAIFMT_NB_NF: case SND_SOC_DAIFMT_NB_NF:
strcr &= ~SSI_STCR_TFSI;
strcr |= SSI_STCR_TSCKP;
break; break;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment