lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1jldve939f.fsf@starbuckisacylon.baylibre.com>
Date: Mon, 13 Jan 2025 15:50:36 +0100
From: Jerome Brunet <jbrunet@...libre.com>
To: jiebing chen via B4 Relay <devnull+jiebing.chen.amlogic.com@...nel.org>
Cc: Liam Girdwood <lgirdwood@...il.com>,  Mark Brown <broonie@...nel.org>,
  Rob Herring <robh@...nel.org>,  Krzysztof Kozlowski <krzk+dt@...nel.org>,
  Conor Dooley <conor+dt@...nel.org>,  Jaroslav Kysela <perex@...ex.cz>,
  Takashi Iwai <tiwai@...e.com>,  Neil Armstrong
 <neil.armstrong@...aro.org>,  Kevin Hilman <khilman@...libre.com>,  Martin
 Blumenstingl <martin.blumenstingl@...glemail.com>,
  jiebing.chen@...ogic.com,  linux-sound@...r.kernel.org,
  devicetree@...r.kernel.org,  linux-kernel@...r.kernel.org,
  linux-arm-kernel@...ts.infradead.org,  linux-amlogic@...ts.infradead.org
Subject: Re: [PATCH 3/3] arm64: dts: amlogic: Add Amlogic S4 Audio

On Mon 13 Jan 2025 at 14:35, jiebing chen via B4 Relay <devnull+jiebing.chen.amlogic.com@...nel.org> wrote:

> From: jiebing chen <jiebing.chen@...ogic.com>
>
> Add basic audio driver support for the Amlogic S4 based Amlogic
> AQ222 board.
>
> Signed-off-by: jiebing chen <jiebing.chen@...ogic.com>
> ---
>  .../boot/dts/amlogic/meson-s4-s805x2-aq222.dts     | 226 ++++++++++++
>  arch/arm64/boot/dts/amlogic/meson-s4.dtsi          | 385 ++++++++++++++++++++-
>  2 files changed, 610 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm64/boot/dts/amlogic/meson-s4-s805x2-aq222.dts b/arch/arm64/boot/dts/amlogic/meson-s4-s805x2-aq222.dts
> index 6730c44642d2910d42ec0c4adf49fefc3514dbec..32f50a5b860435d50d9c5528b43422b705b20130 100644
> --- a/arch/arm64/boot/dts/amlogic/meson-s4-s805x2-aq222.dts
> +++ b/arch/arm64/boot/dts/amlogic/meson-s4-s805x2-aq222.dts
> @@ -75,6 +75,19 @@ vddio_ao1v8: regulator-vddio-ao1v8 {
>  	       regulator-always-on;
>  	};
>  
> +	vcc5v_reg: regulator-vcc-5v {
> +		compatible = "regulator-fixed";
> +		vin-supply = <&main_12v>;
> +		regulator-name = "VCC5V";
> +		regulator-min-microvolt = <5000000>;
> +		regulator-max-microvolt = <5000000>;
> +		gpio = <&gpio GPIOH_7 GPIO_ACTIVE_HIGH>;
> +		startup-delay-us = <7000>;
> +		enable-active-high;
> +		regulator-boot-on;
> +		regulator-always-on;
> +	};
> +
>  	/* SY8120B1ABC DC/DC Regulator. */
>  	vddcpu: regulator-vddcpu {
>  		compatible = "pwm-regulator";
> @@ -129,6 +142,219 @@ vddcpu: regulator-vddcpu {
>  				<699000 98>,
>  				<689000 100>;
>  	};
> +	dmics: audio-codec-1 {
> +		compatible = "dmic-codec";
> +		#sound-dai-cells = <0>;
> +		num-channels = <2>;
> +		wakeup-delay-ms = <50>;
> +		sound-name-prefix = "MIC";
> +	};
> +
> +	dioo2133: audio-amplifier-0 {
> +		compatible = "simple-audio-amplifier";
> +		enable-gpios = <&gpio GPIOH_8 GPIO_ACTIVE_HIGH>;
> +		VCC-supply = <&vcc5v_reg>;
> +		#sound-dai-cells = <0>;
> +		sound-name-prefix = "10U2";
> +	};
> +
> +	spdif_dir: audio-spdif-in {
> +		compatible = "linux,spdif-dir";
> +		#sound-dai-cells = <0>;
> +		sound-name-prefix = "DIR";
> +	};
> +
> +	spdif_dit: audio-spdif-out {
> +		compatible = "linux,spdif-dit";
> +		#sound-dai-cells = <0>;
> +		sound-name-prefix = "DIT";
> +	};
> +
> +	sound {
> +		compatible = "amlogic,axg-sound-card";
> +		model = "aq222";
> +		audio-widgets = "Line", "Lineout";
> +		audio-aux-devs = <&tdmout_a>, <&tdmout_b>, <&tdmout_c>,
> +				 <&tdmin_a>, <&tdmin_b>, <&tdmin_c>,
> +				 <&tdmin_lb>, <&dioo2133>, <&tdmout_pad>, <&toacodec>;
> +		audio-routing = "TDMOUT_A IN 0", "FRDDR_A OUT 0",
> +				"TDMOUT_A IN 1", "FRDDR_B OUT 0",
> +				"TDMOUT_A IN 2", "FRDDR_C OUT 0",
> +				"TDM_A Playback", "TDMOUT_A OUT",
> +				"TDMA_OUT SEL",   "TDM_A Playback",
> +				"TDMOUT_B IN 0", "FRDDR_A OUT 1",
> +				"TDMOUT_B IN 1", "FRDDR_B OUT 1",
> +				"TDMOUT_B IN 2", "FRDDR_C OUT 1",
> +				"TDM_B Playback", "TDMOUT_B OUT",
> +				"TDMB_OUT SEL",   "TDM_B Playback",
> +				"TDMOUT_C IN 0", "FRDDR_A OUT 2",
> +				"TDMOUT_C IN 1", "FRDDR_B OUT 2",
> +				"TDMOUT_C IN 2", "FRDDR_C OUT 2",
> +				"TDM_C Playback", "TDMOUT_C OUT",
> +				"TDMC_OUT SEL",   "TDM_C Playback",
> +				"TOACODEC TDMA", "TDM_A Playback",
> +				"TOACODEC TDMB", "TDM_B Playback",
> +				"TOACODEC TDMC", "TDM_C Playback",
> +				"SPDIFOUT_A IN 0", "FRDDR_A OUT 3",
> +				"SPDIFOUT_A IN 1", "FRDDR_B OUT 3",
> +				"SPDIFOUT_A IN 2", "FRDDR_C OUT 3",
> +				"SPDIFOUT_B IN 0", "FRDDR_A OUT 4",
> +				"SPDIFOUT_B IN 1", "FRDDR_B OUT 4",
> +				"SPDIFOUT_B IN 2", "FRDDR_C OUT 4",
> +				"TDMIN_A IN 0", "TDM_A Capture",
> +				"TDMIN_A IN 1", "TDM_B Capture",
> +				"TDMIN_A IN 2", "TDM_C Capture",
> +				"TDMIN_A IN 3", "TDM_A Loopback",
> +				"TDMIN_A IN 4", "TDM_B Loopback",
> +				"TDMIN_A IN 5", "TDM_C Loopback",
> +				"TDMIN_B IN 0", "TDM_A Capture",
> +				"TDMIN_B IN 1", "TDM_B Capture",
> +				"TDMIN_B IN 2", "TDM_C Capture",
> +				"TDMIN_B IN 3", "TDM_A Loopback",
> +				"TDMIN_B IN 4", "TDM_B Loopback",
> +				"TDMIN_B IN 5", "TDM_C Loopback",
> +				"TDMIN_C IN 0", "TDM_A Capture",
> +				"TDMIN_C IN 1", "TDM_B Capture",
> +				"TDMIN_C IN 2", "TDM_C Capture",
> +				"TDMIN_C IN 3", "TDM_A Loopback",
> +				"TDMIN_C IN 4", "TDM_B Loopback",
> +				"TDMIN_C IN 5", "TDM_C Loopback",
> +				"TDMIN_LB IN 3", "TDM_A Capture",
> +				"TDMIN_LB IN 4", "TDM_B Capture",
> +				"TDMIN_LB IN 5", "TDM_C Capture",
> +				"TDMIN_LB IN 0", "TDM_A Loopback",
> +				"TDMIN_LB IN 1", "TDM_B Loopback",
> +				"TDMIN_LB IN 2", "TDM_C Loopback",
> +				"TODDR_A IN 0", "TDMIN_A OUT",
> +				"TODDR_B IN 0", "TDMIN_A OUT",
> +				"TODDR_C IN 0", "TDMIN_A OUT",
> +				"TODDR_A IN 1", "TDMIN_B OUT",
> +				"TODDR_B IN 1", "TDMIN_B OUT",
> +				"TODDR_C IN 1", "TDMIN_B OUT",
> +				"TODDR_A IN 2", "TDMIN_C OUT",
> +				"TODDR_B IN 2", "TDMIN_C OUT",
> +				"TODDR_C IN 2", "TDMIN_C OUT",
> +				"TODDR_A IN 3", "SPDIFIN Capture",
> +				"TODDR_B IN 3", "SPDIFIN Capture",
> +				"TODDR_C IN 3", "SPDIFIN Capture",
> +				"TODDR_A IN 6", "TDMIN_LB OUT",
> +				"TODDR_B IN 6", "TDMIN_LB OUT",
> +				"TODDR_C IN 6", "TDMIN_LB OUT",
> +				"10U2 INL", "ACODEC LOLP",
> +				"10U2 INR", "ACODEC LORP",
> +				"Lineout", "10U2 OUTL",
> +				"Lineout", "10U2 OUTR";
> +		assigned-clocks = <&clkc_pll CLKID_HIFI_PLL>,
> +				  <&clkc_pll CLKID_MPLL2>,
> +				  <&clkc_pll CLKID_MPLL0>,
> +				  <&clkc_pll CLKID_MPLL1>;
> +		assigned-clock-rates = <491520000>,
> +				       <294912000>,
> +				       <270950400>,
> +				       <393216000>;

Why do you need 4 base rates ? Which rate family does each provide ?

> +
> +		dai-link-0 {
> +			sound-dai = <&frddr_a>;
> +		};
> +
> +		dai-link-1 {
> +			sound-dai = <&frddr_b>;
> +		};
> +
> +		dai-link-2 {
> +			sound-dai = <&frddr_c>;
> +		};
> +
> +		dai-link-3 {
> +			sound-dai = <&toddr_a>;
> +		};
> +
> +		dai-link-4 {
> +			sound-dai = <&toddr_b>;
> +		};
> +
> +		dai-link-5 {
> +			sound-dai = <&toddr_c>;
> +		};
> +
> +		/* Connected to the WIFI/BT chip */
> +		dai-link-6 {
> +			sound-dai = <&tdmif_a>;
> +			dai-format = "dsp_a";
> +			dai-tdm-slot-tx-mask-0 = <1 1>;
> +			mclk-fs = <256>;
> +			codec-0 {
> +				sound-dai = <&tohdmitx TOHDMITX_I2S_IN_A>;
> +			};
> +		};
> +
> +		/* Connected to the onboard AD82584F DAC */
> +		dai-link-7 {
> +			sound-dai = <&tdmif_b>;
> +			dai-format = "i2s";
> +			dai-tdm-slot-tx-mask-0 = <1 1>;
> +			mclk-fs = <256>;
> +
> +			codec-0 {
> +				sound-dai = <&acodec>;
> +			};
> +
> +			codec-1 {
> +				sound-dai = <&tohdmitx TOHDMITX_I2S_IN_B>;
> +			};
> +		};
> +
> +		/* 8ch HDMI interface */
> +		dai-link-8 {
> +			sound-dai = <&tdmif_c>;
> +			dai-format = "i2s";
> +			dai-tdm-slot-tx-mask-0 = <1 1>;
> +			dai-tdm-slot-tx-mask-1 = <1 1>;
> +			dai-tdm-slot-tx-mask-2 = <1 1>;
> +			dai-tdm-slot-tx-mask-3 = <1 1>;
> +			mclk-fs = <256>;
> +
> +			codec-0 {
> +				sound-dai = <&acodec>;
> +			};
> +
> +			codec-1 {
> +				sound-dai = <&tohdmitx TOHDMITX_I2S_IN_C>;
> +			};
> +		};
> +
> +		/* spdif hdmi and coax output */
> +		dai-link-9 {
> +			sound-dai = <&spdifout_a>;
> +
> +			codec-0 {
> +				sound-dai = <&spdif_dit>;
> +			};
> +
> +			codec-1 {
> +				sound-dai = <&tohdmitx TOHDMITX_SPDIF_IN_A>;
> +			};
> +		};
> +
> +		/* spdif hdmi interface */
> +		dai-link-10 {
> +			sound-dai = <&spdifout_b>;
> +
> +			codec {
> +				sound-dai = <&tohdmitx TOHDMITX_SPDIF_IN_B>;
> +			};
> +		};
> +
> +		/* spdif coax input */
> +		dai-link-11 {
> +			sound-dai = <&spdifin>;
> +
> +			codec {
> +				sound-dai = <&spdif_dir>;
> +			};
> +		};
> +	};
> +
>  };
>  
>  &pwm_ef {
> diff --git a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> index 957577d986c0675a503115e1ccbc4387c2051620..87a00ace23131e31822bb43fbe956b8abcbaef40 100644
> --- a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> +++ b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> @@ -11,7 +11,11 @@
>  #include <dt-bindings/clock/amlogic,s4-peripherals-clkc.h>
>  #include <dt-bindings/power/meson-s4-power.h>
>  #include <dt-bindings/reset/amlogic,meson-s4-reset.h>
> -
> +#include <dt-bindings/clock/axg-audio-clkc.h>
> +#include <dt-bindings/reset/amlogic,meson-axg-audio-arb.h>
> +#include <dt-bindings/reset/amlogic,meson-g12a-audio-reset.h>
> +#include <dt-bindings/sound/meson-g12a-toacodec.h>
> +#include <dt-bindings/sound/meson-g12a-tohdmitx.h>
>  / {
>  	cpus {
>  		#address-cells = <2>;
> @@ -46,6 +50,42 @@ cpu3: cpu@3 {
>  		};
>  	};
>  
> +	tdmif_a: audio-controller-0 {
> +		compatible = "amlogic,axg-tdm-iface";
> +		#sound-dai-cells = <0>;
> +		sound-name-prefix = "TDM_A";
> +		clocks = <&clkc_audio AUD_CLKID_MST_A_MCLK>,
> +			 <&clkc_audio AUD_CLKID_MST_A_SCLK>,
> +			 <&clkc_audio AUD_CLKID_MST_A_LRCLK>;
> +		clock-names = "mclk", "sclk", "lrclk";
> +		assigned-clocks = <&clkc_audio AUD_CLKID_MST_A_MCLK_SEL>;
> +		assigned-clock-parents = <&clkc_pll CLKID_HIFI_PLL>;

Based on clock provider used, I doubt this is of any use.

> +	};
> +
> +	tdmif_b: audio-controller-1 {
> +		compatible = "amlogic,axg-tdm-iface";
> +		#sound-dai-cells = <0>;
> +		sound-name-prefix = "TDM_B";
> +		clocks = <&clkc_audio AUD_CLKID_MST_B_MCLK>,
> +			 <&clkc_audio AUD_CLKID_MST_B_SCLK>,
> +			 <&clkc_audio AUD_CLKID_MST_B_LRCLK>;
> +		clock-names = "mclk", "sclk", "lrclk";
> +		assigned-clocks = <&clkc_audio AUD_CLKID_MST_B_MCLK_SEL>;
> +		assigned-clock-parents = <&clkc_pll CLKID_HIFI_PLL>;
> +	};
> +
> +	tdmif_c: audio-controller-2 {
> +		compatible = "amlogic,axg-tdm-iface";
> +		#sound-dai-cells = <0>;
> +		sound-name-prefix = "TDM_C";
> +		clocks = <&clkc_audio AUD_CLKID_MST_C_MCLK>,
> +			 <&clkc_audio AUD_CLKID_MST_C_SCLK>,
> +			 <&clkc_audio AUD_CLKID_MST_C_LRCLK>;
> +		clock-names = "mclk", "sclk", "lrclk";
> +		assigned-clocks = <&clkc_audio AUD_CLKID_MST_C_MCLK_SEL>;
> +		assigned-clock-parents = <&clkc_pll CLKID_HIFI_PLL>;
> +	};
> +
>  	timer {
>  		compatible = "arm,armv8-timer";
>  		interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
> @@ -850,3 +890,346 @@ emmc: mmc@...8c000 {
>  		};
>  	};
>  };
> +
> +&apb4 {
> +	audio: bus@...000 {
> +		compatible = "simple-bus";
> +		reg = <0x0 0x330000 0x0 0x1000>;
> +		#address-cells = <2>;
> +		#size-cells = <2>;
> +		ranges = <0x0 0x0 0x0 0x330000 0x0 0x1000>;
> +
> +		clkc_audio: clock-controller@0 {
> +			compatible = "amlogic,sm1-audio-clkc";

I suspect the DT folks would like having SoC specific compatible in
addition to the fall back. In that case, I think that would be wise. I
doubt the compatibility will hold in the long run.

Same goes for the other HW components.

> +			reg = <0x0 0x0 0x0 0xb4>;
> +			#clock-cells = <1>;
> +			#reset-cells = <1>;
> +			power-domains = <&pwrc PWRC_S4_AUDIO_ID>;
> +			clocks = <&clkc_periphs CLKID_AUDIO>,
> +				 <&clkc_pll CLKID_MPLL0>,
> +				 <&clkc_pll CLKID_MPLL1>,
> +				 <&clkc_pll CLKID_MPLL2>,
> +				 <&clkc_pll CLKID_MPLL3>,
> +				 <&clkc_pll CLKID_HIFI_PLL>,
> +				 <&clkc_pll CLKID_FCLK_DIV3>,
> +				 <&clkc_pll CLKID_FCLK_DIV4>,
> +				 <&clkc_pll CLKID_FCLK_DIV5>;
> +			clock-names = "pclk",
> +				      "mst_in0",
> +				      "mst_in1",
> +				      "mst_in2",
> +				      "mst_in3",
> +				      "mst_in4",
> +				      "mst_in5",
> +				      "mst_in6",
> +				      "mst_in7";
> +
> +			resets = <&reset RESET_AUDIO>;
> +		};
> +
> +		toddr_a: audio-controller@100 {
> +			compatible = "amlogic,sm1-toddr",
> +				     "amlogic,axg-toddr";
> +			reg = <0x0 0x100 0x0 0x2c>;
> +			#sound-dai-cells = <0>;
> +			sound-name-prefix = "TODDR_A";
> +			interrupts = <GIC_SPI 32 IRQ_TYPE_EDGE_RISING>;
> +			clocks = <&clkc_audio AUD_CLKID_TODDR_A>;
> +			resets = <&arb AXG_ARB_TODDR_A>,
> +				 <&clkc_audio AUD_RESET_TODDR_A>;
> +			reset-names = "arb", "rst";
> +			amlogic,fifo-depth = <8192>;
> +		};
> +
> +		toddr_b: audio-controller@140 {
> +			compatible = "amlogic,sm1-toddr",
> +				     "amlogic,axg-toddr";
> +			reg = <0x0 0x140 0x0 0x2c>;
> +			#sound-dai-cells = <0>;
> +			sound-name-prefix = "TODDR_B";
> +			interrupts = <GIC_SPI 33 IRQ_TYPE_EDGE_RISING>;
> +			clocks = <&clkc_audio AUD_CLKID_TODDR_B>;
> +			resets = <&arb AXG_ARB_TODDR_B>,
> +				 <&clkc_audio AUD_RESET_TODDR_B>;
> +			reset-names = "arb", "rst";
> +			amlogic,fifo-depth = <256>;
> +		};
> +
> +		toddr_c: audio-controller@180 {
> +			compatible = "amlogic,sm1-toddr",
> +				     "amlogic,axg-toddr";
> +			reg = <0x0 0x180 0x0 0x2c>;
> +			#sound-dai-cells = <0>;
> +			sound-name-prefix = "TODDR_C";
> +			interrupts = <GIC_SPI 34 IRQ_TYPE_EDGE_RISING>;
> +			clocks = <&clkc_audio AUD_CLKID_TODDR_C>;
> +			resets = <&arb AXG_ARB_TODDR_C>,
> +				 <&clkc_audio AUD_RESET_TODDR_C>;
> +			reset-names = "arb", "rst";
> +			amlogic,fifo-depth = <256>;
> +		};
> +
> +		frddr_a: audio-controller@1c0 {
> +			compatible = "amlogic,sm1-frddr",
> +				     "amlogic,axg-frddr";
> +			reg = <0x0 0x1c0 0x0 0x2c>;
> +			#sound-dai-cells = <0>;
> +			sound-name-prefix = "FRDDR_A";
> +			interrupts = <GIC_SPI 36 IRQ_TYPE_EDGE_RISING>;
> +			clocks = <&clkc_audio AUD_CLKID_FRDDR_A>;
> +			resets = <&arb AXG_ARB_FRDDR_A>,
> +				 <&clkc_audio AUD_RESET_FRDDR_A>;
> +			reset-names = "arb", "rst";
> +			amlogic,fifo-depth = <512>;
> +		};
> +
> +		frddr_b: audio-controller@200 {
> +			compatible = "amlogic,sm1-frddr",
> +				     "amlogic,axg-frddr";
> +			reg = <0x0 0x200 0x0 0x2c>;
> +			#sound-dai-cells = <0>;
> +			sound-name-prefix = "FRDDR_B";
> +			interrupts = <GIC_SPI 37 IRQ_TYPE_EDGE_RISING>;
> +			clocks = <&clkc_audio AUD_CLKID_FRDDR_B>;
> +			resets = <&arb AXG_ARB_FRDDR_B>,
> +				 <&clkc_audio AUD_RESET_FRDDR_B>;
> +			reset-names = "arb", "rst";
> +			amlogic,fifo-depth = <256>;
> +		};
> +
> +		frddr_c: audio-controller@240 {
> +			compatible = "amlogic,sm1-frddr",
> +				     "amlogic,axg-frddr";
> +			reg = <0x0 0x240 0x0 0x2c>;
> +			#sound-dai-cells = <0>;
> +			sound-name-prefix = "FRDDR_C";
> +			interrupts = <GIC_SPI 38 IRQ_TYPE_EDGE_RISING>;
> +			clocks = <&clkc_audio AUD_CLKID_FRDDR_C>;
> +			resets = <&arb AXG_ARB_FRDDR_C>,
> +				 <&clkc_audio AUD_RESET_FRDDR_C>;
> +			reset-names = "arb", "rst";
> +			amlogic,fifo-depth = <256>;
> +		};
> +
> +		arb: reset-controller@280 {
> +			compatible = "amlogic,meson-sm1-audio-arb";
> +			reg = <0x0 0x280 0x0 0x4>;
> +			#reset-cells = <1>;
> +			clocks = <&clkc_audio AUD_CLKID_DDR_ARB>;
> +		};
> +
> +		tdmin_a: audio-controller@300 {
> +			compatible = "amlogic,sm1-tdmin",
> +				     "amlogic,axg-tdmin";
> +			reg = <0x0 0x300 0x0 0x40>;
> +			sound-name-prefix = "TDMIN_A";
> +			resets = <&clkc_audio AUD_RESET_TDMIN_A>;
> +			clocks = <&clkc_audio AUD_CLKID_TDMIN_A>,
> +				 <&clkc_audio AUD_CLKID_TDMIN_A_SCLK>,
> +				 <&clkc_audio AUD_CLKID_TDMIN_A_SCLK_SEL>,
> +				 <&clkc_audio AUD_CLKID_TDMIN_A_LRCLK>,
> +				 <&clkc_audio AUD_CLKID_TDMIN_A_LRCLK>;
> +			clock-names = "pclk", "sclk", "sclk_sel",
> +				      "lrclk", "lrclk_sel";
> +		};
> +
> +		tdmin_b: audio-controller@340 {
> +			compatible = "amlogic,sm1-tdmin",
> +				     "amlogic,axg-tdmin";
> +			reg = <0x0 0x340 0x0 0x40>;
> +			sound-name-prefix = "TDMIN_B";
> +			resets = <&clkc_audio AUD_RESET_TDMIN_B>;
> +			clocks = <&clkc_audio AUD_CLKID_TDMIN_B>,
> +				 <&clkc_audio AUD_CLKID_TDMIN_B_SCLK>,
> +				 <&clkc_audio AUD_CLKID_TDMIN_B_SCLK_SEL>,
> +				 <&clkc_audio AUD_CLKID_TDMIN_B_LRCLK>,
> +				 <&clkc_audio AUD_CLKID_TDMIN_B_LRCLK>;
> +			clock-names = "pclk", "sclk", "sclk_sel",
> +				      "lrclk", "lrclk_sel";
> +		};
> +
> +		tdmin_c: audio-controller@380 {
> +			compatible = "amlogic,sm1-tdmin",
> +				     "amlogic,axg-tdmin";
> +			reg = <0x0 0x380 0x0 0x40>;
> +			sound-name-prefix = "TDMIN_C";
> +			resets = <&clkc_audio AUD_RESET_TDMIN_C>;
> +			clocks = <&clkc_audio AUD_CLKID_TDMIN_C>,
> +				 <&clkc_audio AUD_CLKID_TDMIN_C_SCLK>,
> +				 <&clkc_audio AUD_CLKID_TDMIN_C_SCLK_SEL>,
> +				 <&clkc_audio AUD_CLKID_TDMIN_C_LRCLK>,
> +				 <&clkc_audio AUD_CLKID_TDMIN_C_LRCLK>;
> +			clock-names = "pclk", "sclk", "sclk_sel",
> +				      "lrclk", "lrclk_sel";
> +		};
> +
> +		tdmin_lb: audio-controller@3c0 {
> +			compatible = "amlogic,sm1-tdmin",
> +				     "amlogic,axg-tdmin";
> +			reg = <0x0 0x3c0 0x0 0x40>;
> +			sound-name-prefix = "TDMIN_LB";
> +			resets = <&clkc_audio AUD_RESET_TDMIN_LB>;
> +			clocks = <&clkc_audio AUD_CLKID_TDMIN_LB>,
> +				 <&clkc_audio AUD_CLKID_TDMIN_LB_SCLK>,
> +				 <&clkc_audio AUD_CLKID_TDMIN_LB_SCLK_SEL>,
> +				 <&clkc_audio AUD_CLKID_TDMIN_LB_LRCLK>,
> +				 <&clkc_audio AUD_CLKID_TDMIN_LB_LRCLK>;
> +			clock-names = "pclk", "sclk", "sclk_sel",
> +				      "lrclk", "lrclk_sel";
> +		};
> +
> +		spdifin: audio-controller@400 {
> +			compatible = "amlogic,g12a-spdifin",
> +				     "amlogic,axg-spdifin";
> +			reg = <0x0 0x400 0x0 0x30>;
> +			#sound-dai-cells = <0>;
> +			sound-name-prefix = "SPDIFIN";
> +			interrupts = <GIC_SPI 151 IRQ_TYPE_EDGE_RISING>;
> +			clocks = <&clkc_audio AUD_CLKID_SPDIFIN>,
> +			<&clkc_audio AUD_CLKID_SPDIFIN_CLK>;
> +			clock-names = "pclk", "refclk";
> +			resets = <&clkc_audio AUD_RESET_SPDIFIN>;
> +		};
> +
> +		spdifout_a: audio-controller@480 {
> +			compatible = "amlogic,g12a-spdifout",
> +				     "amlogic,axg-spdifout";
> +			reg = <0x0 0x480 0x0 0x50>;
> +			#sound-dai-cells = <0>;
> +			sound-name-prefix = "SPDIFOUT_A";
> +			clocks = <&clkc_audio AUD_CLKID_SPDIFOUT>,
> +			<&clkc_audio AUD_CLKID_SPDIFOUT_CLK>;
> +			clock-names = "pclk", "mclk";
> +			resets = <&clkc_audio AUD_RESET_SPDIFOUT>;
> +		};
> +
> +		tdmout_a: audio-controller@500 {
> +			compatible = "amlogic,sm1-tdmout";
> +			reg = <0x0 0x500 0x0 0x40>;
> +			sound-name-prefix = "TDMOUT_A";
> +			resets = <&clkc_audio AUD_RESET_TDMOUT_A>;
> +			clocks = <&clkc_audio AUD_CLKID_TDMOUT_A>,
> +				 <&clkc_audio AUD_CLKID_TDMOUT_A_SCLK>,
> +				 <&clkc_audio AUD_CLKID_TDMOUT_A_SCLK_SEL>,
> +				 <&clkc_audio AUD_CLKID_TDMOUT_A_LRCLK>,
> +				 <&clkc_audio AUD_CLKID_TDMOUT_A_LRCLK>;
> +			clock-names = "pclk", "sclk", "sclk_sel",
> +				      "lrclk", "lrclk_sel";
> +		};
> +
> +		tdmout_b: audio-controller@540 {
> +			compatible = "amlogic,sm1-tdmout";
> +			reg = <0x0 0x540 0x0 0x40>;
> +			sound-name-prefix = "TDMOUT_B";
> +			resets = <&clkc_audio AUD_RESET_TDMOUT_B>;
> +			clocks = <&clkc_audio AUD_CLKID_TDMOUT_B>,
> +				 <&clkc_audio AUD_CLKID_TDMOUT_B_SCLK>,
> +				 <&clkc_audio AUD_CLKID_TDMOUT_B_SCLK_SEL>,
> +				 <&clkc_audio AUD_CLKID_TDMOUT_B_LRCLK>,
> +				 <&clkc_audio AUD_CLKID_TDMOUT_B_LRCLK>;
> +			clock-names = "pclk", "sclk", "sclk_sel",
> +				      "lrclk", "lrclk_sel";
> +		};
> +
> +		tdmout_c: audio-controller@580 {
> +			compatible = "amlogic,sm1-tdmout";
> +			reg = <0x0 0x580 0x0 0x40>;
> +			sound-name-prefix = "TDMOUT_C";
> +			resets = <&clkc_audio AUD_RESET_TDMOUT_C>;
> +			clocks = <&clkc_audio AUD_CLKID_TDMOUT_C>,
> +				 <&clkc_audio AUD_CLKID_TDMOUT_C_SCLK>,
> +				 <&clkc_audio AUD_CLKID_TDMOUT_C_SCLK_SEL>,
> +				 <&clkc_audio AUD_CLKID_TDMOUT_C_LRCLK>,
> +				 <&clkc_audio AUD_CLKID_TDMOUT_C_LRCLK>;
> +			clock-names = "pclk", "sclk", "sclk_sel",
> +				      "lrclk", "lrclk_sel";
> +		};
> +
> +		spdifout_b: audio-controller@680 {
> +			compatible = "amlogic,g12a-spdifout",
> +				     "amlogic,axg-spdifout";
> +			reg = <0x0 0x680 0x0 0x50>;
> +			#sound-dai-cells = <0>;
> +			sound-name-prefix = "SPDIFOUT_B";
> +			clocks = <&clkc_audio AUD_CLKID_SPDIFOUT_B>,
> +				 <&clkc_audio AUD_CLKID_SPDIFOUT_B_CLK>;
> +			clock-names = "pclk", "mclk";
> +			resets = <&clkc_audio AUD_RESET_SPDIFOUT_B>;
> +		};
> +
> +		toacodec: audio-controller@740 {
> +			compatible = "amlogic,s4-tocodec";
> +			reg = <0x0 0x740 0x0 0x4>;
> +			sound-name-prefix = "TOACODEC";
> +			resets = <&clkc_audio AUD_RESET_TOACODEC>;
> +		};
> +
> +		tohdmitx: audio-controller@744 {
> +			compatible = "amlogic,sm1-tohdmitx",
> +				     "amlogic,g12a-tohdmitx";
> +			reg = <0x0 0x744 0x0 0x4>;
> +			#sound-dai-cells = <1>;
> +			sound-name-prefix = "TOHDMITX";
> +			resets = <&clkc_audio AUD_RESET_TOHDMITX>;
> +		};
> +
> +		toddr_d: audio-controller@840 {
> +			compatible = "amlogic,sm1-toddr",
> +				     "amlogic,axg-toddr";
> +			reg = <0x0 0x840 0x0 0x2c>;
> +			#sound-dai-cells = <0>;
> +			sound-name-prefix = "TODDR_D";
> +			interrupts = <GIC_SPI 45 IRQ_TYPE_EDGE_RISING>;
> +			clocks = <&clkc_audio AUD_CLKID_TODDR_D>;
> +			resets = <&arb AXG_ARB_TODDR_D>,
> +				 <&clkc_audio AUD_RESET_TODDR_D>;
> +			reset-names = "arb", "rst";
> +			amlogic,fifo-depth = <256>;
> +		};
> +
> +		frddr_d: audio-controller@880 {
> +			 compatible = "amlogic,sm1-frddr",
> +				      "amlogic,axg-frddr";
> +			reg = <0x0 0x880 0x0 0x2c>;
> +			#sound-dai-cells = <0>;
> +			sound-name-prefix = "FRDDR_D";
> +			interrupts = <GIC_SPI 46 IRQ_TYPE_EDGE_RISING>;
> +			clocks = <&clkc_audio AUD_CLKID_FRDDR_D>;
> +			resets = <&arb AXG_ARB_FRDDR_D>,
> +				 <&clkc_audio AUD_RESET_FRDDR_D>;
> +			reset-names = "arb", "rst";
> +			amlogic,fifo-depth = <256>;
> +		};
> +
> +		tdmout_pad: audio-controller@E58 {
> +			compatible = "amlogic,s4-tdmout-pad";
> +			reg = <0x0 0xe58 0x0 0x28>;
> +		};
> +	};
> +
> +	pdm: audio-controller@...000 {
> +		compatible = "amlogic,sm1-pdm",
> +			     "amlogic,axg-pdm";
> +		reg = <0x0 0x331000 0x0 0x34>;
> +		#sound-dai-cells = <0>;
> +		sound-name-prefix = "PDM";
> +		clocks = <&clkc_audio AUD_CLKID_PDM>,
> +			 <&clkc_audio AUD_CLKID_PDM_DCLK>,
> +			 <&clkc_audio AUD_CLKID_PDM_SYSCLK>;
> +		clock-names = "pclk", "dclk", "sysclk";
> +		resets = <&clkc_audio AUD_RESET_PDM>;
> +		assigned-clocks = <&clkc_audio AUD_CLKID_PDM_DCLK_SEL>,
> +				  <&clkc_audio AUD_CLKID_PDM_SYSCLK_SEL>;
> +		assigned-clock-parents = <&clkc_pll CLKID_HIFI_PLL>,<&clkc_pll CLKID_HIFI_PLL>;
> +	};
> +	 acodec: audio-controller@...00 {
> +		compatible = "amlogic,t9015";
> +		reg = <0x0 0x1A000 0x0 0x14>;
> +		#sound-dai-cells = <0>;
> +		sound-name-prefix = "ACODEC";
> +		clocks = <&clkc_periphs CLKID_ACODEC>;
> +		clock-names = "pclk";
> +		resets = <&reset RESET_ACODEC>;
> +	};
> +
> +};

-- 
Jerome

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ