[PATCH] ARM: mmp: add DTS file
Haojian Zhuang
haojian.zhuang at marvell.com
Fri Jul 8 20:20:28 EST 2011
Add DTS file to support brownstone & ttc-dkb.
Signed-off-by: Haojian Zhuang <haojian.zhuang at marvell.com>
---
arch/arm/boot/dts/mmp2-brownstone.dts | 319 +++++++++++++++++++++++++++++++++
arch/arm/boot/dts/ttc-dkb.dts | 176 ++++++++++++++++++
arch/arm/mach-mmp/brownstone.c | 66 ++-----
arch/arm/mach-mmp/ttc_dkb.c | 21 ++-
4 files changed, 530 insertions(+), 52 deletions(-)
create mode 100644 arch/arm/boot/dts/mmp2-brownstone.dts
create mode 100644 arch/arm/boot/dts/ttc-dkb.dts
diff --git a/arch/arm/boot/dts/mmp2-brownstone.dts b/arch/arm/boot/dts/mmp2-brownstone.dts
new file mode 100644
index 0000000..5fdabc3
--- /dev/null
+++ b/arch/arm/boot/dts/mmp2-brownstone.dts
@@ -0,0 +1,319 @@
+/dts-v1/;
+
+/include/ "skeleton.dtsi"
+
+/ {
+ model = "Marvell MMP2 Brownstone";
+ compatible = "mrvl,mmp2-brownstone", "mrvl,armada610-brownstone";
+ interrupt-parent = <&mmp_intc>;
+
+ memory {
+ reg = <0x00000000 0x20000000>;
+ };
+
+ chosen {
+ bootargs = "console=ttyS2,38400 root=/dev/nfs nfsroot=192.168.1.100:192.168.1.101::255.255.255.0::eth0:on";
+ linux,stdout-path = &uart2;
+ };
+
+ soc at d4000000 {
+ compatible = "mrvl,mmp2", "mrvl,armada610", "simple-bus";
+ device_type = "soc";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges;
+
+ mmp_intc: interrupt-controller at d4282000 {
+ compatible = "mrvl,mmp-intc";
+ /*device_type = "intc";*/
+ interrupt-controller;
+ #interrupt-cells = <1>;
+ /*
+ * interrupts: irq index of parent's irq domain
+ */
+ interrupts = <0>;
+ interrupt-parent = <&mmp_intc>;
+ sub-interrupts = <64>;
+
+ /* enable bits in conf register */
+ enable_mask = <0x20>;
+
+ /* reg: <offset & size> */
+ reg = <0xd4282000 0x400>;
+ };
+
+ mux_intc4: interrupt-controller at d4282150 {
+ compatible = "mrvl,mux-intc";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ #interrupt-cells = <1>;
+ interrupt-controller;
+ interrupts = <4>;
+ interrupt-parent = <&mmp_intc>;
+ sub-interrupts = <2>;
+ reg = <0xd4282150 0>;
+ status-mask = <0x150 0x168>;
+ /* mfp register & interrupt index */
+ mfp-edge-interrupt = <0xd401e2c4 1>;
+ };
+
+ mux_intc5: interrupt-controller at d4282154 {
+ compatible = "mrvl,mux-intc";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ #interrupt-cells = <1>;
+ interrupt-controller;
+ interrupts = <5>;
+ sub-interrupts = <2>;
+ interrupt-parent = <&mmp_intc>;
+ reg = <0xd4282154 0>;
+ status-mask = <0x154 0x16c>;
+ };
+
+ mux_intc9: interrupt-controller at d4282180 {
+ compatible = "mrvl,mux-intc";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ #interrupt-cells = <1>;
+ interrupt-controller;
+ interrupts = <9>;
+ interrupt-parent = <&mmp_intc>;
+ sub-interrupts = <3>;
+ reg = <0xd4282180 0>;
+ status-mask = <0x180 0x17c>;
+ };
+
+ mux_intc17: interrupt-controller at d4282158 {
+ compatible = "mrvl,mux-intc";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ #interrupt-cells = <1>;
+ interrupt-controller;
+ interrupts = <17>;
+ interrupt-parent = <&mmp_intc>;
+ sub-interrupts = <5>;
+ reg = <0xd4282158 0>;
+ status-mask = <0x158 0x170>;
+ };
+
+ mux_intc35: interrupt-controller at d428215c {
+ compatible = "mrvl,mux-intc";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ #interrupt-cells = <1>;
+ interrupt-controller;
+ interrupts = <35>;
+ interrupt-parent = <&mmp_intc>;
+ sub-interrupts = <15>;
+ reg = <0xd428215c 0>;
+ status-mask = <0x15c 0x174>;
+ };
+
+ mux_intc51: interrupt-controller at d4282160 {
+ compatible = "mrvl,mux-intc";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ #interrupt-cells = <1>;
+ interrupt-controller;
+ interrupts = <51>;
+ interrupt-parent = <&mmp_intc>;
+ sub-interrupts = <2>;
+ reg = <0xd4282160 0>;
+ status-mask = <0x160 0x178>;
+ };
+
+ mux_intc55: interrupt-controller at d4282188 {
+ compatible = "mrvl,mux-intc";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ #interrupt-cells = <1>;
+ interrupt-controller;
+ interrupts = <55>;
+ interrupt-parent = <&mmp_intc>;
+ sub-interrupts = <2>;
+ reg = <0xd4282188 0>;
+ status-mask = <0x188 0x184>;
+ };
+
+ gpio: gpio-controller {
+ compatible = "pxa,gpio";
+ gpio-controller;
+ reg = <
+ 0xd4019000 0xb0
+ 0xd4019004 0xb0
+ 0xd4019008 0xb0
+ 0xd4019100 0xb0
+ 0xd4019104 0xb0
+ 0xd4019108 0xb0>;
+
+ /* gpio-clk-value: <offset & value> */
+ gpio-clk-value = <0xd4015038 0x3>;
+
+ /* gpio-mask: <offset & value> */
+ gpio-mask = <
+ 0xd401909c 0xffffffff
+ 0xd40190a0 0xffffffff
+ 0xd40190a4 0xffffffff
+ 0xd401919c 0xffffffff
+ 0xd40191a0 0xffffffff
+ 0xd40191a4 0xffffffff>;
+ gpio-pins = <0 192>;
+ #interrupt-cells = <1>;
+ interrupt-controller;
+ interrupts = <49>;
+ interrupt-parent = <&mmp_intc>;
+ sub-interrupts = <192>;
+ };
+
+ i2c0: i2c at d4011000 {
+ compatible = "pxa2xx-i2c";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ reg = <0xd4011000 0x60>;
+ cell-index = <0>;
+ i2c-polling = <0>;
+ i2c-frequency = "fast";
+ interrupts = <7>;
+ interrupt-parent = <&mmp_intc>;
+
+ max8649: pmic at 60 {
+ compatible = "maxim,max8649";
+ reg = <0x60>;
+ max8649-mode = <2>; /* VID1 = 1, VID0 = 0 */
+ /* <Ramp Timing, Active Ramp-Down Control > */
+ max8649-ramp = <0 0>; /* 32mV/us, Deactive */
+
+ device_type = "regulator";
+ voltages = <750000 1380000>;
+ boot-on;
+ always-on;
+ ops-mask = "voltage", "status";
+ supply-name = "vcore";
+ };
+
+ max8925: pmic at 3c {
+ compatible = "maxim,max8925";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ interrupt-controller;
+ interrupts = <1>;
+ interrupt-parent = <&mux_intc4>;
+ sub-interrupts = <32>;
+ reg = <0x3c>;
+
+ bk: backlight at 0 {
+ compatible = "backlight";
+ reg = <0>;
+ };
+
+ v_mipi: regulator at ldo3 {
+ compatible = "LDO3";
+ device_type = "regulator";
+ voltages = <1000000 1500000>;
+ boot-on;
+ always-on;
+ ops-mask = "voltage", "status";
+ supply-name = "mipi_1.2v";
+ reg = <0>;
+ };
+
+ touch: touch at 0 {
+ compatible = "touch";
+ interrupts = <101>;
+ interrupt-parent = <&gpio>;
+ reg = <0>;
+ };
+ };
+ };
+
+ i2c1: i2c at d4031000 {
+ compatible = "pxa2xx-i2c";
+ reg = <0xd4031000 0x60>;
+ cell-index = <1>;
+ i2c-polling = <0>;
+ i2c-frequency = "fast";
+ interrupts = <0>;
+ interrupt-parent = <&mux_intc17>;
+ };
+
+ i2c2: i2c at d4032000 {
+ compatible = "pxa2xx-i2c";
+ reg = <0xd4032000 0x60>;
+ cell-index = <2>;
+ i2c-polling = <0>;
+ i2c-frequency = "fast";
+ interrupts = <1>;
+ interrupt-parent = <&mux_intc17>;
+ };
+
+ i2c3: i2c at d4033000 {
+ compatible = "pxa2xx-i2c";
+ reg = <0xd4033000 0x60>;
+ cell-index = <3>;
+ i2c-polling = <0>;
+ i2c-frequency = "fast";
+ interrupts = <2>;
+ interrupt-parent = <&mux_intc17>;
+ };
+
+ i2c4: i2c at d4033800 {
+ compatible = "pxa2xx-i2c";
+ reg = <0xd4033800 0x60>;
+ cell-index = <4>;
+ i2c-polling = <0>;
+ i2c-frequency = "fast";
+ interrupts = <3>;
+ interrupt-parent = <&mux_intc17>;
+ };
+
+ i2c5: i2c at d4034000 {
+ compatible = "pxa2xx-i2c";
+ reg = <0xd4034000 0x60>;
+ cell-index = <5>;
+ i2c-polling = <0>;
+ i2c-frequency = "fast";
+ interrupts = <4>;
+ interrupt-parent = <&mux_intc17>;
+ };
+
+ uart0: uart at d4030000 {
+ compatible = "pxa,serial";
+ reg = <0xd4030000 0x1000>;
+ reg-shift = <2>;
+ interrupts = <27>;
+ interrupt-parent = <&mmp_intc>;
+ clock-frequency = <26000000>;
+ current-speed = <115200>;
+ };
+
+ uart1: uart at d4017000 {
+ compatible = "pxa,serial";
+ reg = <0xd4017000 0x1000>;
+ reg-shift = <2>;
+ interrupts = <28>;
+ interrupt-parent = <&mmp_intc>;
+ clock-frequency = <26000000>;
+ current-speed = <115200>;
+ };
+
+ uart2: uart at d4018000 {
+ compatible = "pxa,serial";
+ reg = <0xd4018000 0x1000>;
+ reg-shift = <2>;
+ interrupts = <24>;
+ interrupt-parent = <&mmp_intc>;
+ clock-frequency = <26000000>;
+ current-speed = <38400>;
+ };
+
+ uart3: uart at d4016000 {
+ compatible = "pxa,serial";
+ reg = <0xd4016000 0x1000>;
+ reg-shift = <2>;
+ interrupts = <46>;
+ interrupt-parent = <&mmp_intc>;
+ clock-frequency = <26000000>;
+ current-speed = <115200>;
+ };
+ };
+};
diff --git a/arch/arm/boot/dts/ttc-dkb.dts b/arch/arm/boot/dts/ttc-dkb.dts
new file mode 100644
index 0000000..9d50d12
--- /dev/null
+++ b/arch/arm/boot/dts/ttc-dkb.dts
@@ -0,0 +1,176 @@
+/dts-v1/;
+
+/include/ "skeleton.dtsi"
+
+/ {
+ model = "Marvell TTC DKB";
+ compatible = "mrvl,ttc-dkb", "mrvl,pxa910-dkb";
+ interrupt-parent = <&mmp_intc>;
+
+ memory {
+ reg = <0x00000000 0x20000000>;
+ };
+
+ chosen {
+ bootargs = "console=ttyS0,115200 root=/dev/nfs nfsroot=192.168.1.100:192.168.1.101::255.255.255.0::eth0:on";
+ linux,stdout-path = &uart0;
+ };
+
+ soc at d4000000 {
+ compatible = "mrvl,pxa910", "simple-bus";
+ device_type = "soc";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges = <0xd4000000 0xd4000000 0x00200000 /* APB */
+ 0xd4200000 0xd4200000 0x00200000>; /* AXI */
+
+ mmp_intc: interrupt-controller at d4282000 {
+ compatible = "mrvl,mmp-intc";
+ interrupt-controller;
+ #interrupt-cells = <1>;
+ interrupts = <0>;
+ interrupt-parent = <&mmp_intc>;
+ sub-interrupts = <64>;
+
+ /* enable bits in conf register */
+ enable_mask = <0x51>;
+
+ /* reg: <offset & size> */
+ reg = <0xd4282000 0x400>;
+ };
+
+ gpio: gpio-controller {
+ compatible = "pxa,gpio";
+ gpio-controller;
+ reg = <
+ 0xd4019000 0xb0
+ 0xd4019004 0xb0
+ 0xd4019008 0xb0
+ 0xd4019100 0xb0>;
+
+ /* gpio-clk-value: <offset & value> */
+ gpio-clk-value = <0xd4015008 0x3>;
+
+ /* gpio-mask: <offset & value> */
+ gpio-mask = <
+ 0xd401909c 0xffffffff
+ 0xd40190a0 0xffffffff
+ 0xd40190a4 0xffffffff
+ 0xd401919c 0xffffffff>;
+ gpio-pins = <0 128>;
+ interrupt-controller;
+ #interrupt-cells = <1>;
+ interrupts = <49>;
+ interrupt-parent = <&mmp_intc>;
+ sub-interrupts = <128>;
+ };
+
+ i2c0: i2c at d4011000 {
+ compatible = "pxa2xx-i2c";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ reg = <0xd4011000 0x60>;
+ cell-index = <0>;
+ i2c-polling = <0>;
+ i2c-frequency = "fast";
+ interrupts = <7>;
+ interrupt-parent = <&mmp_intc>;
+
+ pm860x: pmic at 34 {
+ compatible = "88PM860x";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ interrupt-controller;
+ interrupts = <4>;
+ interrupt-parent = <&mmp_intc>;
+ sub-interrupts = <24>;
+ reg = <0x34>;
+ i2c-port = <0>;
+ irq-mode = <0>;
+ companion-addr = <0x11>;
+
+ bk: backlight at 0 {
+ compatible = "backlight";
+ cell-index = <0>;
+ iset = <8>;
+ reg = <0>;
+ };
+
+ led0: led at 0 {
+ compatible = "led";
+ cell-index = <0>;
+ iset = <8>;
+ reg = <0>;
+ };
+
+ led1: led at 1 {
+ compatible = "led";
+ cell-index = <1>;
+ iset = <8>;
+ reg = <0>;
+ };
+
+ led2: led at 2 {
+ compatible = "led";
+ cell-index = <2>;
+ iset = <8>;
+ reg = <0>;
+ };
+
+ touch: touch at 0 {
+ compatible = "touch";
+ interrupts = <15>;
+ interrupt-parent = <&pm860x>;
+ /* prebias: gpadc & ti & pen */
+ prebias = <1 6 16>;
+ slot-cycle = <1>;
+ pen-prechg = <2>;
+ resistor-xplate = <300>;
+ reg = <0>;
+ };
+
+ v_core: regulator at buck1 {
+ compatible = "BUCK1";
+ device_type = "regulator";
+ voltages = <900000 1400000>;
+ boot-on;
+ always-on;
+ ops-mask = "voltage";
+ constraint-name = "BUCK1";
+ supply-name = "vcc_core";
+ reg = <0>;
+ };
+ };
+ };
+
+ i2c1: i2c at d4037000 {
+ compatible = "pxa2xx-i2c";
+ reg = <0xd4037000 0x60>;
+ cell-index = <1>;
+ i2c-polling = <0>;
+ i2c-frequency = "fast";
+ interrupts = <54>;
+ interrupt-parent = <&mmp_intc>;
+ };
+
+ uart0: uart at d4017000 {
+ compatible = "pxa,serial";
+ reg = <0xd4017000 0x1000>;
+ reg-shift = <2>;
+ interrupts = <27>;
+ interrupt-parent = <&mmp_intc>;
+ clock-frequency = <14745600>;
+ current-speed = <115200>;
+ };
+
+ uart1: uart at d4018000 {
+ compatible = "pxa,serial";
+ reg = <0xd4018000 0x1000>;
+ reg-shift = <2>;
+ interrupts = <28>;
+ interrupt-parent = <&mmp_intc>;
+ clock-frequency = <14745600>;
+ current-speed = <115200>;
+ };
+ };
+};
diff --git a/arch/arm/mach-mmp/brownstone.c b/arch/arm/mach-mmp/brownstone.c
index 7bb78fd..c9848ad 100644
--- a/arch/arm/mach-mmp/brownstone.c
+++ b/arch/arm/mach-mmp/brownstone.c
@@ -12,6 +12,9 @@
#include <linux/init.h>
#include <linux/kernel.h>
+#include <linux/of.h>
+#include <linux/of_fdt.h>
+#include <linux/of_platform.h>
#include <linux/platform_device.h>
#include <linux/io.h>
#include <linux/gpio.h>
@@ -105,30 +108,6 @@ static unsigned long brownstone_pin_config[] __initdata = {
GPIO89_GPIO,
};
-static struct regulator_consumer_supply max8649_supply[] = {
- REGULATOR_SUPPLY("vcc_core", NULL),
-};
-
-static struct regulator_init_data max8649_init_data = {
- .constraints = {
- .name = "vcc_core range",
- .min_uV = 1150000,
- .max_uV = 1280000,
- .always_on = 1,
- .boot_on = 1,
- .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
- },
- .num_consumer_supplies = 1,
- .consumer_supplies = &max8649_supply[0],
-};
-
-static struct max8649_platform_data brownstone_max8649_info = {
- .mode = 2, /* VID1 = 1, VID0 = 0 */
- .extclk = 0,
- .ramp_timing = MAX8649_RAMP_32MV,
- .regulator = &max8649_init_data,
-};
-
static struct regulator_consumer_supply brownstone_v_5vp_supplies[] = {
REGULATOR_SUPPLY("v_5vp", NULL),
};
@@ -158,47 +137,38 @@ static struct platform_device brownstone_v_5vp_device = {
},
};
-static struct max8925_platform_data brownstone_max8925_info = {
- .irq_base = IRQ_BOARD_START,
-};
-
-static struct i2c_board_info brownstone_twsi1_info[] = {
- [0] = {
- .type = "max8649",
- .addr = 0x60,
- .platform_data = &brownstone_max8649_info,
- },
- [1] = {
- .type = "max8925",
- .addr = 0x3c,
- .irq = IRQ_MMP2_PMIC,
- .platform_data = &brownstone_max8925_info,
- },
-};
-
static struct sdhci_pxa_platdata mmp2_sdh_platdata_mmc0 = {
.max_speed = 25000000,
};
+static __initdata struct of_device_id of_bus_ids[] = {
+ { .compatible = "simple-bus", },
+ {},
+};
+
static void __init brownstone_init(void)
{
mfp_config(ARRAY_AND_SIZE(brownstone_pin_config));
- /* on-chip devices */
- mmp2_add_uart(1);
- mmp2_add_uart(3);
- mmp2_add_twsi(1, NULL, ARRAY_AND_SIZE(brownstone_twsi1_info));
+ if (of_platform_bus_probe(NULL, of_bus_ids, NULL) < 0)
+ BUG();
+
mmp2_add_sdhost(0, &mmp2_sdh_platdata_mmc0); /* SD/MMC */
/* enable 5v regulator */
platform_device_register(&brownstone_v_5vp_device);
}
+static const char *brownstone_dt_match[] __initdata = {
+ "mrvl,mmp2-brownstone",
+ NULL,
+};
+
MACHINE_START(BROWNSTONE, "Brownstone Development Platform")
/* Maintainer: Haojian Zhuang <haojian.zhuang at marvell.com> */
.map_io = mmp_map_io,
- .nr_irqs = BROWNSTONE_NR_IRQS,
- .init_irq = mmp2_init_irq,
+ .init_irq = mmp_init_intc,
.timer = &mmp2_timer,
.init_machine = brownstone_init,
+ .dt_compat = brownstone_dt_match,
MACHINE_END
diff --git a/arch/arm/mach-mmp/ttc_dkb.c b/arch/arm/mach-mmp/ttc_dkb.c
index e411039..c19b4dc 100644
--- a/arch/arm/mach-mmp/ttc_dkb.c
+++ b/arch/arm/mach-mmp/ttc_dkb.c
@@ -10,6 +10,9 @@
#include <linux/init.h>
#include <linux/kernel.h>
+#include <linux/of.h>
+#include <linux/of_fdt.h>
+#include <linux/of_platform.h>
#include <linux/platform_device.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h>
@@ -113,21 +116,31 @@ static struct platform_device *ttc_dkb_devices[] = {
&ttc_dkb_device_onenand,
};
+static __initdata struct of_device_id of_bus_ids[] = {
+ { .compatible = "simple-bus", },
+ {},
+};
+
static void __init ttc_dkb_init(void)
{
mfp_config(ARRAY_AND_SIZE(ttc_dkb_pin_config));
- /* on-chip devices */
- pxa910_add_uart(1);
+ if (of_platform_bus_probe(NULL, of_bus_ids, NULL) < 0)
+ BUG();
/* off-chip devices */
platform_add_devices(ARRAY_AND_SIZE(ttc_dkb_devices));
}
+static const char *ttc_dkb_dt_match[] __initdata = {
+ "mrvl,ttc-dkb",
+ NULL,
+};
+
MACHINE_START(TTC_DKB, "PXA910-based TTC_DKB Development Platform")
.map_io = mmp_map_io,
- .nr_irqs = TTCDKB_NR_IRQS,
- .init_irq = pxa910_init_irq,
+ .init_irq = mmp_init_intc,
.timer = &pxa910_timer,
.init_machine = ttc_dkb_init,
+ .dt_compat = ttc_dkb_dt_match,
MACHINE_END
--
1.5.6.5
More information about the devicetree-discuss
mailing list