From nobody Wed Apr 8 17:29:45 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 08A63C38A02 for ; Fri, 28 Oct 2022 10:25:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229826AbiJ1KZo (ORCPT ); Fri, 28 Oct 2022 06:25:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53040 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230385AbiJ1KZZ (ORCPT ); Fri, 28 Oct 2022 06:25:25 -0400 Received: from mail-oi1-x22b.google.com (mail-oi1-x22b.google.com [IPv6:2607:f8b0:4864:20::22b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 314C94317A for ; Fri, 28 Oct 2022 03:25:22 -0700 (PDT) Received: by mail-oi1-x22b.google.com with SMTP id p127so5667539oih.9 for ; Fri, 28 Oct 2022 03:25:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=compal-corp-partner-google-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=4ci1NI4rEDngdiIs8klmEEe/VgSVPTbSHjvB1KeT7kI=; b=vOC/xKdMUo642qaKQH78hZIqPpTZUPYnjK3EGVr+0Op2zSKxXyp6TtAf2S3VcbZrba tINVIqD6zWtjOgefgvzhYrG+wmguFT/XM1Tu91Ra4H+kCzYaSWaZWNMHYXXwSxm5AmoJ 4S3b4Q2XUvNUxmtYEmDYVEJ1FmFRAfbPPrD7hfslyblh+6CAgZ5/alZ2pTuRmnfNNg7y xYRShGLqziBYo4JFrwSaF+luHyYRtif7mzPZPc1S5QZ4Yt32W8i1mFzm22+thOC9xI5/ Rk4ZII8CiN5me5xRrH+OoKtbqMnfO5+XayqbfeXAZYRiAoPq2/bT/zECUOzsYNblxX4y 2P7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4ci1NI4rEDngdiIs8klmEEe/VgSVPTbSHjvB1KeT7kI=; b=yo4O7dLum3JcSA9VGBRZ2DKLF4USZqkugtjyLB9Pqmjphbv4p6l8+rBFa3J+b5vHcV ZwI/4u2xp5wd2LpLSBZllB4MB294tAVxdtTRZDggSabXN8TYYR0buhHqLJQBRateubAW 7vwq/XLBYvfPAbqmcD01h6TihXTQ6+Fn3KMzJW1gpQdS5k0gyJlKUIzfudPZX8dCqJ8n ksMn+mvUfvYVCB8sqG1yXucIQxw2yy0uuRkxTg7g3MONJKSpP5jOTSEpilVajQ5lgd1D c/h4d7pCiCbPM595p6MJAKsqzwsnUfsrXKa2YcUqAVkZw8CcHlgSGsiVi7Re8thYSqVF Oxvw== X-Gm-Message-State: ACrzQf3jWnRAnnxTf0ttEt5PYI+jSWEgdcM0OGWxy7zz2oVO59C9ac+3 yETXKcmFJASQGzixS3MfR0IEMQFMWRx46Q== X-Google-Smtp-Source: AMsMyM5p59DDqaMCPQtyBwckPVjxO8rqbMGhs0bxJed+3GQ/ycCvWR71cW2eMf0VHFL+RSgqFw2M1Q== X-Received: by 2002:a17:90b:254c:b0:20a:8a92:ea5b with SMTP id nw12-20020a17090b254c00b0020a8a92ea5bmr15151822pjb.81.1666952710834; Fri, 28 Oct 2022 03:25:10 -0700 (PDT) Received: from localhost.localdomain (118-167-210-30.dynamic-ip.hinet.net. [118.167.210.30]) by smtp.gmail.com with ESMTPSA id o1-20020aa79781000000b0056b6a22d6c9sm2565236pfp.212.2022.10.28.03.25.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Oct 2022 03:25:10 -0700 (PDT) From: Ajye Huang To: linux-kernel@vger.kernel.org Cc: Mark Brown , Liam Girdwood , Krzysztof Kozlowski , Rob Herring , robh@kernel.org, Shengjiu Wang , Charles Keepax , Takashi Iwai , Jaroslav Kysela , Arnaud Pouliquen , Ajye Huang , angelogioacchino.delregno@collabora.corp-partner.google.com, devicetree@vger.kernel.org, alsa-devel@alsa-project.org Subject: [PATCH v1 1/2] ASoC: dt-bindings: Document dmic_sel-gpios optional prop for two DMICs case Date: Fri, 28 Oct 2022 18:24:49 +0800 Message-Id: <20221028102450.1161382-2-ajye_huang@compal.corp-partner.google.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221028102450.1161382-1-ajye_huang@compal.corp-partner.google.com> References: <20221028102450.1161382-1-ajye_huang@compal.corp-partner.google.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Document dmic_sel-gpios optional prop for switching between two DMICs. Ex, the GPIO can control a MUX to select Front or Rear dmic. Signed-off-by: Ajye Huang --- Documentation/devicetree/bindings/sound/dmic-codec.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Documentation/devicetree/bindings/sound/dmic-codec.yaml b/Docu= mentation/devicetree/bindings/sound/dmic-codec.yaml index bba27c985996..4013af65f3e7 100644 --- a/Documentation/devicetree/bindings/sound/dmic-codec.yaml +++ b/Documentation/devicetree/bindings/sound/dmic-codec.yaml @@ -36,6 +36,10 @@ properties: wakeup-delay-ms: description: Delay (in ms) after enabling the DMIC =20 + dmic_sel-gpios: + maxItems: 1 + description: GPIO for switching between DMICs, ex Front/Rear dmic + required: - compatible =20 @@ -48,6 +52,7 @@ examples: dmic { compatible =3D "dmic-codec"; dmicen-gpios =3D <&gpio4 3 GPIO_ACTIVE_HIGH>; + dmic_sel-gpios =3D <&pio 23 GPIO_ACTIVE_HIGH>; num-channels =3D <1>; wakeup-delay-ms =3D <50>; modeswitch-delay-ms =3D <35>; --=20 2.25.1 From nobody Wed Apr 8 17:29:45 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C0B4CECAAA1 for ; Fri, 28 Oct 2022 10:25:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230408AbiJ1KZc (ORCPT ); Fri, 28 Oct 2022 06:25:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52074 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230216AbiJ1KZR (ORCPT ); Fri, 28 Oct 2022 06:25:17 -0400 Received: from mail-pj1-x102b.google.com (mail-pj1-x102b.google.com [IPv6:2607:f8b0:4864:20::102b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3817D3C8F7 for ; Fri, 28 Oct 2022 03:25:15 -0700 (PDT) Received: by mail-pj1-x102b.google.com with SMTP id r61-20020a17090a43c300b00212f4e9cccdso9408153pjg.5 for ; Fri, 28 Oct 2022 03:25:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=compal-corp-partner-google-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=mUsj9+u75ZiURBRDbzjBcZDwYbW7xC+xuux1Bvrvp1o=; b=m/UP4fu4PKx43aYhlz2Rp68oxaguB66SWgjhBVhkhTHKdqmEwNzyWVWP/JjKj9e9MR Y9NbqLdrh6vosMJkx4/BbPjlDdoTGOSbLf9YlskUdi2tRYgX1g1CvzAuVyoCi0VkzXRC YiJikNgpdC5EnHKpbrhHNkk119Nj3DFsGsE6w+TjxTdDz+6HVs67iFL9qP8jyjb/AORE f3P+EGHaIc/diGpmmYEz4CycVYZSvEao+8SdiHCuSm9vC6VKyCeNUY/bjUA93jagvckf 3An73/Dpsb6QM8WHQVPgptVGjG3555ilgw6nCH2As9aTzF5lO+bKWqXlNOhd+iiecq/a GB6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=mUsj9+u75ZiURBRDbzjBcZDwYbW7xC+xuux1Bvrvp1o=; b=ABevo+c5vf3ygOnJjrC2CL3b/QdP6sNQfcKTL8Q/iDBFBbgYo+gzMp5qhBZVPH7xlr SDodKBlnvnNvapDbxqgROU44WJKJSeEuphJnfNspOgH6yKuXMF+fiU/xi99H2LG2QLLF vrWdnf8Z9/f97Mylglj6kDFreCTf1MOjx93ATSF3ZLIApQyyfmYwD0UTESnlAQRNNqyv ewWwX1pX5Mcio0kri3hse2l9NuCF99sbUKw7z4XljDOcj7lxyeugsiuiDdidWLS3+B6r SwAYC3iXi5hrg2RVmCPOenOYkQmrDTcAgpMg8AJLj5sQUPXPmzh/8WiiBkbFAms2QTCV fM4w== X-Gm-Message-State: ACrzQf0mMVr+6YkE5FhWWTEH1V9O3lxNSizAsBWFGO5yoQ+zJu1hKIo1 bA3C8usF2Cbj+aj30wbbbuA0wWU+VvNdwg== X-Google-Smtp-Source: AMsMyM5PF+mfGpOT7qE4MUpscnGJjWoxwCDcOj+0J2CfXJVc05btTeWq4lG3ZKUCtFYAksnUSFF5Nw== X-Received: by 2002:a17:902:bd8e:b0:178:25ab:56cc with SMTP id q14-20020a170902bd8e00b0017825ab56ccmr53514796pls.86.1666952715118; Fri, 28 Oct 2022 03:25:15 -0700 (PDT) Received: from localhost.localdomain (118-167-210-30.dynamic-ip.hinet.net. [118.167.210.30]) by smtp.gmail.com with ESMTPSA id o1-20020aa79781000000b0056b6a22d6c9sm2565236pfp.212.2022.10.28.03.25.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Oct 2022 03:25:14 -0700 (PDT) From: Ajye Huang To: linux-kernel@vger.kernel.org Cc: Mark Brown , Liam Girdwood , Krzysztof Kozlowski , Rob Herring , robh@kernel.org, Shengjiu Wang , Charles Keepax , Takashi Iwai , Jaroslav Kysela , Arnaud Pouliquen , Ajye Huang , angelogioacchino.delregno@collabora.corp-partner.google.com, devicetree@vger.kernel.org, alsa-devel@alsa-project.org Subject: [PATCH v1 2/2] ASoC: dmic: Add optional dmic selection Date: Fri, 28 Oct 2022 18:24:50 +0800 Message-Id: <20221028102450.1161382-3-ajye_huang@compal.corp-partner.google.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221028102450.1161382-1-ajye_huang@compal.corp-partner.google.com> References: <20221028102450.1161382-1-ajye_huang@compal.corp-partner.google.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" 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_sel-gpios" property is used for a mixer control to switch the dmic signal source between the Front and Rear Dmic. usage: amixer -c0 cset name=3D'Dmic Mux' 'FrontMic' usage: amixer -c0 cset name=3D'Dmic Mux' 'RearMic' Refer to this one as an example, commit 3cfbf07c6d27 ("ASoC: qcom: sc7180: Modify machine driver for 2mic") Signed-off-by: Ajye Huang --- sound/soc/codecs/dmic.c | 52 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/sound/soc/codecs/dmic.c b/sound/soc/codecs/dmic.c index 4fd6f97e5a49..5c56fbcdb3e6 100644 --- a/sound/soc/codecs/dmic.c +++ b/sound/soc/codecs/dmic.c @@ -28,8 +28,50 @@ struct dmic { int wakeup_delay; /* Delay after DMIC mode switch */ int modeswitch_delay; + struct gpio_desc *dmic_sel; + int dmic_switch; }; =20 +static int dmic_sel_get(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct snd_soc_dapm_context *dapm =3D snd_soc_dapm_kcontrol_dapm(kcontrol= ); + struct snd_soc_component *component =3D snd_soc_dapm_to_component(dapm); + struct dmic *dmic =3D snd_soc_component_get_drvdata(component); + + ucontrol->value.integer.value[0] =3D dmic->dmic_switch; + return 0; +} + +static int dmic_sel_set(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct snd_soc_dapm_context *dapm =3D snd_soc_dapm_kcontrol_dapm(kcontrol= ); + struct snd_soc_component *component =3D snd_soc_dapm_to_component(dapm); + struct dmic *dmic =3D snd_soc_component_get_drvdata(component); + + dmic->dmic_switch =3D ucontrol->value.integer.value[0]; + if (dmic->dmic_sel) { + gpiod_set_value(dmic->dmic_sel, dmic->dmic_switch); + dev_info(dapm->dev, "%s value %d\n", __func__, dmic->dmic_switch); + } else + dev_info(dapm->dev, "%s without dmic_sel-gpios\n", __func__); + + return 0; +} + +static const char * const dmic_mux_text[] =3D { + "FrontMic", + "RearMic", +}; + +static SOC_ENUM_SINGLE_DECL(dmic_enum, + SND_SOC_NOPM, 0, dmic_mux_text); + +static const struct snd_kcontrol_new dmic_mux_control =3D + SOC_DAPM_ENUM_EXT("DMIC Select Mux", dmic_enum, + dmic_sel_get, dmic_sel_set); + static int dmic_daiops_trigger(struct snd_pcm_substream *substream, int cmd, struct snd_soc_dai *dai) { @@ -115,6 +157,11 @@ static int dmic_component_probe(struct snd_soc_compone= nt *component) if (dmic->modeswitch_delay > MAX_MODESWITCH_DELAY) dmic->modeswitch_delay =3D MAX_MODESWITCH_DELAY; =20 + dmic->dmic_sel =3D devm_gpiod_get_optional(component->dev, + "dmic_sel", GPIOD_OUT_LOW); + if (IS_ERR(dmic->dmic_sel)) + return PTR_ERR(dmic->dmic_sel); + snd_soc_component_set_drvdata(component, dmic); =20 return 0; @@ -125,10 +172,15 @@ static const struct snd_soc_dapm_widget dmic_dapm_wid= gets[] =3D { SND_SOC_NOPM, 0, 0, dmic_aif_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_INPUT("DMic"), + SND_SOC_DAPM_MIC("DMIC", NULL), + SND_SOC_DAPM_MUX("Dmic Mux", SND_SOC_NOPM, 0, 0, &dmic_mux_control), }; =20 static const struct snd_soc_dapm_route intercon[] =3D { {"DMIC AIF", NULL, "DMic"}, + /* digital mics */ + {"Dmic Mux", "FrontMic", "DMIC"}, + {"Dmic Mux", "RearMic", "DMIC"}, }; =20 static const struct snd_soc_component_driver soc_dmic =3D { --=20 2.25.1