From mboxrd@z Thu Jan 1 00:00:00 1970 From: jamie@jamieiles.com (Jamie Iles) Date: Mon, 10 Oct 2011 09:54:30 +0100 Subject: [PATCH 7/9] ARM: SPMP8000: Add dts file of SPMP8000 SoC and Letcool board In-Reply-To: <1318178172-7965-8-git-send-email-zoss@devai.org> References: <1318178172-7965-1-git-send-email-zoss@devai.org> <1318178172-7965-8-git-send-email-zoss@devai.org> Message-ID: <20111010085430.GA2561@totoro> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Hi Zoltan, Just minor comments again. Also, if you could cc all device tree stuff to devicetree-discuss at lists.ozlabs.org then you'll get a wider audience for these bits. Jamie On Sun, Oct 09, 2011 at 06:36:10PM +0200, Zoltan Devai wrote: > Signed-off-by: Zoltan Devai > --- > arch/arm/boot/dts/spmp8000-letcool.dts | 163 ++++++++++++++++++++++++++++++ > arch/arm/boot/dts/spmp8000.dtsi | 169 ++++++++++++++++++++++++++++++++ > 2 files changed, 332 insertions(+), 0 deletions(-) > create mode 100644 arch/arm/boot/dts/spmp8000-letcool.dts > create mode 100644 arch/arm/boot/dts/spmp8000.dtsi > > diff --git a/arch/arm/boot/dts/spmp8000-letcool.dts b/arch/arm/boot/dts/spmp8000-letcool.dts > new file mode 100644 > index 0000000..270f00e > --- /dev/null > +++ b/arch/arm/boot/dts/spmp8000-letcool.dts > @@ -0,0 +1,163 @@ > +/dts-v1/; > +/include/ "spmp8000.dtsi" > +/ { > + model = "Letcool N350JP handheld game console"; > + compatible = "gameware,letcool", "sunplus,spmp8000"; > + > + memory { > + reg = <0x00000000 0x02000000>; > + }; > + > + chosen { > + bootargs = "console=tty0 mem=32M root=/dev/mmcblk0p1 console=ttyS0,115200 rootdelay=5 loglevel=8 earlyprintk"; It's preferred to keep bootargs in the bootloader if at all possible. > + linux,stdout-path = &uart0; > + }; > + > + pwm-backlight { > + compatible = "pwm-backlight"; > + reg = <0 0>; /* Hack to pass platform data as AUXDATA */ > + }; > + > + plat { > + plat-apb { > + mmc at 92B0B000 { > + cd-gpios = <&gpio0 9 0>; > + }; > + }; > + }; > + > + armapb { > + gpio at 9000A000 { > + polarity = <0>; > + sticky = <0>; > + direction = <0xFFFFFFFF>; > + debounce-val = <100>; > + debounce = <0xFFFFFFFF>; > + }; > + > + gpio at 9000A004 { > + polarity = <0>; > + sticky = <0>; > + direction = <0xFFFFFFFF>; > + debounce-val = <100>; > + debounce = <0xFFFFFFFF>; > + }; > + }; > + > + gpio-keys { > + compatible = "gpio-keys"; > + #address-cells = <1>; > + #size-cells = <0>; > + autorepeat; > + > + up { > + label = "D-Pad Up"; > + gpios = <&gpio0 0 0>; > + linux,code = <103>; /* KEY_UP */ > + gpio-key,wakeup; > + }; > + > + right { > + label = "D-Pad Right"; > + gpios = <&gpio0 1 0>; > + linux,code = <106>; /* KEY_RIGHT */ > + gpio-key,wakeup; > + }; > + > + down { > + label = "D-Pad Down"; > + gpios = <&gpio0 2 0>; > + linux,code = <108>; /* KEY_DOWN */ > + gpio-key,wakeup; > + }; > + > + left { > + label = "D-Pad Left"; > + gpios = <&gpio0 3 0>; > + linux,code = <105>; /* KEY_LEFT */ > + gpio-key,wakeup; > + }; > + > + button-x { > + label = "Button X"; > + gpios = <&gpio0 4 0>; > + linux,code = <45>; /* KEY_X */ > + gpio-key,wakeup; > + }; > + > + button-a { > + label = "Button A"; > + gpios = <&gpio0 5 0>; > + linux,code = <30>; /* KEY_A */ > + gpio-key,wakeup; > + }; > + > + button-y { > + label = "Button Y"; > + gpios = <&gpio0 6 0>; > + linux,code = <21>; /* KEY_Y */ > + gpio-key,wakeup; > + }; > + > + button-b { > + label = "Button B"; > + gpios = <&gpio0 7 0>; > + linux,code = <48>; /* KEY_B */ > + gpio-key,wakeup; > + }; > + }; > + > + analog-keys { > + compatible = "spmp8000-ak"; > + > + channel-1 { > + adc-channel = <1>; > + idle-value = <0>; > + tolerance = <10>; > + > + button-left { > + adc-value = <0x00B0>; > + linux,code = <0x110>; /* BTN_LEFT */ > + }; > + > + button-right { > + adc-value = <0xFEAB>; > + linux,code = <0x111>; /* BTN_RIGHT */ > + }; > + > + button-volup { > + adc-value = <0x015E>; > + linux,code = <115>; /* KEY_VOLUMEUP */ > + }; > + > + button-voldown { > + adc-value = <0xFF56>; > + linux,code = <114>; /* KEY_VOLUMEDOWN */ > + }; > + }; > + > + channel-3 { > + adc-channel = <3>; > + idle-value = <5>; > + tolerance = <10>; > + > + button-select { > + adc-value = <0x0113>; > + linux,code = <0x13a>; /* BTN_SELECT */ > + }; > + > + button-start { > + adc-value = <0xFEF7>; > + linux,code = <0x13b>; /* BTN_START */ > + }; > + }; > + > + }; > + > + snd-card { > + compatible = "spmp8000-sndcard"; > + hp-detect-gpios = <&gpio0 8 0>; > + spk-enable-gpios = <&gpio3 12 0>; > + }; > + > +}; > diff --git a/arch/arm/boot/dts/spmp8000.dtsi b/arch/arm/boot/dts/spmp8000.dtsi > new file mode 100644 > index 0000000..74764b2c6 > --- /dev/null > +++ b/arch/arm/boot/dts/spmp8000.dtsi > @@ -0,0 +1,169 @@ > +/ { > + compatible = "sunplus,spmp8000"; > + #address-cells = <1>; > + #size-cells = <1>; > + > + armapb { > + compatible = "simple-bus"; > + #address-cells = <1>; > + #size-cells = <1>; > + ranges = <0x90000000 0x90000000 0x10000>; I'm not sure you need a ranges property like this as it isn't doing any translation. I think it would be nicer to have ranges = <0 0x90000000 0x10000> and use bus local addresses for the child nodes. > + timer at 90000000 { > + compatible = "sunplus,spmp8000-timer"; > + reg = <0x90000000 0x1000>; > + interrupt-parent = <&vic0>; > + interrupts = <7 8 9>; > + }; > + > + pwm at 90000000 { > + compatible = "sunplus,spmp8000-pwm"; > + reg = <0x90000000 0x1000>; > + id = <0>; This is probably a little too generic. sunplus,pwm-id ? > + }; > + > + gpio3: gpio at 90005070 { > + compatible = "basic-mmio-gpio"; /* No DT binding yet */ I did start work on a binding (http://lists.ozlabs.org/pipermail/devicetree-discuss/2011-August/007137.html) but it hasn't moved along too far. Thinking about it a little more though I'm not sure that the generic binding is quite the right approach if we need to handle gpio's that can generate interrupts too though. > + reg = <0x90005070 0xC>; > + gpio-controller; > + #gpio-cells = <2>; > + }; > + > + gpio0: gpio at 9000A000 { > + compatible = "sunplus,spmp8000-gpio"; > + reg = <0x9000A000 0x1000>; > + interrupt-parent = <&vic1>; > + interrupts = <0>; > + gpio-controller; > + #gpio-cells = <2>; > + bits = <16>; sunplus,nr-gpios? > + interrupt-controller; > + #interrupt-cells = <1>; > + }; > + > + gpio1: gpio at 9000A004 { > + compatible = "sunplus,spmp8000-gpio"; > + reg = <0x9000A004 0x1000>; > + interrupt-parent = <&vic1>; > + interrupts = <1>; > + gpio-controller; > + #gpio-cells = <2>; > + bits = <32>; > + interrupt-controller; > + #interrupt-cells = <1>; > + }; > + }; > + > + armahb { > + compatible = "simple-bus"; > + #address-cells = <1>; > + #size-cells = <1>; > + ranges = <0x90010000 0x90010000 0x20000>; > + > + vic0: interrupt-controller at 90010000 { > + compatible = "arm,pl192"; > + interrupt-controller; > + #interrupt-cells = <1>; > + reg = <0x90010000 0x1000>; > + }; > + > + vic1: interrupt-controller at 900020000 { > + compatible = "arm,pl192"; > + interrupt-controller; > + #interrupt-cells = <1>; > + reg = <0x90020000 0x1000>; > + }; > + }; > + > + plat { > + compatible = "simple-bus"; > + #address-cells = <1>; > + #size-cells = <1>; > + ranges = <0x92000000 0x92000000 0x1000000>; > + > + plat-apb { Why are there 2 levels of nesting here? Can't the child nodes of plat-apb just be under plat? > + compatible = "simple-bus"; > + #address-cells = <1>; > + #size-cells = <1>; > + ranges = <0x92B00000 0x92B00000 0x10000>; > + > + dma at 92B00000 { > + compatible = "sunplus,spmp8000-apbdma-c"; > + reg = <0x92B00000 0x1000>; > + interrupt-parent = <&vic1>; > + interrupts = <28 29 30 31>; > + }; > + > + uart0: uart-c0 at 92B04000 { > + compatible = "ns16550a"; > + reg = <0x92B04000 0x1000>; > + clock-frequency = <2076923>; > + interrupt-parent = <&vic1>; > + interrupts = <24>; > + current-speed = <115200>; > + reg-shift = <2>; > + }; > + > + mmc at 92B0B000 { > + compatible = "sunplus,mmc"; > + reg = <0x92B0B000 0x1000>; > + interrupt-parent = <&vic1>; > + interrupts = <8>; > + }; > + }; > + }; > + > + axi { > + compatible = "simple-bus"; > + #address-cells = <1>; > + #size-cells = <1>; > + ranges = <0x93000000 0x93000000 0x800000>; > + > + fb at 93000000 { > + compatible = "sunplus,spmp8000-lcd"; > + reg = <0x93000000 0x1000>; > + interrupt-parent = <&vic0>; > + interrupts = <23>; > + }; > + > + axi-apb { > + compatible = "simple-bus"; > + #address-cells = <1>; > + #size-cells = <1>; > + ranges = <0x93010000 0x93010000 0x10000>; > + > + dma at 93010000 { > + compatible = "sunplus,spmp8000-apbdma-a"; > + reg = <0x93010000 0x1000>; > + interrupt-parent = <&vic0>; > + interrupts = <24 25 26 27>; > + }; > + > + i2s at 93012000 { > + compatible = "sunplus,spmp8000-i2s-tx"; > + reg = <0x93012000 0x1000>; > + interrupt-parent = <&vic0>; > + interrupts = <13>; > + }; > + > + i2s at 9301D000 { > + compatible = "sunplus,spmp8000-i2s-rx"; > + reg = <0x9301D000 0x1000>; > + interrupt-parent = <&vic0>; > + interrupts = <14>; > + }; > + > + adc at 9301F000 { > + compatible = "sunplus,spmp8000-adc"; > + reg = <0x9301F000 0x20>; > + interrupt-parent = <&vic1>; > + interrupts = <27>; > + }; > + > + codec at 9301F020 { > + compatible = "sunplus,spmp8000-codec"; > + reg = <0x9301F020 0x20>; > + }; > + }; > + }; > +}; > -- > 1.7.4.1 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel at lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel