You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge tag 'asoc-v3.11-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus
ASoC: Fixes for v3.11 A few driver specific fixes here plus one core fix for a memory corruption issue in DAPM initialisation which could lead to crashes.
This commit is contained in:
@@ -195,6 +195,8 @@ static DECLARE_TLV_DB_SCALE(pga_tlv, -600, 50, 0);
|
||||
|
||||
static DECLARE_TLV_DB_SCALE(mix_tlv, -50, 50, 0);
|
||||
|
||||
static DECLARE_TLV_DB_SCALE(beep_tlv, -56, 200, 0);
|
||||
|
||||
static const unsigned int limiter_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
0, 2, TLV_DB_SCALE_ITEM(-3000, 600, 0),
|
||||
@@ -451,7 +453,8 @@ static const struct snd_kcontrol_new cs42l52_snd_controls[] = {
|
||||
SOC_ENUM("Beep Pitch", beep_pitch_enum),
|
||||
SOC_ENUM("Beep on Time", beep_ontime_enum),
|
||||
SOC_ENUM("Beep off Time", beep_offtime_enum),
|
||||
SOC_SINGLE_TLV("Beep Volume", CS42L52_BEEP_VOL, 0, 0x1f, 0x07, hl_tlv),
|
||||
SOC_SINGLE_SX_TLV("Beep Volume", CS42L52_BEEP_VOL,
|
||||
0, 0x07, 0x1f, beep_tlv),
|
||||
SOC_SINGLE("Beep Mixer Switch", CS42L52_BEEP_TONE_CTL, 5, 1, 1),
|
||||
SOC_ENUM("Beep Treble Corner Freq", beep_treble_enum),
|
||||
SOC_ENUM("Beep Bass Corner Freq", beep_bass_enum),
|
||||
|
||||
@@ -153,6 +153,8 @@ static int mic_bias_event(struct snd_soc_dapm_widget *w,
|
||||
static int power_vag_event(struct snd_soc_dapm_widget *w,
|
||||
struct snd_kcontrol *kcontrol, int event)
|
||||
{
|
||||
const u32 mask = SGTL5000_DAC_POWERUP | SGTL5000_ADC_POWERUP;
|
||||
|
||||
switch (event) {
|
||||
case SND_SOC_DAPM_POST_PMU:
|
||||
snd_soc_update_bits(w->codec, SGTL5000_CHIP_ANA_POWER,
|
||||
@@ -160,9 +162,17 @@ static int power_vag_event(struct snd_soc_dapm_widget *w,
|
||||
break;
|
||||
|
||||
case SND_SOC_DAPM_PRE_PMD:
|
||||
snd_soc_update_bits(w->codec, SGTL5000_CHIP_ANA_POWER,
|
||||
SGTL5000_VAG_POWERUP, 0);
|
||||
msleep(400);
|
||||
/*
|
||||
* Don't clear VAG_POWERUP, when both DAC and ADC are
|
||||
* operational to prevent inadvertently starving the
|
||||
* other one of them.
|
||||
*/
|
||||
if ((snd_soc_read(w->codec, SGTL5000_CHIP_ANA_POWER) &
|
||||
mask) != mask) {
|
||||
snd_soc_update_bits(w->codec, SGTL5000_CHIP_ANA_POWER,
|
||||
SGTL5000_VAG_POWERUP, 0);
|
||||
msleep(400);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -388,7 +398,7 @@ static const struct snd_kcontrol_new sgtl5000_snd_controls[] = {
|
||||
SOC_DOUBLE("Capture Volume", SGTL5000_CHIP_ANA_ADC_CTRL, 0, 4, 0xf, 0),
|
||||
SOC_SINGLE_TLV("Capture Attenuate Switch (-6dB)",
|
||||
SGTL5000_CHIP_ANA_ADC_CTRL,
|
||||
8, 2, 0, capture_6db_attenuate),
|
||||
8, 1, 0, capture_6db_attenuate),
|
||||
SOC_SINGLE("Capture ZC Switch", SGTL5000_CHIP_ANA_CTRL, 1, 1, 0),
|
||||
|
||||
SOC_DOUBLE_TLV("Headphone Playback Volume",
|
||||
|
||||
@@ -679,13 +679,14 @@ static int dapm_new_mux(struct snd_soc_dapm_widget *w)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
path = list_first_entry(&w->sources, struct snd_soc_dapm_path,
|
||||
list_sink);
|
||||
if (!path) {
|
||||
if (list_empty(&w->sources)) {
|
||||
dev_err(dapm->dev, "ASoC: mux %s has no paths\n", w->name);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
path = list_first_entry(&w->sources, struct snd_soc_dapm_path,
|
||||
list_sink);
|
||||
|
||||
ret = dapm_create_or_share_mixmux_kcontrol(w, 0, path);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
@@ -228,7 +228,7 @@ static int tegra30_i2s_hw_params(struct snd_pcm_substream *substream,
|
||||
reg = TEGRA30_I2S_CIF_RX_CTRL;
|
||||
} else {
|
||||
val |= TEGRA30_AUDIOCIF_CTRL_DIRECTION_TX;
|
||||
reg = TEGRA30_I2S_CIF_RX_CTRL;
|
||||
reg = TEGRA30_I2S_CIF_TX_CTRL;
|
||||
}
|
||||
|
||||
regmap_write(i2s->regmap, reg, val);
|
||||
|
||||
Reference in New Issue
Block a user