mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-07 21:53:44 +00:00
sound updates for v3.10-rc4
Again very calm updates at this time. All small fixes for individual drivers, mostly ASoC codecs, in addition to soc-compress fix for capture streams which is safe to apply as there is no in-tree users yet. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (GNU/Linux) iQIcBAABAgAGBQJRpvyjAAoJEGwxgFQ9KSmk2mAQALhf/x/EMtf18Cbr72JO8huZ JNToACupPWVsVBFYNXF3a0NrdjkSjhfbn0fWaPTwxSEzlJH0eODRXMA19vWynDuO DUwK1fd5vXNZrojjUcDILGN7hZ+NaOGytal83sL1C9E9gEzQ4/0b6AiULK7tnwnH rRgeNd44V7CMDjK9hlzjuDLeZ05yJclzQraDAFA4BElTG/HBlLTXNZcM/BpPK/fp wCRo07J8TbO/7YbIxGPh9Dq/UJ4laI8CdECuvSkKHng5mBi0CJugsYlmqN2x2QpT FkY7B+94Zb9tFMs1JcLlNbSrjGHmehefJGt36DlSeTfAEZt7RWx/xTE0Eyyx3+Hz 3H7VaD0B6gYITHBV2P/xVHPed4Q+M2oF5k6Ch8q2JO/6YhHuzA5V/4fOtHiHGw2x +TqFiJhvVE4MZuV1iiM2HCMGI8lQjBKEXPK7JoxAY0JMfwABG3ePEXxVAmqEDJhf Tc4i2uQPkOUljfhz0pQcdmKD+89qQ5CLKVgQiioV5shS6SQ8J5bKjdppTxO82SZo G3GBJNUHkGSLyDuWpacsjb3KCZohXdSqnIALPN223rghCLCv65en1DyqBsgRcslL dA2v9SDqLTL4Kqw3UK8dn6cFjSNIr4mu6f1ZpD6reGjuKKLhUvxIS5RBx57YdZh2 1Oj9iIkQsN2O9kC4TjsT =Tqxs -----END PGP SIGNATURE----- Merge tag 'sound-3.10' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound Pull sound updates from Takashi Iwai: "Again very calm updates at this time. All small fixes for individual drivers, mostly ASoC codecs, in addition to soc-compress fix for capture streams which is safe to apply as there is no in-tree users yet." * tag 'sound-3.10' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: ASoC: cs42l52: fix default value for MASTERA_VOL. ASoC: wm8994: check for array index returned ASoC: wm8994: Fix reporting of accessory removal on WM8958 ASoC: wm8994: use the correct pointer to get the control value ASoC: wm5110: Correct DSP4R Mixer control name ALSA: usb-6fire: Modify firmware version check ASoC: cs42l52: fix master playback mute mask. ASoC: cs42l52: fix bogus shifts in "Speaker Volume" and "PCM Mixer Volume" controls. ASoC: cs42l52: microphone bias is controlled by IFACE_CTL2 register. ASoC: davinci: fix sample rotation ASoC: wm5110: Add missing speaker initialisation ASoC: soc-compress: Send correct stream event for capture start ASoC: max98090: request IRQF_ONESHOT interrupt
This commit is contained in:
commit
5c1dfc82bd
@ -86,7 +86,7 @@ static const struct reg_default cs42l52_reg_defaults[] = {
|
|||||||
{ CS42L52_BEEP_VOL, 0x00 }, /* r1D Beep Volume off Time */
|
{ CS42L52_BEEP_VOL, 0x00 }, /* r1D Beep Volume off Time */
|
||||||
{ CS42L52_BEEP_TONE_CTL, 0x00 }, /* r1E Beep Tone Cfg. */
|
{ CS42L52_BEEP_TONE_CTL, 0x00 }, /* r1E Beep Tone Cfg. */
|
||||||
{ CS42L52_TONE_CTL, 0x00 }, /* r1F Tone Ctl */
|
{ CS42L52_TONE_CTL, 0x00 }, /* r1F Tone Ctl */
|
||||||
{ CS42L52_MASTERA_VOL, 0x88 }, /* r20 Master A Volume */
|
{ CS42L52_MASTERA_VOL, 0x00 }, /* r20 Master A Volume */
|
||||||
{ CS42L52_MASTERB_VOL, 0x00 }, /* r21 Master B Volume */
|
{ CS42L52_MASTERB_VOL, 0x00 }, /* r21 Master B Volume */
|
||||||
{ CS42L52_HPA_VOL, 0x00 }, /* r22 Headphone A Volume */
|
{ CS42L52_HPA_VOL, 0x00 }, /* r22 Headphone A Volume */
|
||||||
{ CS42L52_HPB_VOL, 0x00 }, /* r23 Headphone B Volume */
|
{ CS42L52_HPB_VOL, 0x00 }, /* r23 Headphone B Volume */
|
||||||
@ -225,7 +225,7 @@ static const char * const mic_bias_level_text[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const struct soc_enum mic_bias_level_enum =
|
static const struct soc_enum mic_bias_level_enum =
|
||||||
SOC_ENUM_SINGLE(CS42L52_IFACE_CTL1, 0,
|
SOC_ENUM_SINGLE(CS42L52_IFACE_CTL2, 0,
|
||||||
ARRAY_SIZE(mic_bias_level_text), mic_bias_level_text);
|
ARRAY_SIZE(mic_bias_level_text), mic_bias_level_text);
|
||||||
|
|
||||||
static const char * const cs42l52_mic_text[] = { "Single", "Differential" };
|
static const char * const cs42l52_mic_text[] = { "Single", "Differential" };
|
||||||
@ -413,7 +413,7 @@ static const struct snd_kcontrol_new cs42l52_snd_controls[] = {
|
|||||||
SOC_ENUM("Headphone Analog Gain", hp_gain_enum),
|
SOC_ENUM("Headphone Analog Gain", hp_gain_enum),
|
||||||
|
|
||||||
SOC_DOUBLE_R_SX_TLV("Speaker Volume", CS42L52_SPKA_VOL,
|
SOC_DOUBLE_R_SX_TLV("Speaker Volume", CS42L52_SPKA_VOL,
|
||||||
CS42L52_SPKB_VOL, 7, 0x1, 0xff, hl_tlv),
|
CS42L52_SPKB_VOL, 0, 0x1, 0xff, hl_tlv),
|
||||||
|
|
||||||
SOC_DOUBLE_R_SX_TLV("Bypass Volume", CS42L52_PASSTHRUA_VOL,
|
SOC_DOUBLE_R_SX_TLV("Bypass Volume", CS42L52_PASSTHRUA_VOL,
|
||||||
CS42L52_PASSTHRUB_VOL, 6, 0x18, 0x90, pga_tlv),
|
CS42L52_PASSTHRUB_VOL, 6, 0x18, 0x90, pga_tlv),
|
||||||
@ -441,7 +441,7 @@ static const struct snd_kcontrol_new cs42l52_snd_controls[] = {
|
|||||||
|
|
||||||
SOC_DOUBLE_R_SX_TLV("PCM Mixer Volume",
|
SOC_DOUBLE_R_SX_TLV("PCM Mixer Volume",
|
||||||
CS42L52_PCMA_MIXER_VOL, CS42L52_PCMB_MIXER_VOL,
|
CS42L52_PCMA_MIXER_VOL, CS42L52_PCMB_MIXER_VOL,
|
||||||
6, 0x7f, 0x19, hl_tlv),
|
0, 0x7f, 0x19, hl_tlv),
|
||||||
SOC_DOUBLE_R("PCM Mixer Switch",
|
SOC_DOUBLE_R("PCM Mixer Switch",
|
||||||
CS42L52_PCMA_MIXER_VOL, CS42L52_PCMB_MIXER_VOL, 7, 1, 1),
|
CS42L52_PCMA_MIXER_VOL, CS42L52_PCMB_MIXER_VOL, 7, 1, 1),
|
||||||
|
|
||||||
|
@ -157,7 +157,7 @@
|
|||||||
#define CS42L52_PB_CTL1_INV_PCMA (1 << 2)
|
#define CS42L52_PB_CTL1_INV_PCMA (1 << 2)
|
||||||
#define CS42L52_PB_CTL1_MSTB_MUTE (1 << 1)
|
#define CS42L52_PB_CTL1_MSTB_MUTE (1 << 1)
|
||||||
#define CS42L52_PB_CTL1_MSTA_MUTE (1 << 0)
|
#define CS42L52_PB_CTL1_MSTA_MUTE (1 << 0)
|
||||||
#define CS42L52_PB_CTL1_MUTE_MASK 0xFFFD
|
#define CS42L52_PB_CTL1_MUTE_MASK 0x03
|
||||||
#define CS42L52_PB_CTL1_MUTE 3
|
#define CS42L52_PB_CTL1_MUTE 3
|
||||||
#define CS42L52_PB_CTL1_UNMUTE 0
|
#define CS42L52_PB_CTL1_UNMUTE 0
|
||||||
|
|
||||||
|
@ -2233,7 +2233,7 @@ static int max98090_probe(struct snd_soc_codec *codec)
|
|||||||
dev_dbg(codec->dev, "irq = %d\n", max98090->irq);
|
dev_dbg(codec->dev, "irq = %d\n", max98090->irq);
|
||||||
|
|
||||||
ret = request_threaded_irq(max98090->irq, NULL,
|
ret = request_threaded_irq(max98090->irq, NULL,
|
||||||
max98090_interrupt, IRQF_TRIGGER_FALLING,
|
max98090_interrupt, IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
|
||||||
"max98090_interrupt", codec);
|
"max98090_interrupt", codec);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(codec->dev, "request_irq failed: %d\n",
|
dev_err(codec->dev, "request_irq failed: %d\n",
|
||||||
|
@ -190,7 +190,7 @@ ARIZONA_MIXER_CONTROLS("DSP2R", ARIZONA_DSP2RMIX_INPUT_1_SOURCE),
|
|||||||
ARIZONA_MIXER_CONTROLS("DSP3L", ARIZONA_DSP3LMIX_INPUT_1_SOURCE),
|
ARIZONA_MIXER_CONTROLS("DSP3L", ARIZONA_DSP3LMIX_INPUT_1_SOURCE),
|
||||||
ARIZONA_MIXER_CONTROLS("DSP3R", ARIZONA_DSP3RMIX_INPUT_1_SOURCE),
|
ARIZONA_MIXER_CONTROLS("DSP3R", ARIZONA_DSP3RMIX_INPUT_1_SOURCE),
|
||||||
ARIZONA_MIXER_CONTROLS("DSP4L", ARIZONA_DSP4LMIX_INPUT_1_SOURCE),
|
ARIZONA_MIXER_CONTROLS("DSP4L", ARIZONA_DSP4LMIX_INPUT_1_SOURCE),
|
||||||
ARIZONA_MIXER_CONTROLS("DSP5R", ARIZONA_DSP4RMIX_INPUT_1_SOURCE),
|
ARIZONA_MIXER_CONTROLS("DSP4R", ARIZONA_DSP4RMIX_INPUT_1_SOURCE),
|
||||||
|
|
||||||
ARIZONA_MIXER_CONTROLS("Mic", ARIZONA_MICMIX_INPUT_1_SOURCE),
|
ARIZONA_MIXER_CONTROLS("Mic", ARIZONA_MICMIX_INPUT_1_SOURCE),
|
||||||
ARIZONA_MIXER_CONTROLS("Noise", ARIZONA_NOISEMIX_INPUT_1_SOURCE),
|
ARIZONA_MIXER_CONTROLS("Noise", ARIZONA_NOISEMIX_INPUT_1_SOURCE),
|
||||||
@ -976,6 +976,8 @@ static int wm5110_codec_probe(struct snd_soc_codec *codec)
|
|||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
arizona_init_spk(codec);
|
||||||
|
|
||||||
snd_soc_dapm_disable_pin(&codec->dapm, "HAPTICS");
|
snd_soc_dapm_disable_pin(&codec->dapm, "HAPTICS");
|
||||||
|
|
||||||
priv->core.arizona->dapm = &codec->dapm;
|
priv->core.arizona->dapm = &codec->dapm;
|
||||||
|
@ -383,6 +383,8 @@ static int wm8994_get_drc_enum(struct snd_kcontrol *kcontrol,
|
|||||||
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
||||||
int drc = wm8994_get_drc(kcontrol->id.name);
|
int drc = wm8994_get_drc(kcontrol->id.name);
|
||||||
|
|
||||||
|
if (drc < 0)
|
||||||
|
return drc;
|
||||||
ucontrol->value.enumerated.item[0] = wm8994->drc_cfg[drc];
|
ucontrol->value.enumerated.item[0] = wm8994->drc_cfg[drc];
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -488,6 +490,9 @@ static int wm8994_get_retune_mobile_enum(struct snd_kcontrol *kcontrol,
|
|||||||
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
||||||
int block = wm8994_get_retune_mobile_block(kcontrol->id.name);
|
int block = wm8994_get_retune_mobile_block(kcontrol->id.name);
|
||||||
|
|
||||||
|
if (block < 0)
|
||||||
|
return block;
|
||||||
|
|
||||||
ucontrol->value.enumerated.item[0] = wm8994->retune_mobile_cfg[block];
|
ucontrol->value.enumerated.item[0] = wm8994->retune_mobile_cfg[block];
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -1031,7 +1036,7 @@ static int aif1clk_ev(struct snd_soc_dapm_widget *w,
|
|||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = w->codec;
|
||||||
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
||||||
struct wm8994 *control = codec->control_data;
|
struct wm8994 *control = wm8994->wm8994;
|
||||||
int mask = WM8994_AIF1DAC1L_ENA | WM8994_AIF1DAC1R_ENA;
|
int mask = WM8994_AIF1DAC1L_ENA | WM8994_AIF1DAC1R_ENA;
|
||||||
int i;
|
int i;
|
||||||
int dac;
|
int dac;
|
||||||
@ -3833,6 +3838,11 @@ static irqreturn_t wm8958_mic_irq(int irq, void *data)
|
|||||||
dev_dbg(codec->dev, "Ignoring removed jack\n");
|
dev_dbg(codec->dev, "Ignoring removed jack\n");
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
} else if (!(reg & WM8958_MICD_STS)) {
|
||||||
|
snd_soc_jack_report(wm8994->micdet[0].jack, 0,
|
||||||
|
SND_JACK_MECHANICAL | SND_JACK_HEADSET |
|
||||||
|
wm8994->btn_mask);
|
||||||
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wm8994->mic_detecting)
|
if (wm8994->mic_detecting)
|
||||||
|
@ -631,7 +631,8 @@ static int davinci_config_channel_size(struct davinci_audio_dev *dev,
|
|||||||
int word_length)
|
int word_length)
|
||||||
{
|
{
|
||||||
u32 fmt;
|
u32 fmt;
|
||||||
u32 rotate = (word_length / 4) & 0x7;
|
u32 tx_rotate = (word_length / 4) & 0x7;
|
||||||
|
u32 rx_rotate = (32 - word_length) / 4;
|
||||||
u32 mask = (1ULL << word_length) - 1;
|
u32 mask = (1ULL << word_length) - 1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -655,9 +656,9 @@ static int davinci_config_channel_size(struct davinci_audio_dev *dev,
|
|||||||
mcasp_mod_bits(dev->base + DAVINCI_MCASP_TXFMT_REG,
|
mcasp_mod_bits(dev->base + DAVINCI_MCASP_TXFMT_REG,
|
||||||
TXSSZ(fmt), TXSSZ(0x0F));
|
TXSSZ(fmt), TXSSZ(0x0F));
|
||||||
mcasp_mod_bits(dev->base + DAVINCI_MCASP_TXFMT_REG,
|
mcasp_mod_bits(dev->base + DAVINCI_MCASP_TXFMT_REG,
|
||||||
TXROT(rotate), TXROT(7));
|
TXROT(tx_rotate), TXROT(7));
|
||||||
mcasp_mod_bits(dev->base + DAVINCI_MCASP_RXFMT_REG,
|
mcasp_mod_bits(dev->base + DAVINCI_MCASP_RXFMT_REG,
|
||||||
RXROT(rotate), RXROT(7));
|
RXROT(rx_rotate), RXROT(7));
|
||||||
mcasp_set_reg(dev->base + DAVINCI_MCASP_RXMASK_REG,
|
mcasp_set_reg(dev->base + DAVINCI_MCASP_RXMASK_REG,
|
||||||
mask);
|
mask);
|
||||||
}
|
}
|
||||||
|
@ -220,8 +220,12 @@ static int soc_compr_set_params(struct snd_compr_stream *cstream,
|
|||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
snd_soc_dapm_stream_event(rtd, SNDRV_PCM_STREAM_PLAYBACK,
|
if (cstream->direction == SND_COMPRESS_PLAYBACK)
|
||||||
SND_SOC_DAPM_STREAM_START);
|
snd_soc_dapm_stream_event(rtd, SNDRV_PCM_STREAM_PLAYBACK,
|
||||||
|
SND_SOC_DAPM_STREAM_START);
|
||||||
|
else
|
||||||
|
snd_soc_dapm_stream_event(rtd, SNDRV_PCM_STREAM_CAPTURE,
|
||||||
|
SND_SOC_DAPM_STREAM_START);
|
||||||
|
|
||||||
/* cancel any delayed stream shutdown that is pending */
|
/* cancel any delayed stream shutdown that is pending */
|
||||||
rtd->pop_wait = 0;
|
rtd->pop_wait = 0;
|
||||||
|
@ -42,8 +42,8 @@ static const u8 ep_w_max_packet_size[] = {
|
|||||||
0x94, 0x01, 0x5c, 0x02 /* alt 3: 404 EP2 and 604 EP6 (25 fpp) */
|
0x94, 0x01, 0x5c, 0x02 /* alt 3: 404 EP2 and 604 EP6 (25 fpp) */
|
||||||
};
|
};
|
||||||
|
|
||||||
static const u8 known_fw_versions[][4] = {
|
static const u8 known_fw_versions[][2] = {
|
||||||
{ 0x03, 0x01, 0x0b, 0x00 }
|
{ 0x03, 0x01 }
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ihex_record {
|
struct ihex_record {
|
||||||
@ -343,7 +343,7 @@ static int usb6fire_fw_check(u8 *version)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(known_fw_versions); i++)
|
for (i = 0; i < ARRAY_SIZE(known_fw_versions); i++)
|
||||||
if (!memcmp(version, known_fw_versions + i, 4))
|
if (!memcmp(version, known_fw_versions + i, 2))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
snd_printk(KERN_ERR PREFIX "invalid fimware version in device: %*ph. "
|
snd_printk(KERN_ERR PREFIX "invalid fimware version in device: %*ph. "
|
||||||
|
Loading…
Reference in New Issue
Block a user