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_aif1_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) { struct snd_soc_pcm_runtime *rtd = substream->private_data; struct snd_soc_component *component = rtd->codec_dai->component; struct tm2_machine_priv *priv = snd_soc_card_get_drvdata(rtd->card); switch (params_rate(params)) { case 4000: case 8000: case 12000: case 16000: case 24000: case 32000: case 48000: case 96000: case 192000: /* Highest possible SYSCLK frequency: 147.456MHz */ priv->sysclk_rate = 147456000U; break; case 11025: case 22050: case 44100: case 88200: case 176400: /* Highest possible SYSCLK frequency: 135.4752 MHz */ priv->sysclk_rate = 135475200U; break; default: dev_err(component->dev, "Not supported sample rate: %d\n", params_rate(params)); return -EINVAL; } return tm2_start_sysclk(rtd->card); }
static void tm2_pm_complete(struct device *dev) { struct snd_soc_card *card = dev_get_drvdata(dev); tm2_start_sysclk(card); }