On Thu, Mar 03, 2016 at 02:45:35PM +0800, Zidan Wang wrote: > codec driver should manage its own master clock, MCLK1 and MCLK2. > When bias_level change from standby to prepare, enable codec MCLK. > When bias_level change from prepare to standby, disable codec MCLK. Not sure the desired sequence here, would be neater to use runtime pm? > @@ -270,6 +271,7 @@ static int wm8994_set_pdata_from_of(struct wm8994 *wm8994) > { > struct device_node *np = wm8994->dev->of_node; > struct wm8994_pdata *pdata = &wm8994->pdata; > + char tmp[8]; > int i; > > if (!np) > @@ -310,6 +312,11 @@ static int wm8994_set_pdata_from_of(struct wm8994 *wm8994) > if (pdata->ldo[1].enable < 0) > pdata->ldo[1].enable = 0; > > + for (i = 0; i < WM8994_NUM_MCLK; i++) { > + sprintf(tmp, "MCLK%d", i + 1); > + pdata->mclk[i] = devm_clk_get(wm8994->dev, tmp); Probe defer? > @@ -2474,6 +2475,8 @@ static int wm8994_set_bias_level(struct snd_soc_codec *codec, > { > struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec); > struct wm8994 *control = wm8994->wm8994; > + struct wm8994_pdata *pdata = &control->pdata; > + int i; > > wm_hubs_set_bias_level(codec, level); > > @@ -2495,8 +2498,13 @@ static int wm8994_set_bias_level(struct snd_soc_codec *codec, > break; > } > > - if (snd_soc_codec_get_bias_level(codec) == SND_SOC_BIAS_STANDBY) > + if (snd_soc_codec_get_bias_level(codec) == SND_SOC_BIAS_STANDBY) { > active_reference(codec); > + > + for (i = 0; i < WM8994_NUM_MCLK; i++) > + if (!IS_ERR(pdata->mclk[i])) > + clk_prepare_enable(pdata->mclk[i]); Return value? You probably should refer to wm8962 or wm8960. _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel