aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlof Johansson <olof@lixom.net>2012-11-26 03:06:23 -0500
committerOlof Johansson <olof@lixom.net>2012-11-26 03:06:23 -0500
commitd408c5dcc524dfc8e687c443719a3d6be86e2ea0 (patch)
tree0fee3f9936e9950d3b0db7d4f466b2b89718a2bb
parent8d2282a77bf0977e7033d8ea5970f369bc28f0f0 (diff)
parentd80162eccd56c40228e1232de8a203e8553b20a4 (diff)
Merge branch 'next/dt-samsung-2' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung into next/dt
From Kukjin Kim: Here is second Samsung DT stuff for v3.8. This is including power domain DT support for exynos and Google ARM Chromebook, Snow board and exynos4210-origen updates. * 'next/dt-samsung-2' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung: ARM: dts: Use drive strength 3 for SD pins for exynos4 ARM: dts: Set up power domains for exynos4 ARM: EXYNOS: Bind devices to power domains using DT ARM: EXYNOS: Fix power domain name initialization ARM: EXYNOS: Detect power domain state on registration from DT ARM: dts: Add vmmc fixed voltage regulator for exynos4210-origen ARM: dts: Update sdhci nodes for current bindings for exynos4210-origen ARM: dts: Update for pinctrl-samsung driver for exynos4210-origen ARM: dts: Split memory sections for exynos4210-origen ARM: EXYNOS: add all i2c busses to auxdata for DT ARM: dts: Add aliases for i2c controller for exynos4 ARM: dts: Add board dts file for Snow board (ARM Chromebook) ARM: dts: Move the dwmmc aliases from smdk5250 dts to exynos Add/add conflicts resolved in arch/arm/boot/dts/exynos5250-smdk5250.dts and arch/arm/mach-exynos/mach-exynos5-dt.c. Signed-off-by: Olof Johansson <olof@lixom.net>
-rw-r--r--Documentation/devicetree/bindings/arm/exynos/power_domain.txt15
-rw-r--r--arch/arm/boot/dts/Makefile3
-rw-r--r--arch/arm/boot/dts/cros5250-common.dtsi184
-rw-r--r--arch/arm/boot/dts/exynos4.dtsi54
-rw-r--r--arch/arm/boot/dts/exynos4210-origen.dts54
-rw-r--r--arch/arm/boot/dts/exynos4210-pinctrl.dtsi56
-rw-r--r--arch/arm/boot/dts/exynos4210.dtsi5
-rw-r--r--arch/arm/boot/dts/exynos4x12-pinctrl.dtsi56
-rw-r--r--arch/arm/boot/dts/exynos5250-smdk5250.dts12
-rw-r--r--arch/arm/boot/dts/exynos5250-snow.dts43
-rw-r--r--arch/arm/boot/dts/exynos5250.dtsi12
-rw-r--r--arch/arm/mach-exynos/mach-exynos5-dt.c10
-rw-r--r--arch/arm/mach-exynos/pm_domains.c93
13 files changed, 485 insertions, 112 deletions
diff --git a/Documentation/devicetree/bindings/arm/exynos/power_domain.txt b/Documentation/devicetree/bindings/arm/exynos/power_domain.txt
index 6528e215c5fe..5216b419016a 100644
--- a/Documentation/devicetree/bindings/arm/exynos/power_domain.txt
+++ b/Documentation/devicetree/bindings/arm/exynos/power_domain.txt
@@ -4,14 +4,13 @@ Exynos processors include support for multiple power domains which are used
4to gate power to one or more peripherals on the processor. 4to gate power to one or more peripherals on the processor.
5 5
6Required Properties: 6Required Properties:
7- compatiable: should be one of the following. 7- compatible: should be one of the following.
8 * samsung,exynos4210-pd - for exynos4210 type power domain. 8 * samsung,exynos4210-pd - for exynos4210 type power domain.
9- reg: physical base address of the controller and length of memory mapped 9- reg: physical base address of the controller and length of memory mapped
10 region. 10 region.
11 11
12Optional Properties: 12Node of a device using power domains must have a samsung,power-domain property
13- samsung,exynos4210-pd-off: Specifies that the power domain is in turned-off 13defined with a phandle to respective power domain.
14 state during boot and remains to be turned-off until explicitly turned-on.
15 14
16Example: 15Example:
17 16
@@ -19,3 +18,11 @@ Example:
19 compatible = "samsung,exynos4210-pd"; 18 compatible = "samsung,exynos4210-pd";
20 reg = <0x10023C00 0x10>; 19 reg = <0x10023C00 0x10>;
21 }; 20 };
21
22Example of the node using power domain:
23
24 node {
25 /* ... */
26 samsung,power-domain = <&lcd0>;
27 /* ... */
28 };
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index 83faa72dc176..a31211904e91 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -26,7 +26,8 @@ dtb-$(CONFIG_ARCH_EXYNOS) += exynos4210-origen.dtb \
26 exynos4210-smdkv310.dtb \ 26 exynos4210-smdkv310.dtb \
27 exynos4210-trats.dtb \ 27 exynos4210-trats.dtb \
28 exynos4412-smdk4412.dtb \ 28 exynos4412-smdk4412.dtb \
29 exynos5250-smdk5250.dtb 29 exynos5250-smdk5250.dtb \
30 exynos5250-snow.dtb
30dtb-$(CONFIG_ARCH_HIGHBANK) += highbank.dtb 31dtb-$(CONFIG_ARCH_HIGHBANK) += highbank.dtb
31dtb-$(CONFIG_ARCH_INTEGRATOR) += integratorap.dtb \ 32dtb-$(CONFIG_ARCH_INTEGRATOR) += integratorap.dtb \
32 integratorcp.dtb 33 integratorcp.dtb
diff --git a/arch/arm/boot/dts/cros5250-common.dtsi b/arch/arm/boot/dts/cros5250-common.dtsi
new file mode 100644
index 000000000000..fddd17417433
--- /dev/null
+++ b/arch/arm/boot/dts/cros5250-common.dtsi
@@ -0,0 +1,184 @@
1/*
2 * Common device tree include for all Exynos 5250 boards based off of Daisy.
3 *
4 * Copyright (c) 2012 Google, Inc
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9*/
10
11/ {
12 aliases {
13 };
14
15 memory {
16 reg = <0x40000000 0x80000000>;
17 };
18
19 chosen {
20 };
21
22 i2c@12C60000 {
23 samsung,i2c-sda-delay = <100>;
24 samsung,i2c-max-bus-freq = <378000>;
25 gpios = <&gpb3 0 2 3 0>,
26 <&gpb3 1 2 3 0>;
27 };
28
29 i2c@12C70000 {
30 samsung,i2c-sda-delay = <100>;
31 samsung,i2c-max-bus-freq = <378000>;
32 gpios = <&gpb3 2 2 3 0>,
33 <&gpb3 3 2 3 0>;
34 };
35
36 i2c@12C80000 {
37 samsung,i2c-sda-delay = <100>;
38 samsung,i2c-max-bus-freq = <66000>;
39
40 /*
41 * Disabled pullups since external part has its own pullups and
42 * double-pulling gets us out of spec in some cases.
43 */
44 gpios = <&gpa0 6 3 0 0>,
45 <&gpa0 7 3 0 0>;
46
47 hdmiddc@50 {
48 compatible = "samsung,exynos5-hdmiddc";
49 reg = <0x50>;
50 };
51 };
52
53 i2c@12C90000 {
54 samsung,i2c-sda-delay = <100>;
55 samsung,i2c-max-bus-freq = <66000>;
56 gpios = <&gpa1 2 3 3 0>,
57 <&gpa1 3 3 3 0>;
58 };
59
60 i2c@12CA0000 {
61 status = "disabled";
62 };
63
64 i2c@12CB0000 {
65 samsung,i2c-sda-delay = <100>;
66 samsung,i2c-max-bus-freq = <66000>;
67 gpios = <&gpa2 2 3 3 0>,
68 <&gpa2 3 3 3 0>;
69 };
70
71 i2c@12CC0000 {
72 status = "disabled";
73 };
74
75 i2c@12CD0000 {
76 samsung,i2c-sda-delay = <100>;
77 samsung,i2c-max-bus-freq = <66000>;
78 gpios = <&gpb2 2 3 3 0>,
79 <&gpb2 3 3 3 0>;
80 };
81
82 i2c@12CE0000 {
83 samsung,i2c-sda-delay = <100>;
84 samsung,i2c-max-bus-freq = <378000>;
85
86 hdmiphy@38 {
87 compatible = "samsung,exynos5-hdmiphy";
88 reg = <0x38>;
89 };
90 };
91
92 dwmmc0@12200000 {
93 num-slots = <1>;
94 supports-highspeed;
95 broken-cd;
96 fifo-depth = <0x80>;
97 card-detect-delay = <200>;
98 samsung,dw-mshc-ciu-div = <3>;
99 samsung,dw-mshc-sdr-timing = <2 3 3>;
100 samsung,dw-mshc-ddr-timing = <1 2 3>;
101
102 slot@0 {
103 reg = <0>;
104 bus-width = <8>;
105 gpios = <&gpc0 0 2 0 3>, <&gpc0 1 2 0 3>,
106 <&gpc1 0 2 3 3>, <&gpc1 1 2 3 3>,
107 <&gpc1 2 2 3 3>, <&gpc1 3 2 3 3>,
108 <&gpc0 3 2 3 3>, <&gpc0 4 2 3 3>,
109 <&gpc0 5 2 3 3>, <&gpc0 6 2 3 3>;
110 };
111 };
112
113 dwmmc1@12210000 {
114 status = "disabled";
115 };
116
117 dwmmc2@12220000 {
118 num-slots = <1>;
119 supports-highspeed;
120 fifo-depth = <0x80>;
121 card-detect-delay = <200>;
122 samsung,dw-mshc-ciu-div = <3>;
123 samsung,dw-mshc-sdr-timing = <2 3 3>;
124 samsung,dw-mshc-ddr-timing = <1 2 3>;
125
126 slot@0 {
127 reg = <0>;
128 bus-width = <4>;
129 samsung,cd-pinmux-gpio = <&gpc3 2 2 3 3>;
130 wp-gpios = <&gpc2 1 0 0 3>;
131 gpios = <&gpc3 0 2 0 3>, <&gpc3 1 2 0 3>,
132 <&gpc3 3 2 3 3>, <&gpc3 4 2 3 3>,
133 <&gpc3 5 2 3 3>, <&gpc3 6 2 3 3>;
134 };
135 };
136
137 dwmmc3@12230000 {
138 num-slots = <1>;
139 supports-highspeed;
140 broken-cd;
141 fifo-depth = <0x80>;
142 card-detect-delay = <200>;
143 samsung,dw-mshc-ciu-div = <3>;
144 samsung,dw-mshc-sdr-timing = <2 3 3>;
145 samsung,dw-mshc-ddr-timing = <1 2 3>;
146
147 slot@0 {
148 reg = <0>;
149 bus-width = <4>;
150 /* See board-specific dts files for GPIOs */
151 };
152 };
153
154 spi_0: spi@12d20000 {
155 status = "disabled";
156 };
157
158 spi_1: spi@12d30000 {
159 gpios = <&gpa2 4 2 3 0>,
160 <&gpa2 6 2 3 0>,
161 <&gpa2 7 2 3 0>;
162 samsung,spi-src-clk = <0>;
163 num-cs = <1>;
164 };
165
166 spi_2: spi@12d40000 {
167 status = "disabled";
168 };
169
170 hdmi {
171 hpd-gpio = <&gpx3 7 0xf 1 3>;
172 };
173
174 gpio-keys {
175 compatible = "gpio-keys";
176
177 power {
178 label = "Power";
179 gpios = <&gpx1 3 0 0x10000 0>;
180 linux,code = <116>; /* KEY_POWER */
181 gpio-key,wakeup;
182 };
183 };
184};
diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi
index a26c3dd58269..3428f1a94dcc 100644
--- a/arch/arm/boot/dts/exynos4.dtsi
+++ b/arch/arm/boot/dts/exynos4.dtsi
@@ -28,6 +28,44 @@
28 spi0 = &spi_0; 28 spi0 = &spi_0;
29 spi1 = &spi_1; 29 spi1 = &spi_1;
30 spi2 = &spi_2; 30 spi2 = &spi_2;
31 i2c0 = &i2c_0;
32 i2c1 = &i2c_1;
33 i2c2 = &i2c_2;
34 i2c3 = &i2c_3;
35 i2c4 = &i2c_4;
36 i2c5 = &i2c_5;
37 i2c6 = &i2c_6;
38 i2c7 = &i2c_7;
39 };
40
41 pd_mfc: mfc-power-domain@10023C40 {
42 compatible = "samsung,exynos4210-pd";
43 reg = <0x10023C40 0x20>;
44 };
45
46 pd_g3d: g3d-power-domain@10023C60 {
47 compatible = "samsung,exynos4210-pd";
48 reg = <0x10023C60 0x20>;
49 };
50
51 pd_lcd0: lcd0-power-domain@10023C80 {
52 compatible = "samsung,exynos4210-pd";
53 reg = <0x10023C80 0x20>;
54 };
55
56 pd_tv: tv-power-domain@10023C20 {
57 compatible = "samsung,exynos4210-pd";
58 reg = <0x10023C20 0x20>;
59 };
60
61 pd_cam: cam-power-domain@10023C00 {
62 compatible = "samsung,exynos4210-pd";
63 reg = <0x10023C00 0x20>;
64 };
65
66 pd_gps: gps-power-domain@10023CE0 {
67 compatible = "samsung,exynos4210-pd";
68 reg = <0x10023CE0 0x20>;
31 }; 69 };
32 70
33 gic:interrupt-controller@10490000 { 71 gic:interrupt-controller@10490000 {
@@ -121,7 +159,7 @@
121 status = "disabled"; 159 status = "disabled";
122 }; 160 };
123 161
124 i2c@13860000 { 162 i2c_0: i2c@13860000 {
125 #address-cells = <1>; 163 #address-cells = <1>;
126 #size-cells = <0>; 164 #size-cells = <0>;
127 compatible = "samsung,s3c2440-i2c"; 165 compatible = "samsung,s3c2440-i2c";
@@ -130,7 +168,7 @@
130 status = "disabled"; 168 status = "disabled";
131 }; 169 };
132 170
133 i2c@13870000 { 171 i2c_1: i2c@13870000 {
134 #address-cells = <1>; 172 #address-cells = <1>;
135 #size-cells = <0>; 173 #size-cells = <0>;
136 compatible = "samsung,s3c2440-i2c"; 174 compatible = "samsung,s3c2440-i2c";
@@ -139,7 +177,7 @@
139 status = "disabled"; 177 status = "disabled";
140 }; 178 };
141 179
142 i2c@13880000 { 180 i2c_2: i2c@13880000 {
143 #address-cells = <1>; 181 #address-cells = <1>;
144 #size-cells = <0>; 182 #size-cells = <0>;
145 compatible = "samsung,s3c2440-i2c"; 183 compatible = "samsung,s3c2440-i2c";
@@ -148,7 +186,7 @@
148 status = "disabled"; 186 status = "disabled";
149 }; 187 };
150 188
151 i2c@13890000 { 189 i2c_3: i2c@13890000 {
152 #address-cells = <1>; 190 #address-cells = <1>;
153 #size-cells = <0>; 191 #size-cells = <0>;
154 compatible = "samsung,s3c2440-i2c"; 192 compatible = "samsung,s3c2440-i2c";
@@ -157,7 +195,7 @@
157 status = "disabled"; 195 status = "disabled";
158 }; 196 };
159 197
160 i2c@138A0000 { 198 i2c_4: i2c@138A0000 {
161 #address-cells = <1>; 199 #address-cells = <1>;
162 #size-cells = <0>; 200 #size-cells = <0>;
163 compatible = "samsung,s3c2440-i2c"; 201 compatible = "samsung,s3c2440-i2c";
@@ -166,7 +204,7 @@
166 status = "disabled"; 204 status = "disabled";
167 }; 205 };
168 206
169 i2c@138B0000 { 207 i2c_5: i2c@138B0000 {
170 #address-cells = <1>; 208 #address-cells = <1>;
171 #size-cells = <0>; 209 #size-cells = <0>;
172 compatible = "samsung,s3c2440-i2c"; 210 compatible = "samsung,s3c2440-i2c";
@@ -175,7 +213,7 @@
175 status = "disabled"; 213 status = "disabled";
176 }; 214 };
177 215
178 i2c@138C0000 { 216 i2c_6: i2c@138C0000 {
179 #address-cells = <1>; 217 #address-cells = <1>;
180 #size-cells = <0>; 218 #size-cells = <0>;
181 compatible = "samsung,s3c2440-i2c"; 219 compatible = "samsung,s3c2440-i2c";
@@ -184,7 +222,7 @@
184 status = "disabled"; 222 status = "disabled";
185 }; 223 };
186 224
187 i2c@138D0000 { 225 i2c_7: i2c@138D0000 {
188 #address-cells = <1>; 226 #address-cells = <1>;
189 #size-cells = <0>; 227 #size-cells = <0>;
190 compatible = "samsung,s3c2440-i2c"; 228 compatible = "samsung,s3c2440-i2c";
diff --git a/arch/arm/boot/dts/exynos4210-origen.dts b/arch/arm/boot/dts/exynos4210-origen.dts
index f16c99f2f0fc..f2710018e84e 100644
--- a/arch/arm/boot/dts/exynos4210-origen.dts
+++ b/arch/arm/boot/dts/exynos4210-origen.dts
@@ -22,38 +22,38 @@
22 compatible = "insignal,origen", "samsung,exynos4210"; 22 compatible = "insignal,origen", "samsung,exynos4210";
23 23
24 memory { 24 memory {
25 reg = <0x40000000 0x40000000>; 25 reg = <0x40000000 0x10000000
26 0x50000000 0x10000000
27 0x60000000 0x10000000
28 0x70000000 0x10000000>;
26 }; 29 };
27 30
28 chosen { 31 chosen {
29 bootargs ="root=/dev/ram0 rw ramdisk=8192 initrd=0x41000000,8M console=ttySAC2,115200 init=/linuxrc"; 32 bootargs ="root=/dev/ram0 rw ramdisk=8192 initrd=0x41000000,8M console=ttySAC2,115200 init=/linuxrc";
30 }; 33 };
31 34
35 mmc_reg: voltage-regulator {
36 compatible = "regulator-fixed";
37 regulator-name = "VMEM_VDD_2.8V";
38 regulator-min-microvolt = <2800000>;
39 regulator-max-microvolt = <2800000>;
40 gpio = <&gpx1 1 0>;
41 enable-active-high;
42 };
43
32 sdhci@12530000 { 44 sdhci@12530000 {
33 samsung,sdhci-bus-width = <4>; 45 bus-width = <4>;
34 linux,mmc_cap_4_bit_data; 46 pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_bus4 &sd2_cd>;
35 samsung,sdhci-cd-internal; 47 pinctrl-names = "default";
36 gpio-cd = <&gpk2 2 2 3 3>; 48 vmmc-supply = <&mmc_reg>;
37 gpios = <&gpk2 0 2 0 3>,
38 <&gpk2 1 2 0 3>,
39 <&gpk2 3 2 3 3>,
40 <&gpk2 4 2 3 3>,
41 <&gpk2 5 2 3 3>,
42 <&gpk2 6 2 3 3>;
43 status = "okay"; 49 status = "okay";
44 }; 50 };
45 51
46 sdhci@12510000 { 52 sdhci@12510000 {
47 samsung,sdhci-bus-width = <4>; 53 bus-width = <4>;
48 linux,mmc_cap_4_bit_data; 54 pinctrl-0 = <&sd0_clk &sd0_cmd &sd0_bus4 &sd0_cd>;
49 samsung,sdhci-cd-internal; 55 pinctrl-names = "default";
50 gpio-cd = <&gpk0 2 2 3 3>; 56 vmmc-supply = <&mmc_reg>;
51 gpios = <&gpk0 0 2 0 3>,
52 <&gpk0 1 2 0 3>,
53 <&gpk0 3 2 3 3>,
54 <&gpk0 4 2 3 3>,
55 <&gpk0 5 2 3 3>,
56 <&gpk0 6 2 3 3>;
57 status = "okay"; 57 status = "okay";
58 }; 58 };
59 59
@@ -80,35 +80,35 @@
80 80
81 up { 81 up {
82 label = "Up"; 82 label = "Up";
83 gpios = <&gpx2 0 0 0x10000 2>; 83 gpios = <&gpx2 0 1>;
84 linux,code = <103>; 84 linux,code = <103>;
85 gpio-key,wakeup; 85 gpio-key,wakeup;
86 }; 86 };
87 87
88 down { 88 down {
89 label = "Down"; 89 label = "Down";
90 gpios = <&gpx2 1 0 0x10000 2>; 90 gpios = <&gpx2 1 1>;
91 linux,code = <108>; 91 linux,code = <108>;
92 gpio-key,wakeup; 92 gpio-key,wakeup;
93 }; 93 };
94 94
95 back { 95 back {
96 label = "Back"; 96 label = "Back";
97 gpios = <&gpx1 7 0 0x10000 2>; 97 gpios = <&gpx1 7 1>;
98 linux,code = <158>; 98 linux,code = <158>;
99 gpio-key,wakeup; 99 gpio-key,wakeup;
100 }; 100 };
101 101
102 home { 102 home {
103 label = "Home"; 103 label = "Home";
104 gpios = <&gpx1 6 0 0x10000 2>; 104 gpios = <&gpx1 6 1>;
105 linux,code = <102>; 105 linux,code = <102>;
106 gpio-key,wakeup; 106 gpio-key,wakeup;
107 }; 107 };
108 108
109 menu { 109 menu {
110 label = "Menu"; 110 label = "Menu";
111 gpios = <&gpx1 5 0 0x10000 2>; 111 gpios = <&gpx1 5 1>;
112 linux,code = <139>; 112 linux,code = <139>;
113 gpio-key,wakeup; 113 gpio-key,wakeup;
114 }; 114 };
@@ -117,7 +117,7 @@
117 leds { 117 leds {
118 compatible = "gpio-leds"; 118 compatible = "gpio-leds";
119 status { 119 status {
120 gpios = <&gpx1 3 0 0x10000 2>; 120 gpios = <&gpx1 3 1>;
121 linux,default-trigger = "heartbeat"; 121 linux,default-trigger = "heartbeat";
122 }; 122 };
123 }; 123 };
diff --git a/arch/arm/boot/dts/exynos4210-pinctrl.dtsi b/arch/arm/boot/dts/exynos4210-pinctrl.dtsi
index 6a4a1a04221c..55a2efb763d1 100644
--- a/arch/arm/boot/dts/exynos4210-pinctrl.dtsi
+++ b/arch/arm/boot/dts/exynos4210-pinctrl.dtsi
@@ -482,196 +482,196 @@
482 samsung,pins = "gpk0-0"; 482 samsung,pins = "gpk0-0";
483 samsung,pin-function = <2>; 483 samsung,pin-function = <2>;
484 samsung,pin-pud = <0>; 484 samsung,pin-pud = <0>;
485 samsung,pin-drv = <0>; 485 samsung,pin-drv = <3>;
486 }; 486 };
487 487
488 sd0_cmd: sd0-cmd { 488 sd0_cmd: sd0-cmd {
489 samsung,pins = "gpk0-1"; 489 samsung,pins = "gpk0-1";
490 samsung,pin-function = <2>; 490 samsung,pin-function = <2>;
491 samsung,pin-pud = <0>; 491 samsung,pin-pud = <0>;
492 samsung,pin-drv = <0>; 492 samsung,pin-drv = <3>;
493 }; 493 };
494 494
495 sd0_cd: sd0-cd { 495 sd0_cd: sd0-cd {
496 samsung,pins = "gpk0-2"; 496 samsung,pins = "gpk0-2";
497 samsung,pin-function = <2>; 497 samsung,pin-function = <2>;
498 samsung,pin-pud = <3>; 498 samsung,pin-pud = <3>;
499 samsung,pin-drv = <0>; 499 samsung,pin-drv = <3>;
500 }; 500 };
501 501
502 sd0_bus1: sd0-bus-width1 { 502 sd0_bus1: sd0-bus-width1 {
503 samsung,pins = "gpk0-3"; 503 samsung,pins = "gpk0-3";
504 samsung,pin-function = <2>; 504 samsung,pin-function = <2>;
505 samsung,pin-pud = <3>; 505 samsung,pin-pud = <3>;
506 samsung,pin-drv = <0>; 506 samsung,pin-drv = <3>;
507 }; 507 };
508 508
509 sd0_bus4: sd0-bus-width4 { 509 sd0_bus4: sd0-bus-width4 {
510 samsung,pins = "gpk0-3", "gpk0-4", "gpk0-5", "gpk0-6"; 510 samsung,pins = "gpk0-3", "gpk0-4", "gpk0-5", "gpk0-6";
511 samsung,pin-function = <2>; 511 samsung,pin-function = <2>;
512 samsung,pin-pud = <3>; 512 samsung,pin-pud = <3>;
513 samsung,pin-drv = <0>; 513 samsung,pin-drv = <3>;
514 }; 514 };
515 515
516 sd0_bus8: sd0-bus-width8 { 516 sd0_bus8: sd0-bus-width8 {
517 samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6"; 517 samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6";
518 samsung,pin-function = <3>; 518 samsung,pin-function = <3>;
519 samsung,pin-pud = <3>; 519 samsung,pin-pud = <3>;
520 samsung,pin-drv = <0>; 520 samsung,pin-drv = <3>;
521 }; 521 };
522 522
523 sd4_clk: sd4-clk { 523 sd4_clk: sd4-clk {
524 samsung,pins = "gpk0-0"; 524 samsung,pins = "gpk0-0";
525 samsung,pin-function = <3>; 525 samsung,pin-function = <3>;
526 samsung,pin-pud = <0>; 526 samsung,pin-pud = <0>;
527 samsung,pin-drv = <0>; 527 samsung,pin-drv = <3>;
528 }; 528 };
529 529
530 sd4_cmd: sd4-cmd { 530 sd4_cmd: sd4-cmd {
531 samsung,pins = "gpk0-1"; 531 samsung,pins = "gpk0-1";
532 samsung,pin-function = <3>; 532 samsung,pin-function = <3>;
533 samsung,pin-pud = <0>; 533 samsung,pin-pud = <0>;
534 samsung,pin-drv = <0>; 534 samsung,pin-drv = <3>;
535 }; 535 };
536 536
537 sd4_cd: sd4-cd { 537 sd4_cd: sd4-cd {
538 samsung,pins = "gpk0-2"; 538 samsung,pins = "gpk0-2";
539 samsung,pin-function = <3>; 539 samsung,pin-function = <3>;
540 samsung,pin-pud = <3>; 540 samsung,pin-pud = <3>;
541 samsung,pin-drv = <0>; 541 samsung,pin-drv = <3>;
542 }; 542 };
543 543
544 sd4_bus1: sd4-bus-width1 { 544 sd4_bus1: sd4-bus-width1 {
545 samsung,pins = "gpk0-3"; 545 samsung,pins = "gpk0-3";
546 samsung,pin-function = <3>; 546 samsung,pin-function = <3>;
547 samsung,pin-pud = <3>; 547 samsung,pin-pud = <3>;
548 samsung,pin-drv = <0>; 548 samsung,pin-drv = <3>;
549 }; 549 };
550 550
551 sd4_bus4: sd4-bus-width4 { 551 sd4_bus4: sd4-bus-width4 {
552 samsung,pins = "gpk0-3", "gpk0-4", "gpk0-5", "gpk0-6"; 552 samsung,pins = "gpk0-3", "gpk0-4", "gpk0-5", "gpk0-6";
553 samsung,pin-function = <3>; 553 samsung,pin-function = <3>;
554 samsung,pin-pud = <3>; 554 samsung,pin-pud = <3>;
555 samsung,pin-drv = <0>; 555 samsung,pin-drv = <3>;
556 }; 556 };
557 557
558 sd4_bus8: sd4-bus-width8 { 558 sd4_bus8: sd4-bus-width8 {
559 samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6"; 559 samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6";
560 samsung,pin-function = <3>; 560 samsung,pin-function = <3>;
561 samsung,pin-pud = <4>; 561 samsung,pin-pud = <4>;
562 samsung,pin-drv = <0>; 562 samsung,pin-drv = <3>;
563 }; 563 };
564 564
565 sd1_clk: sd1-clk { 565 sd1_clk: sd1-clk {
566 samsung,pins = "gpk1-0"; 566 samsung,pins = "gpk1-0";
567 samsung,pin-function = <2>; 567 samsung,pin-function = <2>;
568 samsung,pin-pud = <0>; 568 samsung,pin-pud = <0>;
569 samsung,pin-drv = <0>; 569 samsung,pin-drv = <3>;
570 }; 570 };
571 571
572 sd1_cmd: sd1-cmd { 572 sd1_cmd: sd1-cmd {
573 samsung,pins = "gpk1-1"; 573 samsung,pins = "gpk1-1";
574 samsung,pin-function = <2>; 574 samsung,pin-function = <2>;
575 samsung,pin-pud = <0>; 575 samsung,pin-pud = <0>;
576 samsung,pin-drv = <0>; 576 samsung,pin-drv = <3>;
577 }; 577 };
578 578
579 sd1_cd: sd1-cd { 579 sd1_cd: sd1-cd {
580 samsung,pins = "gpk1-2"; 580 samsung,pins = "gpk1-2";
581 samsung,pin-function = <2>; 581 samsung,pin-function = <2>;
582 samsung,pin-pud = <3>; 582 samsung,pin-pud = <3>;
583 samsung,pin-drv = <0>; 583 samsung,pin-drv = <3>;
584 }; 584 };
585 585
586 sd1_bus1: sd1-bus-width1 { 586 sd1_bus1: sd1-bus-width1 {
587 samsung,pins = "gpk1-3"; 587 samsung,pins = "gpk1-3";
588 samsung,pin-function = <2>; 588 samsung,pin-function = <2>;
589 samsung,pin-pud = <3>; 589 samsung,pin-pud = <3>;
590 samsung,pin-drv = <0>; 590 samsung,pin-drv = <3>;
591 }; 591 };
592 592
593 sd1_bus4: sd1-bus-width4 { 593 sd1_bus4: sd1-bus-width4 {
594 samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6"; 594 samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6";
595 samsung,pin-function = <2>; 595 samsung,pin-function = <2>;
596 samsung,pin-pud = <3>; 596 samsung,pin-pud = <3>;
597 samsung,pin-drv = <0>; 597 samsung,pin-drv = <3>;
598 }; 598 };
599 599
600 sd2_clk: sd2-clk { 600 sd2_clk: sd2-clk {
601 samsung,pins = "gpk2-0"; 601 samsung,pins = "gpk2-0";
602 samsung,pin-function = <2>; 602 samsung,pin-function = <2>;
603 samsung,pin-pud = <0>; 603 samsung,pin-pud = <0>;
604 samsung,pin-drv = <0>; 604 samsung,pin-drv = <3>;
605 }; 605 };
606 606
607 sd2_cmd: sd2-cmd { 607 sd2_cmd: sd2-cmd {
608 samsung,pins = "gpk2-1"; 608 samsung,pins = "gpk2-1";
609 samsung,pin-function = <2>; 609 samsung,pin-function = <2>;
610 samsung,pin-pud = <0>; 610 samsung,pin-pud = <0>;
611 samsung,pin-drv = <0>; 611 samsung,pin-drv = <3>;
612 }; 612 };
613 613
614 sd2_cd: sd2-cd { 614 sd2_cd: sd2-cd {
615 samsung,pins = "gpk2-2"; 615 samsung,pins = "gpk2-2";
616 samsung,pin-function = <2>; 616 samsung,pin-function = <2>;
617 samsung,pin-pud = <3>; 617 samsung,pin-pud = <3>;
618 samsung,pin-drv = <0>; 618 samsung,pin-drv = <3>;
619 }; 619 };
620 620
621 sd2_bus1: sd2-bus-width1 { 621 sd2_bus1: sd2-bus-width1 {
622 samsung,pins = "gpk2-3"; 622 samsung,pins = "gpk2-3";
623 samsung,pin-function = <2>; 623 samsung,pin-function = <2>;
624 samsung,pin-pud = <3>; 624 samsung,pin-pud = <3>;
625 samsung,pin-drv = <0>; 625 samsung,pin-drv = <3>;
626 }; 626 };
627 627
628 sd2_bus4: sd2-bus-width4 { 628 sd2_bus4: sd2-bus-width4 {
629 samsung,pins = "gpk2-3", "gpk2-4", "gpk2-5", "gpk2-6"; 629 samsung,pins = "gpk2-3", "gpk2-4", "gpk2-5", "gpk2-6";
630 samsung,pin-function = <2>; 630 samsung,pin-function = <2>;
631 samsung,pin-pud = <3>; 631 samsung,pin-pud = <3>;
632 samsung,pin-drv = <0>; 632 samsung,pin-drv = <3>;
633 }; 633 };
634 634
635 sd2_bus8: sd2-bus-width8 { 635 sd2_bus8: sd2-bus-width8 {
636 samsung,pins = "gpk3-3", "gpk3-4", "gpk3-5", "gpk3-6"; 636 samsung,pins = "gpk3-3", "gpk3-4", "gpk3-5", "gpk3-6";
637 samsung,pin-function = <3>; 637 samsung,pin-function = <3>;
638 samsung,pin-pud = <3>; 638 samsung,pin-pud = <3>;
639 samsung,pin-drv = <0>; 639 samsung,pin-drv = <3>;
640 }; 640 };
641 641
642 sd3_clk: sd3-clk { 642 sd3_clk: sd3-clk {
643 samsung,pins = "gpk3-0"; 643 samsung,pins = "gpk3-0";
644 samsung,pin-function = <2>; 644 samsung,pin-function = <2>;
645 samsung,pin-pud = <0>; 645 samsung,pin-pud = <0>;
646 samsung,pin-drv = <0>; 646 samsung,pin-drv = <3>;
647 }; 647 };
648 648
649 sd3_cmd: sd3-cmd { 649 sd3_cmd: sd3-cmd {
650 samsung,pins = "gpk3-1"; 650 samsung,pins = "gpk3-1";
651 samsung,pin-function = <2>; 651 samsung,pin-function = <2>;
652 samsung,pin-pud = <0>; 652 samsung,pin-pud = <0>;
653 samsung,pin-drv = <0>; 653 samsung,pin-drv = <3>;
654 }; 654 };
655 655
656 sd3_cd: sd3-cd { 656 sd3_cd: sd3-cd {
657 samsung,pins = "gpk3-2"; 657 samsung,pins = "gpk3-2";
658 samsung,pin-function = <2>; 658 samsung,pin-function = <2>;
659 samsung,pin-pud = <3>; 659 samsung,pin-pud = <3>;
660 samsung,pin-drv = <0>; 660 samsung,pin-drv = <3>;
661 }; 661 };
662 662
663 sd3_bus1: sd3-bus-width1 { 663 sd3_bus1: sd3-bus-width1 {
664 samsung,pins = "gpk3-3"; 664 samsung,pins = "gpk3-3";
665 samsung,pin-function = <2>; 665 samsung,pin-function = <2>;
666 samsung,pin-pud = <3>; 666 samsung,pin-pud = <3>;
667 samsung,pin-drv = <0>; 667 samsung,pin-drv = <3>;
668 }; 668 };
669 669
670 sd3_bus4: sd3-bus-width4 { 670 sd3_bus4: sd3-bus-width4 {
671 samsung,pins = "gpk3-3", "gpk3-4", "gpk3-5", "gpk3-6"; 671 samsung,pins = "gpk3-3", "gpk3-4", "gpk3-5", "gpk3-6";
672 samsung,pin-function = <2>; 672 samsung,pin-function = <2>;
673 samsung,pin-pud = <3>; 673 samsung,pin-pud = <3>;
674 samsung,pin-drv = <0>; 674 samsung,pin-drv = <3>;
675 }; 675 };
676 676
677 eint0: ext-int0 { 677 eint0: ext-int0 {
diff --git a/arch/arm/boot/dts/exynos4210.dtsi b/arch/arm/boot/dts/exynos4210.dtsi
index 939f6399c9c7..e31bfc4a6f09 100644
--- a/arch/arm/boot/dts/exynos4210.dtsi
+++ b/arch/arm/boot/dts/exynos4210.dtsi
@@ -31,6 +31,11 @@
31 pinctrl2 = &pinctrl_2; 31 pinctrl2 = &pinctrl_2;
32 }; 32 };
33 33
34 pd_lcd1: lcd1-power-domain@10023CA0 {
35 compatible = "samsung,exynos4210-pd";
36 reg = <0x10023CA0 0x20>;
37 };
38
34 gic:interrupt-controller@10490000 { 39 gic:interrupt-controller@10490000 {
35 cpu-offset = <0x8000>; 40 cpu-offset = <0x8000>;
36 }; 41 };
diff --git a/arch/arm/boot/dts/exynos4x12-pinctrl.dtsi b/arch/arm/boot/dts/exynos4x12-pinctrl.dtsi
index 56f4669cecc1..8e6115adcd97 100644
--- a/arch/arm/boot/dts/exynos4x12-pinctrl.dtsi
+++ b/arch/arm/boot/dts/exynos4x12-pinctrl.dtsi
@@ -586,196 +586,196 @@
586 samsung,pins = "gpk0-0"; 586 samsung,pins = "gpk0-0";
587 samsung,pin-function = <2>; 587 samsung,pin-function = <2>;
588 samsung,pin-pud = <0>; 588 samsung,pin-pud = <0>;
589 samsung,pin-drv = <0>; 589 samsung,pin-drv = <3>;
590 }; 590 };
591 591
592 sd0_cmd: sd0-cmd { 592 sd0_cmd: sd0-cmd {
593 samsung,pins = "gpk0-1"; 593 samsung,pins = "gpk0-1";
594 samsung,pin-function = <2>; 594 samsung,pin-function = <2>;
595 samsung,pin-pud = <0>; 595 samsung,pin-pud = <0>;
596 samsung,pin-drv = <0>; 596 samsung,pin-drv = <3>;
597 }; 597 };
598 598
599 sd0_cd: sd0-cd { 599 sd0_cd: sd0-cd {
600 samsung,pins = "gpk0-2"; 600 samsung,pins = "gpk0-2";
601 samsung,pin-function = <2>; 601 samsung,pin-function = <2>;
602 samsung,pin-pud = <3>; 602 samsung,pin-pud = <3>;
603 samsung,pin-drv = <0>; 603 samsung,pin-drv = <3>;
604 }; 604 };
605 605
606 sd0_bus1: sd0-bus-width1 { 606 sd0_bus1: sd0-bus-width1 {
607 samsung,pins = "gpk0-3"; 607 samsung,pins = "gpk0-3";
608 samsung,pin-function = <2>; 608 samsung,pin-function = <2>;
609 samsung,pin-pud = <3>; 609 samsung,pin-pud = <3>;
610 samsung,pin-drv = <0>; 610 samsung,pin-drv = <3>;
611 }; 611 };
612 612
613 sd0_bus4: sd0-bus-width4 { 613 sd0_bus4: sd0-bus-width4 {
614 samsung,pins = "gpk0-3", "gpk0-4", "gpk0-5", "gpk0-6"; 614 samsung,pins = "gpk0-3", "gpk0-4", "gpk0-5", "gpk0-6";
615 samsung,pin-function = <2>; 615 samsung,pin-function = <2>;
616 samsung,pin-pud = <3>; 616 samsung,pin-pud = <3>;
617 samsung,pin-drv = <0>; 617 samsung,pin-drv = <3>;
618 }; 618 };
619 619
620 sd0_bus8: sd0-bus-width8 { 620 sd0_bus8: sd0-bus-width8 {
621 samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6"; 621 samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6";
622 samsung,pin-function = <3>; 622 samsung,pin-function = <3>;
623 samsung,pin-pud = <3>; 623 samsung,pin-pud = <3>;
624 samsung,pin-drv = <0>; 624 samsung,pin-drv = <3>;
625 }; 625 };
626 626
627 sd4_clk: sd4-clk { 627 sd4_clk: sd4-clk {
628 samsung,pins = "gpk0-0"; 628 samsung,pins = "gpk0-0";
629 samsung,pin-function = <3>; 629 samsung,pin-function = <3>;
630 samsung,pin-pud = <0>; 630 samsung,pin-pud = <0>;
631 samsung,pin-drv = <0>; 631 samsung,pin-drv = <3>;
632 }; 632 };
633 633
634 sd4_cmd: sd4-cmd { 634 sd4_cmd: sd4-cmd {
635 samsung,pins = "gpk0-1"; 635 samsung,pins = "gpk0-1";
636 samsung,pin-function = <3>; 636 samsung,pin-function = <3>;
637 samsung,pin-pud = <0>; 637 samsung,pin-pud = <0>;
638 samsung,pin-drv = <0>; 638 samsung,pin-drv = <3>;
639 }; 639 };
640 640
641 sd4_cd: sd4-cd { 641 sd4_cd: sd4-cd {
642 samsung,pins = "gpk0-2"; 642 samsung,pins = "gpk0-2";
643 samsung,pin-function = <3>; 643 samsung,pin-function = <3>;
644 samsung,pin-pud = <3>; 644 samsung,pin-pud = <3>;
645 samsung,pin-drv = <0>; 645 samsung,pin-drv = <3>;
646 }; 646 };
647 647
648 sd4_bus1: sd4-bus-width1 { 648 sd4_bus1: sd4-bus-width1 {
649 samsung,pins = "gpk0-3"; 649 samsung,pins = "gpk0-3";
650 samsung,pin-function = <3>; 650 samsung,pin-function = <3>;
651 samsung,pin-pud = <3>; 651 samsung,pin-pud = <3>;
652 samsung,pin-drv = <0>; 652 samsung,pin-drv = <3>;
653 }; 653 };
654 654
655 sd4_bus4: sd4-bus-width4 { 655 sd4_bus4: sd4-bus-width4 {
656 samsung,pins = "gpk0-3", "gpk0-4", "gpk0-5", "gpk0-6"; 656 samsung,pins = "gpk0-3", "gpk0-4", "gpk0-5", "gpk0-6";
657 samsung,pin-function = <3>; 657 samsung,pin-function = <3>;
658 samsung,pin-pud = <3>; 658 samsung,pin-pud = <3>;
659 samsung,pin-drv = <0>; 659 samsung,pin-drv = <3>;
660 }; 660 };
661 661
662 sd4_bus8: sd4-bus-width8 { 662 sd4_bus8: sd4-bus-width8 {
663 samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6"; 663 samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6";
664 samsung,pin-function = <3>; 664 samsung,pin-function = <3>;
665 samsung,pin-pud = <4>; 665 samsung,pin-pud = <4>;
666 samsung,pin-drv = <0>; 666 samsung,pin-drv = <3>;
667 }; 667 };
668 668
669 sd1_clk: sd1-clk { 669 sd1_clk: sd1-clk {
670 samsung,pins = "gpk1-0"; 670 samsung,pins = "gpk1-0";
671 samsung,pin-function = <2>; 671 samsung,pin-function = <2>;
672 samsung,pin-pud = <0>; 672 samsung,pin-pud = <0>;
673 samsung,pin-drv = <0>; 673 samsung,pin-drv = <3>;
674 }; 674 };
675 675
676 sd1_cmd: sd1-cmd { 676 sd1_cmd: sd1-cmd {
677 samsung,pins = "gpk1-1"; 677 samsung,pins = "gpk1-1";
678 samsung,pin-function = <2>; 678 samsung,pin-function = <2>;
679 samsung,pin-pud = <0>; 679 samsung,pin-pud = <0>;
680 samsung,pin-drv = <0>; 680 samsung,pin-drv = <3>;
681 }; 681 };
682 682
683 sd1_cd: sd1-cd { 683 sd1_cd: sd1-cd {
684 samsung,pins = "gpk1-2"; 684 samsung,pins = "gpk1-2";
685 samsung,pin-function = <2>; 685 samsung,pin-function = <2>;
686 samsung,pin-pud = <3>; 686 samsung,pin-pud = <3>;
687 samsung,pin-drv = <0>; 687 samsung,pin-drv = <3>;
688 }; 688 };
689 689
690 sd1_bus1: sd1-bus-width1 { 690 sd1_bus1: sd1-bus-width1 {
691 samsung,pins = "gpk1-3"; 691 samsung,pins = "gpk1-3";
692 samsung,pin-function = <2>; 692 samsung,pin-function = <2>;
693 samsung,pin-pud = <3>; 693 samsung,pin-pud = <3>;
694 samsung,pin-drv = <0>; 694 samsung,pin-drv = <3>;
695 }; 695 };
696 696
697 sd1_bus4: sd1-bus-width4 { 697 sd1_bus4: sd1-bus-width4 {
698 samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6"; 698 samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6";
699 samsung,pin-function = <2>; 699 samsung,pin-function = <2>;
700 samsung,pin-pud = <3>; 700 samsung,pin-pud = <3>;
701 samsung,pin-drv = <0>; 701 samsung,pin-drv = <3>;
702 }; 702 };
703 703
704 sd2_clk: sd2-clk { 704 sd2_clk: sd2-clk {
705 samsung,pins = "gpk2-0"; 705 samsung,pins = "gpk2-0";
706 samsung,pin-function = <2>; 706 samsung,pin-function = <2>;
707 samsung,pin-pud = <0>; 707 samsung,pin-pud = <0>;
708 samsung,pin-drv = <0>; 708 samsung,pin-drv = <3>;
709 }; 709 };
710 710
711 sd2_cmd: sd2-cmd { 711 sd2_cmd: sd2-cmd {
712 samsung,pins = "gpk2-1"; 712 samsung,pins = "gpk2-1";
713 samsung,pin-function = <2>; 713 samsung,pin-function = <2>;
714 samsung,pin-pud = <0>; 714 samsung,pin-pud = <0>;
715 samsung,pin-drv = <0>; 715 samsung,pin-drv = <3>;
716 }; 716 };
717 717
718 sd2_cd: sd2-cd { 718 sd2_cd: sd2-cd {
719 samsung,pins = "gpk2-2"; 719 samsung,pins = "gpk2-2";
720 samsung,pin-function = <2>; 720 samsung,pin-function = <2>;
721 samsung,pin-pud = <3>; 721 samsung,pin-pud = <3>;
722 samsung,pin-drv = <0>; 722 samsung,pin-drv = <3>;
723 }; 723 };
724 724
725 sd2_bus1: sd2-bus-width1 { 725 sd2_bus1: sd2-bus-width1 {
726 samsung,pins = "gpk2-3"; 726 samsung,pins = "gpk2-3";
727 samsung,pin-function = <2>; 727 samsung,pin-function = <2>;
728 samsung,pin-pud = <3>; 728 samsung,pin-pud = <3>;
729 samsung,pin-drv = <0>; 729 samsung,pin-drv = <3>;
730 }; 730 };
731 731
732 sd2_bus4: sd2-bus-width4 { 732 sd2_bus4: sd2-bus-width4 {
733 samsung,pins = "gpk2-3", "gpk2-4", "gpk2-5", "gpk2-6"; 733 samsung,pins = "gpk2-3", "gpk2-4", "gpk2-5", "gpk2-6";
734 samsung,pin-function = <2>; 734 samsung,pin-function = <2>;
735 samsung,pin-pud = <3>; 735 samsung,pin-pud = <3>;
736 samsung,pin-drv = <0>; 736 samsung,pin-drv = <3>;
737 }; 737 };
738 738
739 sd2_bus8: sd2-bus-width8 { 739 sd2_bus8: sd2-bus-width8 {
740 samsung,pins = "gpk3-3", "gpk3-4", "gpk3-5", "gpk3-6"; 740 samsung,pins = "gpk3-3", "gpk3-4", "gpk3-5", "gpk3-6";
741 samsung,pin-function = <3>; 741 samsung,pin-function = <3>;
742 samsung,pin-pud = <3>; 742 samsung,pin-pud = <3>;
743 samsung,pin-drv = <0>; 743 samsung,pin-drv = <3>;
744 }; 744 };
745 745
746 sd3_clk: sd3-clk { 746 sd3_clk: sd3-clk {
747 samsung,pins = "gpk3-0"; 747 samsung,pins = "gpk3-0";
748 samsung,pin-function = <2>; 748 samsung,pin-function = <2>;
749 samsung,pin-pud = <0>; 749 samsung,pin-pud = <0>;
750 samsung,pin-drv = <0>; 750 samsung,pin-drv = <3>;
751 }; 751 };
752 752
753 sd3_cmd: sd3-cmd { 753 sd3_cmd: sd3-cmd {
754 samsung,pins = "gpk3-1"; 754 samsung,pins = "gpk3-1";
755 samsung,pin-function = <2>; 755 samsung,pin-function = <2>;
756 samsung,pin-pud = <0>; 756 samsung,pin-pud = <0>;
757 samsung,pin-drv = <0>; 757 samsung,pin-drv = <3>;
758 }; 758 };
759 759
760 sd3_cd: sd3-cd { 760 sd3_cd: sd3-cd {
761 samsung,pins = "gpk3-2"; 761 samsung,pins = "gpk3-2";
762 samsung,pin-function = <2>; 762 samsung,pin-function = <2>;
763 samsung,pin-pud = <3>; 763 samsung,pin-pud = <3>;
764 samsung,pin-drv = <0>; 764 samsung,pin-drv = <3>;
765 }; 765 };
766 766
767 sd3_bus1: sd3-bus-width1 { 767 sd3_bus1: sd3-bus-width1 {
768 samsung,pins = "gpk3-3"; 768 samsung,pins = "gpk3-3";
769 samsung,pin-function = <2>; 769 samsung,pin-function = <2>;
770 samsung,pin-pud = <3>; 770 samsung,pin-pud = <3>;
771 samsung,pin-drv = <0>; 771 samsung,pin-drv = <3>;
772 }; 772 };
773 773
774 sd3_bus4: sd3-bus-width4 { 774 sd3_bus4: sd3-bus-width4 {
775 samsung,pins = "gpk3-3", "gpk3-4", "gpk3-5", "gpk3-6"; 775 samsung,pins = "gpk3-3", "gpk3-4", "gpk3-5", "gpk3-6";
776 samsung,pin-function = <2>; 776 samsung,pin-function = <2>;
777 samsung,pin-pud = <3>; 777 samsung,pin-pud = <3>;
778 samsung,pin-drv = <0>; 778 samsung,pin-drv = <3>;
779 }; 779 };
780 780
781 keypad_col0: keypad-col0 { 781 keypad_col0: keypad-col0 {
diff --git a/arch/arm/boot/dts/exynos5250-smdk5250.dts b/arch/arm/boot/dts/exynos5250-smdk5250.dts
index 29f133371c11..942d5761ca97 100644
--- a/arch/arm/boot/dts/exynos5250-smdk5250.dts
+++ b/arch/arm/boot/dts/exynos5250-smdk5250.dts
@@ -17,10 +17,6 @@
17 compatible = "samsung,smdk5250", "samsung,exynos5250"; 17 compatible = "samsung,smdk5250", "samsung,exynos5250";
18 18
19 aliases { 19 aliases {
20 mshc0 = &dwmmc_0;
21 mshc1 = &dwmmc_1;
22 mshc2 = &dwmmc_2;
23 mshc3 = &dwmmc_3;
24 }; 20 };
25 21
26 memory { 22 memory {
@@ -112,7 +108,7 @@
112 }; 108 };
113 }; 109 };
114 110
115 dwmmc_0: dwmmc0@12200000 { 111 dwmmc0@12200000 {
116 num-slots = <1>; 112 num-slots = <1>;
117 supports-highspeed; 113 supports-highspeed;
118 broken-cd; 114 broken-cd;
@@ -133,11 +129,11 @@
133 }; 129 };
134 }; 130 };
135 131
136 dwmmc_1: dwmmc1@12210000 { 132 dwmmc1@12210000 {
137 status = "disabled"; 133 status = "disabled";
138 }; 134 };
139 135
140 dwmmc_2: dwmmc2@12220000 { 136 dwmmc2@12220000 {
141 num-slots = <1>; 137 num-slots = <1>;
142 supports-highspeed; 138 supports-highspeed;
143 fifo-depth = <0x80>; 139 fifo-depth = <0x80>;
@@ -158,7 +154,7 @@
158 }; 154 };
159 }; 155 };
160 156
161 dwmmc_3: dwmmc3@12230000 { 157 dwmmc3@12230000 {
162 status = "disabled"; 158 status = "disabled";
163 }; 159 };
164 160
diff --git a/arch/arm/boot/dts/exynos5250-snow.dts b/arch/arm/boot/dts/exynos5250-snow.dts
new file mode 100644
index 000000000000..17dd951c1cd2
--- /dev/null
+++ b/arch/arm/boot/dts/exynos5250-snow.dts
@@ -0,0 +1,43 @@
1/*
2 * Google Snow board device tree source
3 *
4 * Copyright (c) 2012 Google, Inc
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9*/
10
11/dts-v1/;
12/include/ "exynos5250.dtsi"
13/include/ "cros5250-common.dtsi"
14
15/ {
16 model = "Google Snow";
17 compatible = "google,snow", "samsung,exynos5250";
18
19 gpio-keys {
20 compatible = "gpio-keys";
21
22 lid-switch {
23 label = "Lid";
24 gpios = <&gpx3 5 0 0x10000 0>;
25 linux,input-type = <5>; /* EV_SW */
26 linux,code = <0>; /* SW_LID */
27 debounce-interval = <1>;
28 gpio-key,wakeup;
29 };
30 };
31
32 /*
33 * On Snow we've got SIP WiFi and so can keep drive strengths low to
34 * reduce EMI.
35 */
36 dwmmc3@12230000 {
37 slot@0 {
38 gpios = <&gpc4 0 2 0 0>, <&gpc4 1 2 3 0>,
39 <&gpc4 3 2 3 0>, <&gpc4 4 2 3 0>,
40 <&gpc4 5 2 3 0>, <&gpc4 6 2 3 0>;
41 };
42 };
43};
diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi
index b82b829171ae..36d8246ea50e 100644
--- a/arch/arm/boot/dts/exynos5250.dtsi
+++ b/arch/arm/boot/dts/exynos5250.dtsi
@@ -31,6 +31,10 @@
31 gsc1 = &gsc_1; 31 gsc1 = &gsc_1;
32 gsc2 = &gsc_2; 32 gsc2 = &gsc_2;
33 gsc3 = &gsc_3; 33 gsc3 = &gsc_3;
34 mshc0 = &dwmmc_0;
35 mshc1 = &dwmmc_1;
36 mshc2 = &dwmmc_2;
37 mshc3 = &dwmmc_3;
34 }; 38 };
35 39
36 gic:interrupt-controller@10481000 { 40 gic:interrupt-controller@10481000 {
@@ -224,7 +228,7 @@
224 #size-cells = <0>; 228 #size-cells = <0>;
225 }; 229 };
226 230
227 dwmmc0@12200000 { 231 dwmmc_0: dwmmc0@12200000 {
228 compatible = "samsung,exynos5250-dw-mshc"; 232 compatible = "samsung,exynos5250-dw-mshc";
229 reg = <0x12200000 0x1000>; 233 reg = <0x12200000 0x1000>;
230 interrupts = <0 75 0>; 234 interrupts = <0 75 0>;
@@ -232,7 +236,7 @@
232 #size-cells = <0>; 236 #size-cells = <0>;
233 }; 237 };
234 238
235 dwmmc1@12210000 { 239 dwmmc_1: dwmmc1@12210000 {
236 compatible = "samsung,exynos5250-dw-mshc"; 240 compatible = "samsung,exynos5250-dw-mshc";
237 reg = <0x12210000 0x1000>; 241 reg = <0x12210000 0x1000>;
238 interrupts = <0 76 0>; 242 interrupts = <0 76 0>;
@@ -240,7 +244,7 @@
240 #size-cells = <0>; 244 #size-cells = <0>;
241 }; 245 };
242 246
243 dwmmc2@12220000 { 247 dwmmc_2: dwmmc2@12220000 {
244 compatible = "samsung,exynos5250-dw-mshc"; 248 compatible = "samsung,exynos5250-dw-mshc";
245 reg = <0x12220000 0x1000>; 249 reg = <0x12220000 0x1000>;
246 interrupts = <0 77 0>; 250 interrupts = <0 77 0>;
@@ -248,7 +252,7 @@
248 #size-cells = <0>; 252 #size-cells = <0>;
249 }; 253 };
250 254
251 dwmmc3@12230000 { 255 dwmmc_3: dwmmc3@12230000 {
252 compatible = "samsung,exynos5250-dw-mshc"; 256 compatible = "samsung,exynos5250-dw-mshc";
253 reg = <0x12230000 0x1000>; 257 reg = <0x12230000 0x1000>;
254 interrupts = <0 78 0>; 258 interrupts = <0 78 0>;
diff --git a/arch/arm/mach-exynos/mach-exynos5-dt.c b/arch/arm/mach-exynos/mach-exynos5-dt.c
index 28146f2f71dc..25f464cf7979 100644
--- a/arch/arm/mach-exynos/mach-exynos5-dt.c
+++ b/arch/arm/mach-exynos/mach-exynos5-dt.c
@@ -52,6 +52,16 @@ static const struct of_dev_auxdata exynos5250_auxdata_lookup[] __initconst = {
52 "s3c2440-i2c.1", NULL), 52 "s3c2440-i2c.1", NULL),
53 OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS5_PA_IIC(2), 53 OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS5_PA_IIC(2),
54 "s3c2440-i2c.2", NULL), 54 "s3c2440-i2c.2", NULL),
55 OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS5_PA_IIC(3),
56 "s3c2440-i2c.3", NULL),
57 OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS5_PA_IIC(4),
58 "s3c2440-i2c.4", NULL),
59 OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS5_PA_IIC(5),
60 "s3c2440-i2c.5", NULL),
61 OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS5_PA_IIC(6),
62 "s3c2440-i2c.6", NULL),
63 OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS5_PA_IIC(7),
64 "s3c2440-i2c.7", NULL),
55 OF_DEV_AUXDATA("samsung,s3c2440-hdmiphy-i2c", EXYNOS5_PA_IIC(8), 65 OF_DEV_AUXDATA("samsung,s3c2440-hdmiphy-i2c", EXYNOS5_PA_IIC(8),
56 "s3c2440-hdmiphy-i2c", NULL), 66 "s3c2440-hdmiphy-i2c", NULL),
57 OF_DEV_AUXDATA("samsung,exynos5250-dw-mshc", EXYNOS5_PA_DWMCI0, 67 OF_DEV_AUXDATA("samsung,exynos5250-dw-mshc", EXYNOS5_PA_DWMCI0,
diff --git a/arch/arm/mach-exynos/pm_domains.c b/arch/arm/mach-exynos/pm_domains.c
index c0bc83a7663e..9f1351de52f7 100644
--- a/arch/arm/mach-exynos/pm_domains.c
+++ b/arch/arm/mach-exynos/pm_domains.c
@@ -19,6 +19,8 @@
19#include <linux/pm_domain.h> 19#include <linux/pm_domain.h>
20#include <linux/delay.h> 20#include <linux/delay.h>
21#include <linux/of_address.h> 21#include <linux/of_address.h>
22#include <linux/of_platform.h>
23#include <linux/sched.h>
22 24
23#include <mach/regs-pmu.h> 25#include <mach/regs-pmu.h>
24#include <plat/devs.h> 26#include <plat/devs.h>
@@ -83,12 +85,88 @@ static struct exynos_pm_domain PD = { \
83} 85}
84 86
85#ifdef CONFIG_OF 87#ifdef CONFIG_OF
88static void exynos_add_device_to_domain(struct exynos_pm_domain *pd,
89 struct device *dev)
90{
91 int ret;
92
93 dev_dbg(dev, "adding to power domain %s\n", pd->pd.name);
94
95 while (1) {
96 ret = pm_genpd_add_device(&pd->pd, dev);
97 if (ret != -EAGAIN)
98 break;
99 cond_resched();
100 }
101
102 pm_genpd_dev_need_restore(dev, true);
103}
104
105static void exynos_remove_device_from_domain(struct device *dev)
106{
107 struct generic_pm_domain *genpd = dev_to_genpd(dev);
108 int ret;
109
110 dev_dbg(dev, "removing from power domain %s\n", genpd->name);
111
112 while (1) {
113 ret = pm_genpd_remove_device(genpd, dev);
114 if (ret != -EAGAIN)
115 break;
116 cond_resched();
117 }
118}
119
120static void exynos_read_domain_from_dt(struct device *dev)
121{
122 struct platform_device *pd_pdev;
123 struct exynos_pm_domain *pd;
124 struct device_node *node;
125
126 node = of_parse_phandle(dev->of_node, "samsung,power-domain", 0);
127 if (!node)
128 return;
129 pd_pdev = of_find_device_by_node(node);
130 if (!pd_pdev)
131 return;
132 pd = platform_get_drvdata(pd_pdev);
133 exynos_add_device_to_domain(pd, dev);
134}
135
136static int exynos_pm_notifier_call(struct notifier_block *nb,
137 unsigned long event, void *data)
138{
139 struct device *dev = data;
140
141 switch (event) {
142 case BUS_NOTIFY_BIND_DRIVER:
143 if (dev->of_node)
144 exynos_read_domain_from_dt(dev);
145
146 break;
147
148 case BUS_NOTIFY_UNBOUND_DRIVER:
149 exynos_remove_device_from_domain(dev);
150
151 break;
152 }
153 return NOTIFY_DONE;
154}
155
156static struct notifier_block platform_nb = {
157 .notifier_call = exynos_pm_notifier_call,
158};
159
86static __init int exynos_pm_dt_parse_domains(void) 160static __init int exynos_pm_dt_parse_domains(void)
87{ 161{
162 struct platform_device *pdev;
88 struct device_node *np; 163 struct device_node *np;
89 164
90 for_each_compatible_node(np, NULL, "samsung,exynos4210-pd") { 165 for_each_compatible_node(np, NULL, "samsung,exynos4210-pd") {
91 struct exynos_pm_domain *pd; 166 struct exynos_pm_domain *pd;
167 int on;
168
169 pdev = of_find_device_by_node(np);
92 170
93 pd = kzalloc(sizeof(*pd), GFP_KERNEL); 171 pd = kzalloc(sizeof(*pd), GFP_KERNEL);
94 if (!pd) { 172 if (!pd) {
@@ -97,15 +175,22 @@ static __init int exynos_pm_dt_parse_domains(void)
97 return -ENOMEM; 175 return -ENOMEM;
98 } 176 }
99 177
100 if (of_get_property(np, "samsung,exynos4210-pd-off", NULL)) 178 pd->pd.name = kstrdup(np->name, GFP_KERNEL);
101 pd->is_off = true; 179 pd->name = pd->pd.name;
102 pd->name = np->name;
103 pd->base = of_iomap(np, 0); 180 pd->base = of_iomap(np, 0);
104 pd->pd.power_off = exynos_pd_power_off; 181 pd->pd.power_off = exynos_pd_power_off;
105 pd->pd.power_on = exynos_pd_power_on; 182 pd->pd.power_on = exynos_pd_power_on;
106 pd->pd.of_node = np; 183 pd->pd.of_node = np;
107 pm_genpd_init(&pd->pd, NULL, false); 184
185 platform_set_drvdata(pdev, pd);
186
187 on = __raw_readl(pd->base + 0x4) & S5P_INT_LOCAL_PWR_EN;
188
189 pm_genpd_init(&pd->pd, NULL, !on);
108 } 190 }
191
192 bus_register_notifier(&platform_bus_type, &platform_nb);
193
109 return 0; 194 return 0;
110} 195}
111#else 196#else