Commit 3701d2cb authored by Mark Brown's avatar Mark Brown

Merge branch 'asoc-5.4' into asoc-linus

parents af42d346 ef8e1479
...@@ -3270,6 +3270,9 @@ static void rt5645_jack_detect_work(struct work_struct *work) ...@@ -3270,6 +3270,9 @@ static void rt5645_jack_detect_work(struct work_struct *work)
snd_soc_jack_report(rt5645->mic_jack, snd_soc_jack_report(rt5645->mic_jack,
report, SND_JACK_MICROPHONE); report, SND_JACK_MICROPHONE);
return; return;
case 4:
val = snd_soc_component_read32(rt5645->component, RT5645_A_JD_CTRL1) & 0x0020;
break;
default: /* read rt5645 jd1_1 status */ default: /* read rt5645 jd1_1 status */
val = snd_soc_component_read32(rt5645->component, RT5645_INT_IRQ_ST) & 0x1000; val = snd_soc_component_read32(rt5645->component, RT5645_INT_IRQ_ST) & 0x1000;
break; break;
...@@ -3603,7 +3606,7 @@ static const struct rt5645_platform_data intel_braswell_platform_data = { ...@@ -3603,7 +3606,7 @@ static const struct rt5645_platform_data intel_braswell_platform_data = {
static const struct rt5645_platform_data buddy_platform_data = { static const struct rt5645_platform_data buddy_platform_data = {
.dmic1_data_pin = RT5645_DMIC_DATA_GPIO5, .dmic1_data_pin = RT5645_DMIC_DATA_GPIO5,
.dmic2_data_pin = RT5645_DMIC_DATA_IN2P, .dmic2_data_pin = RT5645_DMIC_DATA_IN2P,
.jd_mode = 3, .jd_mode = 4,
.level_trigger_irq = true, .level_trigger_irq = true,
}; };
...@@ -3999,6 +4002,7 @@ static int rt5645_i2c_probe(struct i2c_client *i2c, ...@@ -3999,6 +4002,7 @@ static int rt5645_i2c_probe(struct i2c_client *i2c,
RT5645_JD1_MODE_1); RT5645_JD1_MODE_1);
break; break;
case 3: case 3:
case 4:
regmap_update_bits(rt5645->regmap, RT5645_A_JD_CTRL1, regmap_update_bits(rt5645->regmap, RT5645_A_JD_CTRL1,
RT5645_JD1_MODE_MASK, RT5645_JD1_MODE_MASK,
RT5645_JD1_MODE_2); RT5645_JD1_MODE_2);
......
...@@ -1002,6 +1002,7 @@ static int rt5682_set_jack_detect(struct snd_soc_component *component, ...@@ -1002,6 +1002,7 @@ static int rt5682_set_jack_detect(struct snd_soc_component *component,
RT5682_JD1_EN_MASK, RT5682_JD1_DIS); RT5682_JD1_EN_MASK, RT5682_JD1_DIS);
regmap_update_bits(rt5682->regmap, RT5682_RC_CLK_CTRL, regmap_update_bits(rt5682->regmap, RT5682_RC_CLK_CTRL,
RT5682_POW_JDH | RT5682_POW_JDL, 0); RT5682_POW_JDH | RT5682_POW_JDL, 0);
cancel_delayed_work_sync(&rt5682->jack_detect_work);
return 0; return 0;
} }
...@@ -1450,28 +1451,6 @@ static const struct snd_kcontrol_new hpor_switch = ...@@ -1450,28 +1451,6 @@ static const struct snd_kcontrol_new hpor_switch =
SOC_DAPM_SINGLE_AUTODISABLE("Switch", RT5682_HP_CTRL_1, SOC_DAPM_SINGLE_AUTODISABLE("Switch", RT5682_HP_CTRL_1,
RT5682_R_MUTE_SFT, 1, 1); RT5682_R_MUTE_SFT, 1, 1);
static int rt5682_charge_pump_event(struct snd_soc_dapm_widget *w,
struct snd_kcontrol *kcontrol, int event)
{
struct snd_soc_component *component =
snd_soc_dapm_to_component(w->dapm);
switch (event) {
case SND_SOC_DAPM_PRE_PMU:
snd_soc_component_update_bits(component,
RT5682_HP_CHARGE_PUMP_1, RT5682_PM_HP_MASK, RT5682_PM_HP_HV);
break;
case SND_SOC_DAPM_POST_PMD:
snd_soc_component_update_bits(component,
RT5682_HP_CHARGE_PUMP_1, RT5682_PM_HP_MASK, RT5682_PM_HP_LV);
break;
default:
return 0;
}
return 0;
}
static int rt5682_hp_event(struct snd_soc_dapm_widget *w, static int rt5682_hp_event(struct snd_soc_dapm_widget *w,
struct snd_kcontrol *kcontrol, int event) struct snd_kcontrol *kcontrol, int event)
{ {
...@@ -1755,8 +1734,7 @@ static const struct snd_soc_dapm_widget rt5682_dapm_widgets[] = { ...@@ -1755,8 +1734,7 @@ static const struct snd_soc_dapm_widget rt5682_dapm_widgets[] = {
SND_SOC_DAPM_SUPPLY("HP Amp R", RT5682_PWR_ANLG_1, SND_SOC_DAPM_SUPPLY("HP Amp R", RT5682_PWR_ANLG_1,
RT5682_PWR_HA_R_BIT, 0, NULL, 0), RT5682_PWR_HA_R_BIT, 0, NULL, 0),
SND_SOC_DAPM_SUPPLY_S("Charge Pump", 1, RT5682_DEPOP_1, SND_SOC_DAPM_SUPPLY_S("Charge Pump", 1, RT5682_DEPOP_1,
RT5682_PUMP_EN_SFT, 0, rt5682_charge_pump_event, RT5682_PUMP_EN_SFT, 0, NULL, 0),
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
SND_SOC_DAPM_SUPPLY_S("Capless", 2, RT5682_DEPOP_1, SND_SOC_DAPM_SUPPLY_S("Capless", 2, RT5682_DEPOP_1,
RT5682_CAPLESS_EN_SFT, 0, NULL, 0), RT5682_CAPLESS_EN_SFT, 0, NULL, 0),
...@@ -2654,6 +2632,8 @@ static int rt5682_i2c_probe(struct i2c_client *i2c, ...@@ -2654,6 +2632,8 @@ static int rt5682_i2c_probe(struct i2c_client *i2c,
RT5682_HPA_CP_BIAS_CTRL_MASK, RT5682_HPA_CP_BIAS_3UA); RT5682_HPA_CP_BIAS_CTRL_MASK, RT5682_HPA_CP_BIAS_3UA);
regmap_update_bits(rt5682->regmap, RT5682_CHARGE_PUMP_1, regmap_update_bits(rt5682->regmap, RT5682_CHARGE_PUMP_1,
RT5682_CP_CLK_HP_MASK, RT5682_CP_CLK_HP_300KHZ); RT5682_CP_CLK_HP_MASK, RT5682_CP_CLK_HP_300KHZ);
regmap_update_bits(rt5682->regmap, RT5682_HP_CHARGE_PUMP_1,
RT5682_PM_HP_MASK, RT5682_PM_HP_HV);
INIT_DELAYED_WORK(&rt5682->jack_detect_work, INIT_DELAYED_WORK(&rt5682->jack_detect_work,
rt5682_jack_detect_handler); rt5682_jack_detect_handler);
......
...@@ -1917,6 +1917,7 @@ static int wm8904_set_bias_level(struct snd_soc_component *component, ...@@ -1917,6 +1917,7 @@ static int wm8904_set_bias_level(struct snd_soc_component *component,
snd_soc_component_update_bits(component, WM8904_BIAS_CONTROL_0, snd_soc_component_update_bits(component, WM8904_BIAS_CONTROL_0,
WM8904_BIAS_ENA, 0); WM8904_BIAS_ENA, 0);
snd_soc_component_write(component, WM8904_SW_RESET_AND_ID, 0);
regcache_cache_only(wm8904->regmap, true); regcache_cache_only(wm8904->regmap, true);
regcache_mark_dirty(wm8904->regmap); regcache_mark_dirty(wm8904->regmap);
......
...@@ -405,10 +405,12 @@ static const struct dmi_system_id byt_rt5640_quirk_table[] = { ...@@ -405,10 +405,12 @@ static const struct dmi_system_id byt_rt5640_quirk_table[] = {
DMI_MATCH(DMI_SYS_VENDOR, "Acer"), DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
DMI_MATCH(DMI_PRODUCT_NAME, "Aspire SW5-012"), DMI_MATCH(DMI_PRODUCT_NAME, "Aspire SW5-012"),
}, },
.driver_data = (void *)(BYT_RT5640_IN1_MAP | .driver_data = (void *)(BYT_RT5640_DMIC1_MAP |
BYT_RT5640_MCLK_EN | BYT_RT5640_JD_SRC_JD2_IN4N |
BYT_RT5640_SSP0_AIF1), BYT_RT5640_OVCD_TH_2000UA |
BYT_RT5640_OVCD_SF_0P75 |
BYT_RT5640_SSP0_AIF1 |
BYT_RT5640_MCLK_EN),
}, },
{ {
.matches = { .matches = {
......
...@@ -376,6 +376,17 @@ u32 rsnd_get_adinr_bit(struct rsnd_mod *mod, struct rsnd_dai_stream *io) ...@@ -376,6 +376,17 @@ u32 rsnd_get_adinr_bit(struct rsnd_mod *mod, struct rsnd_dai_stream *io)
*/ */
u32 rsnd_get_dalign(struct rsnd_mod *mod, struct rsnd_dai_stream *io) u32 rsnd_get_dalign(struct rsnd_mod *mod, struct rsnd_dai_stream *io)
{ {
static const u32 dalign_values[8][2] = {
{0x76543210, 0x67452301},
{0x00000032, 0x00000023},
{0x00007654, 0x00006745},
{0x00000076, 0x00000067},
{0xfedcba98, 0xefcdab89},
{0x000000ba, 0x000000ab},
{0x0000fedc, 0x0000efcd},
{0x000000fe, 0x000000ef},
};
int id = 0, inv;
struct rsnd_mod *ssiu = rsnd_io_to_mod_ssiu(io); struct rsnd_mod *ssiu = rsnd_io_to_mod_ssiu(io);
struct rsnd_mod *target; struct rsnd_mod *target;
struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
...@@ -411,13 +422,18 @@ u32 rsnd_get_dalign(struct rsnd_mod *mod, struct rsnd_dai_stream *io) ...@@ -411,13 +422,18 @@ u32 rsnd_get_dalign(struct rsnd_mod *mod, struct rsnd_dai_stream *io)
target = cmd ? cmd : ssiu; target = cmd ? cmd : ssiu;
} }
if (mod == ssiu)
id = rsnd_mod_id_sub(mod);
/* Non target mod or non 16bit needs normal DALIGN */ /* Non target mod or non 16bit needs normal DALIGN */
if ((snd_pcm_format_width(runtime->format) != 16) || if ((snd_pcm_format_width(runtime->format) != 16) ||
(mod != target)) (mod != target))
return 0x76543210; inv = 0;
/* Target mod needs inverted DALIGN when 16bit */ /* Target mod needs inverted DALIGN when 16bit */
else else
return 0x67452301; inv = 1;
return dalign_values[id][inv];
} }
u32 rsnd_get_busif_shift(struct rsnd_dai_stream *io, struct rsnd_mod *mod) u32 rsnd_get_busif_shift(struct rsnd_dai_stream *io, struct rsnd_mod *mod)
......
...@@ -82,10 +82,9 @@ void snd_soc_jack_report(struct snd_soc_jack *jack, int status, int mask) ...@@ -82,10 +82,9 @@ void snd_soc_jack_report(struct snd_soc_jack *jack, int status, int mask)
unsigned int sync = 0; unsigned int sync = 0;
int enable; int enable;
trace_snd_soc_jack_report(jack, mask, status);
if (!jack) if (!jack)
return; return;
trace_snd_soc_jack_report(jack, mask, status);
dapm = &jack->card->dapm; dapm = &jack->card->dapm;
......
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