[alsa-devel] Help with adding mic bias to omap-twl4030 audio driver
Peter Ujfalusi
peter.ujfalusi at ti.com
Mon Dec 31 11:33:03 CET 2012
Hi Neil,
On 12/18/2012 12:18 AM, NeilBrown wrote:
> Hi Peter,
> I recently discovered your omap-twl4030 driver and thought to use it to
> replace the hacked-around driver I'm using for the GTA04 mobile phone
> platform.
>
> It works fine for playing sound out the speaker, but the microphone doesn't
> work - I think because there is no mechanism to enable the microphone bias.
>
> I copied some bits out of the old driver - just enough to make it work.
> However this probably makes the code specific to my platform.
>
> So I'm wondering if you could give me some guidelines on how this "should"
> be done. Should these tables be passed in with the platform_data (I haven't
> graduated to device-tree yet)?
I'm going to send a series soon to update the omap-twl4030 machine driver.
This update going to add support for microphones and all other routings as well.
With the upcoming series the omap-twl4030 will support zoom2 and sdp3430. I'll
CC you with the series so you can take a look if it is going to help with your
board.
>
> My 'hacked-up' driver has a few more entries in this table than just those
> few, but I wanted to strip it down to what is needed for the main microphone
> to work.
>
> Thanks for any help you can provide,
> NeilBrown
>
> P.S is there some good reason to use the name
> struct omap_tw4030_pdata
> rather than
> struct omap_twl4030_pdata
>
> (i.e. with the 'l')??
>
> diff --git a/sound/soc/omap/omap-twl4030.c b/sound/soc/omap/omap-twl4030.c
> index 3b97b879..aa4d866 100644
> --- a/sound/soc/omap/omap-twl4030.c
> +++ b/sound/soc/omap/omap-twl4030.c
> @@ -87,6 +87,32 @@ static struct snd_soc_ops omap_twl4030_ops = {
> .hw_params = omap_twl4030_hw_params,
> };
>
> +static const struct snd_soc_dapm_widget gta04_dapm_widgets[] = {
> + SND_SOC_DAPM_MIC("Internal Mic", NULL),
> +};
> +
> +static const struct snd_soc_dapm_route audio_map[] = {
> + {"MAINMIC", NULL, "Mic Bias 1"},
> + {"Mic Bias 1", NULL, "Internal Mic"},
> +};
> +
> +static int omap3gta04_init(struct snd_soc_pcm_runtime *runtime)
> +{
> + int ret;
> + struct snd_soc_codec *codec = runtime->codec;
> + struct snd_soc_dapm_context *dapm = &codec->dapm;
> +
> + ret = snd_soc_dapm_new_controls(dapm, gta04_dapm_widgets,
> + ARRAY_SIZE(gta04_dapm_widgets));
> + if (ret < 0)
> + return ret;
> +
> + snd_soc_dapm_add_routes(dapm, audio_map,
> + ARRAY_SIZE(audio_map));
> +
> + return snd_soc_dapm_sync(dapm);
> +}
> +
> /* Digital audio interface glue - connects codec <--> CPU */
> static struct snd_soc_dai_link omap_twl4030_dai_links[] = {
> {
> @@ -97,6 +123,7 @@ static struct snd_soc_dai_link omap_twl4030_dai_links[] = {
> .platform_name = "omap-pcm-audio",
> .codec_name = "twl4030-codec",
> .ops = &omap_twl4030_ops,
> + .init = &omap3gta04_init,
> },
> };
>
>
--
Péter
More information about the Alsa-devel
mailing list