* [PATCH v5 1/2] ASoC: simple-audio-mux: enable to select MUX names
2024-07-01 0:38 [PATCH v5 0/2] ASoC: simple-audio-mux: add state-labels Kuninori Morimoto
@ 2024-07-01 0:38 ` Kuninori Morimoto
2024-07-01 0:38 ` [PATCH v5 2/2] ASoC: dt-bindings: simple-audio-mux: add state-labels property Kuninori Morimoto
2024-07-02 18:03 ` [PATCH v5 0/2] ASoC: simple-audio-mux: add state-labels Mark Brown
2 siblings, 0 replies; 5+ messages in thread
From: Kuninori Morimoto @ 2024-07-01 0:38 UTC (permalink / raw)
To: Alexandre Belloni, Conor Dooley, Jaroslav Kysela,
Krzysztof Kozlowski, Krzysztof Kozlowski, Liam Girdwood,
Mark Brown, Rob Herring, Takashi Iwai, devicetree, linux-sound
simple-audio-mux is designed to be used generally, thus "Input 1" or
"Input 2" are used to selecting MUX input. This numbered inputs would
work, but might be not user friendly in some case, for example in case
of system hardware design has some clear labels.
Adds new "state-labels" property and enable to select MUX by own state
names.
Original
> amixer set "MUX" "Input 1"
Use mux-names
sound_mux: mux {
compatible = "simple-audio-mux";
mux-gpios = <...>;
state-labels = "Label_A", "Label_B";
};
> amixer set "MUX" "Label_A"
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/codecs/simple-mux.c | 55 +++++++++++++++++++++++++----------
1 file changed, 40 insertions(+), 15 deletions(-)
diff --git a/sound/soc/codecs/simple-mux.c b/sound/soc/codecs/simple-mux.c
index bf67de12d20b..240af0563283 100644
--- a/sound/soc/codecs/simple-mux.c
+++ b/sound/soc/codecs/simple-mux.c
@@ -9,12 +9,21 @@
#include <linux/regulator/consumer.h>
#include <sound/soc.h>
+#define MUX_TEXT_SIZE 2
+#define MUX_WIDGET_SIZE 4
+#define MUX_ROUTE_SIZE 3
struct simple_mux {
struct gpio_desc *gpiod_mux;
unsigned int mux;
+ const char *mux_texts[MUX_TEXT_SIZE];
+ struct soc_enum mux_enum;
+ struct snd_kcontrol_new mux_mux;
+ struct snd_soc_dapm_widget mux_widgets[MUX_WIDGET_SIZE];
+ struct snd_soc_dapm_route mux_routes[MUX_ROUTE_SIZE];
+ struct snd_soc_component_driver mux_driver;
};
-static const char * const simple_mux_texts[] = {
+static const char * const simple_mux_texts[MUX_TEXT_SIZE] = {
"Input 1", "Input 2"
};
@@ -66,30 +75,23 @@ static unsigned int simple_mux_read(struct snd_soc_component *component,
static const struct snd_kcontrol_new simple_mux_mux =
SOC_DAPM_ENUM_EXT("Muxer", simple_mux_enum, simple_mux_control_get, simple_mux_control_put);
-static const struct snd_soc_dapm_widget simple_mux_dapm_widgets[] = {
+static const struct snd_soc_dapm_widget simple_mux_dapm_widgets[MUX_WIDGET_SIZE] = {
SND_SOC_DAPM_INPUT("IN1"),
SND_SOC_DAPM_INPUT("IN2"),
- SND_SOC_DAPM_MUX("MUX", SND_SOC_NOPM, 0, 0, &simple_mux_mux),
+ SND_SOC_DAPM_MUX("MUX", SND_SOC_NOPM, 0, 0, &simple_mux_mux), // see simple_mux_probe()
SND_SOC_DAPM_OUTPUT("OUT"),
};
-static const struct snd_soc_dapm_route simple_mux_dapm_routes[] = {
+static const struct snd_soc_dapm_route simple_mux_dapm_routes[MUX_ROUTE_SIZE] = {
{ "OUT", NULL, "MUX" },
- { "MUX", "Input 1", "IN1" },
- { "MUX", "Input 2", "IN2" },
-};
-
-static const struct snd_soc_component_driver simple_mux_component_driver = {
- .dapm_widgets = simple_mux_dapm_widgets,
- .num_dapm_widgets = ARRAY_SIZE(simple_mux_dapm_widgets),
- .dapm_routes = simple_mux_dapm_routes,
- .num_dapm_routes = ARRAY_SIZE(simple_mux_dapm_routes),
- .read = simple_mux_read,
+ { "MUX", "Input 1", "IN1" }, // see simple_mux_probe()
+ { "MUX", "Input 2", "IN2" }, // see simple_mux_probe()
};
static int simple_mux_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
+ struct device_node *np = dev->of_node;
struct simple_mux *priv;
priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
@@ -103,7 +105,30 @@ static int simple_mux_probe(struct platform_device *pdev)
return dev_err_probe(dev, PTR_ERR(priv->gpiod_mux),
"Failed to get 'mux' gpio");
- return devm_snd_soc_register_component(dev, &simple_mux_component_driver, NULL, 0);
+ /* Copy default settings */
+ memcpy(&priv->mux_texts, &simple_mux_texts, sizeof(priv->mux_texts));
+ memcpy(&priv->mux_enum, &simple_mux_enum, sizeof(priv->mux_enum));
+ memcpy(&priv->mux_mux, &simple_mux_mux, sizeof(priv->mux_mux));
+ memcpy(&priv->mux_widgets, &simple_mux_dapm_widgets, sizeof(priv->mux_widgets));
+ memcpy(&priv->mux_routes, &simple_mux_dapm_routes, sizeof(priv->mux_routes));
+
+ priv->mux_driver.dapm_widgets = priv->mux_widgets;
+ priv->mux_driver.num_dapm_widgets = MUX_WIDGET_SIZE;
+ priv->mux_driver.dapm_routes = priv->mux_routes;
+ priv->mux_driver.num_dapm_routes = MUX_ROUTE_SIZE;
+ priv->mux_driver.read = simple_mux_read;
+
+ /* Overwrite text ("Input 1", "Input 2") if property exists */
+ of_property_read_string_array(np, "state-labels", priv->mux_texts, MUX_TEXT_SIZE);
+
+ /* switch to use priv data instead of default */
+ priv->mux_enum.texts = priv->mux_texts;
+ priv->mux_mux.private_value = (unsigned long)&priv->mux_enum;
+ priv->mux_widgets[2].kcontrol_news = &priv->mux_mux;
+ priv->mux_routes[1].control = priv->mux_texts[0]; // "Input 1"
+ priv->mux_routes[2].control = priv->mux_texts[1]; // "Input 2"
+
+ return devm_snd_soc_register_component(dev, &priv->mux_driver, NULL, 0);
}
#ifdef CONFIG_OF
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread* [PATCH v5 2/2] ASoC: dt-bindings: simple-audio-mux: add state-labels property
2024-07-01 0:38 [PATCH v5 0/2] ASoC: simple-audio-mux: add state-labels Kuninori Morimoto
2024-07-01 0:38 ` [PATCH v5 1/2] ASoC: simple-audio-mux: enable to select MUX names Kuninori Morimoto
@ 2024-07-01 0:38 ` Kuninori Morimoto
2024-07-01 6:00 ` Krzysztof Kozlowski
2024-07-02 18:03 ` [PATCH v5 0/2] ASoC: simple-audio-mux: add state-labels Mark Brown
2 siblings, 1 reply; 5+ messages in thread
From: Kuninori Morimoto @ 2024-07-01 0:38 UTC (permalink / raw)
To: Alexandre Belloni, Conor Dooley, Jaroslav Kysela,
Krzysztof Kozlowski, Krzysztof Kozlowski, Liam Girdwood,
Mark Brown, Rob Herring, Takashi Iwai, devicetree, linux-sound
simple-audio-mux is designed to be used generally, thus "Input 1" or
"Input 2" are used to selecting MUX input. This numbered inputs would
work, but might be not user friendly in some case, for example in case
of system hardware design has some clear labels.
Adds new "state-labels" property and enable to select MUX by own state
names.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
.../devicetree/bindings/sound/simple-audio-mux.yaml | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/Documentation/devicetree/bindings/sound/simple-audio-mux.yaml b/Documentation/devicetree/bindings/sound/simple-audio-mux.yaml
index 9f319caf3db7..194ac1d4f4f5 100644
--- a/Documentation/devicetree/bindings/sound/simple-audio-mux.yaml
+++ b/Documentation/devicetree/bindings/sound/simple-audio-mux.yaml
@@ -24,6 +24,11 @@ properties:
description: |
GPIOs used to select the input line.
+ state-labels:
+ description: State of input line. default is "Input 1", "Input 2"
+ $ref: /schemas/types.yaml#/definitions/string-array
+ maxItems: 2
+
sound-name-prefix: true
required:
@@ -37,4 +42,5 @@ examples:
mux {
compatible = "simple-audio-mux";
mux-gpios = <&gpio 3 0>;
+ state-labels = "Label_A", "Label_B";
};
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH v5 0/2] ASoC: simple-audio-mux: add state-labels
2024-07-01 0:38 [PATCH v5 0/2] ASoC: simple-audio-mux: add state-labels Kuninori Morimoto
2024-07-01 0:38 ` [PATCH v5 1/2] ASoC: simple-audio-mux: enable to select MUX names Kuninori Morimoto
2024-07-01 0:38 ` [PATCH v5 2/2] ASoC: dt-bindings: simple-audio-mux: add state-labels property Kuninori Morimoto
@ 2024-07-02 18:03 ` Mark Brown
2 siblings, 0 replies; 5+ messages in thread
From: Mark Brown @ 2024-07-02 18:03 UTC (permalink / raw)
To: Alexandre Belloni, Conor Dooley, Jaroslav Kysela,
Krzysztof Kozlowski, Krzysztof Kozlowski, Liam Girdwood,
Rob Herring, Takashi Iwai, devicetree, linux-sound,
Kuninori Morimoto
On Mon, 01 Jul 2024 00:38:31 +0000, Kuninori Morimoto wrote:
> simple-audio-mux is designed to be used generally, thus "Input 1" or
> "Input 2" are used to selecting MUX input. This numbered inputs would work,
> but might be not user friendly in some case, for example in case of system
> hardware design has some clear labels.
> Adds new "state-labels" property and enable to select MUX by own state names.
>
> Original
> > amixer set "MUX" "Input 1"
> > amixer set "MUX" "Input 2"
>
> [...]
Applied to
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next
Thanks!
[1/2] ASoC: simple-audio-mux: enable to select MUX names
commit: 3913ecb38833e8926467a17f1f1679ccd25a7230
[2/2] ASoC: dt-bindings: simple-audio-mux: add state-labels property
commit: 9337f15f4fd6ebd35d911225c4a88ec82d27b2a2
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
^ permalink raw reply [flat|nested] 5+ messages in thread