static int tm2_set_bias_level(struct snd_soc_card *card, struct snd_soc_dapm_context *dapm, enum snd_soc_bias_level level) { struct snd_soc_pcm_runtime *rtd; rtd = snd_soc_get_pcm_runtime(card, card->dai_link[0].name); if (dapm->dev != rtd->codec_dai->dev) return 0; switch (level) { case SND_SOC_BIAS_STANDBY: if (card->dapm.bias_level == SND_SOC_BIAS_OFF) tm2_start_sysclk(card); break; case SND_SOC_BIAS_OFF: tm2_stop_sysclk(card); break; default: break; } return 0; }
static int tm2_pm_prepare(struct device *dev) { struct snd_soc_card *card = dev_get_drvdata(dev); return tm2_stop_sysclk(card); }