* [PATCH v5 0/2] Modify documentation and machine driver for SC7180 sound card @ 2020-11-03 10:30 Ajye Huang 2020-11-03 10:30 ` [PATCH v5 1/2] ASoC: google: dt-bindings: modify machine bindings for two MICs case Ajye Huang 2020-11-03 10:30 ` [PATCH v5 2/2] ASoC: qcom: sc7180: Modify machine driver for 2mic Ajye Huang 0 siblings, 2 replies; 6+ messages in thread From: Ajye Huang @ 2020-11-03 10:30 UTC (permalink / raw) To: linux-kernel Cc: Mark Brown, Rohit kumar, Banajit Goswami, Patrick Lai, Srinivasa Rao Mandadapu, srinivas.kandagatla, Andy Gross, Bjorn Andersson, Liam Girdwood, Rob Herring, Jaroslav Kysela, cychiang, tzungbi, dianders, linux-arm-kernel, linux-arm-msm, devicetree, alsa-devel, Ajye Huang Note: - The patch is made by the collaboration of Ajye Huang <ajye_huang@compal.corp-partner.google.com> Cheng-Yi Chiang <cychiang@chromium.org> v5: - Machine driver: - Fix a format string warning (Reported-by: kernel test robot <lkp@intel.com>). detailed info at https://lore.kernel.org/patchwork/patch/1331087/ v4: - Machine driver: Addressed suggestions from Tzung-Bi. - Remove redundant judgments in dmic_set() and dmic_get(). - Remove 1 level indent of judgment of IS_ERR(data->dmic_sel). v3: - Machine driver: Addressed suggestions from Tzung-Bi. - move variables "dmic_switch" and "dmic_sel" into struct sc7180_snd_data. - Remove redundant judgments in dmic_set(). v2: - Documentation: Modify the dimc-gpios property description and examples. - Machine driver: - Remove "qcom,sc7180-sndcard-rt5682-m98357-2mic" compatible - See gpio property and use anadditional control. Thanks for the review! Ajye Huang (2): ASoC: google: dt-bindings: modify machine bindings for two MICs case ASoC: qcom: sc7180: Modify machine driver for 2mic .../bindings/sound/google,sc7180-trogdor.yaml | 58 ++++++++++++++++++ sound/soc/qcom/sc7180.c | 61 +++++++++++++++++++ 2 files changed, 119 insertions(+) -- 2.25.1 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v5 1/2] ASoC: google: dt-bindings: modify machine bindings for two MICs case 2020-11-03 10:30 [PATCH v5 0/2] Modify documentation and machine driver for SC7180 sound card Ajye Huang @ 2020-11-03 10:30 ` Ajye Huang 2020-11-03 10:36 ` Ajye Huang 2020-11-05 18:43 ` Rob Herring 2020-11-03 10:30 ` [PATCH v5 2/2] ASoC: qcom: sc7180: Modify machine driver for 2mic Ajye Huang 1 sibling, 2 replies; 6+ messages in thread From: Ajye Huang @ 2020-11-03 10:30 UTC (permalink / raw) To: linux-kernel Cc: Mark Brown, Rohit kumar, Banajit Goswami, Patrick Lai, Srinivasa Rao Mandadapu, srinivas.kandagatla, Andy Gross, Bjorn Andersson, Liam Girdwood, Rob Herring, Jaroslav Kysela, cychiang, tzungbi, dianders, linux-arm-kernel, linux-arm-msm, devicetree, alsa-devel, Ajye Huang Add a property "dmic-gpios" for switching between two MICs. Signed-off-by: Ajye Huang <ajye_huang@compal.corp-partner.google.com> --- .../bindings/sound/google,sc7180-trogdor.yaml | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/Documentation/devicetree/bindings/sound/google,sc7180-trogdor.yaml b/Documentation/devicetree/bindings/sound/google,sc7180-trogdor.yaml index efc34689d6b5..9e0505467e57 100644 --- a/Documentation/devicetree/bindings/sound/google,sc7180-trogdor.yaml +++ b/Documentation/devicetree/bindings/sound/google,sc7180-trogdor.yaml @@ -34,6 +34,9 @@ properties: "#size-cells": const: 0 + dmic-gpios: + description: GPIO for switching between DMICs + patternProperties: "^dai-link(@[0-9])?$": description: @@ -81,6 +84,7 @@ additionalProperties: false examples: - | + //Example 1 sound { compatible = "google,sc7180-trogdor"; model = "sc7180-rt5682-max98357a-1mic"; @@ -128,3 +132,57 @@ examples: }; }; }; + + - | + //Example 2 (2mic case) + sound { + compatible = "google,sc7180-trogdor"; + model = "sc7180-rt5682-max98357a-2mic"; + + audio-routing = + "Headphone Jack", "HPOL", + "Headphone Jack", "HPOR"; + + #address-cells = <1>; + #size-cells = <0>; + + dmic-gpios = <&tlmm 86 0>; + + dai-link@0 { + link-name = "MultiMedia0"; + reg = <0>; + cpu { + sound-dai = <&lpass_cpu 0>; + }; + + codec { + sound-dai = <&alc5682 0>; + }; + }; + + dai-link@1 { + link-name = "MultiMedia1"; + reg = <1>; + cpu { + sound-dai = <&lpass_cpu 1>; + }; + + codec { + sound-dai = <&max98357a>; + }; + }; + + dai-link@2 { + link-name = "MultiMedia2"; + reg = <2>; + cpu { + sound-dai = <&lpass_hdmi 0>; + }; + + codec { + sound-dai = <&msm_dp>; + }; + }; + }; + +... -- 2.25.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v5 1/2] ASoC: google: dt-bindings: modify machine bindings for two MICs case 2020-11-03 10:30 ` [PATCH v5 1/2] ASoC: google: dt-bindings: modify machine bindings for two MICs case Ajye Huang @ 2020-11-03 10:36 ` Ajye Huang 2020-11-05 18:43 ` Rob Herring 1 sibling, 0 replies; 6+ messages in thread From: Ajye Huang @ 2020-11-03 10:36 UTC (permalink / raw) To: Ajye Huang Cc: Linux Kernel Mailing List, Mark Brown, Rohit kumar, Banajit Goswami, Patrick Lai, Srinivasa Rao Mandadapu, Srini Kandagatla, Andy Gross, Bjorn Andersson, Liam Girdwood, Rob Herring, Jaroslav Kysela, Cheng-yi Chiang, Tzung-Bi Shih, Douglas Anderson, moderated list:ARM/Mediatek SoC support, linux-arm-msm, open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS, ALSA development Hi Rob, Could you please kindly review this patch ? I had got your "reviewed-by" on v1 patch, the v1 depends on this patch series (https://patchwork.kernel.org/patch/11773221) at that time. Now, that patch what I depended (11773221) had made modification and it was Applied to https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next commit e158d2d83cab ("ASoC: google: dt-bindings: Add sc7180-trogdor machine bindings") I noted what I did on cover letter v2: - Documentation: Modify the dimc-gpios property description and examples. That is why I bother you again to review it. Please let me know if this looks good to you. Thanks! On Tue, Nov 3, 2020 at 6:31 PM Ajye Huang <ajye.huang@gmail.com> wrote: > > Add a property "dmic-gpios" for switching between two MICs. > > Signed-off-by: Ajye Huang <ajye_huang@compal.corp-partner.google.com> > --- > .../bindings/sound/google,sc7180-trogdor.yaml | 58 +++++++++++++++++++ > 1 file changed, 58 insertions(+) > > diff --git a/Documentation/devicetree/bindings/sound/google,sc7180-trogdor.yaml b/Documentation/devicetree/bindings/sound/google,sc7180-trogdor.yaml > index efc34689d6b5..9e0505467e57 100644 > --- a/Documentation/devicetree/bindings/sound/google,sc7180-trogdor.yaml > +++ b/Documentation/devicetree/bindings/sound/google,sc7180-trogdor.yaml > @@ -34,6 +34,9 @@ properties: > "#size-cells": > const: 0 > > + dmic-gpios: > + description: GPIO for switching between DMICs > + > patternProperties: > "^dai-link(@[0-9])?$": > description: > @@ -81,6 +84,7 @@ additionalProperties: false > examples: > > - | > + //Example 1 > sound { > compatible = "google,sc7180-trogdor"; > model = "sc7180-rt5682-max98357a-1mic"; > @@ -128,3 +132,57 @@ examples: > }; > }; > }; > + > + - | > + //Example 2 (2mic case) > + sound { > + compatible = "google,sc7180-trogdor"; > + model = "sc7180-rt5682-max98357a-2mic"; > + > + audio-routing = > + "Headphone Jack", "HPOL", > + "Headphone Jack", "HPOR"; > + > + #address-cells = <1>; > + #size-cells = <0>; > + > + dmic-gpios = <&tlmm 86 0>; > + > + dai-link@0 { > + link-name = "MultiMedia0"; > + reg = <0>; > + cpu { > + sound-dai = <&lpass_cpu 0>; > + }; > + > + codec { > + sound-dai = <&alc5682 0>; > + }; > + }; > + > + dai-link@1 { > + link-name = "MultiMedia1"; > + reg = <1>; > + cpu { > + sound-dai = <&lpass_cpu 1>; > + }; > + > + codec { > + sound-dai = <&max98357a>; > + }; > + }; > + > + dai-link@2 { > + link-name = "MultiMedia2"; > + reg = <2>; > + cpu { > + sound-dai = <&lpass_hdmi 0>; > + }; > + > + codec { > + sound-dai = <&msm_dp>; > + }; > + }; > + }; > + > +... > -- > 2.25.1 > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v5 1/2] ASoC: google: dt-bindings: modify machine bindings for two MICs case 2020-11-03 10:30 ` [PATCH v5 1/2] ASoC: google: dt-bindings: modify machine bindings for two MICs case Ajye Huang 2020-11-03 10:36 ` Ajye Huang @ 2020-11-05 18:43 ` Rob Herring 2020-11-06 3:48 ` Ajye Huang 1 sibling, 1 reply; 6+ messages in thread From: Rob Herring @ 2020-11-05 18:43 UTC (permalink / raw) To: Ajye Huang Cc: linux-kernel, Mark Brown, Rohit kumar, Banajit Goswami, Patrick Lai, Srinivasa Rao Mandadapu, srinivas.kandagatla, Andy Gross, Bjorn Andersson, Liam Girdwood, Jaroslav Kysela, cychiang, tzungbi, dianders, linux-arm-kernel, linux-arm-msm, devicetree, alsa-devel, Ajye Huang On Tue, Nov 03, 2020 at 06:30:50PM +0800, Ajye Huang wrote: > Add a property "dmic-gpios" for switching between two MICs. > > Signed-off-by: Ajye Huang <ajye_huang@compal.corp-partner.google.com> > --- > .../bindings/sound/google,sc7180-trogdor.yaml | 58 +++++++++++++++++++ > 1 file changed, 58 insertions(+) > > diff --git a/Documentation/devicetree/bindings/sound/google,sc7180-trogdor.yaml b/Documentation/devicetree/bindings/sound/google,sc7180-trogdor.yaml > index efc34689d6b5..9e0505467e57 100644 > --- a/Documentation/devicetree/bindings/sound/google,sc7180-trogdor.yaml > +++ b/Documentation/devicetree/bindings/sound/google,sc7180-trogdor.yaml > @@ -34,6 +34,9 @@ properties: > "#size-cells": > const: 0 > > + dmic-gpios: > + description: GPIO for switching between DMICs Need to define how many (maxItems: 1). > + > patternProperties: > "^dai-link(@[0-9])?$": > description: > @@ -81,6 +84,7 @@ additionalProperties: false > examples: > > - | > + //Example 1 > sound { > compatible = "google,sc7180-trogdor"; > model = "sc7180-rt5682-max98357a-1mic"; > @@ -128,3 +132,57 @@ examples: > }; > }; > }; > + > + - | > + //Example 2 (2mic case) > + sound { > + compatible = "google,sc7180-trogdor"; > + model = "sc7180-rt5682-max98357a-2mic"; > + > + audio-routing = > + "Headphone Jack", "HPOL", > + "Headphone Jack", "HPOR"; > + > + #address-cells = <1>; > + #size-cells = <0>; > + > + dmic-gpios = <&tlmm 86 0>; Do we really need another example for this? Can't you just add it to the existing example? > + > + dai-link@0 { > + link-name = "MultiMedia0"; > + reg = <0>; > + cpu { > + sound-dai = <&lpass_cpu 0>; > + }; > + > + codec { > + sound-dai = <&alc5682 0>; > + }; > + }; > + > + dai-link@1 { > + link-name = "MultiMedia1"; > + reg = <1>; > + cpu { > + sound-dai = <&lpass_cpu 1>; > + }; > + > + codec { > + sound-dai = <&max98357a>; > + }; > + }; > + > + dai-link@2 { > + link-name = "MultiMedia2"; > + reg = <2>; > + cpu { > + sound-dai = <&lpass_hdmi 0>; > + }; > + > + codec { > + sound-dai = <&msm_dp>; > + }; > + }; > + }; > + > +... > -- > 2.25.1 > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v5 1/2] ASoC: google: dt-bindings: modify machine bindings for two MICs case 2020-11-05 18:43 ` Rob Herring @ 2020-11-06 3:48 ` Ajye Huang 0 siblings, 0 replies; 6+ messages in thread From: Ajye Huang @ 2020-11-06 3:48 UTC (permalink / raw) To: Rob Herring Cc: Ajye Huang, Linux Kernel Mailing List, Mark Brown, Rohit kumar, Banajit Goswami, Patrick Lai, Srinivasa Rao Mandadapu, Srini Kandagatla, Andy Gross, Bjorn Andersson, Liam Girdwood, Jaroslav Kysela, Cheng-yi Chiang, Tzung-Bi Shih, Douglas Anderson, moderated list:ARM/Mediatek SoC support, linux-arm-msm, open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS, ALSA development HI, Rob, Thank you for the comments. On Fri, Nov 6, 2020 at 2:43 AM Rob Herring <robh@kernel.org> wrote: > > On Tue, Nov 03, 2020 at 06:30:50PM +0800, Ajye Huang wrote: > > Add a property "dmic-gpios" for switching between two MICs. > > > > Signed-off-by: Ajye Huang <ajye_huang@compal.corp-partner.google.com> > > --- > > .../bindings/sound/google,sc7180-trogdor.yaml | 58 +++++++++++++++++++ > > 1 file changed, 58 insertions(+) > > > > diff --git a/Documentation/devicetree/bindings/sound/google,sc7180-trogdor.yaml b/Documentation/devicetree/bindings/sound/google,sc7180-trogdor.yaml > > index efc34689d6b5..9e0505467e57 100644 > > --- a/Documentation/devicetree/bindings/sound/google,sc7180-trogdor.yaml > > +++ b/Documentation/devicetree/bindings/sound/google,sc7180-trogdor.yaml > > @@ -34,6 +34,9 @@ properties: > > "#size-cells": > > const: 0 > > > > + dmic-gpios: > > + description: GPIO for switching between DMICs > > Need to define how many (maxItems: 1). Yes, I will add in the v6 version. > > > + > > patternProperties: > > "^dai-link(@[0-9])?$": > > description: > > @@ -81,6 +84,7 @@ additionalProperties: false > > examples: > > > > - | > > + //Example 1 > > sound { > > compatible = "google,sc7180-trogdor"; > > model = "sc7180-rt5682-max98357a-1mic"; > > @@ -128,3 +132,57 @@ examples: > > }; > > }; > > }; > > + > > + - | > > + //Example 2 (2mic case) > > + sound { > > + compatible = "google,sc7180-trogdor"; > > + model = "sc7180-rt5682-max98357a-2mic"; > > + > > + audio-routing = > > + "Headphone Jack", "HPOL", > > + "Headphone Jack", "HPOR"; > > + > > + #address-cells = <1>; > > + #size-cells = <0>; > > + > > + dmic-gpios = <&tlmm 86 0>; > > Do we really need another example for this? Can't you just add it to the > existing example? I think just keep One example. I will remove the example2 and put dmic-gpios = <&tlmm 86 0>; in the first example and modify the model from "sc7180-rt5682-max98357a-1mic" to "sc7180-rt5682-max98357a-2mic". It looks clear. > > > + > > + dai-link@0 { > > + link-name = "MultiMedia0"; > > + reg = <0>; > > + cpu { > > + sound-dai = <&lpass_cpu 0>; > > + }; > > + > > + codec { > > + sound-dai = <&alc5682 0>; > > + }; > > + }; > > + > > + dai-link@1 { > > + link-name = "MultiMedia1"; > > + reg = <1>; > > + cpu { > > + sound-dai = <&lpass_cpu 1>; > > + }; > > + > > + codec { > > + sound-dai = <&max98357a>; > > + }; > > + }; > > + > > + dai-link@2 { > > + link-name = "MultiMedia2"; > > + reg = <2>; > > + cpu { > > + sound-dai = <&lpass_hdmi 0>; > > + }; > > + > > + codec { > > + sound-dai = <&msm_dp>; > > + }; > > + }; > > + }; > > + > > +... > > -- > > 2.25.1 > > ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v5 2/2] ASoC: qcom: sc7180: Modify machine driver for 2mic 2020-11-03 10:30 [PATCH v5 0/2] Modify documentation and machine driver for SC7180 sound card Ajye Huang 2020-11-03 10:30 ` [PATCH v5 1/2] ASoC: google: dt-bindings: modify machine bindings for two MICs case Ajye Huang @ 2020-11-03 10:30 ` Ajye Huang 1 sibling, 0 replies; 6+ messages in thread From: Ajye Huang @ 2020-11-03 10:30 UTC (permalink / raw) To: linux-kernel Cc: Mark Brown, Rohit kumar, Banajit Goswami, Patrick Lai, Srinivasa Rao Mandadapu, srinivas.kandagatla, Andy Gross, Bjorn Andersson, Liam Girdwood, Rob Herring, Jaroslav Kysela, cychiang, tzungbi, dianders, linux-arm-kernel, linux-arm-msm, devicetree, alsa-devel, Ajye Huang, Tzung-Bi Shih In addition, having mixer control to switch between DMICs by using "dmic-gpios" property. Refer to this one as an example, commit b7a742cff3f6 ("ASoC: AMD: Use mixer control to switch between DMICs") Signed-off-by: Ajye Huang <ajye_huang@compal.corp-partner.google.com> Reviewed-by: Tzung-Bi Shih <tzungbi@google.com> --- sound/soc/qcom/sc7180.c | 61 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/sound/soc/qcom/sc7180.c b/sound/soc/qcom/sc7180.c index b391f64c3a80..455d3f2b8ce8 100644 --- a/sound/soc/qcom/sc7180.c +++ b/sound/soc/qcom/sc7180.c @@ -5,6 +5,8 @@ // sc7180.c -- ALSA SoC Machine driver for SC7180 #include <dt-bindings/sound/sc7180-lpass.h> +#include <linux/gpio.h> +#include <linux/gpio/consumer.h> #include <linux/module.h> #include <linux/of_device.h> #include <linux/platform_device.h> @@ -28,6 +30,8 @@ struct sc7180_snd_data { u32 pri_mi2s_clk_count; struct snd_soc_jack hs_jack; struct snd_soc_jack hdmi_jack; + struct gpio_desc *dmic_sel; + int dmic_switch; }; static void sc7180_jack_free(struct snd_jack *jack) @@ -169,6 +173,27 @@ static int sc7180_snd_startup(struct snd_pcm_substream *substream) return 0; } +static int dmic_get(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct snd_soc_dapm_context *dapm = snd_soc_dapm_kcontrol_dapm(kcontrol); + struct sc7180_snd_data *data = snd_soc_card_get_drvdata(dapm->card); + + ucontrol->value.integer.value[0] = data->dmic_switch; + return 0; +} + +static int dmic_set(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct snd_soc_dapm_context *dapm = snd_soc_dapm_kcontrol_dapm(kcontrol); + struct sc7180_snd_data *data = snd_soc_card_get_drvdata(dapm->card); + + data->dmic_switch = ucontrol->value.integer.value[0]; + gpiod_set_value(data->dmic_sel, data->dmic_switch); + return 0; +} + static void sc7180_snd_shutdown(struct snd_pcm_substream *substream) { struct snd_soc_pcm_runtime *rtd = substream->private_data; @@ -206,6 +231,30 @@ static const struct snd_soc_dapm_widget sc7180_snd_widgets[] = { SND_SOC_DAPM_MIC("Headset Mic", NULL), }; +static const char * const dmic_mux_text[] = { + "Front Mic", + "Rear Mic", +}; + +static SOC_ENUM_SINGLE_DECL(sc7180_dmic_enum, + SND_SOC_NOPM, 0, dmic_mux_text); + +static const struct snd_kcontrol_new sc7180_dmic_mux_control = + SOC_DAPM_ENUM_EXT("DMIC Select Mux", sc7180_dmic_enum, + dmic_get, dmic_set); + +static const struct snd_soc_dapm_widget sc7180_snd_dual_mic_widgets[] = { + SND_SOC_DAPM_HP("Headphone Jack", NULL), + SND_SOC_DAPM_MIC("Headset Mic", NULL), + SND_SOC_DAPM_MIC("DMIC", NULL), + SND_SOC_DAPM_MUX("Dmic Mux", SND_SOC_NOPM, 0, 0, &sc7180_dmic_mux_control), +}; + +static const struct snd_soc_dapm_route sc7180_snd_dual_mic_audio_route[] = { + {"Dmic Mux", "Front Mic", "DMIC"}, + {"Dmic Mux", "Rear Mic", "DMIC"}, +}; + static void sc7180_add_ops(struct snd_soc_card *card) { struct snd_soc_dai_link *link; @@ -238,6 +287,18 @@ static int sc7180_snd_platform_probe(struct platform_device *pdev) card->dapm_widgets = sc7180_snd_widgets; card->num_dapm_widgets = ARRAY_SIZE(sc7180_snd_widgets); + if (of_property_read_bool(dev->of_node, "dmic-gpios")) { + card->dapm_widgets = sc7180_snd_dual_mic_widgets, + card->num_dapm_widgets = ARRAY_SIZE(sc7180_snd_dual_mic_widgets), + card->dapm_routes = sc7180_snd_dual_mic_audio_route, + card->num_dapm_routes = ARRAY_SIZE(sc7180_snd_dual_mic_audio_route), + data->dmic_sel = devm_gpiod_get(&pdev->dev, "dmic", GPIOD_OUT_LOW); + if (IS_ERR(data->dmic_sel)) { + dev_err(&pdev->dev, "DMIC gpio failed err=%ld\n", PTR_ERR(data->dmic_sel)); + return PTR_ERR(data->dmic_sel); + } + } + ret = qcom_snd_parse_of(card); if (ret) return ret; -- 2.25.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-11-06 3:48 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-11-03 10:30 [PATCH v5 0/2] Modify documentation and machine driver for SC7180 sound card Ajye Huang 2020-11-03 10:30 ` [PATCH v5 1/2] ASoC: google: dt-bindings: modify machine bindings for two MICs case Ajye Huang 2020-11-03 10:36 ` Ajye Huang 2020-11-05 18:43 ` Rob Herring 2020-11-06 3:48 ` Ajye Huang 2020-11-03 10:30 ` [PATCH v5 2/2] ASoC: qcom: sc7180: Modify machine driver for 2mic Ajye Huang
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).