[alsa-devel] RFC: ASoC driver for S3C24XX Simtec boards
Ben Dooks
ben-alsa at fluff.org
Fri Jun 26 10:46:26 CEST 2009
On Thu, Jun 25, 2009 at 12:26:59PM +0100, Mark Brown wrote:
> On Wed, Jun 24, 2009 at 12:11:55PM +0100, Ben Dooks wrote:
> > I'd like some comments on the following driver which
> > is currently being developed to get ASoC working on
> > the TLV320AIC23 based Simtec boards.
>
> Please do remember to CC maintainers on things.
>
> > 1) I'm not seeing a control to enable/disable the
> > 'Speaker Amp', do I need to change the controls
> > or how this is exported?
>
> If you need to give manual control of this to user space use a
> DAPM_SOC_PIN_SWITCH widget. Normally there's no need to do this since
> it falls out of the internal routing within the CODEC and having an
> explicit control for the output itself just adds an extra knob for
> userspace to twiddle. Depending on the technology it may not even be
> desirable since having inputs connected with the amplifiers powered off
> can leave audible leakage paths.
We've not seen any problems with out boards, then the amps are coupled
with an R/C network so leakage from HP->AMP should be negligible.
Our old ALSA drivers always gave the user the choice to have the
speaker powered up or not.
> > static const struct snd_soc_dapm_widget tlv320aic23_dapm_widgets[] = {
> > SND_SOC_DAPM_HP("Headphone Jack", NULL),
> > SND_SOC_DAPM_LINE("Line In", NULL),
> > SND_SOC_DAPM_LINE("Line Out", NULL),
> > SND_SOC_DAPM_MIC("Mic Jack", NULL),
>
> > SND_SOC_DAPM_PGA_E("Speaker Amp", SND_SOC_NOPM,
> > 0, 0, NULL, 0, simtec_spk_event,
> > SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
>
> This looks like a SND_SOC_DAPM_SPK(); using that will help with
> sequencing.
thanks, changed. still no output in the alsactl control dump though.
> > static const struct snd_soc_dapm_route audio_map[] = {
>
> This wants a better name - base_map or something?
thanks, changed.
> > if (pdata->amp_gpio > 0) {
> > printk(KERN_DEBUG "%s: adding amp routes\n", __func__);
>
> pr_dbg() or dev_dbg()
changed to pr_debug, we're not keeping the platform device around
after the probe.
> > static int simtec_hw_startup(struct snd_pcm_substream *substream)
> > {
> > /* call any board supplied startup code, this currently only
> > * covers the bast/vr1000 which have a CPLD in the way of the
> > * LRCLK */
> > if (pdata->startup)
> > pdata->startup();
> >
> > return 0;
> > }
>
> This looks odd. Does this really need to be done each time the audio
> device can be opened or should it be done once when the driver is being
> set up? There doesn't appear to be any similar code to reverse the
> startup() on teardown so I suspect that just doing it when the driver
> starts should be fine.
I'll have to add it in the resume path as well.
> > /* attach gpio amp gain (if any) */
> > if (pdata->amp_gain[0] > 0) {
> > ret = gpio_request(pd->amp_gain[0], "gpio-amp-gain");
> > if (ret) {
> > dev_err(dev, "cannot get amp gpio gain0\n");
> > return ret;
> > }
> >
> > ret = gpio_request(pd->amp_gain[1], "gpio-amp-gain");
> > if (ret) {
> > dev_err(dev, "cannot get amp gpio gain0\n");
>
> gain1.
thanks, changed.
> > static int __devinit simtec_audio_probe(struct platform_device *pdev)
> > {
> > struct platform_device *snd_dev;
> > int ret;
> >
> > dev_info(&pdev->dev, "probe called\n");
>
> dev_dbg() at most.
> > pdata = pdev->dev.platform_data;
> > if (!pdata) {
> > dev_err(&pdev->dev, "no platform data supplied\n");
> > return -EINVAL;
> > }
>
> Every individual bit of platform data looks optional; this suggests that
> either additional validation is desirable here or that platform data
> itself should be optional.
As such, pretty much all the systems we've got pass platform data for
some from of information, so I decided that a lack of it was a good
enough indication that there was something wrong.
--
Ben
Q: What's a light-year?
A: One-third less calories than a regular year.
More information about the Alsa-devel
mailing list