ARM: dts: add devicetree support for s3c2416-smdk2416
authorHeiko Stuebner <heiko@sntech.de>
Mon, 20 May 2013 16:06:04 +0000 (01:06 +0900)
committerKukjin Kim <kgene.kim@samsung.com>
Mon, 20 May 2013 16:06:12 +0000 (01:06 +0900)
Definitions in s3c24xx.dtsi are usable for all s3c24xx
SoCs, but some need to be extended with proper compatible
properties, as can be seen in s3c2416.dtsi.

Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Reviewed-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
arch/arm/boot/dts/Makefile
arch/arm/boot/dts/s3c2416-pinctrl.dtsi [new file with mode: 0644]
arch/arm/boot/dts/s3c2416-smdk2416.dts [new file with mode: 0644]
arch/arm/boot/dts/s3c2416.dtsi [new file with mode: 0644]
arch/arm/boot/dts/s3c24xx.dtsi [new file with mode: 0644]
arch/arm/mach-s3c24xx/Kconfig
arch/arm/mach-s3c24xx/Makefile
arch/arm/mach-s3c24xx/mach-s3c2416-dt.c [new file with mode: 0644]

index b9f7121e6ecf02c561e5b1b10308659aad23fb28..d5df15dc70092f05ac7427af49d3bb06f5f66e7d 100644 (file)
@@ -159,6 +159,7 @@ dtb-$(CONFIG_ARCH_U8500) += snowball.dtb \
        hrefprev60.dtb \
        hrefv60plus.dtb \
        ccu9540.dtb
+dtb-$(CONFIG_ARCH_S3C24XX) += s3c2416-smdk2416.dtb
 dtb-$(CONFIG_ARCH_SHMOBILE) += emev2-kzm9d.dtb \
        r8a7740-armadillo800eva.dtb \
        r8a7778-bockw.dtb \
diff --git a/arch/arm/boot/dts/s3c2416-pinctrl.dtsi b/arch/arm/boot/dts/s3c2416-pinctrl.dtsi
new file mode 100644 (file)
index 0000000..527e319
--- /dev/null
@@ -0,0 +1,173 @@
+/*
+ * Samsung S3C2416 pinctrl settings
+ *
+ * Copyright (c) 2013 Heiko Stuebner <heiko@sntech.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+&pinctrl_0 {
+       /*
+        * Pin banks
+        */
+
+       gpa: gpa {
+               gpio-controller;
+               #gpio-cells = <2>;
+       };
+
+       gpb: gpb {
+               gpio-controller;
+               #gpio-cells = <2>;
+       };
+
+       gpc: gpc {
+               gpio-controller;
+               #gpio-cells = <2>;
+       };
+
+       gpd: gpd {
+               gpio-controller;
+               #gpio-cells = <2>;
+       };
+
+       gpe: gpe {
+               gpio-controller;
+               #gpio-cells = <2>;
+       };
+
+       gpf: gpf {
+               gpio-controller;
+               #gpio-cells = <2>;
+               interrupt-controller;
+               #interrupt-cells = <2>;
+       };
+
+       gpg: gpg {
+               gpio-controller;
+               #gpio-cells = <2>;
+               interrupt-controller;
+               #interrupt-cells = <2>;
+       };
+
+       gph: gph {
+               gpio-controller;
+               #gpio-cells = <2>;
+       };
+
+       gpj: gpj {
+               gpio-controller;
+               #gpio-cells = <2>;
+       };
+
+       gpk: gpk {
+               gpio-controller;
+               #gpio-cells = <2>;
+       };
+
+       gpl: gpl {
+               gpio-controller;
+               #gpio-cells = <2>;
+       };
+
+       gpm: gpm {
+               gpio-controller;
+               #gpio-cells = <2>;
+       };
+
+       /*
+        * Pin groups
+        */
+
+       uart0_data: uart0-data {
+               samsung,pins = "gph-0", "gph-1";
+               samsung,pin-function = <2>;
+       };
+
+       uart0_fctl: uart0-fctl {
+               samsung,pins = "gph-8", "gph-9";
+               samsung,pin-function = <2>;
+       };
+
+       uart1_data: uart1-data {
+               samsung,pins = "gph-2", "gph-3";
+               samsung,pin-function = <2>;
+       };
+
+       uart1_fctl: uart1-fctl {
+               samsung,pins = "gph-10", "gph-11";
+               samsung,pin-function = <2>;
+       };
+
+       uart2_data: uart2-data {
+               samsung,pins = "gph-4", "gph-5";
+               samsung,pin-function = <2>;
+       };
+
+       uart2_fctl: uart2-fctl {
+               samsung,pins = "gph-6", "gph-7";
+               samsung,pin-function = <2>;
+       };
+
+       uart3_data: uart3-data {
+               samsung,pins = "gph-6", "gph-7";
+               samsung,pin-function = <2>;
+       };
+
+       extuart_clk: extuart-clk {
+               samsung,pins = "gph-12";
+               samsung,pin-function = <2>;
+       };
+
+       i2c0_bus: i2c0-bus {
+               samsung,pins = "gpe-14", "gpe-15";
+               samsung,pin-function = <2>;
+       };
+
+       spi0_bus: spi0-bus {
+               samsung,pins = "gpe-11", "gpe-12", "gpe-13";
+               samsung,pin-function = <2>;
+       };
+
+       sd0_clk: sd0-clk {
+               samsung,pins = "gpe-5";
+               samsung,pin-function = <2>;
+       };
+
+       sd0_cmd: sd0-cmd {
+               samsung,pins = "gpe-6";
+               samsung,pin-function = <2>;
+       };
+
+       sd0_bus1: sd0-bus1 {
+               samsung,pins = "gpe-7";
+               samsung,pin-function = <2>;
+       };
+
+       sd0_bus4: sd0-bus4 {
+               samsung,pins = "gpe-8", "gpe-9", "gpe-10";
+               samsung,pin-function = <2>;
+       };
+
+       sd1_cmd: sd1-cmd {
+               samsung,pins = "gpl-8";
+               samsung,pin-function = <2>;
+       };
+
+       sd1_clk: sd1-clk {
+               samsung,pins = "gpl-9";
+               samsung,pin-function = <2>;
+       };
+
+       sd1_bus1: sd1-bus1 {
+               samsung,pins = "gpl-0";
+               samsung,pin-function = <2>;
+       };
+
+       sd1_bus4: sd1-bus4 {
+               samsung,pins = "gpl-1", "gpl-2", "gpl-3";
+               samsung,pin-function = <2>;
+       };
+};
diff --git a/arch/arm/boot/dts/s3c2416-smdk2416.dts b/arch/arm/boot/dts/s3c2416-smdk2416.dts
new file mode 100644 (file)
index 0000000..ad1dd09
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * SAMSUNG SMDK2416 board device tree source
+ *
+ * Copyright (c) 2013 Heiko Stuebner <heiko@sntech.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+/dts-v1/;
+/include/ "s3c2416.dtsi"
+
+/ {
+       model = "SMDK2416";
+       compatible = "samsung,s3c2416";
+
+       memory {
+               reg =  <0x30000000 0x4000000>;
+       };
+
+       serial@50000000 {
+               status = "okay";
+               pinctrl-names = "default";
+               pinctrl-0 = <&uart0_data>, <&uart0_fctl>;
+       };
+
+       serial@50004000 {
+               status = "okay";
+               pinctrl-names = "default";
+               pinctrl-0 = <&uart1_data>, <&uart1_fctl>;
+       };
+
+       serial@50008000 {
+               status = "okay";
+               pinctrl-names = "default";
+               pinctrl-0 = <&uart2_data>;
+       };
+
+       serial@5000C000 {
+               status = "okay";
+               pinctrl-names = "default";
+               pinctrl-0 = <&uart3_data>;
+       };
+
+       watchdog@53000000 {
+               status = "okay";
+       };
+
+       rtc@57000000 {
+               status = "okay";
+       };
+
+       sdhci@4AC00000 {
+               pinctrl-names = "default";
+               pinctrl-0 = <&sd0_clk>, <&sd0_cmd>,
+                               <&sd0_bus1>, <&sd0_bus4>;
+               bus-width = <4>;
+               cd-gpios = <&gpf 1 0>;
+               cd-inverted;
+               status = "okay";
+       };
+
+       sdhci@4A800000 {
+               pinctrl-names = "default";
+               pinctrl-0 = <&sd1_clk>, <&sd1_cmd>,
+                               <&sd1_bus1>, <&sd1_bus4>;
+               bus-width = <4>;
+               broken-cd;
+               status = "okay";
+       };
+};
diff --git a/arch/arm/boot/dts/s3c2416.dtsi b/arch/arm/boot/dts/s3c2416.dtsi
new file mode 100644 (file)
index 0000000..6809324
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Samsung's S3C2416 SoC device tree source
+ *
+ * Copyright (c) 2013 Heiko Stuebner <heiko@sntech.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+/include/ "s3c24xx.dtsi"
+/include/ "s3c2416-pinctrl.dtsi"
+
+/ {
+       model = "Samsung S3C2416 SoC";
+       compatible = "samsung,s3c2416";
+
+       cpus {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               cpu {
+                       compatible = "arm,arm926ejs";
+               };
+       };
+
+       interrupt-controller@4a000000 {
+               compatible = "samsung,s3c2416-irq";
+       };
+
+       pinctrl@56000000 {
+               compatible = "samsung,s3c2416-pinctrl";
+       };
+
+       serial@50000000 {
+               compatible = "samsung,s3c2440-uart";
+       };
+
+       serial@50004000 {
+               compatible = "samsung,s3c2440-uart";
+       };
+
+       serial@50008000 {
+               compatible = "samsung,s3c2440-uart";
+       };
+
+       serial@5000C000 {
+               compatible = "samsung,s3c2440-uart";
+               reg = <0x5000C000 0x4000>;
+               interrupts = <1 18 24 4>, <1 18 25 4>;
+               status = "disabled";
+       };
+
+       sdhci@4AC00000 {
+               compatible = "samsung,s3c6410-sdhci";
+               reg = <0x4AC00000 0x100>;
+               interrupts = <0 0 21 3>;
+               status = "disabled";
+       };
+
+       sdhci@4A800000 {
+               compatible = "samsung,s3c6410-sdhci";
+               reg = <0x4A800000 0x100>;
+               interrupts = <0 0 20 3>;
+               status = "disabled";
+       };
+
+       watchdog@53000000 {
+               interrupts = <1 9 27 3>;
+       };
+
+       rtc@57000000 {
+               compatible = "samsung,s3c2416-rtc";
+       };
+
+       i2c@54000000 {
+               compatible = "samsung,s3c2440-i2c";
+       };
+};
diff --git a/arch/arm/boot/dts/s3c24xx.dtsi b/arch/arm/boot/dts/s3c24xx.dtsi
new file mode 100644 (file)
index 0000000..cab46ff
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * Samsung's S3C24XX family device tree source
+ *
+ * Copyright (c) 2013 Heiko Stuebner <heiko@sntech.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+/include/ "skeleton.dtsi"
+
+/ {
+       compatible = "samsung,s3c24xx";
+       interrupt-parent = <&intc>;
+
+       aliases {
+               pinctrl0 = &pinctrl_0;
+       };
+
+       intc:interrupt-controller@4a000000 {
+               compatible = "samsung,s3c2410-irq";
+               reg = <0x4a000000 0x100>;
+               interrupt-controller;
+               #interrupt-cells = <4>;
+       };
+
+       pinctrl_0: pinctrl@56000000 {
+               reg = <0x56000000 0x1000>;
+
+               wakeup-interrupt-controller {
+                       compatible = "samsung,s3c2410-wakeup-eint";
+                       interrupts = <0 0 0 3>,
+                                    <0 0 1 3>,
+                                    <0 0 2 3>,
+                                    <0 0 3 3>,
+                                    <0 0 4 4>,
+                                    <0 0 5 4>;
+               };
+       };
+
+       timer@51000000 {
+               compatible = "samsung,s3c2410-pwm";
+               reg = <0x51000000 0x1000>;
+               interrupts = <0 0 10 3>, <0 0 11 3>, <0 0 12 3>, <0 0 13 3>, <0 0 14 3>;
+               #pwm-cells = <4>;
+       };
+
+       serial@50000000 {
+               compatible = "samsung,s3c2410-uart";
+               reg = <0x50000000 0x4000>;
+               interrupts = <1 28 0 4>, <1 28 1 4>;
+               status = "disabled";
+       };
+
+       serial@50004000 {
+               compatible = "samsung,s3c2410-uart";
+               reg = <0x50004000 0x4000>;
+               interrupts = <1 23 3 4>, <1 23 4 4>;
+               status = "disabled";
+       };
+
+       serial@50008000 {
+               compatible = "samsung,s3c2410-uart";
+               reg = <0x50008000 0x4000>;
+               interrupts = <1 15 6 4>, <1 15 7 4>;
+               status = "disabled";
+       };
+
+       watchdog@53000000 {
+               compatible = "samsung,s3c2410-wdt";
+               reg = <0x53000000 0x100>;
+               interrupts = <0 0 9 3>;
+               status = "disabled";
+       };
+
+       rtc@57000000 {
+               compatible = "samsung,s3c2410-rtc";
+               reg = <0x57000000 0x100>;
+               interrupts = <0 0 30 3>, <0 0 8 3>;
+               status = "disabled";
+       };
+
+       i2c@54000000 {
+               compatible = "samsung,s3c2410-i2c";
+               reg = <0x54000000 0x100>;
+               interrupts = <0 0 27 3>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+               status = "disabled";
+       };
+};
index f2f7088bfd221c9bb50df7180f1dbbc51a9e2e2d..e52d5e42af4ea9b38066ecf2a4185424ad527b2f 100644 (file)
@@ -490,6 +490,18 @@ config MACH_SMDK2416
        help
          Say Y here if you are using an SMDK2416
 
+config MACH_S3C2416_DT
+       bool "Samsung S3C2416 machine using devicetree"
+       select CLKSRC_OF
+       select USE_OF
+       select PINCTRL
+       select PINCTRL_S3C24XX
+       help
+         Machine support for Samsung S3C2416 machines with device tree enabled.
+         Select this if a fdt blob is available for the S3C2416 SoC based board.
+         Note: This is under development and not all peripherals can be supported
+         with this machine file.
+
 endif  # CPU_S3C2416
 
 if CPU_S3C2440
index 6f46ecfc83967ce893ad63a01d23ca8ac498e908..6de730bada4d3f37acb323bca4433b4eb1ac09cf 100644 (file)
@@ -85,6 +85,7 @@ obj-$(CONFIG_MACH_SMDK2413)           += mach-smdk2413.o
 obj-$(CONFIG_MACH_VSTMS)               += mach-vstms.o
 
 obj-$(CONFIG_MACH_SMDK2416)            += mach-smdk2416.o
+obj-$(CONFIG_MACH_S3C2416_DT)          += mach-s3c2416-dt.o
 
 obj-$(CONFIG_MACH_ANUBIS)              += mach-anubis.o
 obj-$(CONFIG_MACH_AT2440EVB)           += mach-at2440evb.o
diff --git a/arch/arm/mach-s3c24xx/mach-s3c2416-dt.c b/arch/arm/mach-s3c24xx/mach-s3c2416-dt.c
new file mode 100644 (file)
index 0000000..f5c9072
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+ * Samsung's S3C2416 flattened device tree enabled machine
+ *
+ * Copyright (c) 2012 Heiko Stuebner <heiko@sntech.de>
+ *
+ * based on mach-exynos/mach-exynos4-dt.c
+ *
+ * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd.
+ *             http://www.samsung.com
+ * Copyright (c) 2010-2011 Linaro Ltd.
+ *             www.linaro.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+*/
+
+#include <linux/clocksource.h>
+#include <linux/irqchip.h>
+#include <linux/of_platform.h>
+#include <linux/serial_core.h>
+
+#include <asm/mach/arch.h>
+#include <mach/map.h>
+
+#include <plat/cpu.h>
+#include <plat/pm.h>
+#include <plat/regs-serial.h>
+
+#include "common.h"
+
+/*
+ * The following lookup table is used to override device names when devices
+ * are registered from device tree. This is temporarily added to enable
+ * device tree support addition for the S3C2416 architecture.
+ *
+ * For drivers that require platform data to be provided from the machine
+ * file, a platform data pointer can also be supplied along with the
+ * devices names. Usually, the platform data elements that cannot be parsed
+ * from the device tree by the drivers (example: function pointers) are
+ * supplied. But it should be noted that this is a temporary mechanism and
+ * at some point, the drivers should be capable of parsing all the platform
+ * data from the device tree.
+ */
+static const struct of_dev_auxdata s3c2416_auxdata_lookup[] __initconst = {
+       OF_DEV_AUXDATA("samsung,s3c2440-uart", S3C2410_PA_UART0,
+                               "s3c2440-uart.0", NULL),
+       OF_DEV_AUXDATA("samsung,s3c2440-uart", S3C2410_PA_UART1,
+                               "s3c2440-uart.1", NULL),
+       OF_DEV_AUXDATA("samsung,s3c2440-uart", S3C2410_PA_UART2,
+                               "s3c2440-uart.2", NULL),
+       OF_DEV_AUXDATA("samsung,s3c2440-uart", S3C2443_PA_UART3,
+                               "s3c2440-uart.3", NULL),
+       OF_DEV_AUXDATA("samsung,s3c6410-sdhci", S3C_PA_HSMMC0,
+                               "s3c-sdhci.0", NULL),
+       OF_DEV_AUXDATA("samsung,s3c6410-sdhci", S3C_PA_HSMMC1,
+                               "s3c-sdhci.1", NULL),
+       OF_DEV_AUXDATA("samsung,s3c2440-i2c", S3C_PA_IIC,
+                               "s3c2440-i2c.0", NULL),
+       {},
+};
+
+static void __init s3c2416_dt_map_io(void)
+{
+       s3c24xx_init_io(NULL, 0);
+       s3c24xx_init_clocks(12000000);
+}
+
+static void __init s3c2416_dt_machine_init(void)
+{
+       of_platform_populate(NULL, of_default_bus_match_table,
+                               s3c2416_auxdata_lookup, NULL);
+
+       s3c_pm_init();
+}
+
+static char const *s3c2416_dt_compat[] __initdata = {
+       "samsung,s3c2416",
+       "samsung,s3c2450",
+       NULL
+};
+
+DT_MACHINE_START(S3C2416_DT, "Samsung S3C2416 (Flattened Device Tree)")
+       /* Maintainer: Heiko Stuebner <heiko@sntech.de> */
+       .dt_compat      = s3c2416_dt_compat,
+       .map_io         = s3c2416_dt_map_io,
+       .init_irq       = irqchip_init,
+       .init_machine   = s3c2416_dt_machine_init,
+        .init_time     = clocksource_of_init,
+       .restart        = s3c2416_restart,
+MACHINE_END