* [PATCH v2 0/2] Modify documentation and machine driver for SC7180 sound card @ 2020-10-30 7:57 Ajye Huang 2020-10-30 7:57 ` [PATCH v2 1/2] ASoC: google: dt-bindings: modify machine bindings for two MICs case Ajye Huang 2020-10-30 7:57 ` [PATCH v2 2/2] ASoC: qcom: sc7180: Modify machine driver for 2mic Ajye Huang 0 siblings, 2 replies; 7+ messages in thread From: Ajye Huang @ 2020-10-30 7:57 UTC (permalink / raw) To: linux-kernel Cc: dianders, devicetree, alsa-devel, Banajit Goswami, Srinivasa Rao Mandadapu, Liam Girdwood, linux-arm-msm, Patrick Lai, Ajye Huang, Andy Gross, Rob Herring, Bjorn Andersson, Mark Brown, Rohit kumar, tzungbi, srinivas.kandagatla, linux-arm-kernel, cychiang Note: - The patch is made by the collaboration of Ajye Huang <ajye_huang@compal.corp-partner.google.com> Cheng-Yi Chiang <cychiang@chromium.org> Changes from v1 to v2: - Ducumentation: 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 | 59 +++++++++++++++++++ 2 files changed, 117 insertions(+) -- 2.25.1 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 1/2] ASoC: google: dt-bindings: modify machine bindings for two MICs case 2020-10-30 7:57 [PATCH v2 0/2] Modify documentation and machine driver for SC7180 sound card Ajye Huang @ 2020-10-30 7:57 ` Ajye Huang 2020-10-30 7:57 ` [PATCH v2 2/2] ASoC: qcom: sc7180: Modify machine driver for 2mic Ajye Huang 1 sibling, 0 replies; 7+ messages in thread From: Ajye Huang @ 2020-10-30 7:57 UTC (permalink / raw) To: linux-kernel Cc: dianders, devicetree, alsa-devel, Banajit Goswami, Srinivasa Rao Mandadapu, Liam Girdwood, linux-arm-msm, Patrick Lai, Ajye Huang, Andy Gross, Rob Herring, Bjorn Andersson, Mark Brown, Rohit kumar, tzungbi, srinivas.kandagatla, linux-arm-kernel, cychiang 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] 7+ messages in thread
* [PATCH v2 2/2] ASoC: qcom: sc7180: Modify machine driver for 2mic 2020-10-30 7:57 [PATCH v2 0/2] Modify documentation and machine driver for SC7180 sound card Ajye Huang 2020-10-30 7:57 ` [PATCH v2 1/2] ASoC: google: dt-bindings: modify machine bindings for two MICs case Ajye Huang @ 2020-10-30 7:57 ` Ajye Huang 2020-10-30 9:23 ` Tzung-Bi Shih 1 sibling, 1 reply; 7+ messages in thread From: Ajye Huang @ 2020-10-30 7:57 UTC (permalink / raw) To: linux-kernel Cc: dianders, devicetree, alsa-devel, Banajit Goswami, Srinivasa Rao Mandadapu, Liam Girdwood, linux-arm-msm, Patrick Lai, Ajye Huang, Andy Gross, Rob Herring, Bjorn Andersson, Mark Brown, Rohit kumar, tzungbi, srinivas.kandagatla, linux-arm-kernel, cychiang 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> --- sound/soc/qcom/sc7180.c | 59 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/sound/soc/qcom/sc7180.c b/sound/soc/qcom/sc7180.c index b391f64c3a80..e9366bb5f3c2 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> @@ -23,6 +25,9 @@ #define DRIVER_NAME "SC7180" +static struct gpio_desc *dmic_sel; +static int dmic_switch; + struct sc7180_snd_data { struct snd_soc_card card; u32 pri_mi2s_clk_count; @@ -169,6 +174,23 @@ 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) +{ + ucontrol->value.integer.value[0] = dmic_switch; + return 0; +} + +static int dmic_set(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + if (dmic_sel) { + dmic_switch = ucontrol->value.integer.value[0]; + gpiod_set_value(dmic_sel, 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 +228,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 +284,19 @@ 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), + dmic_sel = devm_gpiod_get(&pdev->dev, "dmic", GPIOD_OUT_LOW); + if (IS_ERR(dmic_sel)) { + dev_err(&pdev->dev, "DMIC gpio failed err=%d\n", + PTR_ERR(dmic_sel)); + return PTR_ERR(dmic_sel); + } + } + ret = qcom_snd_parse_of(card); if (ret) return ret; -- 2.25.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v2 2/2] ASoC: qcom: sc7180: Modify machine driver for 2mic 2020-10-30 7:57 ` [PATCH v2 2/2] ASoC: qcom: sc7180: Modify machine driver for 2mic Ajye Huang @ 2020-10-30 9:23 ` Tzung-Bi Shih 2020-10-30 10:55 ` Ajye Huang 0 siblings, 1 reply; 7+ messages in thread From: Tzung-Bi Shih @ 2020-10-30 9:23 UTC (permalink / raw) To: Ajye Huang Cc: Douglas Anderson, open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS, ALSA development, Banajit Goswami, Srinivasa Rao Mandadapu, Liam Girdwood, linux-arm-msm, Patrick Lai, Ajye Huang, Linux Kernel Mailing List, Rob Herring, Bjorn Andersson, Mark Brown, Rohit kumar, Andy Gross, Tzung-Bi Shih, Srini Kandagatla, moderated list:ARM/Mediatek SoC support, Cheng-Yi Chiang On Fri, Oct 30, 2020 at 3:57 PM Ajye Huang <ajye.huang@gmail.com> wrote: > +static struct gpio_desc *dmic_sel; > +static int dmic_switch; If you really need them, you should put them in struct sc7180_snd_data. > +static int dmic_set(struct snd_kcontrol *kcontrol, > + struct snd_ctl_elem_value *ucontrol) > +{ > + if (dmic_sel) { if (IS_ERR(dmic_sel)) But I think you don't need to check dmic_sel. Suppose your _probe() already returned error, the code here shouldn't be called. > + dmic_switch = ucontrol->value.integer.value[0]; Looks like it can be a local variable. You don't need to save dmic_switch. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 2/2] ASoC: qcom: sc7180: Modify machine driver for 2mic 2020-10-30 9:23 ` Tzung-Bi Shih @ 2020-10-30 10:55 ` Ajye Huang 2020-10-30 11:19 ` Tzung-Bi Shih 0 siblings, 1 reply; 7+ messages in thread From: Ajye Huang @ 2020-10-30 10:55 UTC (permalink / raw) To: Tzung-Bi Shih Cc: Douglas Anderson, open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS, ALSA development, Banajit Goswami, Srinivasa Rao Mandadapu, Liam Girdwood, Ajye Huang, Patrick Lai, Linux Kernel Mailing List, Rob Herring, Bjorn Andersson, Mark Brown, Rohit kumar, Andy Gross, Tzung-Bi Shih, linux-arm-msm, Srini Kandagatla, moderated list:ARM/Mediatek SoC support, Cheng-Yi Chiang On Fri, Oct 30, 2020 at 5:23 PM Tzung-Bi Shih <tzungbi@google.com> wrote: > > On Fri, Oct 30, 2020 at 3:57 PM Ajye Huang <ajye.huang@gmail.com> wrote: > > +static struct gpio_desc *dmic_sel; > > +static int dmic_switch; > > If you really need them, you should put them in struct sc7180_snd_data. > Thank you, I will do it. > > +static int dmic_set(struct snd_kcontrol *kcontrol, > > + struct snd_ctl_elem_value *ucontrol) > > +{ > > + if (dmic_sel) { > > if (IS_ERR(dmic_sel)) > But I think you don't need to check dmic_sel. Suppose your _probe() > already returned error, the code here shouldn't be called. > OK, I will remove the discriminant if (dmic_sel) { > > + dmic_switch = ucontrol->value.integer.value[0]; > > Looks like it can be a local variable. You don't need to save dmic_switch. But dmic_get() will need dmic_switch, should i keep dmic_switch? static int dmic_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { ucontrol->value.integer.value[0] = dmic_switch; return 0; } ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 2/2] ASoC: qcom: sc7180: Modify machine driver for 2mic 2020-10-30 10:55 ` Ajye Huang @ 2020-10-30 11:19 ` Tzung-Bi Shih 2020-11-02 5:06 ` ajye huang 0 siblings, 1 reply; 7+ messages in thread From: Tzung-Bi Shih @ 2020-10-30 11:19 UTC (permalink / raw) To: Ajye Huang Cc: Douglas Anderson, open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS, ALSA development, Banajit Goswami, Srinivasa Rao Mandadapu, Liam Girdwood, Ajye Huang, Patrick Lai, Linux Kernel Mailing List, Rob Herring, Bjorn Andersson, Mark Brown, Rohit kumar, Andy Gross, Tzung-Bi Shih, linux-arm-msm, Srini Kandagatla, moderated list:ARM/Mediatek SoC support, Cheng-Yi Chiang On Fri, Oct 30, 2020 at 6:55 PM Ajye Huang <ajye_huang@compal.corp-partner.google.com> wrote: > But dmic_get() will need dmic_switch, should i keep dmic_switch? I see. I overlooked it. You can keep the dmic_switch for this purpose or just call gpiod_get_value_cansleep(). ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 2/2] ASoC: qcom: sc7180: Modify machine driver for 2mic 2020-10-30 11:19 ` Tzung-Bi Shih @ 2020-11-02 5:06 ` ajye huang 0 siblings, 0 replies; 7+ messages in thread From: ajye huang @ 2020-11-02 5:06 UTC (permalink / raw) To: Tzung-Bi Shih Cc: Douglas Anderson, open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS, ALSA development, Banajit Goswami, Srinivasa Rao Mandadapu, Liam Girdwood, linux-arm-msm, Patrick Lai, Linux Kernel Mailing List, Rob Herring, Bjorn Andersson, Mark Brown, Rohit kumar, Andy Gross, Tzung-Bi Shih, Srini Kandagatla, Ajye Huang, moderated list:ARM/Mediatek SoC support, Cheng-Yi Chiang Hi, Tzung-Bi I will release v3 version base on your suggestion Thank you for your reply Ajye Tzung-Bi Shih <tzungbi@google.com> 於 2020年10月30日 週五 下午7:19寫道: > > On Fri, Oct 30, 2020 at 6:55 PM Ajye Huang > <ajye_huang@compal.corp-partner.google.com> wrote: > > But dmic_get() will need dmic_switch, should i keep dmic_switch? > > I see. I overlooked it. You can keep the dmic_switch for this > purpose or just call gpiod_get_value_cansleep(). ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2020-11-02 5:07 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-10-30 7:57 [PATCH v2 0/2] Modify documentation and machine driver for SC7180 sound card Ajye Huang 2020-10-30 7:57 ` [PATCH v2 1/2] ASoC: google: dt-bindings: modify machine bindings for two MICs case Ajye Huang 2020-10-30 7:57 ` [PATCH v2 2/2] ASoC: qcom: sc7180: Modify machine driver for 2mic Ajye Huang 2020-10-30 9:23 ` Tzung-Bi Shih 2020-10-30 10:55 ` Ajye Huang 2020-10-30 11:19 ` Tzung-Bi Shih 2020-11-02 5:06 ` 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).