diff mbox

[v2] ARM: dts: exynos: Add entries for sound support on Odroid-XU board

Message ID 1474024920-32744-1-git-send-email-s.nawrocki@samsung.com (mailing list archive)
State New, archived
Headers show

Commit Message

This patch adds device nodes for the AUDSS clock controller,
peripheral DMA 0/1 controllers and the Audio Subsystem I2S controller.
These entries are required for sound support on Odroid-XU board.

Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
---
This patch depends on a patch adding clock ID macro definitions.
I'm going to provide a topic branch containing required changes.

Changes since v1:
 - GIC_SPI, IRQ_TYPE_NONE used in the PDMA and max98080 interrupt
   specifiers,
 - assigned-clock-* properties moved to respective controller
   nodes.
---
 arch/arm/boot/dts/exynos5410-odroidxu.dts | 69 +++++++++++++++++++++++++++++++
 arch/arm/boot/dts/exynos5410-pinctrl.dtsi |  9 ++++
 arch/arm/boot/dts/exynos5410.dtsi         | 59 ++++++++++++++++++++++++++
 3 files changed, 137 insertions(+)

Comments

Krzysztof Kozlowski Sept. 16, 2016, 11:58 a.m. UTC | #1
On 09/16/2016 01:25 PM, Sylwester Nawrocki wrote:
> On 09/16/2016 01:22 PM, Sylwester Nawrocki wrote:
>> This patch adds device nodes for the AUDSS clock controller,
>> peripheral DMA 0/1 controllers and the Audio Subsystem I2S controller.
>> These entries are required for sound support on Odroid-XU board.
>>
>> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
>> ---
>> This patch depends on a patch adding clock ID macro definitions.
>> I'm going to provide a topic branch containing required changes.
>>
>> Changes since v1:
>>  - GIC_SPI, IRQ_TYPE_NONE used in the PDMA and max98080 interrupt
>>    specifiers,
>>  - assigned-clock-* properties moved to respective controller
>>    nodes.
> 
> And here is a pull request containing clk dependency patches:
> 
> The following changes since commit 29b4817d4018df78086157ea3a55c1d9424a7cfc:
> 
>   Linux 4.8-rc1 (2016-08-07 18:18:00 -0700)
> 
> are available in the git repository at:
> 
>   git://linuxtv.org/snawrocki/samsung.git tags/clk-v4.9-exynos54x0-dt
> 
> for you to fetch changes up to 58d6506f327e3d192998ba03632f546da221b8d8:
> 
>   clk: samsung: exynos5410: Add clock IDs for PDMA and EPLL clocks (2016-09-09
> 10:13:02 +0200)
> 

Pulled and applied, thanks!

Krzysztof
Krzysztof Kozlowski Sept. 17, 2016, 8 p.m. UTC | #2
On Fri, Sep 16, 2016 at 01:58:32PM +0200, Krzysztof Kozlowski wrote:
> On 09/16/2016 01:25 PM, Sylwester Nawrocki wrote:
> > On 09/16/2016 01:22 PM, Sylwester Nawrocki wrote:
> >> This patch adds device nodes for the AUDSS clock controller,
> >> peripheral DMA 0/1 controllers and the Audio Subsystem I2S controller.
> >> These entries are required for sound support on Odroid-XU board.
> >>
> >> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
> >> ---
> >> This patch depends on a patch adding clock ID macro definitions.
> >> I'm going to provide a topic branch containing required changes.
> >>
> >> Changes since v1:
> >>  - GIC_SPI, IRQ_TYPE_NONE used in the PDMA and max98080 interrupt
> >>    specifiers,
> >>  - assigned-clock-* properties moved to respective controller
> >>    nodes.
> > 
> > And here is a pull request containing clk dependency patches:
> > 
> > The following changes since commit 29b4817d4018df78086157ea3a55c1d9424a7cfc:
> > 
> >   Linux 4.8-rc1 (2016-08-07 18:18:00 -0700)
> > 
> > are available in the git repository at:
> > 
> >   git://linuxtv.org/snawrocki/samsung.git tags/clk-v4.9-exynos54x0-dt
> > 
> > for you to fetch changes up to 58d6506f327e3d192998ba03632f546da221b8d8:
> > 
> >   clk: samsung: exynos5410: Add clock IDs for PDMA and EPLL clocks (2016-09-09
> > 10:13:02 +0200)
> > 
> 
> Pulled and applied, thanks!
>

This does not boot...
http://www.krzk.eu/builders/boot-odroid-xu-exynos/builds/216
http://www.krzk.eu/builders/boot-odroid-xu-multi_v7/builds/195

I am going to send pull request this weekend (or Monday) so probably this
won't be included. If by any chance you prepare a fix soon, then it
will save me from rebasing the branch.

Best regards,
Krzysztof
Krzysztof Kozlowski Sept. 22, 2016, 6:40 p.m. UTC | #3
On Mon, Sep 19, 2016 at 10:47:46AM +0200, Sylwester Nawrocki wrote:
> On 09/17/2016 10:00 PM, Krzysztof Kozlowski wrote:
> > On Fri, Sep 16, 2016 at 01:58:32PM +0200, Krzysztof Kozlowski wrote:
> >> > On 09/16/2016 01:25 PM, Sylwester Nawrocki wrote:
> >>> > > On 09/16/2016 01:22 PM, Sylwester Nawrocki wrote:
> >>>> > >> This patch adds device nodes for the AUDSS clock controller,
> >>>> > >> peripheral DMA 0/1 controllers and the Audio Subsystem I2S controller.
> >>>> > >> These entries are required for sound support on Odroid-XU board.
> >>>> > >>
> >>>> > >> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
> >>>> > >> ---
> >>>> > >> This patch depends on a patch adding clock ID macro definitions.
> >>>> > >> I'm going to provide a topic branch containing required changes.
> >>>> > >>
> >>>> > >> Changes since v1:
> >>>> > >>  - GIC_SPI, IRQ_TYPE_NONE used in the PDMA and max98080 interrupt
> >>>> > >>    specifiers,
> >>>> > >>  - assigned-clock-* properties moved to respective controller
> >>>> > >>    nodes.
> >>> > > 
> >>> > > And here is a pull request containing clk dependency patches:
> >>> > > 
> >>> > > The following changes since commit 29b4817d4018df78086157ea3a55c1d9424a7cfc:
> >>> > > 
> >>> > >   Linux 4.8-rc1 (2016-08-07 18:18:00 -0700)
> >>> > > 
> >>> > > are available in the git repository at:
> >>> > > 
> >>> > >   git://linuxtv.org/snawrocki/samsung.git tags/clk-v4.9-exynos54x0-dt
> >>> > > 
> >>> > > for you to fetch changes up to 58d6506f327e3d192998ba03632f546da221b8d8:
> >>> > > 
> >>> > >   clk: samsung: exynos5410: Add clock IDs for PDMA and EPLL clocks (2016-09-09
> >>> > > 10:13:02 +0200)
> >>> > > 
> >> > 
> >> > Pulled and applied, thanks!
> >
> > This does not boot...
> > http://www.krzk.eu/builders/boot-odroid-xu-exynos/builds/216
> > http://www.krzk.eu/builders/boot-odroid-xu-multi_v7/builds/195
> > 
> > I am going to send pull request this weekend (or Monday) so probably this
> > won't be included. If by any chance you prepare a fix soon, then it
> > will save me from rebasing the branch.
> 
> Oops, indeed, I didn't test with just that part of clk changes applied.
> The only resolution here I can see is to pull my whole clk branch,
> it has already been pulled to the upstream clk tree.

Hmmmm, why the clock implementation is needed? Usually it should work
without it. The driver will just handle ENODEV or DEFER... Maybe there
is similar issue to the serial: e51e4d8a185d ("serial: samsung: Fix ERR
pointer dereference on deferred probe")?

Anyway, the patch will wait till next window opens. I hope it will work
then. :)

Best regards,
Krzysztof


> 
> The following changes since commit 29b4817d4018df78086157ea3a55c1d9424a7cfc:
> 
>   Linux 4.8-rc1 (2016-08-07 18:18:00 -0700)
> 
> are available in the git repository at:
> 
>   git://linuxtv.org/snawrocki/samsung.git tags/clk-v4.9-samsung
> 
> for you to fetch changes up to be95d2c7d918b2b7b973378a1e92bdc6559c21f9:
> 
>   clk: samsung: Add support for EPLL on exynos5410 (2016-09-09 17:35:13 +0200)
> 
> ----------------------------------------------------------------
> In addition to a few clean up and code consolidation patches this
> includes:
> - addition of sound subsystem related clocks for Exynos5410 SoC
>   (EPLL, PDMA) and support for "samsung,exynos5410-audss-clock"
>   compatible in the clk-exynos-audss driver,
> - addition of DRAM controller related clocks for exynos5420,
> - MAINTAINERS update adding Chanwoo Choi as the Samsung SoC
>   clock drivers co-maintainer.
> 
> ----------------------------------------------------------------
> Chanwoo Choi (5):
>       clk: samsung: Add clock IDs for the CMU_CDREX (DRAM Express Controller)
>       MAINTAINERS: Add myself as Samsung SoC clock drivers co-maintainer
>       clk: samsung: exynos5260: Move struct samsung_cmu_info to init section
>       clk: samsung: exynos5410: Use samsung_cmu_register_one() to simplify code
>       clk: samsung: exynos5420: Add clocks for CMU_CDREX domain
> 
> Sylwester Nawrocki (7):
>       clk: samsung: exynos5410: Add clock IDs for PDMA and EPLL clocks
>       clk: samsung: exynos5410: Expose the peripheral DMA gate clocks
>       clk: samsung: Use common registration function for pll2550x
>       clk: samsung: clk-exynos-audss: controller variant handling rework
>       clk: samsung: clk-exynos-audss: Add exynos5410 compatible
>       clk: samsung: clk-exynos-audss: Whitespace and debug trace cleanup
>       clk: samsung: Add support for EPLL on exynos5410
> 
>  .../devicetree/bindings/clock/clk-exynos-audss.txt  |   4 +-
>  .../devicetree/bindings/clock/exynos5410-clock.txt  |  21 +-
>  MAINTAINERS                                         |   3 +
>  drivers/clk/samsung/clk-exynos-audss.c              |  84 +++--
>  drivers/clk/samsung/clk-exynos5260.c                | 350 ++++++++++-----------
>  drivers/clk/samsung/clk-exynos5410.c                |  61 ++--
>  drivers/clk/samsung/clk-exynos5420.c                |  37 +++
>  drivers/clk/samsung/clk-exynos5440.c                |   9 +-
>  drivers/clk/samsung/clk-pll.c                       | 154 ++++++---
>  drivers/clk/samsung/clk-pll.h                       |   2 +
>  include/dt-bindings/clock/exynos5410.h              |   3 +
>  include/dt-bindings/clock/exynos5420.h              |  11 +-
>  include/dt-bindings/clock/exynos5440.h              |   2 +
>  13 files changed, 453 insertions(+), 288 deletions(-)
> 
> --
> Thanks,
> Sylwester
Krzysztof Kozlowski Oct. 17, 2016, 3:54 p.m. UTC | #4
On Thu, Sep 22, 2016 at 08:40:36PM +0200, Krzysztof Kozlowski wrote:
> On Mon, Sep 19, 2016 at 10:47:46AM +0200, Sylwester Nawrocki wrote:
> > On 09/17/2016 10:00 PM, Krzysztof Kozlowski wrote:
> > > On Fri, Sep 16, 2016 at 01:58:32PM +0200, Krzysztof Kozlowski wrote:
> > >> > On 09/16/2016 01:25 PM, Sylwester Nawrocki wrote:
> > >>> > > On 09/16/2016 01:22 PM, Sylwester Nawrocki wrote:
> > >>>> > >> This patch adds device nodes for the AUDSS clock controller,
> > >>>> > >> peripheral DMA 0/1 controllers and the Audio Subsystem I2S controller.
> > >>>> > >> These entries are required for sound support on Odroid-XU board.
> > >>>> > >>
> > >>>> > >> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
> > >>>> > >> ---
> > >>>> > >> This patch depends on a patch adding clock ID macro definitions.
> > >>>> > >> I'm going to provide a topic branch containing required changes.
> > >>>> > >>
> > >>>> > >> Changes since v1:
> > >>>> > >>  - GIC_SPI, IRQ_TYPE_NONE used in the PDMA and max98080 interrupt
> > >>>> > >>    specifiers,
> > >>>> > >>  - assigned-clock-* properties moved to respective controller
> > >>>> > >>    nodes.
> > >>> > > 
> > >>> > > And here is a pull request containing clk dependency patches:
> > >>> > > 
> > >>> > > The following changes since commit 29b4817d4018df78086157ea3a55c1d9424a7cfc:
> > >>> > > 
> > >>> > >   Linux 4.8-rc1 (2016-08-07 18:18:00 -0700)
> > >>> > > 
> > >>> > > are available in the git repository at:
> > >>> > > 
> > >>> > >   git://linuxtv.org/snawrocki/samsung.git tags/clk-v4.9-exynos54x0-dt
> > >>> > > 
> > >>> > > for you to fetch changes up to 58d6506f327e3d192998ba03632f546da221b8d8:
> > >>> > > 
> > >>> > >   clk: samsung: exynos5410: Add clock IDs for PDMA and EPLL clocks (2016-09-09
> > >>> > > 10:13:02 +0200)
> > >>> > > 
> > >> > 
> > >> > Pulled and applied, thanks!
> > >
> > > This does not boot...
> > > http://www.krzk.eu/builders/boot-odroid-xu-exynos/builds/216
> > > http://www.krzk.eu/builders/boot-odroid-xu-multi_v7/builds/195
> > > 
> > > I am going to send pull request this weekend (or Monday) so probably this
> > > won't be included. If by any chance you prepare a fix soon, then it
> > > will save me from rebasing the branch.
> > 
> > Oops, indeed, I didn't test with just that part of clk changes applied.
> > The only resolution here I can see is to pull my whole clk branch,
> > it has already been pulled to the upstream clk tree.
> 
> Hmmmm, why the clock implementation is needed? Usually it should work
> without it. The driver will just handle ENODEV or DEFER... Maybe there
> is similar issue to the serial: e51e4d8a185d ("serial: samsung: Fix ERR
> pointer dereference on deferred probe")?
> 
> Anyway, the patch will wait till next window opens. I hope it will work
> then. :)
>

I re-applied the patch. However I do not have Odroid XU board anymore
(Samsung R&D Institute Poland was kind enough to provide XU and U3
boards to me this year... but I had to give it back :( ) so I cannot
verify that it works... If it does not, then Sylwester you owe me
another bottle of good whisky!


Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org>

Best regards,
Krzysztof
On 10/17/2016 05:54 PM, Krzysztof Kozlowski wrote:
> I re-applied the patch. However I do not have Odroid XU board anymore
> (Samsung R&D Institute Poland was kind enough to provide XU and U3
> boards to me this year... but I had to give it back :( ) so I cannot
> verify that it works... If it does not, then Sylwester you owe me
> another bottle of good whisky!

I verified your for-next branch on Odroid-XU and it boots and sound
works.  I'm sorry, you're out of luck this time:)

I'm considering setting up some basic boot tests with -next also
on Odroid-XU here.

--
Thanks,
Sylwester
diff mbox

Patch

diff --git a/arch/arm/boot/dts/exynos5410-odroidxu.dts b/arch/arm/boot/dts/exynos5410-odroidxu.dts
index d949931..8a70d18 100644
--- a/arch/arm/boot/dts/exynos5410-odroidxu.dts
+++ b/arch/arm/boot/dts/exynos5410-odroidxu.dts
@@ -15,6 +15,7 @@ 
 #include <dt-bindings/clock/maxim,max77802.h>
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/sound/samsung-i2s.h>
 #include "exynos54xx-odroidxu-leds.dtsi"
 
 / {
@@ -56,6 +57,61 @@ 
 		compatible = "samsung,secure-firmware";
 		reg = <0x02073000 0x1000>;
 	};
+
+	sound: sound {
+		compatible = "simple-audio-card";
+
+		simple-audio-card,name = "Odroid-XU";
+		simple-audio-card,widgets =
+			"Headphone", "Headphone Jack",
+			"Speakers", "Speakers";
+		simple-audio-card,routing =
+			"Headphone Jack", "HPL",
+			"Headphone Jack", "HPR",
+			"Headphone Jack", "MICBIAS",
+			"IN1", "Headphone Jack",
+			"Speakers", "SPKL",
+			"Speakers", "SPKR";
+
+		simple-audio-card,format = "i2s";
+		simple-audio-card,bitclock-master = <&link0_codec>;
+		simple-audio-card,frame-master = <&link0_codec>;
+
+		simple-audio-card,cpu {
+			sound-dai = <&audi2s0 0>;
+			system-clock-frequency = <19200000>;
+		};
+
+		link0_codec: simple-audio-card,codec {
+			sound-dai = <&max98090>;
+			clocks = <&audi2s0 CLK_I2S_CDCLK>;
+		};
+	};
+};
+
+&audi2s0 {
+	status = "okay";
+};
+
+&clock {
+	clocks = <&fin_pll>;
+	assigned-clocks = <&clock CLK_FOUT_EPLL>;
+	assigned-clock-rates = <192000000>;
+};
+
+&clock_audss {
+	assigned-clocks = <&clock_audss EXYNOS_MOUT_AUDSS>,
+			<&clock_audss EXYNOS_MOUT_I2S>,
+			<&clock_audss EXYNOS_DOUT_SRP>,
+			<&clock_audss EXYNOS_DOUT_AUD_BUS>;
+
+	assigned-clock-parents = <&clock CLK_FOUT_EPLL>,
+			<&clock_audss EXYNOS_MOUT_AUDSS>;
+
+	assigned-clock-rates =  <0>,
+				<0>,
+				<96000000>,
+				<19200000>;
 };
 
 &cpu0_thermal {
@@ -439,6 +495,19 @@ 
 	};
 };
 
+&i2c_1 {
+	status = "okay";
+	max98090: max98090@10 {
+		compatible = "maxim,max98090";
+		reg = <0x10>;
+		interrupt-parent = <&gpj3>;
+		interrupts = <0 IRQ_TYPE_NONE>;
+		clocks = <&audi2s0 CLK_I2S_CDCLK>;
+		clock-names = "mclk";
+		#sound-dai-cells = <0>;
+	};
+};
+
 &mmc_0 {
 	status = "okay";
 	mmc-pwrseq = <&emmc_pwrseq>;
diff --git a/arch/arm/boot/dts/exynos5410-pinctrl.dtsi b/arch/arm/boot/dts/exynos5410-pinctrl.dtsi
index b58a0f2..31f08a3 100644
--- a/arch/arm/boot/dts/exynos5410-pinctrl.dtsi
+++ b/arch/arm/boot/dts/exynos5410-pinctrl.dtsi
@@ -613,4 +613,13 @@ 
 		interrupt-controller;
 		#interrupt-cells = <2>;
 	};
+
+	audi2s0_bus: audi2s0-bus {
+		samsung,pins = "gpz-0", "gpz-1", "gpz-2", "gpz-3",
+				"gpz-4";
+		samsung,pin-function = <2>;
+		samsung,pin-pud = <0>;
+		samsung,pin-drv = <0>;
+	};
+
 };
diff --git a/arch/arm/boot/dts/exynos5410.dtsi b/arch/arm/boot/dts/exynos5410.dtsi
index 137f484..9a91685 100644
--- a/arch/arm/boot/dts/exynos5410.dtsi
+++ b/arch/arm/boot/dts/exynos5410.dtsi
@@ -16,6 +16,7 @@ 
 #include "exynos54xx.dtsi"
 #include "exynos-syscon-restart.dtsi"
 #include <dt-bindings/clock/exynos5410.h>
+#include <dt-bindings/clock/exynos-audss-clk.h>
 #include <dt-bindings/interrupt-controller/arm-gic.h>
 
 / {
@@ -82,6 +83,14 @@ 
 			#clock-cells = <1>;
 		};
 
+		clock_audss: audss-clock-controller@3810000 {
+			compatible = "samsung,exynos5410-audss-clock";
+			reg = <0x03810000 0x0C>;
+			#clock-cells = <1>;
+			clocks = <&fin_pll>, <&clock CLK_FOUT_EPLL>;
+			clock-names = "pll_ref", "pll_in";
+		};
+
 		tmu_cpu0: tmu@10060000 {
 			compatible = "samsung,exynos5420-tmu";
 			reg = <0x10060000 0x100>;
@@ -183,6 +192,56 @@ 
 			reg = <0x03860000 0x1000>;
 			interrupts = <0 47 0>;
 		};
+
+		amba {
+			#address-cells = <1>;
+			#size-cells = <1>;
+			compatible = "simple-bus";
+			interrupt-parent = <&gic>;
+			ranges;
+
+			pdma0: pdma@12680000 {
+				compatible = "arm,pl330", "arm,primecell";
+				reg = <0x121A0000 0x1000>;
+				interrupts = <GIC_SPI 34 IRQ_TYPE_NONE>;
+				clocks = <&clock CLK_PDMA0>;
+				clock-names = "apb_pclk";
+				#dma-cells = <1>;
+				#dma-channels = <8>;
+				#dma-requests = <32>;
+			};
+
+			pdma1: pdma@12690000 {
+				compatible = "arm,pl330", "arm,primecell";
+				reg = <0x121B0000 0x1000>;
+				interrupts = <GIC_SPI 35 IRQ_TYPE_NONE>;
+				clocks = <&clock CLK_PDMA1>;
+				clock-names = "apb_pclk";
+				#dma-cells = <1>;
+				#dma-channels = <8>;
+				#dma-requests = <32>;
+			};
+		};
+
+		audi2s0: i2s@03830000 {
+			compatible = "samsung,exynos5420-i2s";
+			reg = <0x03830000 0x100>;
+			dmas = <&pdma0 10
+				&pdma0 9
+				&pdma0 8>;
+			dma-names = "tx", "rx", "tx-sec";
+			clocks = <&clock_audss EXYNOS_I2S_BUS>,
+				<&clock_audss EXYNOS_I2S_BUS>,
+				<&clock_audss EXYNOS_SCLK_I2S>;
+			clock-names = "iis", "i2s_opclk0", "i2s_opclk1";
+			#clock-cells = <1>;
+			clock-output-names = "i2s_cdclk0";
+			#sound-dai-cells = <1>;
+			samsung,idma-addr = <0x03000000>;
+			pinctrl-names = "default";
+			pinctrl-0 = <&audi2s0_bus>;
+			status = "disabled";
+		};
 	};
 
 	thermal-zones {