Kernel-4.18.0-80.el8_sun8i-a33-codec

Allwinner SUN8I audio codec

On Sun8i-A33 SoCs, the audio is separated in different parts:
- A DAI driver. It uses the “sun4i-i2s” driver which is
documented here:
Documentation/devicetree/bindings/sound/sun4i-i2s.txt
- An analog part of the codec which is handled as PRCM registers.
See Documentation/devicetree/bindings/sound/sun8i-codec-analog.txt
- An digital part of the codec which is documented in this current
binding documentation.
- And finally, an audio card which links all the above components.
The simple-audio card will be used.
See Documentation/devicetree/bindings/sound/simple-card.txt

This bindings documentation exposes Sun8i codec (digital part).

Required properties:

  • compatible: must be “allwinner,sun8i-a33-codec”
  • reg: must contain the registers location and length
  • interrupts: must contain the codec interrupt
  • clocks: a list of phandle + clock-specifer pairs, one for each entry
    in clock-names.
  • clock-names: should contain followings:
    • “bus”: the parent APB clock for this controller
    • “mod”: the parent module clock

Here is an example to add a sound card and the codec binding on sun8i SoCs that
are similar to A33 using simple-card:

sound {
    compatible = "simple-audio-card";
    simple-audio-card,name = "sun8i-a33-audio";
    simple-audio-card,format = "i2s";
    simple-audio-card,frame-master = <&link_codec>;
    simple-audio-card,bitclock-master = <&link_codec>;
    simple-audio-card,mclk-fs = <512>;
    simple-audio-card,aux-devs = <&codec_analog>;
    simple-audio-card,routing =
            "Left DAC", "Digital Left DAC",
            "Right DAC", "Digital Right DAC";

    simple-audio-card,cpu {
        sound-dai = <&dai>;
    };

    link_codec: simple-audio-card,codec {
        sound-dai = <&codec>;
    };

soc@1c00000 {
    [...]

    audio-codec@1c22e00 {
        #sound-dai-cells = <0>;
        compatible = "allwinner,sun8i-a33-codec";
        reg = <0x01c22e00 0x400>;
        interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>;
        clocks = <&ccu CLK_BUS_CODEC>, <&ccu CLK_AC_DIG>;
        clock-names = "bus", "mod";
    };
};