|
@@ -732,14 +732,14 @@ static const struct snd_kcontrol_new rt5645_mono_adc_r_mix[] = {
|
|
static const struct snd_kcontrol_new rt5645_dac_l_mix[] = {
|
|
static const struct snd_kcontrol_new rt5645_dac_l_mix[] = {
|
|
SOC_DAPM_SINGLE("Stereo ADC Switch", RT5645_AD_DA_MIXER,
|
|
SOC_DAPM_SINGLE("Stereo ADC Switch", RT5645_AD_DA_MIXER,
|
|
RT5645_M_ADCMIX_L_SFT, 1, 1),
|
|
RT5645_M_ADCMIX_L_SFT, 1, 1),
|
|
- SOC_DAPM_SINGLE("DAC1 Switch", RT5645_AD_DA_MIXER,
|
|
|
|
|
|
+ SOC_DAPM_SINGLE_AUTODISABLE("DAC1 Switch", RT5645_AD_DA_MIXER,
|
|
RT5645_M_DAC1_L_SFT, 1, 1),
|
|
RT5645_M_DAC1_L_SFT, 1, 1),
|
|
};
|
|
};
|
|
|
|
|
|
static const struct snd_kcontrol_new rt5645_dac_r_mix[] = {
|
|
static const struct snd_kcontrol_new rt5645_dac_r_mix[] = {
|
|
SOC_DAPM_SINGLE("Stereo ADC Switch", RT5645_AD_DA_MIXER,
|
|
SOC_DAPM_SINGLE("Stereo ADC Switch", RT5645_AD_DA_MIXER,
|
|
RT5645_M_ADCMIX_R_SFT, 1, 1),
|
|
RT5645_M_ADCMIX_R_SFT, 1, 1),
|
|
- SOC_DAPM_SINGLE("DAC1 Switch", RT5645_AD_DA_MIXER,
|
|
|
|
|
|
+ SOC_DAPM_SINGLE_AUTODISABLE("DAC1 Switch", RT5645_AD_DA_MIXER,
|
|
RT5645_M_DAC1_R_SFT, 1, 1),
|
|
RT5645_M_DAC1_R_SFT, 1, 1),
|
|
};
|
|
};
|
|
|
|
|
|
@@ -1381,7 +1381,7 @@ static void hp_amp_power(struct snd_soc_codec *codec, int on)
|
|
regmap_write(rt5645->regmap, RT5645_PR_BASE +
|
|
regmap_write(rt5645->regmap, RT5645_PR_BASE +
|
|
RT5645_MAMP_INT_REG2, 0xfc00);
|
|
RT5645_MAMP_INT_REG2, 0xfc00);
|
|
snd_soc_write(codec, RT5645_DEPOP_M2, 0x1140);
|
|
snd_soc_write(codec, RT5645_DEPOP_M2, 0x1140);
|
|
- mdelay(5);
|
|
|
|
|
|
+ msleep(40);
|
|
rt5645->hp_on = true;
|
|
rt5645->hp_on = true;
|
|
} else {
|
|
} else {
|
|
/* depop parameters */
|
|
/* depop parameters */
|
|
@@ -2829,13 +2829,12 @@ static int rt5645_jack_detect(struct snd_soc_codec *codec, int jack_insert)
|
|
snd_soc_dapm_sync(dapm);
|
|
snd_soc_dapm_sync(dapm);
|
|
rt5645->jack_type = SND_JACK_HEADPHONE;
|
|
rt5645->jack_type = SND_JACK_HEADPHONE;
|
|
}
|
|
}
|
|
-
|
|
|
|
- snd_soc_update_bits(codec, RT5645_CHARGE_PUMP, 0x0300, 0x0200);
|
|
|
|
- snd_soc_write(codec, RT5645_DEPOP_M1, 0x001d);
|
|
|
|
- snd_soc_write(codec, RT5645_DEPOP_M1, 0x0001);
|
|
|
|
} else { /* jack out */
|
|
} else { /* jack out */
|
|
rt5645->jack_type = 0;
|
|
rt5645->jack_type = 0;
|
|
|
|
|
|
|
|
+ regmap_update_bits(rt5645->regmap, RT5645_HP_VOL,
|
|
|
|
+ RT5645_L_MUTE | RT5645_R_MUTE,
|
|
|
|
+ RT5645_L_MUTE | RT5645_R_MUTE);
|
|
regmap_update_bits(rt5645->regmap, RT5645_IN1_CTRL2,
|
|
regmap_update_bits(rt5645->regmap, RT5645_IN1_CTRL2,
|
|
RT5645_CBJ_MN_JD, RT5645_CBJ_MN_JD);
|
|
RT5645_CBJ_MN_JD, RT5645_CBJ_MN_JD);
|
|
regmap_update_bits(rt5645->regmap, RT5645_IN1_CTRL1,
|
|
regmap_update_bits(rt5645->regmap, RT5645_IN1_CTRL1,
|
|
@@ -2880,8 +2879,6 @@ int rt5645_set_jack_detect(struct snd_soc_codec *codec,
|
|
rt5645->en_button_func = true;
|
|
rt5645->en_button_func = true;
|
|
regmap_update_bits(rt5645->regmap, RT5645_GPIO_CTRL1,
|
|
regmap_update_bits(rt5645->regmap, RT5645_GPIO_CTRL1,
|
|
RT5645_GP1_PIN_IRQ, RT5645_GP1_PIN_IRQ);
|
|
RT5645_GP1_PIN_IRQ, RT5645_GP1_PIN_IRQ);
|
|
- regmap_update_bits(rt5645->regmap, RT5645_DEPOP_M1,
|
|
|
|
- RT5645_HP_CB_MASK, RT5645_HP_CB_PU);
|
|
|
|
regmap_update_bits(rt5645->regmap, RT5645_GEN_CTRL1,
|
|
regmap_update_bits(rt5645->regmap, RT5645_GEN_CTRL1,
|
|
RT5645_DIG_GATE_CTRL, RT5645_DIG_GATE_CTRL);
|
|
RT5645_DIG_GATE_CTRL, RT5645_DIG_GATE_CTRL);
|
|
}
|
|
}
|
|
@@ -3205,6 +3202,13 @@ static const struct dmi_system_id dmi_platform_intel_braswell[] = {
|
|
DMI_MATCH(DMI_PRODUCT_NAME, "Celes"),
|
|
DMI_MATCH(DMI_PRODUCT_NAME, "Celes"),
|
|
},
|
|
},
|
|
},
|
|
},
|
|
|
|
+ {
|
|
|
|
+ .ident = "Google Ultima",
|
|
|
|
+ .callback = strago_quirk_cb,
|
|
|
|
+ .matches = {
|
|
|
|
+ DMI_MATCH(DMI_PRODUCT_NAME, "Ultima"),
|
|
|
|
+ },
|
|
|
|
+ },
|
|
{ }
|
|
{ }
|
|
};
|
|
};
|
|
|
|
|