diff mbox

[2/2] BCM2835: Add I2S driver to device tree

Message ID 52D3CB18.8040608@koalo.de (mailing list archive)
State New, archived
Headers show

Commit Message

Florian Meier Jan. 13, 2014, 11:16 a.m. UTC
This adds the definitions for the BCM2835 I2S driver
to the device tree. Some GPIO settings are needed for
the correct pin functions.

Signed-off-by: Florian Meier <florian.meier@koalo.de>
---

Sorry, I forgot to disable word-wrap again....

 arch/arm/boot/dts/bcm2835-rpi-b.dts | 12 +++++++++++-
 arch/arm/boot/dts/bcm2835.dtsi      | 10 ++++++++++
 2 files changed, 21 insertions(+), 1 deletion(-)

Comments

Stephen Warren Jan. 14, 2014, 2:57 a.m. UTC | #1
On 01/13/2014 04:16 AM, Florian Meier wrote:
> This adds the definitions for the BCM2835 I2S driver
> to the device tree. Some GPIO settings are needed for
> the correct pin functions.

Patch 1/1 and the .dtsi portion of patch 2/2 look fine; I can apply
those after 3.14's merge window closes.

However, I don't think I can apply the change to bcm2835-rpi-b.dts in
this patch; those pins are used for the board ID strapping on rev 1
boards, and even on rev 2 boards, they're simply routed to a generic
header, rather than being dedicated for I2S usage. That part of the
patch would be better kept locally in your own kernel tree. Perhaps if
DT overlays ever take off, we can publish it as part of an I2S-specific
overlay.
Florian Meier Jan. 14, 2014, 7:08 a.m. UTC | #2
On 14.01.2014 03:57, Stephen Warren wrote:
> On 01/13/2014 04:16 AM, Florian Meier wrote:
>> This adds the definitions for the BCM2835 I2S driver
>> to the device tree. Some GPIO settings are needed for
>> the correct pin functions.
>
> Patch 1/1 and the .dtsi portion of patch 2/2 look fine; I can apply
> those after 3.14's merge window closes.
>
> However, I don't think I can apply the change to bcm2835-rpi-b.dts in
> this patch; those pins are used for the board ID strapping on rev 1
> boards,

Yes, but I thought the board ID is never utilized. However, I have not
tested that.

> and even on rev 2 boards, they're simply routed to a generic
> header, rather than being dedicated for I2S usage. That part of the
> patch would be better kept locally in your own kernel tree. Perhaps if
> DT overlays ever take off, we can publish it as part of an I2S-specific
> overlay.

You are right. That might be a problem. Someone might want to use the
pins for another functionality. I personally think the I2S
functionality will be the most used functionality for those pins, but
I accept it when you say that they better should be set as second I2C
channel and generic GPIO pins (as it is by default).

However, for an end user it doesn't seem to be a convenient solution
to have a kernel tree for each possible combination of pin
assignments.
The "old way" would be to set the pin functionality while loading the
i2s driver, but I assume that is not the right way to go, right?
diff mbox

Patch

diff --git a/arch/arm/boot/dts/bcm2835-rpi-b.dts b/arch/arm/boot/dts/bcm2835-rpi-b.dts
index 2a3b1c1..e83ed2f 100644
--- a/arch/arm/boot/dts/bcm2835-rpi-b.dts
+++ b/arch/arm/boot/dts/bcm2835-rpi-b.dts
@@ -23,7 +23,7 @@ 
 
 &gpio {
 	pinctrl-names = "default";
-	pinctrl-0 = <&gpioout &alt0 &alt3>;
+	pinctrl-0 = <&gpioout &alt0 &alt2 &alt3>;
 
 	gpioout: gpioout {
 		brcm,pins = <6>;
@@ -39,6 +39,16 @@ 
 		brcm,pins = <48 49 50 51 52 53>;
 		brcm,function = <7>; /* alt3 */
 	};
+
+	/* I2S interface */
+	alt2: alt2 {
+		brcm,pins = <28 29 30 31>;
+		brcm,function = <6>; /* alt2 */
+	};
+};
+
+&bcm2835_i2s {
+	status = "okay";
 };
 
 &i2c0 {
diff --git a/arch/arm/boot/dts/bcm2835.dtsi b/arch/arm/boot/dts/bcm2835.dtsi
index 1da6b36..ca2259c 100644
--- a/arch/arm/boot/dts/bcm2835.dtsi
+++ b/arch/arm/boot/dts/bcm2835.dtsi
@@ -134,6 +134,16 @@ 
 			#dma-cells = <1>;
 			brcm,dma-channel-mask = <0x7f35>;
 		};
+
+		bcm2835_i2s: i2s@7e203000 {
+			compatible = "brcm,bcm2835-i2s";
+			reg = <0x7e203000 0x20>,
+			      <0x7e101098 0x02>;
+
+			dmas = <&dma 2>,
+			       <&dma 3>;
+			dma-names = "tx", "rx";
+		};
 	};
 
 	clocks {