[alsa-devel] [PATCH] ASoC: Intel: Add merrifield machine driver
Subhransu S. Prusty
subhransu.s.prusty at intel.com
Tue Aug 12 08:06:09 CEST 2014
On Tue, Jul 29, 2014 at 08:50:43PM +0100, Mark Brown wrote:
> On Thu, Jul 17, 2014 at 05:43:45PM +0530, Subhransu S. Prusty wrote:
>
> > + default n
>
> This is the standard Kconfig behaviour - no need to specify it (other
> drivers don't...).
Removed.
>
> > +static int mrfld_8958_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_dai *codec_dai = rtd->codec_dai;
> > +
> > + if (!strcmp(codec_dai->name, "wm8994-aif1"))
> > + return mrfld_wm8958_set_clk(codec_dai);
> > + return 0;
> > +}
>
> It's much clearer to define separate operations for each DAI, there's no
> need for the string matching (especially given that there's nothing to
> do for other DAIs).
>
Don't need the comparison. Removed
> > + /*
> > + * Machine uses 2 DMICs, other configs may use more so change below
> > + * accordingly
> > + */
> > + { "DMIC1DAT", NULL, "DMIC" },
> > + { "DMIC2DAT", NULL, "DMIC" },
> > + /*{ "DMIC3DAT", NULL, "DMIC" },*/
> > + /*{ "DMIC4DAT", NULL, "DMIC" },*/
>
> Remove commented out code.
>
Done
> > + /* Force enable VMID to avoid cold latency constraints */
> > + snd_soc_dapm_force_enable_pin(&card->dapm, "VMID");
> > + snd_soc_dapm_sync(&card->dapm);
>
> This looks like you're open coding a version of wm8994_vmid_mode().
> Though that might need some tuning for systems that really have no
> single ended outputs.
>
VMID has a larget settling time. Keep it ON here to avoid the delay. Any
better way of doing this?
> > + /*
> > + * Micbias1 is always off, so for pm optimizations make sure the micbias1
> > + * discharge bit is set to floating to avoid discharge in disable state
> > + */
> > + snd_soc_update_bits(codec, WM8958_MICBIAS1, WM8958_MICB1_DISCH, 0);
>
> Don't write directly to CODEC registers, provide a way of configuring
> this in the CODEC either via platform data or some API. That way
> nothing else is writing to the CODEC register map without the driver for
> the CODEC knowing about it.
>
Yes it can be given through the pdata. Removed.
> > +static void snd_mrfld_8958_complete(struct device *dev)
> > +{
> > + struct snd_soc_card *card = dev_get_drvdata(dev);
> > + struct snd_soc_codec *codec = card->rtd[CODEC_BE].codec;
> > + struct snd_soc_dapm_context *dapm;
> > +
> > + pr_debug("In %s\n", __func__);
> > +
> > + pr_debug("found codec %s\n", codec->component.name);
> > + dapm = &codec->dapm;
> > +
> > + snd_soc_dapm_force_enable_pin(dapm, "VMID");
> > + snd_soc_dapm_sync(dapm);
> > +
> > + snd_soc_resume(dev);
> > +}
>
> Doing the manual fiddling before rather than after resuming the core
> seems... concerning, I'd expect this to be done either in one of the
> ASoC suspend/resume callbacks or at least after calling snd_soc_resume()
> - doing it before seems likely to trigger or cause bugs.
Complete callback is called only after resume.
>
> > +static int snd_mrfld_8958_poweroff(struct device *dev)
> > +{
> > + pr_debug("In %s\n", __func__);
> > + snd_soc_poweroff(dev);
> > + return 0;
> > +}
>
> Remove this, just use the core function directly.
Removed.
>
> > + platform_set_drvdata(pdev, &snd_soc_card_mrfld);
> > + pr_info("%s successful\n", __func__);
>
> This print has no content, remove it or at the very least downgrade it
> to debug level.
Done
--
More information about the Alsa-devel
mailing list