add DT support for s3c2416-smdk2416

-----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.11 (GNU/Linux)
 
 iQIcBAABAgAGBQJRt4p8AAoJEA0Cl+kVi2xqbN0P/iSCAafcEeZk7YU8G9caTzUQ
 QpERQ19Lu04cIbzgA2SUyDzRgsu6p9zrtNN8f7NtZPec4oDJvqKfF9FNtEmit6Lt
 pND3d1f92SHDskMju+ukOICBxVbZomd6vj173R2Y2E19KPMAKf4wuWxL0m4vfvDV
 hVwWsnWiAtuKgHWKsbnfywWp4qxdDcHrxud+FqZVAI0abimDVlfHwSjHopExF10M
 Bf6N9ZUsrjpdnPJILVkVtshwgomGvAMznT2+wyQtP5vAFsiZwuRDmd7bkOfwgC+8
 nUHcxVzWNzEDDZlXB5v/oKJI3swGes4Yv8zRjlDAitEdDMzmB47tbUMz0bwqlmpC
 SNliwaAQo07eG1sbOebtLg0rv39t5k9C2e4rPDjVjBCTYCiGIHurfsRJpehhH+0G
 zLzjFMUyoe5x8Fw9nl8wfsxuPQuyDyezD8CkXSiZwwMokEaZh6GjnCvUg0LCkROK
 zRK6AiTmvOxGXnB93XNYW0mEbCh7abhZ4zZsR3P8/1BAdXkl1QF7UZXl0bCVpyNt
 Zv6pBPwQ+K293wV016BaOJ2Bl9VwGO+i+G496IYnfvBOveyo2nEOj66Ydg5T9XAo
 7rItZ9yfBnXEbe6JGTeFGHPPf93PZwQe8VKy869PAKRMOGAUoWGcZQ3zTNgfIA8V
 /PrZcWV7Eo1zRvLmN0zB
 =5U0j
 -----END PGP SIGNATURE-----

Merge tag 's3c24xx-dt-1' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung into next/dt

From Kukjin Kim, DT changes for s3c24xx.

* tag 's3c24xx-dt-1' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung:
  ARM: dts: add devicetree support for s3c2416-smdk2416

Signed-off-by: Olof Johansson <olof@lixom.net>
This commit is contained in:
Olof Johansson 2013-06-12 16:19:19 -07:00
commit 18c0e59679
8 changed files with 521 additions and 0 deletions

View File

@ -163,6 +163,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 \

View File

@ -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>;
};
};

View File

@ -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";
};
};

View File

@ -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";
};
};

View File

@ -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";
};
};

View 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

View 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

View File

@ -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