Message ID | 20190906151221.3148-1-mripard@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v3,1/2] ASoC: dt-bindings: Convert Allwinner A10 codec to a schema | expand |
On Fri, Sep 6, 2019 at 4:12 PM Maxime Ripard <mripard@kernel.org> wrote: > > From: Maxime Ripard <maxime.ripard@bootlin.com> > > The Allwinner SoCs have an embedded audio codec that is supported in Linux, > with a matching Device Tree binding. > > Now that we have the DT validation in place, let's convert the device tree > bindings for that controller over to a YAML schemas. > > Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com> > > --- > > Changes from v2: > - Change the audio-routing values to an enum, and enforce boundaries on > the size > - Add restrictions to the possible values of audio-routing > > Changes from v1: > - Fix subject prefix > --- > .../sound/allwinner,sun4i-a10-codec.yaml | 262 ++++++++++++++++++ > .../devicetree/bindings/sound/sun4i-codec.txt | 94 ------- > 2 files changed, 262 insertions(+), 94 deletions(-) > create mode 100644 Documentation/devicetree/bindings/sound/allwinner,sun4i-a10-codec.yaml > delete mode 100644 Documentation/devicetree/bindings/sound/sun4i-codec.txt > > diff --git a/Documentation/devicetree/bindings/sound/allwinner,sun4i-a10-codec.yaml b/Documentation/devicetree/bindings/sound/allwinner,sun4i-a10-codec.yaml > new file mode 100644 > index 000000000000..faa75b91c072 > --- /dev/null > +++ b/Documentation/devicetree/bindings/sound/allwinner,sun4i-a10-codec.yaml > @@ -0,0 +1,262 @@ > +# SPDX-License-Identifier: GPL-2.0 > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/sound/allwinner,sun4i-a10-codec.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Allwinner A10 Codec Device Tree Bindings > + > +maintainers: > + - Chen-Yu Tsai <wens@csie.org> > + - Maxime Ripard <maxime.ripard@bootlin.com> > + > +properties: > + "#sound-dai-cells": > + const: 0 > + > + compatible: > + enum: > + - allwinner,sun4i-a10-codec > + - allwinner,sun6i-a31-codec > + - allwinner,sun7i-a20-codec > + - allwinner,sun8i-a23-codec > + - allwinner,sun8i-h3-codec > + - allwinner,sun8i-v3s-codec > + > + reg: > + maxItems: 1 > + > + interrupts: > + maxItems: 1 > + > + clocks: > + items: > + - description: Bus Clock > + - description: Module Clock > + > + clock-names: > + items: > + - const: apb > + - const: codec > + > + dmas: > + items: > + - description: RX DMA Channel > + - description: TX DMA Channel > + > + dma-names: > + items: > + - const: rx > + - const: tx > + > + resets: > + maxItems: 1 > + > + allwinner,audio-routing: > + description: |- > + A list of the connections between audio components. Each entry > + is a pair of strings, the first being the connection's sink, the > + second being the connection's source. > + allOf: > + - $ref: /schemas/types.yaml#definitions/non-unique-string-array > + - minItems: 2 > + maxItems: 18 > + enum: > + # Audio Pins on the SoC > + - HP > + - HPCOM > + - LINEIN > + - LINEOUT > + - MIC1 > + - MIC2 > + - MIC3 > + > + # Microphone Biases from the SoC > + - HBIAS > + - MBIAS > + > + # Board Connectors > + - Headphone > + - Headset Mic > + - Line In > + - Line Out > + - Mic > + - Speaker > + > + allwinner,codec-analog-controls: > + $ref: /schemas/types.yaml#/definitions/phandle > + description: Phandle to the codec analog controls in the PRCM > + > + allwinner,pa-gpios: > + description: GPIO to enable the external amplifier > + > +required: > + - "#sound-dai-cells" > + - compatible > + - reg > + - interrupts > + - clocks > + - clock-names > + - dmas > + - dma-names > + > +allOf: > + - if: > + properties: > + compatible: > + enum: > + - allwinner,sun6i-a31-codec > + - allwinner,sun8i-a23-codec > + - allwinner,sun8i-h3-codec > + - allwinner,sun8i-v3s-codec > + > + then: > + if: > + properties: > + compatible: > + const: allwinner,sun6i-a31-codec > + > + then: > + required: > + - resets > + - allwinner,audio-routing > + > + else: > + required: > + - resets > + - allwinner,audio-routing > + - allwinner,codec-analog-controls > + > + - if: > + properties: > + compatible: > + enum: > + - allwinner,sun6i-a31-codec > + > + then: > + properties: > + allwinner,audio-routing: > + enum: > + - HP > + - HPCOM > + - LINEIN > + - LINEOUT > + - MIC1 > + - MIC2 > + - MIC3 > + - HBIAS > + - MBIAS > + - Headphone > + - Headset Mic > + - Line In > + - Line Out > + - Mic > + - Speaker This looks like the same list as the default... > + > + - if: > + properties: > + compatible: > + enum: > + - allwinner,sun8i-a23-codec > + > + then: > + properties: > + allwinner,audio-routing: > + enum: > + - HP > + - HPCOM > + - LINEIN > + - MIC1 > + - MIC2 > + - HBIAS > + - MBIAS > + - Headphone > + - Headset Mic > + - Line In > + - Line Out > + - Mic > + - Speaker > + > + - if: > + properties: > + compatible: > + enum: > + - allwinner,sun8i-h3-codec > + > + then: > + properties: > + allwinner,audio-routing: > + enum: > + - HP > + - HPCOM > + - LINEIN > + - LINEOUT > + - MIC1 > + - MIC2 > + - HBIAS > + - MBIAS > + - Headphone > + - Headset Mic > + - Line In > + - Line Out > + - Mic > + - Speaker > + > + - if: > + properties: > + compatible: > + enum: > + - allwinner,sun8i-v3s-codec > + > + then: > + properties: > + allwinner,audio-routing: > + enum: > + - HP > + - HPCOM > + - MIC1 > + - HBIAS > + - Headphone > + - Headset Mic > + - Line In > + - Line Out > + - Mic > + - Speaker > + > +additionalProperties: false > + > +examples: > + - | > + codec@1c22c00 { > + #sound-dai-cells = <0>; > + compatible = "allwinner,sun7i-a20-codec"; > + reg = <0x01c22c00 0x40>; > + interrupts = <0 30 4>; > + clocks = <&apb0_gates 0>, <&codec_clk>; > + clock-names = "apb", "codec"; > + dmas = <&dma 0 19>, <&dma 0 19>; > + dma-names = "rx", "tx"; > + }; > + > + - | > + codec@1c22c00 { > + #sound-dai-cells = <0>; > + compatible = "allwinner,sun6i-a31-codec"; > + reg = <0x01c22c00 0x98>; > + interrupts = <0 29 4>; > + clocks = <&ccu 61>, <&ccu 135>; > + clock-names = "apb", "codec"; > + resets = <&ccu 42>; > + dmas = <&dma 15>, <&dma 15>; > + dma-names = "rx", "tx"; > + allwinner,audio-routing = > + "Headphone", "HP", > + "Speaker", "LINEOUT", > + "LINEIN", "Line In", > + "MIC1", "MBIAS", > + "MIC1", "Mic", > + "MIC2", "HBIAS", > + "MIC2", "Headset Mic"; > + }; > + > +... > diff --git a/Documentation/devicetree/bindings/sound/sun4i-codec.txt b/Documentation/devicetree/bindings/sound/sun4i-codec.txt > deleted file mode 100644 > index 66579bbd3294..000000000000 > --- a/Documentation/devicetree/bindings/sound/sun4i-codec.txt > +++ /dev/null > @@ -1,94 +0,0 @@ > -* Allwinner A10 Codec > - > -Required properties: > -- compatible: must be one of the following compatibles: > - - "allwinner,sun4i-a10-codec" > - - "allwinner,sun6i-a31-codec" > - - "allwinner,sun7i-a20-codec" > - - "allwinner,sun8i-a23-codec" > - - "allwinner,sun8i-h3-codec" > - - "allwinner,sun8i-v3s-codec" > -- reg: must contain the registers location and length > -- interrupts: must contain the codec interrupt > -- dmas: DMA channels for tx and rx dma. See the DMA client binding, > - Documentation/devicetree/bindings/dma/dma.txt > -- dma-names: should include "tx" and "rx". > -- clocks: a list of phandle + clock-specifer pairs, one for each entry > - in clock-names. > -- clock-names: should contain the following: > - - "apb": the parent APB clock for this controller > - - "codec": the parent module clock > - > -Optional properties: > -- allwinner,pa-gpios: gpio to enable external amplifier > - > -Required properties for the following compatibles: > - - "allwinner,sun6i-a31-codec" > - - "allwinner,sun8i-a23-codec" > - - "allwinner,sun8i-h3-codec" > - - "allwinner,sun8i-v3s-codec" > -- resets: phandle to the reset control for this device > -- allwinner,audio-routing: A list of the connections between audio components. > - Each entry is a pair of strings, the first being the > - connection's sink, the second being the connection's > - source. Valid names include: > - > - Audio pins on the SoC: > - "HP" > - "HPCOM" > - "LINEIN" (not on sun8i-v3s) > - "LINEOUT" (not on sun8i-a23 or sun8i-v3s) > - "MIC1" > - "MIC2" (not on sun8i-v3s) > - "MIC3" (sun6i-a31 only) > - > - Microphone biases from the SoC: > - "HBIAS" > - "MBIAS" (not on sun8i-v3s) > - > - Board connectors: > - "Headphone" > - "Headset Mic" > - "Line In" > - "Line Out" > - "Mic" > - "Speaker" > - > -Required properties for the following compatibles: > - - "allwinner,sun8i-a23-codec" > - - "allwinner,sun8i-h3-codec" > - - "allwinner,sun8i-v3s-codec" > -- allwinner,codec-analog-controls: A phandle to the codec analog controls > - block in the PRCM. > - > -Example: > -codec: codec@1c22c00 { > - #sound-dai-cells = <0>; > - compatible = "allwinner,sun7i-a20-codec"; > - reg = <0x01c22c00 0x40>; > - interrupts = <0 30 4>; > - clocks = <&apb0_gates 0>, <&codec_clk>; > - clock-names = "apb", "codec"; > - dmas = <&dma 0 19>, <&dma 0 19>; > - dma-names = "rx", "tx"; > -}; > - > -codec: codec@1c22c00 { > - #sound-dai-cells = <0>; > - compatible = "allwinner,sun6i-a31-codec"; > - reg = <0x01c22c00 0x98>; > - interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>; > - clocks = <&ccu CLK_APB1_CODEC>, <&ccu CLK_CODEC>; > - clock-names = "apb", "codec"; > - resets = <&ccu RST_APB1_CODEC>; > - dmas = <&dma 15>, <&dma 15>; > - dma-names = "rx", "tx"; > - allwinner,audio-routing = > - "Headphone", "HP", > - "Speaker", "LINEOUT", > - "LINEIN", "Line In", > - "MIC1", "MBIAS", > - "MIC1", "Mic", > - "MIC2", "HBIAS", > - "MIC2", "Headset Mic"; > -}; > -- > 2.21.0 >
diff --git a/Documentation/devicetree/bindings/sound/allwinner,sun4i-a10-codec.yaml b/Documentation/devicetree/bindings/sound/allwinner,sun4i-a10-codec.yaml new file mode 100644 index 000000000000..faa75b91c072 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/allwinner,sun4i-a10-codec.yaml @@ -0,0 +1,262 @@ +# SPDX-License-Identifier: GPL-2.0 +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/sound/allwinner,sun4i-a10-codec.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Allwinner A10 Codec Device Tree Bindings + +maintainers: + - Chen-Yu Tsai <wens@csie.org> + - Maxime Ripard <maxime.ripard@bootlin.com> + +properties: + "#sound-dai-cells": + const: 0 + + compatible: + enum: + - allwinner,sun4i-a10-codec + - allwinner,sun6i-a31-codec + - allwinner,sun7i-a20-codec + - allwinner,sun8i-a23-codec + - allwinner,sun8i-h3-codec + - allwinner,sun8i-v3s-codec + + reg: + maxItems: 1 + + interrupts: + maxItems: 1 + + clocks: + items: + - description: Bus Clock + - description: Module Clock + + clock-names: + items: + - const: apb + - const: codec + + dmas: + items: + - description: RX DMA Channel + - description: TX DMA Channel + + dma-names: + items: + - const: rx + - const: tx + + resets: + maxItems: 1 + + allwinner,audio-routing: + description: |- + A list of the connections between audio components. Each entry + is a pair of strings, the first being the connection's sink, the + second being the connection's source. + allOf: + - $ref: /schemas/types.yaml#definitions/non-unique-string-array + - minItems: 2 + maxItems: 18 + enum: + # Audio Pins on the SoC + - HP + - HPCOM + - LINEIN + - LINEOUT + - MIC1 + - MIC2 + - MIC3 + + # Microphone Biases from the SoC + - HBIAS + - MBIAS + + # Board Connectors + - Headphone + - Headset Mic + - Line In + - Line Out + - Mic + - Speaker + + allwinner,codec-analog-controls: + $ref: /schemas/types.yaml#/definitions/phandle + description: Phandle to the codec analog controls in the PRCM + + allwinner,pa-gpios: + description: GPIO to enable the external amplifier + +required: + - "#sound-dai-cells" + - compatible + - reg + - interrupts + - clocks + - clock-names + - dmas + - dma-names + +allOf: + - if: + properties: + compatible: + enum: + - allwinner,sun6i-a31-codec + - allwinner,sun8i-a23-codec + - allwinner,sun8i-h3-codec + - allwinner,sun8i-v3s-codec + + then: + if: + properties: + compatible: + const: allwinner,sun6i-a31-codec + + then: + required: + - resets + - allwinner,audio-routing + + else: + required: + - resets + - allwinner,audio-routing + - allwinner,codec-analog-controls + + - if: + properties: + compatible: + enum: + - allwinner,sun6i-a31-codec + + then: + properties: + allwinner,audio-routing: + enum: + - HP + - HPCOM + - LINEIN + - LINEOUT + - MIC1 + - MIC2 + - MIC3 + - HBIAS + - MBIAS + - Headphone + - Headset Mic + - Line In + - Line Out + - Mic + - Speaker + + - if: + properties: + compatible: + enum: + - allwinner,sun8i-a23-codec + + then: + properties: + allwinner,audio-routing: + enum: + - HP + - HPCOM + - LINEIN + - MIC1 + - MIC2 + - HBIAS + - MBIAS + - Headphone + - Headset Mic + - Line In + - Line Out + - Mic + - Speaker + + - if: + properties: + compatible: + enum: + - allwinner,sun8i-h3-codec + + then: + properties: + allwinner,audio-routing: + enum: + - HP + - HPCOM + - LINEIN + - LINEOUT + - MIC1 + - MIC2 + - HBIAS + - MBIAS + - Headphone + - Headset Mic + - Line In + - Line Out + - Mic + - Speaker + + - if: + properties: + compatible: + enum: + - allwinner,sun8i-v3s-codec + + then: + properties: + allwinner,audio-routing: + enum: + - HP + - HPCOM + - MIC1 + - HBIAS + - Headphone + - Headset Mic + - Line In + - Line Out + - Mic + - Speaker + +additionalProperties: false + +examples: + - | + codec@1c22c00 { + #sound-dai-cells = <0>; + compatible = "allwinner,sun7i-a20-codec"; + reg = <0x01c22c00 0x40>; + interrupts = <0 30 4>; + clocks = <&apb0_gates 0>, <&codec_clk>; + clock-names = "apb", "codec"; + dmas = <&dma 0 19>, <&dma 0 19>; + dma-names = "rx", "tx"; + }; + + - | + codec@1c22c00 { + #sound-dai-cells = <0>; + compatible = "allwinner,sun6i-a31-codec"; + reg = <0x01c22c00 0x98>; + interrupts = <0 29 4>; + clocks = <&ccu 61>, <&ccu 135>; + clock-names = "apb", "codec"; + resets = <&ccu 42>; + dmas = <&dma 15>, <&dma 15>; + dma-names = "rx", "tx"; + allwinner,audio-routing = + "Headphone", "HP", + "Speaker", "LINEOUT", + "LINEIN", "Line In", + "MIC1", "MBIAS", + "MIC1", "Mic", + "MIC2", "HBIAS", + "MIC2", "Headset Mic"; + }; + +... diff --git a/Documentation/devicetree/bindings/sound/sun4i-codec.txt b/Documentation/devicetree/bindings/sound/sun4i-codec.txt deleted file mode 100644 index 66579bbd3294..000000000000 --- a/Documentation/devicetree/bindings/sound/sun4i-codec.txt +++ /dev/null @@ -1,94 +0,0 @@ -* Allwinner A10 Codec - -Required properties: -- compatible: must be one of the following compatibles: - - "allwinner,sun4i-a10-codec" - - "allwinner,sun6i-a31-codec" - - "allwinner,sun7i-a20-codec" - - "allwinner,sun8i-a23-codec" - - "allwinner,sun8i-h3-codec" - - "allwinner,sun8i-v3s-codec" -- reg: must contain the registers location and length -- interrupts: must contain the codec interrupt -- dmas: DMA channels for tx and rx dma. See the DMA client binding, - Documentation/devicetree/bindings/dma/dma.txt -- dma-names: should include "tx" and "rx". -- clocks: a list of phandle + clock-specifer pairs, one for each entry - in clock-names. -- clock-names: should contain the following: - - "apb": the parent APB clock for this controller - - "codec": the parent module clock - -Optional properties: -- allwinner,pa-gpios: gpio to enable external amplifier - -Required properties for the following compatibles: - - "allwinner,sun6i-a31-codec" - - "allwinner,sun8i-a23-codec" - - "allwinner,sun8i-h3-codec" - - "allwinner,sun8i-v3s-codec" -- resets: phandle to the reset control for this device -- allwinner,audio-routing: A list of the connections between audio components. - Each entry is a pair of strings, the first being the - connection's sink, the second being the connection's - source. Valid names include: - - Audio pins on the SoC: - "HP" - "HPCOM" - "LINEIN" (not on sun8i-v3s) - "LINEOUT" (not on sun8i-a23 or sun8i-v3s) - "MIC1" - "MIC2" (not on sun8i-v3s) - "MIC3" (sun6i-a31 only) - - Microphone biases from the SoC: - "HBIAS" - "MBIAS" (not on sun8i-v3s) - - Board connectors: - "Headphone" - "Headset Mic" - "Line In" - "Line Out" - "Mic" - "Speaker" - -Required properties for the following compatibles: - - "allwinner,sun8i-a23-codec" - - "allwinner,sun8i-h3-codec" - - "allwinner,sun8i-v3s-codec" -- allwinner,codec-analog-controls: A phandle to the codec analog controls - block in the PRCM. - -Example: -codec: codec@1c22c00 { - #sound-dai-cells = <0>; - compatible = "allwinner,sun7i-a20-codec"; - reg = <0x01c22c00 0x40>; - interrupts = <0 30 4>; - clocks = <&apb0_gates 0>, <&codec_clk>; - clock-names = "apb", "codec"; - dmas = <&dma 0 19>, <&dma 0 19>; - dma-names = "rx", "tx"; -}; - -codec: codec@1c22c00 { - #sound-dai-cells = <0>; - compatible = "allwinner,sun6i-a31-codec"; - reg = <0x01c22c00 0x98>; - interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>; - clocks = <&ccu CLK_APB1_CODEC>, <&ccu CLK_CODEC>; - clock-names = "apb", "codec"; - resets = <&ccu RST_APB1_CODEC>; - dmas = <&dma 15>, <&dma 15>; - dma-names = "rx", "tx"; - allwinner,audio-routing = - "Headphone", "HP", - "Speaker", "LINEOUT", - "LINEIN", "Line In", - "MIC1", "MBIAS", - "MIC1", "Mic", - "MIC2", "HBIAS", - "MIC2", "Headset Mic"; -};