lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Tue, 5 Sep 2017 10:26:26 +0800 From: hl <hl@...k-chips.com> To: Arnaud Pouliquen <arnaud.pouliquen@...com>, "broonie@...nel.org" <broonie@...nel.org>, "dgreif@...omium.org" <dgreif@...omium.org> Cc: "alsa-devel@...a-project.org" <alsa-devel@...a-project.org>, "lgirdwood@...il.com" <lgirdwood@...il.com>, "briannorris@...omium.org" <briannorris@...omium.org>, "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>, "tiwai@...e.com" <tiwai@...e.com>, "mka@...omium.org" <mka@...omium.org>, "dianders@...omium.org" <dianders@...omium.org> Subject: Re: [PATCH v2 1/2] ASoC: codec: use enable pin to control dmic start and stop On Monday, September 04, 2017 06:03 PM, Arnaud Pouliquen wrote: > Hello Lin, > > Sorry for this late answer. > I'm not maintainer, just a contributor... but as some update seems > strange for me, so i prefer to highlight it to clarify them. > > On 08/17/2017 04:24 AM, Lin Huang wrote: >> From: huang lin <hl@...k-chips.com> >> >> on some board use enable pin to control dmic start and stop, >> so add this feature in dmic driver. > Please, Could you give data-sheet reference of your DMIC, to help me > to understand your use-case? >> Signed-off-by: Lin Huang <hl@...k-chips.com> >> --- >> sound/soc/codecs/Kconfig | 2 +- >> sound/soc/codecs/dmic.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ >> 2 files changed, 47 insertions(+), 1 deletion(-) >> >> diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig >> index 010811e..d98233b 100644 >> --- a/sound/soc/codecs/Kconfig >> +++ b/sound/soc/codecs/Kconfig >> @@ -71,7 +71,7 @@ config SND_SOC_ALL_CODECS >> select SND_SOC_DA732X if I2C >> select SND_SOC_DA9055 if I2C >> select SND_SOC_DIO2125 >> - select SND_SOC_DMIC >> + select SND_SOC_DMIC if GPIOLIB > Dependency also for DMIC without GPIO to handle gating? >> select SND_SOC_ES8316 if I2C >> select SND_SOC_ES8328_SPI if SPI_MASTER >> select SND_SOC_ES8328_I2C if I2C >> diff --git a/sound/soc/codecs/dmic.c b/sound/soc/codecs/dmic.c >> index 12e07f9..b88a1ee 100644 >> --- a/sound/soc/codecs/dmic.c >> +++ b/sound/soc/codecs/dmic.c >> @@ -19,6 +19,8 @@ >> * >> */ >> >> +#include <linux/gpio.h> >> +#include <linux/gpio/consumer.h> >> #include <linux/platform_device.h> >> #include <linux/slab.h> >> #include <linux/module.h> >> @@ -27,6 +29,34 @@ >> #include <sound/soc.h> >> #include <sound/soc-dapm.h> >> >> +static int dmic_daiops_trigger(struct snd_pcm_substream *substream, >> + int cmd, struct snd_soc_dai *dai) >> +{ >> + struct gpio_desc *dmic_en = snd_soc_dai_get_drvdata(dai); >> + >> + if (!dmic_en) >> + return 0; >> + >> + switch (cmd) { >> + case SNDRV_PCM_TRIGGER_START: >> + case SNDRV_PCM_TRIGGER_RESUME: >> + case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: >> + gpiod_set_value(dmic_en, 1); >> + break; >> + case SNDRV_PCM_TRIGGER_STOP: >> + case SNDRV_PCM_TRIGGER_SUSPEND: >> + case SNDRV_PCM_TRIGGER_PAUSE_PUSH: >> + gpiod_set_value(dmic_en, 0); >> + break; >> + } >> + >> + return 0; >> +} >> + >> +static const struct snd_soc_dai_ops dmic_dai_ops = { >> + .trigger = dmic_daiops_trigger, >> +}; >> + > should it be handle by trigger or DAPM? > > > >> static struct snd_soc_dai_driver dmic_dai = { >> .name = "dmic-hifi", >> .capture = { >> @@ -38,8 +68,23 @@ static struct snd_soc_dai_driver dmic_dai = { >> | SNDRV_PCM_FMTBIT_S24_LE >> | SNDRV_PCM_FMTBIT_S16_LE, >> }, >> + .ops = &dmic_dai_ops, >> }; >> >> +static int dmic_codec_probe(struct snd_soc_codec *codec) >> +{ >> + struct gpio_desc *dmic_en; >> + >> + dmic_en = devm_gpiod_get_optional(codec->dev, >> + "dmicen", GPIOD_OUT_LOW); > Hypothesis here is that GPIO is always set to low? seems too limiting. Yes, you are right, maybe i can set it to devm_gpiod_get_optional(codec->dev, "dmicen", GPIOD_ASIS); > > Regards > Arnaud >> + if (IS_ERR(dmic_en)) >> + return PTR_ERR(dmic_en); >> + >> + snd_soc_codec_set_drvdata(codec, dmic_en); >> + >> + return 0; >> +} >> + >> static const struct snd_soc_dapm_widget dmic_dapm_widgets[] = { >> SND_SOC_DAPM_AIF_OUT("DMIC AIF", "Capture", 0, >> SND_SOC_NOPM, 0, 0), >> @@ -51,6 +96,7 @@ static const struct snd_soc_dapm_route intercon[] = { >> }; >> >> static const struct snd_soc_codec_driver soc_dmic = { >> + .probe = dmic_codec_probe, >> .component_driver = { >> .dapm_widgets = dmic_dapm_widgets, >> .num_dapm_widgets = ARRAY_SIZE(dmic_dapm_widgets), >> > >
Powered by blists - more mailing lists