Commit d408c5dc authored by Olof Johansson's avatar Olof Johansson

Merge branch 'next/dt-samsung-2' of...

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: default avatarOlof Johansson <olof@lixom.net>
parents 8d2282a7 d80162ec
...@@ -4,14 +4,13 @@ Exynos processors include support for multiple power domains which are used ...@@ -4,14 +4,13 @@ Exynos processors include support for multiple power domains which are used
to gate power to one or more peripherals on the processor. to gate power to one or more peripherals on the processor.
Required Properties: Required Properties:
- compatiable: should be one of the following. - compatible: should be one of the following.
* samsung,exynos4210-pd - for exynos4210 type power domain. * samsung,exynos4210-pd - for exynos4210 type power domain.
- reg: physical base address of the controller and length of memory mapped - reg: physical base address of the controller and length of memory mapped
region. region.
Optional Properties: Node of a device using power domains must have a samsung,power-domain property
- samsung,exynos4210-pd-off: Specifies that the power domain is in turned-off defined with a phandle to respective power domain.
state during boot and remains to be turned-off until explicitly turned-on.
Example: Example:
...@@ -19,3 +18,11 @@ Example: ...@@ -19,3 +18,11 @@ Example:
compatible = "samsung,exynos4210-pd"; compatible = "samsung,exynos4210-pd";
reg = <0x10023C00 0x10>; reg = <0x10023C00 0x10>;
}; };
Example of the node using power domain:
node {
/* ... */
samsung,power-domain = <&lcd0>;
/* ... */
};
...@@ -26,7 +26,8 @@ dtb-$(CONFIG_ARCH_EXYNOS) += exynos4210-origen.dtb \ ...@@ -26,7 +26,8 @@ dtb-$(CONFIG_ARCH_EXYNOS) += exynos4210-origen.dtb \
exynos4210-smdkv310.dtb \ exynos4210-smdkv310.dtb \
exynos4210-trats.dtb \ exynos4210-trats.dtb \
exynos4412-smdk4412.dtb \ exynos4412-smdk4412.dtb \
exynos5250-smdk5250.dtb exynos5250-smdk5250.dtb \
exynos5250-snow.dtb
dtb-$(CONFIG_ARCH_HIGHBANK) += highbank.dtb dtb-$(CONFIG_ARCH_HIGHBANK) += highbank.dtb
dtb-$(CONFIG_ARCH_INTEGRATOR) += integratorap.dtb \ dtb-$(CONFIG_ARCH_INTEGRATOR) += integratorap.dtb \
integratorcp.dtb integratorcp.dtb
......
/*
* Common device tree include for all Exynos 5250 boards based off of Daisy.
*
* Copyright (c) 2012 Google, Inc
*
* 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.
*/
/ {
aliases {
};
memory {
reg = <0x40000000 0x80000000>;
};
chosen {
};
i2c@12C60000 {
samsung,i2c-sda-delay = <100>;
samsung,i2c-max-bus-freq = <378000>;
gpios = <&gpb3 0 2 3 0>,
<&gpb3 1 2 3 0>;
};
i2c@12C70000 {
samsung,i2c-sda-delay = <100>;
samsung,i2c-max-bus-freq = <378000>;
gpios = <&gpb3 2 2 3 0>,
<&gpb3 3 2 3 0>;
};
i2c@12C80000 {
samsung,i2c-sda-delay = <100>;
samsung,i2c-max-bus-freq = <66000>;
/*
* Disabled pullups since external part has its own pullups and
* double-pulling gets us out of spec in some cases.
*/
gpios = <&gpa0 6 3 0 0>,
<&gpa0 7 3 0 0>;
hdmiddc@50 {
compatible = "samsung,exynos5-hdmiddc";
reg = <0x50>;
};
};
i2c@12C90000 {
samsung,i2c-sda-delay = <100>;
samsung,i2c-max-bus-freq = <66000>;
gpios = <&gpa1 2 3 3 0>,
<&gpa1 3 3 3 0>;
};
i2c@12CA0000 {
status = "disabled";
};
i2c@12CB0000 {
samsung,i2c-sda-delay = <100>;
samsung,i2c-max-bus-freq = <66000>;
gpios = <&gpa2 2 3 3 0>,
<&gpa2 3 3 3 0>;
};
i2c@12CC0000 {
status = "disabled";
};
i2c@12CD0000 {
samsung,i2c-sda-delay = <100>;
samsung,i2c-max-bus-freq = <66000>;
gpios = <&gpb2 2 3 3 0>,
<&gpb2 3 3 3 0>;
};
i2c@12CE0000 {
samsung,i2c-sda-delay = <100>;
samsung,i2c-max-bus-freq = <378000>;
hdmiphy@38 {
compatible = "samsung,exynos5-hdmiphy";
reg = <0x38>;
};
};
dwmmc0@12200000 {
num-slots = <1>;
supports-highspeed;
broken-cd;
fifo-depth = <0x80>;
card-detect-delay = <200>;
samsung,dw-mshc-ciu-div = <3>;
samsung,dw-mshc-sdr-timing = <2 3 3>;
samsung,dw-mshc-ddr-timing = <1 2 3>;
slot@0 {
reg = <0>;
bus-width = <8>;
gpios = <&gpc0 0 2 0 3>, <&gpc0 1 2 0 3>,
<&gpc1 0 2 3 3>, <&gpc1 1 2 3 3>,
<&gpc1 2 2 3 3>, <&gpc1 3 2 3 3>,
<&gpc0 3 2 3 3>, <&gpc0 4 2 3 3>,
<&gpc0 5 2 3 3>, <&gpc0 6 2 3 3>;
};
};
dwmmc1@12210000 {
status = "disabled";
};
dwmmc2@12220000 {
num-slots = <1>;
supports-highspeed;
fifo-depth = <0x80>;
card-detect-delay = <200>;
samsung,dw-mshc-ciu-div = <3>;
samsung,dw-mshc-sdr-timing = <2 3 3>;
samsung,dw-mshc-ddr-timing = <1 2 3>;
slot@0 {
reg = <0>;
bus-width = <4>;
samsung,cd-pinmux-gpio = <&gpc3 2 2 3 3>;
wp-gpios = <&gpc2 1 0 0 3>;
gpios = <&gpc3 0 2 0 3>, <&gpc3 1 2 0 3>,
<&gpc3 3 2 3 3>, <&gpc3 4 2 3 3>,
<&gpc3 5 2 3 3>, <&gpc3 6 2 3 3>;
};
};
dwmmc3@12230000 {
num-slots = <1>;
supports-highspeed;
broken-cd;
fifo-depth = <0x80>;
card-detect-delay = <200>;
samsung,dw-mshc-ciu-div = <3>;
samsung,dw-mshc-sdr-timing = <2 3 3>;
samsung,dw-mshc-ddr-timing = <1 2 3>;
slot@0 {
reg = <0>;
bus-width = <4>;
/* See board-specific dts files for GPIOs */
};
};
spi_0: spi@12d20000 {
status = "disabled";
};
spi_1: spi@12d30000 {
gpios = <&gpa2 4 2 3 0>,
<&gpa2 6 2 3 0>,
<&gpa2 7 2 3 0>;
samsung,spi-src-clk = <0>;
num-cs = <1>;
};
spi_2: spi@12d40000 {
status = "disabled";
};
hdmi {
hpd-gpio = <&gpx3 7 0xf 1 3>;
};
gpio-keys {
compatible = "gpio-keys";
power {
label = "Power";
gpios = <&gpx1 3 0 0x10000 0>;
linux,code = <116>; /* KEY_POWER */
gpio-key,wakeup;
};
};
};
...@@ -28,6 +28,44 @@ aliases { ...@@ -28,6 +28,44 @@ aliases {
spi0 = &spi_0; spi0 = &spi_0;
spi1 = &spi_1; spi1 = &spi_1;
spi2 = &spi_2; spi2 = &spi_2;
i2c0 = &i2c_0;
i2c1 = &i2c_1;
i2c2 = &i2c_2;
i2c3 = &i2c_3;
i2c4 = &i2c_4;
i2c5 = &i2c_5;
i2c6 = &i2c_6;
i2c7 = &i2c_7;
};
pd_mfc: mfc-power-domain@10023C40 {
compatible = "samsung,exynos4210-pd";
reg = <0x10023C40 0x20>;
};
pd_g3d: g3d-power-domain@10023C60 {
compatible = "samsung,exynos4210-pd";
reg = <0x10023C60 0x20>;
};
pd_lcd0: lcd0-power-domain@10023C80 {
compatible = "samsung,exynos4210-pd";
reg = <0x10023C80 0x20>;
};
pd_tv: tv-power-domain@10023C20 {
compatible = "samsung,exynos4210-pd";
reg = <0x10023C20 0x20>;
};
pd_cam: cam-power-domain@10023C00 {
compatible = "samsung,exynos4210-pd";
reg = <0x10023C00 0x20>;
};
pd_gps: gps-power-domain@10023CE0 {
compatible = "samsung,exynos4210-pd";
reg = <0x10023CE0 0x20>;
}; };
gic:interrupt-controller@10490000 { gic:interrupt-controller@10490000 {
...@@ -121,7 +159,7 @@ serial@13830000 { ...@@ -121,7 +159,7 @@ serial@13830000 {
status = "disabled"; status = "disabled";
}; };
i2c@13860000 { i2c_0: i2c@13860000 {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
compatible = "samsung,s3c2440-i2c"; compatible = "samsung,s3c2440-i2c";
...@@ -130,7 +168,7 @@ i2c@13860000 { ...@@ -130,7 +168,7 @@ i2c@13860000 {
status = "disabled"; status = "disabled";
}; };
i2c@13870000 { i2c_1: i2c@13870000 {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
compatible = "samsung,s3c2440-i2c"; compatible = "samsung,s3c2440-i2c";
...@@ -139,7 +177,7 @@ i2c@13870000 { ...@@ -139,7 +177,7 @@ i2c@13870000 {
status = "disabled"; status = "disabled";
}; };
i2c@13880000 { i2c_2: i2c@13880000 {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
compatible = "samsung,s3c2440-i2c"; compatible = "samsung,s3c2440-i2c";
...@@ -148,7 +186,7 @@ i2c@13880000 { ...@@ -148,7 +186,7 @@ i2c@13880000 {
status = "disabled"; status = "disabled";
}; };
i2c@13890000 { i2c_3: i2c@13890000 {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
compatible = "samsung,s3c2440-i2c"; compatible = "samsung,s3c2440-i2c";
...@@ -157,7 +195,7 @@ i2c@13890000 { ...@@ -157,7 +195,7 @@ i2c@13890000 {
status = "disabled"; status = "disabled";
}; };
i2c@138A0000 { i2c_4: i2c@138A0000 {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
compatible = "samsung,s3c2440-i2c"; compatible = "samsung,s3c2440-i2c";
...@@ -166,7 +204,7 @@ i2c@138A0000 { ...@@ -166,7 +204,7 @@ i2c@138A0000 {
status = "disabled"; status = "disabled";
}; };
i2c@138B0000 { i2c_5: i2c@138B0000 {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
compatible = "samsung,s3c2440-i2c"; compatible = "samsung,s3c2440-i2c";
...@@ -175,7 +213,7 @@ i2c@138B0000 { ...@@ -175,7 +213,7 @@ i2c@138B0000 {
status = "disabled"; status = "disabled";
}; };
i2c@138C0000 { i2c_6: i2c@138C0000 {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
compatible = "samsung,s3c2440-i2c"; compatible = "samsung,s3c2440-i2c";
...@@ -184,7 +222,7 @@ i2c@138C0000 { ...@@ -184,7 +222,7 @@ i2c@138C0000 {
status = "disabled"; status = "disabled";
}; };
i2c@138D0000 { i2c_7: i2c@138D0000 {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
compatible = "samsung,s3c2440-i2c"; compatible = "samsung,s3c2440-i2c";
......
...@@ -22,38 +22,38 @@ / { ...@@ -22,38 +22,38 @@ / {
compatible = "insignal,origen", "samsung,exynos4210"; compatible = "insignal,origen", "samsung,exynos4210";
memory { memory {
reg = <0x40000000 0x40000000>; reg = <0x40000000 0x10000000
0x50000000 0x10000000
0x60000000 0x10000000
0x70000000 0x10000000>;
}; };
chosen { chosen {
bootargs ="root=/dev/ram0 rw ramdisk=8192 initrd=0x41000000,8M console=ttySAC2,115200 init=/linuxrc"; bootargs ="root=/dev/ram0 rw ramdisk=8192 initrd=0x41000000,8M console=ttySAC2,115200 init=/linuxrc";
}; };
mmc_reg: voltage-regulator {
compatible = "regulator-fixed";
regulator-name = "VMEM_VDD_2.8V";
regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>;
gpio = <&gpx1 1 0>;
enable-active-high;
};
sdhci@12530000 { sdhci@12530000 {
samsung,sdhci-bus-width = <4>; bus-width = <4>;
linux,mmc_cap_4_bit_data; pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_bus4 &sd2_cd>;
samsung,sdhci-cd-internal; pinctrl-names = "default";
gpio-cd = <&gpk2 2 2 3 3>; vmmc-supply = <&mmc_reg>;
gpios = <&gpk2 0 2 0 3>,
<&gpk2 1 2 0 3>,
<&gpk2 3 2 3 3>,
<&gpk2 4 2 3 3>,
<&gpk2 5 2 3 3>,
<&gpk2 6 2 3 3>;
status = "okay"; status = "okay";
}; };
sdhci@12510000 { sdhci@12510000 {
samsung,sdhci-bus-width = <4>; bus-width = <4>;
linux,mmc_cap_4_bit_data; pinctrl-0 = <&sd0_clk &sd0_cmd &sd0_bus4 &sd0_cd>;
samsung,sdhci-cd-internal; pinctrl-names = "default";
gpio-cd = <&gpk0 2 2 3 3>; vmmc-supply = <&mmc_reg>;
gpios = <&gpk0 0 2 0 3>,
<&gpk0 1 2 0 3>,
<&gpk0 3 2 3 3>,
<&gpk0 4 2 3 3>,
<&gpk0 5 2 3 3>,
<&gpk0 6 2 3 3>;
status = "okay"; status = "okay";
}; };
...@@ -80,35 +80,35 @@ gpio_keys { ...@@ -80,35 +80,35 @@ gpio_keys {
up { up {
label = "Up"; label = "Up";
gpios = <&gpx2 0 0 0x10000 2>; gpios = <&gpx2 0 1>;
linux,code = <103>; linux,code = <103>;
gpio-key,wakeup; gpio-key,wakeup;
}; };
down { down {
label = "Down"; label = "Down";
gpios = <&gpx2 1 0 0x10000 2>; gpios = <&gpx2 1 1>;
linux,code = <108>; linux,code = <108>;
gpio-key,wakeup; gpio-key,wakeup;
}; };
back { back {
label = "Back"; label = "Back";
gpios = <&gpx1 7 0 0x10000 2>; gpios = <&gpx1 7 1>;
linux,code = <158>; linux,code = <158>;
gpio-key,wakeup; gpio-key,wakeup;
}; };
home { home {
label = "Home"; label = "Home";
gpios = <&gpx1 6 0 0x10000 2>; gpios = <&gpx1 6 1>;
linux,code = <102>; linux,code = <102>;
gpio-key,wakeup; gpio-key,wakeup;
}; };
menu { menu {
label = "Menu"; label = "Menu";
gpios = <&gpx1 5 0 0x10000 2>; gpios = <&gpx1 5 1>;
linux,code = <139>; linux,code = <139>;
gpio-key,wakeup; gpio-key,wakeup;
}; };
...@@ -117,7 +117,7 @@ menu { ...@@ -117,7 +117,7 @@ menu {
leds { leds {
compatible = "gpio-leds"; compatible = "gpio-leds";
status { status {
gpios = <&gpx1 3 0 0x10000 2>; gpios = <&gpx1 3 1>;
linux,default-trigger = "heartbeat"; linux,default-trigger = "heartbeat";
}; };
}; };
......
...@@ -482,196 +482,196 @@ sd0_clk: sd0-clk { ...@@ -482,196 +482,196 @@ sd0_clk: sd0-clk {
samsung,pins = "gpk0-0"; samsung,pins = "gpk0-0";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <0>; samsung,pin-pud = <0>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd0_cmd: sd0-cmd { sd0_cmd: sd0-cmd {
samsung,pins = "gpk0-1"; samsung,pins = "gpk0-1";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <0>; samsung,pin-pud = <0>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd0_cd: sd0-cd { sd0_cd: sd0-cd {
samsung,pins = "gpk0-2"; samsung,pins = "gpk0-2";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd0_bus1: sd0-bus-width1 { sd0_bus1: sd0-bus-width1 {
samsung,pins = "gpk0-3"; samsung,pins = "gpk0-3";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd0_bus4: sd0-bus-width4 { sd0_bus4: sd0-bus-width4 {
samsung,pins = "gpk0-3", "gpk0-4", "gpk0-5", "gpk0-6"; samsung,pins = "gpk0-3", "gpk0-4", "gpk0-5", "gpk0-6";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd0_bus8: sd0-bus-width8 { sd0_bus8: sd0-bus-width8 {
samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6"; samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6";
samsung,pin-function = <3>; samsung,pin-function = <3>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd4_clk: sd4-clk { sd4_clk: sd4-clk {
samsung,pins = "gpk0-0"; samsung,pins = "gpk0-0";
samsung,pin-function = <3>; samsung,pin-function = <3>;
samsung,pin-pud = <0>; samsung,pin-pud = <0>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd4_cmd: sd4-cmd { sd4_cmd: sd4-cmd {
samsung,pins = "gpk0-1"; samsung,pins = "gpk0-1";
samsung,pin-function = <3>; samsung,pin-function = <3>;
samsung,pin-pud = <0>; samsung,pin-pud = <0>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd4_cd: sd4-cd { sd4_cd: sd4-cd {
samsung,pins = "gpk0-2"; samsung,pins = "gpk0-2";
samsung,pin-function = <3>; samsung,pin-function = <3>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd4_bus1: sd4-bus-width1 { sd4_bus1: sd4-bus-width1 {
samsung,pins = "gpk0-3"; samsung,pins = "gpk0-3";
samsung,pin-function = <3>; samsung,pin-function = <3>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd4_bus4: sd4-bus-width4 { sd4_bus4: sd4-bus-width4 {
samsung,pins = "gpk0-3", "gpk0-4", "gpk0-5", "gpk0-6"; samsung,pins = "gpk0-3", "gpk0-4", "gpk0-5", "gpk0-6";
samsung,pin-function = <3>; samsung,pin-function = <3>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd4_bus8: sd4-bus-width8 { sd4_bus8: sd4-bus-width8 {
samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6"; samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6";
samsung,pin-function = <3>; samsung,pin-function = <3>;
samsung,pin-pud = <4>; samsung,pin-pud = <4>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd1_clk: sd1-clk { sd1_clk: sd1-clk {
samsung,pins = "gpk1-0"; samsung,pins = "gpk1-0";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <0>; samsung,pin-pud = <0>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd1_cmd: sd1-cmd { sd1_cmd: sd1-cmd {
samsung,pins = "gpk1-1"; samsung,pins = "gpk1-1";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <0>; samsung,pin-pud = <0>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd1_cd: sd1-cd { sd1_cd: sd1-cd {
samsung,pins = "gpk1-2"; samsung,pins = "gpk1-2";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd1_bus1: sd1-bus-width1 { sd1_bus1: sd1-bus-width1 {
samsung,pins = "gpk1-3"; samsung,pins = "gpk1-3";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd1_bus4: sd1-bus-width4 { sd1_bus4: sd1-bus-width4 {
samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6"; samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd2_clk: sd2-clk { sd2_clk: sd2-clk {
samsung,pins = "gpk2-0"; samsung,pins = "gpk2-0";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <0>; samsung,pin-pud = <0>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd2_cmd: sd2-cmd { sd2_cmd: sd2-cmd {
samsung,pins = "gpk2-1"; samsung,pins = "gpk2-1";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <0>; samsung,pin-pud = <0>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd2_cd: sd2-cd { sd2_cd: sd2-cd {
samsung,pins = "gpk2-2"; samsung,pins = "gpk2-2";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd2_bus1: sd2-bus-width1 { sd2_bus1: sd2-bus-width1 {
samsung,pins = "gpk2-3"; samsung,pins = "gpk2-3";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd2_bus4: sd2-bus-width4 { sd2_bus4: sd2-bus-width4 {
samsung,pins = "gpk2-3", "gpk2-4", "gpk2-5", "gpk2-6"; samsung,pins = "gpk2-3", "gpk2-4", "gpk2-5", "gpk2-6";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd2_bus8: sd2-bus-width8 { sd2_bus8: sd2-bus-width8 {
samsung,pins = "gpk3-3", "gpk3-4", "gpk3-5", "gpk3-6"; samsung,pins = "gpk3-3", "gpk3-4", "gpk3-5", "gpk3-6";
samsung,pin-function = <3>; samsung,pin-function = <3>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd3_clk: sd3-clk { sd3_clk: sd3-clk {
samsung,pins = "gpk3-0"; samsung,pins = "gpk3-0";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <0>; samsung,pin-pud = <0>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd3_cmd: sd3-cmd { sd3_cmd: sd3-cmd {
samsung,pins = "gpk3-1"; samsung,pins = "gpk3-1";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <0>; samsung,pin-pud = <0>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd3_cd: sd3-cd { sd3_cd: sd3-cd {
samsung,pins = "gpk3-2"; samsung,pins = "gpk3-2";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd3_bus1: sd3-bus-width1 { sd3_bus1: sd3-bus-width1 {
samsung,pins = "gpk3-3"; samsung,pins = "gpk3-3";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd3_bus4: sd3-bus-width4 { sd3_bus4: sd3-bus-width4 {
samsung,pins = "gpk3-3", "gpk3-4", "gpk3-5", "gpk3-6"; samsung,pins = "gpk3-3", "gpk3-4", "gpk3-5", "gpk3-6";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
eint0: ext-int0 { eint0: ext-int0 {
......
...@@ -31,6 +31,11 @@ aliases { ...@@ -31,6 +31,11 @@ aliases {
pinctrl2 = &pinctrl_2; pinctrl2 = &pinctrl_2;
}; };
pd_lcd1: lcd1-power-domain@10023CA0 {
compatible = "samsung,exynos4210-pd";
reg = <0x10023CA0 0x20>;
};
gic:interrupt-controller@10490000 { gic:interrupt-controller@10490000 {
cpu-offset = <0x8000>; cpu-offset = <0x8000>;
}; };
......
...@@ -586,196 +586,196 @@ sd0_clk: sd0-clk { ...@@ -586,196 +586,196 @@ sd0_clk: sd0-clk {
samsung,pins = "gpk0-0"; samsung,pins = "gpk0-0";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <0>; samsung,pin-pud = <0>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd0_cmd: sd0-cmd { sd0_cmd: sd0-cmd {
samsung,pins = "gpk0-1"; samsung,pins = "gpk0-1";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <0>; samsung,pin-pud = <0>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd0_cd: sd0-cd { sd0_cd: sd0-cd {
samsung,pins = "gpk0-2"; samsung,pins = "gpk0-2";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd0_bus1: sd0-bus-width1 { sd0_bus1: sd0-bus-width1 {
samsung,pins = "gpk0-3"; samsung,pins = "gpk0-3";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd0_bus4: sd0-bus-width4 { sd0_bus4: sd0-bus-width4 {
samsung,pins = "gpk0-3", "gpk0-4", "gpk0-5", "gpk0-6"; samsung,pins = "gpk0-3", "gpk0-4", "gpk0-5", "gpk0-6";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd0_bus8: sd0-bus-width8 { sd0_bus8: sd0-bus-width8 {
samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6"; samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6";
samsung,pin-function = <3>; samsung,pin-function = <3>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd4_clk: sd4-clk { sd4_clk: sd4-clk {
samsung,pins = "gpk0-0"; samsung,pins = "gpk0-0";
samsung,pin-function = <3>; samsung,pin-function = <3>;
samsung,pin-pud = <0>; samsung,pin-pud = <0>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd4_cmd: sd4-cmd { sd4_cmd: sd4-cmd {
samsung,pins = "gpk0-1"; samsung,pins = "gpk0-1";
samsung,pin-function = <3>; samsung,pin-function = <3>;
samsung,pin-pud = <0>; samsung,pin-pud = <0>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd4_cd: sd4-cd { sd4_cd: sd4-cd {
samsung,pins = "gpk0-2"; samsung,pins = "gpk0-2";
samsung,pin-function = <3>; samsung,pin-function = <3>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd4_bus1: sd4-bus-width1 { sd4_bus1: sd4-bus-width1 {
samsung,pins = "gpk0-3"; samsung,pins = "gpk0-3";
samsung,pin-function = <3>; samsung,pin-function = <3>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd4_bus4: sd4-bus-width4 { sd4_bus4: sd4-bus-width4 {
samsung,pins = "gpk0-3", "gpk0-4", "gpk0-5", "gpk0-6"; samsung,pins = "gpk0-3", "gpk0-4", "gpk0-5", "gpk0-6";
samsung,pin-function = <3>; samsung,pin-function = <3>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd4_bus8: sd4-bus-width8 { sd4_bus8: sd4-bus-width8 {
samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6"; samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6";
samsung,pin-function = <3>; samsung,pin-function = <3>;
samsung,pin-pud = <4>; samsung,pin-pud = <4>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd1_clk: sd1-clk { sd1_clk: sd1-clk {
samsung,pins = "gpk1-0"; samsung,pins = "gpk1-0";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <0>; samsung,pin-pud = <0>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd1_cmd: sd1-cmd { sd1_cmd: sd1-cmd {
samsung,pins = "gpk1-1"; samsung,pins = "gpk1-1";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <0>; samsung,pin-pud = <0>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd1_cd: sd1-cd { sd1_cd: sd1-cd {
samsung,pins = "gpk1-2"; samsung,pins = "gpk1-2";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd1_bus1: sd1-bus-width1 { sd1_bus1: sd1-bus-width1 {
samsung,pins = "gpk1-3"; samsung,pins = "gpk1-3";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd1_bus4: sd1-bus-width4 { sd1_bus4: sd1-bus-width4 {
samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6"; samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd2_clk: sd2-clk { sd2_clk: sd2-clk {
samsung,pins = "gpk2-0"; samsung,pins = "gpk2-0";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <0>; samsung,pin-pud = <0>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd2_cmd: sd2-cmd { sd2_cmd: sd2-cmd {
samsung,pins = "gpk2-1"; samsung,pins = "gpk2-1";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <0>; samsung,pin-pud = <0>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd2_cd: sd2-cd { sd2_cd: sd2-cd {
samsung,pins = "gpk2-2"; samsung,pins = "gpk2-2";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd2_bus1: sd2-bus-width1 { sd2_bus1: sd2-bus-width1 {
samsung,pins = "gpk2-3"; samsung,pins = "gpk2-3";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd2_bus4: sd2-bus-width4 { sd2_bus4: sd2-bus-width4 {
samsung,pins = "gpk2-3", "gpk2-4", "gpk2-5", "gpk2-6"; samsung,pins = "gpk2-3", "gpk2-4", "gpk2-5", "gpk2-6";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd2_bus8: sd2-bus-width8 { sd2_bus8: sd2-bus-width8 {
samsung,pins = "gpk3-3", "gpk3-4", "gpk3-5", "gpk3-6"; samsung,pins = "gpk3-3", "gpk3-4", "gpk3-5", "gpk3-6";
samsung,pin-function = <3>; samsung,pin-function = <3>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd3_clk: sd3-clk { sd3_clk: sd3-clk {
samsung,pins = "gpk3-0"; samsung,pins = "gpk3-0";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <0>; samsung,pin-pud = <0>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd3_cmd: sd3-cmd { sd3_cmd: sd3-cmd {
samsung,pins = "gpk3-1"; samsung,pins = "gpk3-1";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <0>; samsung,pin-pud = <0>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd3_cd: sd3-cd { sd3_cd: sd3-cd {
samsung,pins = "gpk3-2"; samsung,pins = "gpk3-2";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd3_bus1: sd3-bus-width1 { sd3_bus1: sd3-bus-width1 {
samsung,pins = "gpk3-3"; samsung,pins = "gpk3-3";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
sd3_bus4: sd3-bus-width4 { sd3_bus4: sd3-bus-width4 {
samsung,pins = "gpk3-3", "gpk3-4", "gpk3-5", "gpk3-6"; samsung,pins = "gpk3-3", "gpk3-4", "gpk3-5", "gpk3-6";
samsung,pin-function = <2>; samsung,pin-function = <2>;
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <3>;
}; };
keypad_col0: keypad-col0 { keypad_col0: keypad-col0 {
......
...@@ -17,10 +17,6 @@ / { ...@@ -17,10 +17,6 @@ / {
compatible = "samsung,smdk5250", "samsung,exynos5250"; compatible = "samsung,smdk5250", "samsung,exynos5250";
aliases { aliases {
mshc0 = &dwmmc_0;
mshc1 = &dwmmc_1;
mshc2 = &dwmmc_2;
mshc3 = &dwmmc_3;
}; };
memory { memory {
...@@ -112,7 +108,7 @@ hdmiphy@38 { ...@@ -112,7 +108,7 @@ hdmiphy@38 {
}; };
}; };
dwmmc_0: dwmmc0@12200000 { dwmmc0@12200000 {
num-slots = <1>; num-slots = <1>;
supports-highspeed; supports-highspeed;
broken-cd; broken-cd;
...@@ -133,11 +129,11 @@ slot@0 { ...@@ -133,11 +129,11 @@ slot@0 {
}; };
}; };
dwmmc_1: dwmmc1@12210000 { dwmmc1@12210000 {
status = "disabled"; status = "disabled";
}; };
dwmmc_2: dwmmc2@12220000 { dwmmc2@12220000 {
num-slots = <1>; num-slots = <1>;
supports-highspeed; supports-highspeed;
fifo-depth = <0x80>; fifo-depth = <0x80>;
...@@ -158,7 +154,7 @@ slot@0 { ...@@ -158,7 +154,7 @@ slot@0 {
}; };
}; };
dwmmc_3: dwmmc3@12230000 { dwmmc3@12230000 {
status = "disabled"; status = "disabled";
}; };
......
/*
* Google Snow board device tree source
*
* Copyright (c) 2012 Google, Inc
*
* 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/ "exynos5250.dtsi"
/include/ "cros5250-common.dtsi"
/ {
model = "Google Snow";
compatible = "google,snow", "samsung,exynos5250";
gpio-keys {
compatible = "gpio-keys";
lid-switch {
label = "Lid";
gpios = <&gpx3 5 0 0x10000 0>;
linux,input-type = <5>; /* EV_SW */
linux,code = <0>; /* SW_LID */
debounce-interval = <1>;
gpio-key,wakeup;
};
};
/*
* On Snow we've got SIP WiFi and so can keep drive strengths low to
* reduce EMI.
*/
dwmmc3@12230000 {
slot@0 {
gpios = <&gpc4 0 2 0 0>, <&gpc4 1 2 3 0>,
<&gpc4 3 2 3 0>, <&gpc4 4 2 3 0>,
<&gpc4 5 2 3 0>, <&gpc4 6 2 3 0>;
};
};
};
...@@ -31,6 +31,10 @@ aliases { ...@@ -31,6 +31,10 @@ aliases {
gsc1 = &gsc_1; gsc1 = &gsc_1;
gsc2 = &gsc_2; gsc2 = &gsc_2;
gsc3 = &gsc_3; gsc3 = &gsc_3;
mshc0 = &dwmmc_0;
mshc1 = &dwmmc_1;
mshc2 = &dwmmc_2;
mshc3 = &dwmmc_3;
}; };
gic:interrupt-controller@10481000 { gic:interrupt-controller@10481000 {
...@@ -224,7 +228,7 @@ spi_2: spi@12d40000 { ...@@ -224,7 +228,7 @@ spi_2: spi@12d40000 {
#size-cells = <0>; #size-cells = <0>;
}; };
dwmmc0@12200000 { dwmmc_0: dwmmc0@12200000 {
compatible = "samsung,exynos5250-dw-mshc"; compatible = "samsung,exynos5250-dw-mshc";
reg = <0x12200000 0x1000>; reg = <0x12200000 0x1000>;
interrupts = <0 75 0>; interrupts = <0 75 0>;
...@@ -232,7 +236,7 @@ dwmmc0@12200000 { ...@@ -232,7 +236,7 @@ dwmmc0@12200000 {
#size-cells = <0>; #size-cells = <0>;
}; };
dwmmc1@12210000 { dwmmc_1: dwmmc1@12210000 {
compatible = "samsung,exynos5250-dw-mshc"; compatible = "samsung,exynos5250-dw-mshc";
reg = <0x12210000 0x1000>; reg = <0x12210000 0x1000>;
interrupts = <0 76 0>; interrupts = <0 76 0>;
...@@ -240,7 +244,7 @@ dwmmc1@12210000 { ...@@ -240,7 +244,7 @@ dwmmc1@12210000 {
#size-cells = <0>; #size-cells = <0>;
}; };
dwmmc2@12220000 { dwmmc_2: dwmmc2@12220000 {
compatible = "samsung,exynos5250-dw-mshc"; compatible = "samsung,exynos5250-dw-mshc";
reg = <0x12220000 0x1000>; reg = <0x12220000 0x1000>;
interrupts = <0 77 0>; interrupts = <0 77 0>;
...@@ -248,7 +252,7 @@ dwmmc2@12220000 { ...@@ -248,7 +252,7 @@ dwmmc2@12220000 {
#size-cells = <0>; #size-cells = <0>;
}; };
dwmmc3@12230000 { dwmmc_3: dwmmc3@12230000 {
compatible = "samsung,exynos5250-dw-mshc"; compatible = "samsung,exynos5250-dw-mshc";
reg = <0x12230000 0x1000>; reg = <0x12230000 0x1000>;
interrupts = <0 78 0>; interrupts = <0 78 0>;
......
...@@ -52,6 +52,16 @@ static const struct of_dev_auxdata exynos5250_auxdata_lookup[] __initconst = { ...@@ -52,6 +52,16 @@ static const struct of_dev_auxdata exynos5250_auxdata_lookup[] __initconst = {
"s3c2440-i2c.1", NULL), "s3c2440-i2c.1", NULL),
OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS5_PA_IIC(2), OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS5_PA_IIC(2),
"s3c2440-i2c.2", NULL), "s3c2440-i2c.2", NULL),
OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS5_PA_IIC(3),
"s3c2440-i2c.3", NULL),
OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS5_PA_IIC(4),
"s3c2440-i2c.4", NULL),
OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS5_PA_IIC(5),
"s3c2440-i2c.5", NULL),
OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS5_PA_IIC(6),
"s3c2440-i2c.6", NULL),
OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS5_PA_IIC(7),
"s3c2440-i2c.7", NULL),
OF_DEV_AUXDATA("samsung,s3c2440-hdmiphy-i2c", EXYNOS5_PA_IIC(8), OF_DEV_AUXDATA("samsung,s3c2440-hdmiphy-i2c", EXYNOS5_PA_IIC(8),
"s3c2440-hdmiphy-i2c", NULL), "s3c2440-hdmiphy-i2c", NULL),
OF_DEV_AUXDATA("samsung,exynos5250-dw-mshc", EXYNOS5_PA_DWMCI0, OF_DEV_AUXDATA("samsung,exynos5250-dw-mshc", EXYNOS5_PA_DWMCI0,
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
#include <linux/pm_domain.h> #include <linux/pm_domain.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/of_address.h> #include <linux/of_address.h>
#include <linux/of_platform.h>
#include <linux/sched.h>
#include <mach/regs-pmu.h> #include <mach/regs-pmu.h>
#include <plat/devs.h> #include <plat/devs.h>
...@@ -83,12 +85,88 @@ static struct exynos_pm_domain PD = { \ ...@@ -83,12 +85,88 @@ static struct exynos_pm_domain PD = { \
} }
#ifdef CONFIG_OF #ifdef CONFIG_OF
static void exynos_add_device_to_domain(struct exynos_pm_domain *pd,
struct device *dev)
{
int ret;
dev_dbg(dev, "adding to power domain %s\n", pd->pd.name);
while (1) {
ret = pm_genpd_add_device(&pd->pd, dev);
if (ret != -EAGAIN)
break;
cond_resched();
}
pm_genpd_dev_need_restore(dev, true);
}
static void exynos_remove_device_from_domain(struct device *dev)
{
struct generic_pm_domain *genpd = dev_to_genpd(dev);
int ret;
dev_dbg(dev, "removing from power domain %s\n", genpd->name);
while (1) {
ret = pm_genpd_remove_device(genpd, dev);
if (ret != -EAGAIN)
break;
cond_resched();
}
}
static void exynos_read_domain_from_dt(struct device *dev)
{
struct platform_device *pd_pdev;
struct exynos_pm_domain *pd;
struct device_node *node;
node = of_parse_phandle(dev->of_node, "samsung,power-domain", 0);
if (!node)
return;
pd_pdev = of_find_device_by_node(node);
if (!pd_pdev)
return;
pd = platform_get_drvdata(pd_pdev);
exynos_add_device_to_domain(pd, dev);
}
static int exynos_pm_notifier_call(struct notifier_block *nb,
unsigned long event, void *data)
{
struct device *dev = data;
switch (event) {
case BUS_NOTIFY_BIND_DRIVER:
if (dev->of_node)
exynos_read_domain_from_dt(dev);
break;
case BUS_NOTIFY_UNBOUND_DRIVER:
exynos_remove_device_from_domain(dev);
break;
}
return NOTIFY_DONE;
}
static struct notifier_block platform_nb = {
.notifier_call = exynos_pm_notifier_call,
};
static __init int exynos_pm_dt_parse_domains(void) static __init int exynos_pm_dt_parse_domains(void)
{ {
struct platform_device *pdev;
struct device_node *np; struct device_node *np;
for_each_compatible_node(np, NULL, "samsung,exynos4210-pd") { for_each_compatible_node(np, NULL, "samsung,exynos4210-pd") {
struct exynos_pm_domain *pd; struct exynos_pm_domain *pd;
int on;
pdev = of_find_device_by_node(np);
pd = kzalloc(sizeof(*pd), GFP_KERNEL); pd = kzalloc(sizeof(*pd), GFP_KERNEL);
if (!pd) { if (!pd) {
...@@ -97,15 +175,22 @@ static __init int exynos_pm_dt_parse_domains(void) ...@@ -97,15 +175,22 @@ static __init int exynos_pm_dt_parse_domains(void)
return -ENOMEM; return -ENOMEM;
} }
if (of_get_property(np, "samsung,exynos4210-pd-off", NULL)) pd->pd.name = kstrdup(np->name, GFP_KERNEL);
pd->is_off = true; pd->name = pd->pd.name;
pd->name = np->name;
pd->base = of_iomap(np, 0); pd->base = of_iomap(np, 0);
pd->pd.power_off = exynos_pd_power_off; pd->pd.power_off = exynos_pd_power_off;
pd->pd.power_on = exynos_pd_power_on; pd->pd.power_on = exynos_pd_power_on;
pd->pd.of_node = np; pd->pd.of_node = np;
pm_genpd_init(&pd->pd, NULL, false);
platform_set_drvdata(pdev, pd);
on = __raw_readl(pd->base + 0x4) & S5P_INT_LOCAL_PWR_EN;
pm_genpd_init(&pd->pd, NULL, !on);
} }
bus_register_notifier(&platform_bus_type, &platform_nb);
return 0; return 0;
} }
#else #else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment