[v5,02/13] ASoC: dt-bindings: simple-card: Add additional-devs subnode

Message ID 20230615152631.224529-3-herve.codina@bootlin.com
State New
Headers
Series Add support for IIO devices in ASoC |

Commit Message

Herve Codina June 15, 2023, 3:26 p.m. UTC
  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 <herve.codina@bootlin.com>
---
 .../bindings/sound/simple-card.yaml           | 53 +++++++++++++++++++
 1 file changed, 53 insertions(+)
  

Comments

Jonathan Cameron June 17, 2023, 5:39 p.m. UTC | #1
On Thu, 15 Jun 2023 17:26:20 +0200
Herve Codina <herve.codina@bootlin.com> wrote:

> 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 <herve.codina@bootlin.com>
Looks fine to me, but given it's not an area I know that much about
(other than the iio consumer bits) take that with a pinch of salt.

Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

> ---
>  .../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
>  # --------------------
  
Rob Herring June 20, 2023, 4:45 p.m. UTC | #2
On Thu, Jun 15, 2023 at 05:26:20PM +0200, Herve Codina wrote:
> 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 <herve.codina@bootlin.com>
> ---
>  .../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"

Why do you need this under the card node? Can't you just use the 
existing aux-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
>
  
Herve Codina June 21, 2023, 8:06 a.m. UTC | #3
Hi Rob,

On Tue, 20 Jun 2023 10:45:21 -0600
Rob Herring <robh@kernel.org> wrote:

> On Thu, Jun 15, 2023 at 05:26:20PM +0200, Herve Codina wrote:
> > 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 <herve.codina@bootlin.com>
> > ---
> >  .../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"  
> 
> Why do you need this under the card node? Can't you just use the 
> existing aux-devs?

aux-devs is a phandle array referencing auxiliary devices.
I cannot define a node with just aux-devs, just reference.

I need device auxiliary devices that are not defined somewhere else in
the DT.

A SPI amplifier is defined as a subnode of a SPI controler.
But my IIO/ASoC virtual devices are not defined under some hardware bus.
I need to define them here, as a simple-audio-card subnode.

Several subnodes are already defined for a simple-audio-card subnode for
other purpose.

Instead of having virtual device nodes directly as chidren mixed with the
other purpose nodes of the simple-audio-card, I group them under the
additional-devs node in order to ease evolution and maintenance.

Best regards,
Hervé

> 
> >    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
> >
  

Patch

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
 # --------------------