[PATCH v6 0/2] Modify documentation and machine driver for SC7180 sound card
Note: - The patch is made by the collaboration of Ajye Huang ajye_huang@compal.corp-partner.google.com Cheng-Yi Chiang cychiang@chromium.org
v6: - Documentation: Addressed suggestions from Rob Herring. - Define "maxItems: 1" in dmic-gpios property. - Only keep one example and add dmic-gpios property in. 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 | 8 ++- sound/soc/qcom/sc7180.c | 61 +++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-)
Add a property "dmic-gpios" for switching between two MICs.
Signed-off-by: Ajye Huang ajye_huang@compal.corp-partner.google.com --- .../devicetree/bindings/sound/google,sc7180-trogdor.yaml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/sound/google,sc7180-trogdor.yaml b/Documentation/devicetree/bindings/sound/google,sc7180-trogdor.yaml index efc34689d6b5..ce050a9dec94 100644 --- a/Documentation/devicetree/bindings/sound/google,sc7180-trogdor.yaml +++ b/Documentation/devicetree/bindings/sound/google,sc7180-trogdor.yaml @@ -34,6 +34,10 @@ properties: "#size-cells": const: 0
+ dmic-gpios: + maxItems: 1 + description: GPIO for switching between DMICs + patternProperties: "^dai-link(@[0-9])?$": description: @@ -83,7 +87,7 @@ examples: - | sound { compatible = "google,sc7180-trogdor"; - model = "sc7180-rt5682-max98357a-1mic"; + model = "sc7180-rt5682-max98357a-2mic";
audio-routing = "Headphone Jack", "HPOL", @@ -92,6 +96,8 @@ examples: #address-cells = <1>; #size-cells = <0>;
+ dmic-gpios = <&tlmm 86 0>; + dai-link@0 { link-name = "MultiMedia0"; reg = <0>;
Hi, Rob
I follow your suggests that adding (maxItems: 1) for dmic-gpis property, and keep one example of adding dmic-gpios property in it
Could you please kindly review it ?
Thank you so much Ajye
On Fri, Nov 6, 2020 at 2:14 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
.../devicetree/bindings/sound/google,sc7180-trogdor.yaml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/sound/google,sc7180-trogdor.yaml b/Documentation/devicetree/bindings/sound/google,sc7180-trogdor.yaml index efc34689d6b5..ce050a9dec94 100644 --- a/Documentation/devicetree/bindings/sound/google,sc7180-trogdor.yaml +++ b/Documentation/devicetree/bindings/sound/google,sc7180-trogdor.yaml @@ -34,6 +34,10 @@ properties: "#size-cells": const: 0
- dmic-gpios:
- maxItems: 1
- description: GPIO for switching between DMICs
patternProperties: "^dai-link(@[0-9])?$": description: @@ -83,7 +87,7 @@ examples:
- | sound { compatible = "google,sc7180-trogdor";
model = "sc7180-rt5682-max98357a-1mic";
model = "sc7180-rt5682-max98357a-2mic"; audio-routing = "Headphone Jack", "HPOL",
@@ -92,6 +96,8 @@ examples: #address-cells = <1>; #size-cells = <0>;
dmic-gpios = <&tlmm 86 0>;
dai-link@0 { link-name = "MultiMedia0"; reg = <0>;
-- 2.25.1
On Fri, 06 Nov 2020 14:14:32 +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
.../devicetree/bindings/sound/google,sc7180-trogdor.yaml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
Reviewed-by: Rob Herring robh@kernel.org
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;
Hi, Mark
Could you please kindly review the series patch v6? And may I get your approval if the review is done.
thanks Ajye
On Fri, Nov 6, 2020 at 2:14 PM Ajye Huang ajye.huang@gmail.com wrote:
Note:
- The patch is made by the collaboration of
Ajye Huang ajye_huang@compal.corp-partner.google.com Cheng-Yi Chiang cychiang@chromium.org
v6:
- Documentation: Addressed suggestions from Rob Herring.
- Define "maxItems: 1" in dmic-gpios property.
- Only keep one example and add dmic-gpios property in.
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 | 8 ++- sound/soc/qcom/sc7180.c | 61 +++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-)
-- 2.25.1
On Tue, Nov 10, 2020 at 05:40:40PM +0800, Ajye Huang wrote:
Hi, Mark
Could you please kindly review the series patch v6? And may I get your approval if the review is done.
Please don't send content free pings and please allow a reasonable time for review. People get busy, go on holiday, attend conferences and so on so unless there is some reason for urgency (like critical bug fixes) please allow at least a couple of weeks for review. If there have been review comments then people may be waiting for those to be addressed.
Sending content free pings adds to the mail volume (if they are seen at all) which is often the problem and since they can't be reviewed directly if something has gone wrong you'll have to resend the patches anyway, so sending again is generally a better approach though there are some other maintainers who like them - if in doubt look at how patches for the subsystem are normally handled.
Hi,Mark
Thank you, I already understand, sorry for causing you trouble.
Ajye
On Tue, Nov 10, 2020 at 7:56 PM Mark Brown broonie@kernel.org wrote:
On Tue, Nov 10, 2020 at 05:40:40PM +0800, Ajye Huang wrote:
Hi, Mark
Could you please kindly review the series patch v6? And may I get your approval if the review is done.
Please don't send content free pings and please allow a reasonable time for review. People get busy, go on holiday, attend conferences and so on so unless there is some reason for urgency (like critical bug fixes) please allow at least a couple of weeks for review. If there have been review comments then people may be waiting for those to be addressed.
Sending content free pings adds to the mail volume (if they are seen at all) which is often the problem and since they can't be reviewed directly if something has gone wrong you'll have to resend the patches anyway, so sending again is generally a better approach though there are some other maintainers who like them - if in doubt look at how patches for the subsystem are normally handled.
On Fri, 6 Nov 2020 14:14:31 +0800, Ajye Huang wrote:
Note:
- The patch is made by the collaboration of
Ajye Huang ajye_huang@compal.corp-partner.google.com Cheng-Yi Chiang cychiang@chromium.org
v6:
- Documentation: Addressed suggestions from Rob Herring.
- Define "maxItems: 1" in dmic-gpios property.
- Only keep one example and add dmic-gpios property in.
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/
[...]
Applied to
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next
Thanks!
[1/2] ASoC: google: dt-bindings: modify machine bindings for two MICs case commit: 0e38d93493c7b11bc250113dd5b7b9d17ba8c54d [2/2] ASoC: qcom: sc7180: Modify machine driver for 2mic commit: 3cfbf07c6d2779d24a6f5b999a91f400256b1d4e
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks, Mark
participants (4)
-
Ajye Huang
-
Ajye Huang
-
Mark Brown
-
Rob Herring