* [PATCH v1 0/2] Modify documentation and machine driver for mt8186_rt1019_rt5682s sound card
@ 2022-10-28 16:07 Ajye Huang
2022-10-28 16:07 ` [PATCH v1 1/2] ASoC: mediatek: dt-bindings: modify machine bindings for two MICs case Ajye Huang
2022-10-28 16:07 ` [PATCH v1 2/2] ASoC: mediatek: mt8186-rt5682: Modify machine driver for two DMICs case Ajye Huang
0 siblings, 2 replies; 5+ messages in thread
From: Ajye Huang @ 2022-10-28 16:07 UTC (permalink / raw)
To: linux-kernel
Cc: Mark Brown, Liam Girdwood, Krzysztof Kozlowski, Rob Herring,
linux-mediatek, chunxu . li, Takashi Iwai, Jaroslav Kysela,
Jiaxin Yu, Matthias Brugger, AngeloGioacchino Del Regno,
Ajye Huang, Nícolas F . R . A . Prado, linux-arm-kernel,
devicetree, alsa-devel
v1:
- Documentation: Add dmic-gpios optional prop for two DMICs case.
- dmic codec driver:
- "dmic-gpios" property is used for amixer control to switch
the dmic signal source between the Front and Rear Dmic.
Thanks for the review!
Ajye Huang (2):
ASoC: mediatek: dt-bindings: modify machine bindings for two MICs case
ASoC: mediatek: mt8186-rt5682: Modify machine driver for two DMICs
case
.../sound/mt8186-mt6366-rt1019-rt5682s.yaml | 6 +
.../mt8186/mt8186-mt6366-rt1019-rt5682s.c | 104 +++++++++++++++++-
2 files changed, 109 insertions(+), 1 deletion(-)
--
2.25.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v1 1/2] ASoC: mediatek: dt-bindings: modify machine bindings for two MICs case
2022-10-28 16:07 [PATCH v1 0/2] Modify documentation and machine driver for mt8186_rt1019_rt5682s sound card Ajye Huang
@ 2022-10-28 16:07 ` Ajye Huang
2022-10-28 16:07 ` [PATCH v1 2/2] ASoC: mediatek: mt8186-rt5682: Modify machine driver for two DMICs case Ajye Huang
1 sibling, 0 replies; 5+ messages in thread
From: Ajye Huang @ 2022-10-28 16:07 UTC (permalink / raw)
To: linux-kernel
Cc: Mark Brown, Liam Girdwood, Krzysztof Kozlowski, Rob Herring,
linux-mediatek, chunxu . li, Takashi Iwai, Jaroslav Kysela,
Jiaxin Yu, Matthias Brugger, AngeloGioacchino Del Regno,
Ajye Huang, Nícolas F . R . A . Prado, linux-arm-kernel,
devicetree, alsa-devel
Add a property "dmic-gpios" for switching between two MICs.
Signed-off-by: Ajye Huang <ajye_huang@compal.corp-partner.google.com>
---
.../bindings/sound/mt8186-mt6366-rt1019-rt5682s.yaml | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/Documentation/devicetree/bindings/sound/mt8186-mt6366-rt1019-rt5682s.yaml b/Documentation/devicetree/bindings/sound/mt8186-mt6366-rt1019-rt5682s.yaml
index 4fc5b045d3cf..212d2982590a 100644
--- a/Documentation/devicetree/bindings/sound/mt8186-mt6366-rt1019-rt5682s.yaml
+++ b/Documentation/devicetree/bindings/sound/mt8186-mt6366-rt1019-rt5682s.yaml
@@ -21,6 +21,10 @@ properties:
$ref: "/schemas/types.yaml#/definitions/phandle"
description: The phandle of MT8186 ASoC platform.
+ dmic-gpios:
+ maxItems: 1
+ description: GPIO for switching between DMICs
+
headset-codec:
type: object
additionalProperties: false
@@ -72,6 +76,8 @@ examples:
pinctrl-0 = <&aud_clk_mosi_off>;
pinctrl-1 = <&aud_clk_mosi_on>;
+ dmic-gpios = <&pio 23 0>;
+
headset-codec {
sound-dai = <&rt5682s>;
};
--
2.25.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v1 2/2] ASoC: mediatek: mt8186-rt5682: Modify machine driver for two DMICs case
2022-10-28 16:07 [PATCH v1 0/2] Modify documentation and machine driver for mt8186_rt1019_rt5682s sound card Ajye Huang
2022-10-28 16:07 ` [PATCH v1 1/2] ASoC: mediatek: dt-bindings: modify machine bindings for two MICs case Ajye Huang
@ 2022-10-28 16:07 ` Ajye Huang
2022-10-28 16:17 ` Mark Brown
1 sibling, 1 reply; 5+ messages in thread
From: Ajye Huang @ 2022-10-28 16:07 UTC (permalink / raw)
To: linux-kernel
Cc: Mark Brown, Liam Girdwood, Krzysztof Kozlowski, Rob Herring,
linux-mediatek, chunxu . li, Takashi Iwai, Jaroslav Kysela,
Jiaxin Yu, Matthias Brugger, AngeloGioacchino Del Regno,
Ajye Huang, Nícolas F . R . A . Prado, linux-arm-kernel,
devicetree, alsa-devel
Having two DMICs, a front DMIC and a Rear DMIC,
but only host audio input AUX port0 is used for these two Dmics.
A "dmic-gpios" property is used for a mixer control to switch
the dmic signal source between the Front and Rear Dmic.
Refer to this one as an example,
commit 3cfbf07c6d27
("ASoC: qcom: sc7180: Modify machine driver for 2mic")
Signed-off-by: Ajye Huang <ajye_huang@compal.corp-partner.google.com>
---
.../mt8186/mt8186-mt6366-rt1019-rt5682s.c | 104 +++++++++++++++++-
1 file changed, 103 insertions(+), 1 deletion(-)
diff --git a/sound/soc/mediatek/mt8186/mt8186-mt6366-rt1019-rt5682s.c b/sound/soc/mediatek/mt8186/mt8186-mt6366-rt1019-rt5682s.c
index 2414c5b77233..7190a60300a1 100644
--- a/sound/soc/mediatek/mt8186/mt8186-mt6366-rt1019-rt5682s.c
+++ b/sound/soc/mediatek/mt8186/mt8186-mt6366-rt1019-rt5682s.c
@@ -7,6 +7,8 @@
// Author: Jiaxin Yu <jiaxin.yu@mediatek.com>
//
+#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
#include <linux/input.h>
#include <linux/module.h>
#include <linux/of_device.h>
@@ -39,6 +41,8 @@
struct mt8186_mt6366_rt1019_rt5682s_priv {
struct snd_soc_jack headset_jack, hdmi_jack;
+ struct gpio_desc *dmic_sel;
+ int dmic_switch;
};
/* Headset jack detection DAPM pins */
@@ -68,6 +72,94 @@ static struct snd_soc_codec_conf mt8186_mt6366_rt1019_rt5682s_codec_conf[] = {
},
};
+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 mtk_soc_card_data *soc_card_data =
+ snd_soc_card_get_drvdata(dapm->card);
+ struct mt8186_mt6366_rt1019_rt5682s_priv *priv = soc_card_data->mach_priv;
+
+ ucontrol->value.integer.value[0] = priv->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 mtk_soc_card_data *soc_card_data =
+ snd_soc_card_get_drvdata(dapm->card);
+ struct mt8186_mt6366_rt1019_rt5682s_priv *priv = soc_card_data->mach_priv;
+
+ priv->dmic_switch = ucontrol->value.integer.value[0];
+ if (priv->dmic_sel) {
+ gpiod_set_value(priv->dmic_sel, priv->dmic_switch);
+ dev_info(dapm->card->dev, "dmic_set_value %d\n",
+ priv->dmic_switch);
+ }
+ return 0;
+}
+
+static const char * const dmic_mux_text[] = {
+ "FrontMic",
+ "RearMic",
+};
+
+static SOC_ENUM_SINGLE_DECL(mt8186_dmic_enum,
+ SND_SOC_NOPM, 0, dmic_mux_text);
+
+static const struct snd_kcontrol_new mt8186_dmic_mux_control =
+ SOC_DAPM_ENUM_EXT("DMIC Select Mux", mt8186_dmic_enum,
+ dmic_get, dmic_set);
+
+static const struct snd_soc_dapm_widget dmic_widgets[] = {
+ SND_SOC_DAPM_MIC("DMIC", NULL),
+ SND_SOC_DAPM_MUX("Dmic Mux", SND_SOC_NOPM, 0, 0, &mt8186_dmic_mux_control),
+};
+
+static const struct snd_soc_dapm_route dmic_map[] = {
+ /* digital mics */
+ {"Dmic Mux", "FrontMic", "DMIC"},
+ {"Dmic Mux", "RearMic", "DMIC"},
+};
+
+static int primary_codec_init(struct snd_soc_pcm_runtime *rtd)
+{
+ struct snd_soc_card *card = rtd->card;
+ struct mtk_soc_card_data *soc_card_data = snd_soc_card_get_drvdata(card);
+ struct mt8186_mt6366_rt1019_rt5682s_priv *priv = soc_card_data->mach_priv;
+ int ret;
+
+ ret = mt8186_mt6366_init(rtd);
+
+ if (ret) {
+ dev_err(card->dev, "mt8186_mt6366_init failed: %d\n", ret);
+ return ret;
+ }
+
+ if (!priv->dmic_sel) {
+ dev_info(card->dev, "dmic_sel is null\n");
+ return ret;
+ }
+
+ ret = snd_soc_dapm_new_controls(&card->dapm, dmic_widgets,
+ ARRAY_SIZE(dmic_widgets));
+ if (ret) {
+ dev_err(card->dev, "DMic widget addition failed: %d\n", ret);
+ /* Don't need to add routes if widget addition failed */
+ return ret;
+ }
+
+ ret = snd_soc_dapm_add_routes(&card->dapm, dmic_map,
+ ARRAY_SIZE(dmic_map));
+
+ if (ret)
+ dev_err(card->dev, "DMic map addition failed: %d\n", ret);
+
+ return ret;
+}
+
static int mt8186_rt5682s_init(struct snd_soc_pcm_runtime *rtd)
{
struct snd_soc_component *cmpnt_afe =
@@ -775,7 +867,7 @@ static struct snd_soc_dai_link mt8186_mt6366_rt1019_rt5682s_dai_links[] = {
.dpcm_playback = 1,
.dpcm_capture = 1,
.ignore_suspend = 1,
- .init = mt8186_mt6366_init,
+ .init = primary_codec_init,
SND_SOC_DAILINK_REG(adda),
},
{
@@ -1015,6 +1107,16 @@ static int mt8186_mt6366_rt1019_rt5682s_dev_probe(struct platform_device *pdev)
soc_card_data->mach_priv = mach_priv;
+ if (of_property_read_bool(pdev->dev.of_node, "dmic-gpios")) {
+ mach_priv->dmic_sel = devm_gpiod_get_optional(&pdev->dev,
+ "dmic", GPIOD_OUT_LOW);
+ if (IS_ERR(mach_priv->dmic_sel)) {
+ dev_err(&pdev->dev, "DMIC gpio failed err=%ld\n",
+ PTR_ERR(mach_priv->dmic_sel));
+ return PTR_ERR(mach_priv->dmic_sel);
+ }
+ }
+
adsp_node = of_parse_phandle(pdev->dev.of_node, "mediatek,adsp", 0);
if (adsp_node) {
struct mtk_sof_priv *sof_priv;
--
2.25.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v1 2/2] ASoC: mediatek: mt8186-rt5682: Modify machine driver for two DMICs case
2022-10-28 16:07 ` [PATCH v1 2/2] ASoC: mediatek: mt8186-rt5682: Modify machine driver for two DMICs case Ajye Huang
@ 2022-10-28 16:17 ` Mark Brown
2022-10-28 16:52 ` Ajye Huang
0 siblings, 1 reply; 5+ messages in thread
From: Mark Brown @ 2022-10-28 16:17 UTC (permalink / raw)
To: Ajye Huang
Cc: linux-kernel, Liam Girdwood, Krzysztof Kozlowski, Rob Herring,
linux-mediatek, chunxu . li, Takashi Iwai, Jaroslav Kysela,
Jiaxin Yu, Matthias Brugger, AngeloGioacchino Del Regno,
Nícolas F . R . A . Prado, linux-arm-kernel, devicetree,
alsa-devel
[-- Attachment #1: Type: text/plain, Size: 1047 bytes --]
On Sat, Oct 29, 2022 at 12:07:33AM +0800, Ajye Huang wrote:
> +static const char * const dmic_mux_text[] = {
> + "FrontMic",
> + "RearMic",
> +};
> + ret = snd_soc_dapm_new_controls(&card->dapm, dmic_widgets,
> + ARRAY_SIZE(dmic_widgets));
> + if (ret) {
> + dev_err(card->dev, "DMic widget addition failed: %d\n", ret);
> + /* Don't need to add routes if widget addition failed */
> + return ret;
> + }
> + if (of_property_read_bool(pdev->dev.of_node, "dmic-gpios")) {
> + mach_priv->dmic_sel = devm_gpiod_get_optional(&pdev->dev,
> + "dmic", GPIOD_OUT_LOW);
My prior comments about it being nicer to make the addition of the
control depend on the property being there and the description of the
options configurable do stand (I appreciate that the other driver might
not have done this which was probably an oversight).
Also do we really need the of_property_read_bool() there? I'd have
expected that devm_gpiod_get_optional() would be handling that for us.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v1 2/2] ASoC: mediatek: mt8186-rt5682: Modify machine driver for two DMICs case
2022-10-28 16:17 ` Mark Brown
@ 2022-10-28 16:52 ` Ajye Huang
0 siblings, 0 replies; 5+ messages in thread
From: Ajye Huang @ 2022-10-28 16:52 UTC (permalink / raw)
To: Mark Brown
Cc: linux-kernel, Liam Girdwood, Krzysztof Kozlowski, Rob Herring,
linux-mediatek, chunxu . li, Takashi Iwai, Jaroslav Kysela,
Jiaxin Yu, Matthias Brugger, AngeloGioacchino Del Regno,
Nícolas F . R . A . Prado, linux-arm-kernel, devicetree,
alsa-devel
Hi Mark Brown,
On Sat, Oct 29, 2022 at 12:17 AM Mark Brown <broonie@kernel.org> wrote:
> Also do we really need the of_property_read_bool() there? I'd have
> expected that devm_gpiod_get_optional() would be handling that for us.
You are right, it is unnecessary to use of_property_read_bool() there
, I will remove and send the v2 version, thank you.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2022-10-28 16:52 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-10-28 16:07 [PATCH v1 0/2] Modify documentation and machine driver for mt8186_rt1019_rt5682s sound card Ajye Huang
2022-10-28 16:07 ` [PATCH v1 1/2] ASoC: mediatek: dt-bindings: modify machine bindings for two MICs case Ajye Huang
2022-10-28 16:07 ` [PATCH v1 2/2] ASoC: mediatek: mt8186-rt5682: Modify machine driver for two DMICs case Ajye Huang
2022-10-28 16:17 ` Mark Brown
2022-10-28 16:52 ` 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).