On Wed, Jul 15, 2015 at 07:50:50PM +0800, Nicolas Boichat wrote:
Thanks for the review. I think what we need is something like
snd_soc_dapm_force_enable_pin(dapm, "ADC L power");
snd_soc_dapm_force_enable_pin(dapm, "ADC R power");
snd_soc_dapm_sync(dapm);
if (!codec->component.card->instantiated) {
regmap_update_bits(rt5645->regmap, RT5645_PWR_DIG1,
RT5645_PWR_ADC_L_BIT | RT5645_PWR_ADC_R_BIT,
RT5645_PWR_ADC_L_BIT | RT5645_PWR_ADC_R_BIT);
}
Just to make sure I understand... With the code above, the dapm state is consistent. However, DAPM will only set the regmap bits when the card is instantiated. So why do we still need to update the regmap? To make sure we do not miss an early jack/button event? Or would we still get jack irq if the pins are enabled a little later? (I guess we can live with missing a button event at that stage, but we need the jack state to be correct)
I'm assuming it's something to do with early detection, I don't really know though.
Also, I'm going to update rt5645_irq_detection to do nothing if the codec is not initialized yet (just like rt286.c does). That should be ok as we call rt5645_irq from rt5645_set_jack_detect, after the codec is ready, which will update the initial jack status, and setup the DAPM pins. Does that sound ok?
Yes.