2023-05-23 15:31:33

by Herve Codina

[permalink] [raw]
Subject: [PATCH v2 0/9] Add support for IIO devices in ASoC

Several weeks ago, I sent a series [1] for adding a potentiometer as an
auxiliary device in ASoC. The feedback was that the potentiometer should
be directly handled in IIO (as other potentiometers) and something more
generic should be present in ASoC in order to have a binding to import
some IIO devices into sound cards.

The series related to the IIO potentiometer device is already under
review [2].

This series introduces audio-iio-aux. Its goal is to offer the binding
between IIO and ASoC.
It exposes attached IIO devices as ASoC auxiliary devices and allows to
control them through mixer controls.

On my system, the IIO device is a potentiometer and it is present in an
amplifier design present in the audio path.

Compare to the previous iteration
https://lore.kernel.org/linux-kernel/[email protected]/
This v2 series mainly:
- updates the binding using a simple-card subnode and handles this new
subnode in the simple-card driver.
- Improves existing IIO code and documentation.
- Renames simple-iio-aux to audio-iio-aux and fixes the driver itself.

Best regards,
Hervé

[1] https://lore.kernel.org/linux-kernel/[email protected]/
[2] https://lore.kernel.org/linux-kernel/[email protected]/

Changes v1 -> v2
- Patch 1
Rename simple-iio-aux to audio-iio-aux
Rename invert to snd-control-invert-range
Remove the /schemas/iio/iio-consumer.yaml reference
Remove the unneeded '|' after description

- Patch 2 (new in v2)
Introduce the simple-audio-card additional-devs subnode

- Patch 3 (new in v2)
Check err before switch() in iio_channel_read_max()

- Patch 4 (new in v2)
Fix raw reads and raw writes documentation

- Patch 5 (patch 2 in v1)
Check err before switch() in iio_channel_read_min()
Fix documentation

- Patch 6 (path 3 in v1)
No changes

- Patch 7 (patch 4 in v1)
Rename simple-iio-aux to audio-iio-aux
Rename invert to snd-control-invert-range
Remove the mask usage from audio_iio_aux_{get,put}_volsw helpers
Use directly PTR_ERR() in dev_err_probe() parameter
Remove the '!!' construction
Remove of_match_ptr()

- Patch 8 (new in v2)
Add a missing of_node_put() in the simple-card driver

- Patch 9 (new in v2)
Handle additional-devs in the simple-card driver

Herve Codina (9):
ASoC: dt-bindings: Add audio-iio-aux
ASoC: dt-bindings: simple-card: Add additional-devs subnode
iio: inkern: Check error explicitly in iio_channel_read_max()
iio: consumer.h: Fix raw values documentation notes
iio: inkern: Add a helper to query an available minimum raw value
ASoC: soc-dapm.h: Add a helper to build a DAPM widget dynamically
ASoC: codecs: Add support for the generic IIO auxiliary devices
ASoC: simple-card: Add missing of_node_put() in case of error
ASoC: simple-card: Handle additional devices

.../bindings/sound/audio-iio-aux.yaml | 64 ++++
.../bindings/sound/simple-card.yaml | 53 +++
drivers/iio/inkern.c | 75 ++++-
include/linux/iio/consumer.h | 37 ++-
include/sound/soc-dapm.h | 12 +-
sound/soc/codecs/Kconfig | 12 +
sound/soc/codecs/Makefile | 2 +
sound/soc/codecs/audio-iio-aux.c | 302 ++++++++++++++++++
sound/soc/generic/simple-card.c | 53 ++-
9 files changed, 596 insertions(+), 14 deletions(-)
create mode 100644 Documentation/devicetree/bindings/sound/audio-iio-aux.yaml
create mode 100644 sound/soc/codecs/audio-iio-aux.c

--
2.40.1



2023-05-23 15:32:16

by Herve Codina

[permalink] [raw]
Subject: [PATCH v2 2/9] ASoC: dt-bindings: simple-card: Add additional-devs subnode

The additional-devs subnode allows to declared some virtual devices
as sound card children.
These virtual devices can then be used by the sound card and so be
present in the audio path.

The first virtual device supported is the audio IIO auxiliary device
in order to support an IIO device as an audio auxiliary device.

Signed-off-by: Herve Codina <[email protected]>
---
.../bindings/sound/simple-card.yaml | 53 +++++++++++++++++++
1 file changed, 53 insertions(+)

diff --git a/Documentation/devicetree/bindings/sound/simple-card.yaml b/Documentation/devicetree/bindings/sound/simple-card.yaml
index b05e05c81cc4..59ac2d1d1ccf 100644
--- a/Documentation/devicetree/bindings/sound/simple-card.yaml
+++ b/Documentation/devicetree/bindings/sound/simple-card.yaml
@@ -148,6 +148,15 @@ definitions:
required:
- sound-dai

+ additional-devs:
+ type: object
+ description:
+ Additional devices used by the simple audio card.
+ patternProperties:
+ '^iio-aux(-.+)?$':
+ type: object
+ $ref: audio-iio-aux.yaml#
+
properties:
compatible:
contains:
@@ -187,6 +196,8 @@ properties:
$ref: "#/definitions/mclk-fs"
simple-audio-card,aux-devs:
$ref: "#/definitions/aux-devs"
+ simple-audio-card,additional-devs:
+ $ref: "#/definitions/additional-devs"
simple-audio-card,convert-rate:
$ref: "#/definitions/convert-rate"
simple-audio-card,convert-channels:
@@ -359,6 +370,48 @@ examples:
};
};

+# --------------------
+# route audio to/from a codec through an amplifier
+# designed with a potentiometer driven by IIO:
+# --------------------
+ - |
+ sound {
+ compatible = "simple-audio-card";
+
+ simple-audio-card,aux-devs = <&amp_in>, <&amp_out>;
+ simple-audio-card,routing =
+ "CODEC LEFTIN", "AMP_IN LEFT OUT",
+ "CODEC RIGHTIN", "AMP_IN RIGHT OUT",
+ "AMP_OUT LEFT IN", "CODEC LEFTOUT",
+ "AMP_OUT RIGHT IN", "CODEC RIGHTOUT";
+
+ simple-audio-card,additional-devs {
+ amp_out: iio-aux-out {
+ compatible = "audio-iio-aux";
+ io-channels = <&pot_out 0>, <&pot_out 1>;
+ io-channel-names = "LEFT", "RIGHT";
+ snd-control-invert-range = <1 1>;
+ sound-name-prefix = "AMP_OUT";
+ };
+
+ amp_in: iio_aux-in {
+ compatible = "audio-iio-aux";
+ io-channels = <&pot_in 0>, <&pot_in 1>;
+ io-channel-names = "LEFT", "RIGHT";
+ sound-name-prefix = "AMP_IN";
+ };
+ };
+
+ simple-audio-card,cpu {
+ sound-dai = <&cpu>;
+ };
+
+ simple-audio-card,codec {
+ sound-dai = <&codec>;
+ clocks = <&clocks>;
+ };
+ };
+
# --------------------
# Sampling Rate Conversion
# --------------------
--
2.40.1


2023-05-23 15:32:26

by Herve Codina

[permalink] [raw]
Subject: [PATCH v2 8/9] ASoC: simple-card: Add missing of_node_put() in case of error

In the error path, a of_node_put() for platform is missing.
Just add it.

Signed-off-by: Herve Codina <[email protected]>
---
sound/soc/generic/simple-card.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c
index 6f044cc8357e..5a5e4ecd0f61 100644
--- a/sound/soc/generic/simple-card.c
+++ b/sound/soc/generic/simple-card.c
@@ -416,6 +416,7 @@ static int __simple_for_each_link(struct asoc_simple_priv *priv,

if (ret < 0) {
of_node_put(codec);
+ of_node_put(plat);
of_node_put(np);
goto error;
}
--
2.40.1


2023-05-23 23:28:25

by Kuninori Morimoto

[permalink] [raw]
Subject: Re: [PATCH v2 8/9] ASoC: simple-card: Add missing of_node_put() in case of error


Hi

> In the error path, a of_node_put() for platform is missing.
> Just add it.
>
> Signed-off-by: Herve Codina <[email protected]>
> ---

Acked-by: Kuninori Morimoto <[email protected]>

Thank you for your help !!

Best regards
---
Kuninori Morimoto

2023-05-26 16:42:58

by Mark Brown

[permalink] [raw]
Subject: Re: (subset) [PATCH v2 0/9] Add support for IIO devices in ASoC

On Tue, 23 May 2023 17:12:14 +0200, Herve Codina wrote:
> Several weeks ago, I sent a series [1] for adding a potentiometer as an
> auxiliary device in ASoC. The feedback was that the potentiometer should
> be directly handled in IIO (as other potentiometers) and something more
> generic should be present in ASoC in order to have a binding to import
> some IIO devices into sound cards.
>
> The series related to the IIO potentiometer device is already under
> review [2].
>
> [...]

Applied to

https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next

Thanks!

[8/9] ASoC: simple-card: Add missing of_node_put() in case of error
commit: 8938f75a5e35c597a647c28984a0304da7a33d63

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