static int aic31xx_dapm_power_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event) { struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); struct aic31xx_priv *aic31xx = snd_soc_codec_get_drvdata(codec); unsigned int reg = AIC31XX_DACFLAG1; unsigned int mask; switch (WIDGET_BIT(w->reg, w->shift)) { case WIDGET_BIT(AIC31XX_DACSETUP, 7): mask = AIC31XX_LDACPWRSTATUS_MASK; break; case WIDGET_BIT(AIC31XX_DACSETUP, 6): mask = AIC31XX_RDACPWRSTATUS_MASK; break; case WIDGET_BIT(AIC31XX_HPDRIVER, 7): mask = AIC31XX_HPLDRVPWRSTATUS_MASK; break; case WIDGET_BIT(AIC31XX_HPDRIVER, 6): mask = AIC31XX_HPRDRVPWRSTATUS_MASK; break; case WIDGET_BIT(AIC31XX_SPKAMP, 7): mask = AIC31XX_SPLDRVPWRSTATUS_MASK; break; case WIDGET_BIT(AIC31XX_SPKAMP, 6): mask = AIC31XX_SPRDRVPWRSTATUS_MASK; break; case WIDGET_BIT(AIC31XX_ADCSETUP, 7): mask = AIC31XX_ADCPWRSTATUS_MASK; reg = AIC31XX_ADCFLAG; break; default: dev_err(codec->dev, "Unknown widget '%s' calling %s\n", w->name, __func__); return -EINVAL; } switch (event) { case SND_SOC_DAPM_POST_PMU: return aic31xx_wait_bits(aic31xx, reg, mask, mask, 5000, 100); case SND_SOC_DAPM_POST_PMD: return aic31xx_wait_bits(aic31xx, reg, mask, 0, 5000, 100); default: dev_dbg(codec->dev, "Unhandled dapm widget event %d from %s\n", event, w->name); } return 0; }
static int aic31xx_power_up_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event) { struct aic31xx_priv *aic31xx = snd_soc_codec_get_drvdata(w->codec); unsigned int reg = AIC31XX_DACFLAG1; unsigned int mask; if (!strcmp(w->name, "DAC Left")) { mask = AIC31XX_LDACPWRSTATUS_MASK; } else if (!strcmp(w->name, "DAC Right")) { mask = AIC31XX_RDACPWRSTATUS_MASK; } else if (!strcmp(w->name, "HPL Driver")) { mask = AIC31XX_HPLDRVPWRSTATUS_MASK; } else if (!strcmp(w->name, "HPR Driver")) { mask = AIC31XX_HPRDRVPWRSTATUS_MASK; } else if (!strcmp(w->name, "SPL ClassD") || !strcmp(w->name, "SPK ClassD")) { mask = AIC31XX_SPLDRVPWRSTATUS_MASK; } else if (!strcmp(w->name, "SPR ClassD")) { mask = AIC31XX_SPRDRVPWRSTATUS_MASK; } else if (!strcmp(w->name, "ADC")) { mask = AIC31XX_ADCPWRSTATUS_MASK; reg = AIC31XX_ADCFLAG; } else { dev_err(w->codec->dev, "Unknown widget '%s' calling %s/n", w->name, __func__); return -1; } if (event == SND_SOC_DAPM_POST_PMU) return aic31xx_wait_bits(aic31xx, reg, mask, mask, 5000, 100); else if (event == SND_SOC_DAPM_POST_PMD) return aic31xx_wait_bits(aic31xx, reg, mask, 0, 5000, 100); dev_dbg(w->codec->dev, "Unhandled dapm widget event %d from %s\n", event, w->name); return 0; }