mirror of
https://github.com/armbian/build.git
synced 2025-08-18 21:11:02 +02:00
68 lines
2.2 KiB
Diff
68 lines
2.2 KiB
Diff
From ac99b4bd68631d7f40527966e9724c7aa48cad8b Mon Sep 17 00:00:00 2001
|
|
From: Ondrej Jirman <megi@xff.cz>
|
|
Date: Tue, 14 May 2024 10:46:10 +0200
|
|
Subject: ASoC: simple-card: Allow to define pins for aux jack devices
|
|
|
|
This restores original behavior of jack pins on Pinephone, as it was
|
|
before upstreaming jack detection to codec driver.
|
|
|
|
Signed-off-by: Ondrej Jirman <megi@xff.cz>
|
|
---
|
|
sound/soc/generic/simple-card-utils.c | 40 +++++++++++++++++++++++++++
|
|
1 file changed, 40 insertions(+)
|
|
|
|
diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simple-card-utils.c
|
|
index 24b371f32066..348077da4ae8 100644
|
|
--- a/sound/soc/generic/simple-card-utils.c
|
|
+++ b/sound/soc/generic/simple-card-utils.c
|
|
@@ -853,6 +853,46 @@ int simple_util_init_aux_jacks(struct simple_util_priv *priv, char *prefix)
|
|
continue;
|
|
|
|
(void)snd_soc_component_set_jack(component, jack, NULL);
|
|
+
|
|
+ /* add pins to the jack */
|
|
+ int count = of_property_count_strings(card->dev->of_node, "simple-audio-card,jack-pins");
|
|
+ if (count < 0) {
|
|
+ if (count != -EINVAL)
|
|
+ dev_warn(card->dev, "Invalid jack-pins property\n");
|
|
+ continue;
|
|
+ }
|
|
+ if (count % 2) {
|
|
+ dev_warn(card->dev, "jack-pins property must have even number of strings\n");
|
|
+ continue;
|
|
+ }
|
|
+
|
|
+ for (int idx = 0; idx < count; idx += 2) {
|
|
+ const char *aux_dev_name, *pin_name;
|
|
+ u32 mask;
|
|
+
|
|
+ ret = of_property_read_string_index(card->dev->of_node, "simple-audio-card,jack-pins", idx, &aux_dev_name);
|
|
+ if (ret < 0)
|
|
+ continue;
|
|
+ ret = of_property_read_string_index(card->dev->of_node, "simple-audio-card,jack-pins", idx + 1, &pin_name);
|
|
+ if (ret < 0)
|
|
+ continue;
|
|
+ ret = of_property_read_u32_index(card->dev->of_node, "simple-audio-card,jack-pins-mask", idx / 2, &mask);
|
|
+ if (ret < 0) {
|
|
+ dev_warn(card->dev, "jack-pins-mask for jack pin %s/%s can't be read\n", aux_dev_name, pin_name);
|
|
+ continue;
|
|
+ }
|
|
+
|
|
+ if (!strcmp(aux_dev_name, component->name)) {
|
|
+ struct snd_soc_jack_pin *pin = devm_kzalloc(card->dev, sizeof(*pin), GFP_KERNEL);
|
|
+
|
|
+ pin->pin = pin_name;
|
|
+ pin->mask = mask;
|
|
+
|
|
+ dev_info(card->dev, "Adding jack %s pin %s (mask %d)\n",
|
|
+ aux_dev_name, pin_name, pin->mask);
|
|
+ snd_soc_jack_add_pins(jack, 1, pin);
|
|
+ }
|
|
+ }
|
|
}
|
|
return 0;
|
|
}
|
|
--
|
|
2.35.3
|
|
|