[PATCH 7/9] ARM: SPMP8000: Add dts file of SPMP8000 SoC and Letcool board
Jamie Iles
jamie at jamieiles.com
Mon Oct 10 04:54:30 EDT 2011
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 <zoss at devai.org>
> ---
> 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
More information about the linux-arm-kernel
mailing list