Commit 3c02bfc4 authored by Arnd Bergmann's avatar Arnd Bergmann

Merge tag 'samsung-fixes-dt' of...

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

Merge "Samsung tmu and hdmi regression fixes for v4.0" from Kukjin Kim:

- The thermal management unit and HDMI (drm mixer driver) related
reworks have been merged in v4.0 merge window. So if this DT changes
are missed for v4.0, we regressions in v4.0 release for exynos
platforms such as exynos5250, exynos5420, exynos4 SoCs.

- Note since there was a dependency with driver side, this cannot
be sent to upstream during preivous merge window and now it has been
resolved.

* tag 'samsung-fixes-dt' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung:
  ARM: dts: add display power domain for exynos5250
  ARM: dts: add 'hdmi' clock to mixer nodes for exynos5250 and exynos5420
  ARM: dts: enable hdmi support for exynos4210-universal_c210
  ARM: dts: enable hdmi support for exynos4412-odroid-common
  ARM: dts: add dependency between TV and LCD0 power domains for exynos4
  ARM: dts: add hdmi related nodes for exynos4 SoCs
  ARM: EXYNOS: add support for sub-power domains
  dt-bindings: document a note about power domain subdomains
  ARM: dts: Provide dt bindings identical for Exynos TMU
  ARM: dts: Trip points and sensor configuration data for exynos5440
  ARM: dts: define default thermal-zones for exynos4
  ARM: dts: default trip points definition for exynos5420
  ARM: dts: add TMU default definitions for exynos4412
  ARM: dts: Adding CPU cooling binding for Exynos SoCs
  ARM: dts: Enable TMU for exynos4412-odriod-common
  ARM: dts: Add LDO10 for TMU for exynos4412-odroid-common
  ARM: dts: Enable TMU for exynos4210-trats
parents 13a7a6ac 2d2c9a8d
...@@ -22,6 +22,8 @@ Optional Properties: ...@@ -22,6 +22,8 @@ Optional Properties:
- pclkN, clkN: Pairs of parent of input clock and input clock to the - pclkN, clkN: Pairs of parent of input clock and input clock to the
devices in this power domain. Maximum of 4 pairs (N = 0 to 3) devices in this power domain. Maximum of 4 pairs (N = 0 to 3)
are supported currently. are supported currently.
- power-domains: phandle pointing to the parent power domain, for more details
see Documentation/devicetree/bindings/power/power_domain.txt
Node of a device using power domains must have a power-domains property Node of a device using power domains must have a power-domains property
defined with a phandle to respective power domain. defined with a phandle to respective power domain.
......
...@@ -19,6 +19,16 @@ Required properties: ...@@ -19,6 +19,16 @@ Required properties:
providing multiple PM domains (e.g. power controllers), but can be any value providing multiple PM domains (e.g. power controllers), but can be any value
as specified by device tree binding documentation of particular provider. as specified by device tree binding documentation of particular provider.
Optional properties:
- power-domains : A phandle and PM domain specifier as defined by bindings of
the power controller specified by phandle.
Some power domains might be powered from another power domain (or have
other hardware specific dependencies). For representing such dependency
a standard PM domain consumer binding is used. When provided, all domains
created by the given provider should be subdomains of the domain
specified by this binding. More details about power domain specifier are
available in the next section.
Example: Example:
power: power-controller@12340000 { power: power-controller@12340000 {
...@@ -30,6 +40,25 @@ Example: ...@@ -30,6 +40,25 @@ Example:
The node above defines a power controller that is a PM domain provider and The node above defines a power controller that is a PM domain provider and
expects one cell as its phandle argument. expects one cell as its phandle argument.
Example 2:
parent: power-controller@12340000 {
compatible = "foo,power-controller";
reg = <0x12340000 0x1000>;
#power-domain-cells = <1>;
};
child: power-controller@12340000 {
compatible = "foo,power-controller";
reg = <0x12341000 0x1000>;
power-domains = <&parent 0>;
#power-domain-cells = <1>;
};
The nodes above define two power controllers: 'parent' and 'child'.
Domains created by the 'child' power controller are subdomains of '0' power
domain provided by the 'parent' power controller.
==PM domain consumers== ==PM domain consumers==
Required properties: Required properties:
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
*/ */
#include "skeleton.dtsi" #include "skeleton.dtsi"
#include "exynos4-cpu-thermal.dtsi"
#include <dt-bindings/clock/exynos3250.h> #include <dt-bindings/clock/exynos3250.h>
/ { / {
...@@ -193,6 +194,7 @@ tmu: tmu@100C0000 { ...@@ -193,6 +194,7 @@ tmu: tmu@100C0000 {
interrupts = <0 216 0>; interrupts = <0 216 0>;
clocks = <&cmu CLK_TMU_APBIF>; clocks = <&cmu CLK_TMU_APBIF>;
clock-names = "tmu_apbif"; clock-names = "tmu_apbif";
#include "exynos4412-tmu-sensor-conf.dtsi"
status = "disabled"; status = "disabled";
}; };
......
/*
* Device tree sources for Exynos4 thermal zone
*
* Copyright (c) 2014 Lukasz Majewski <l.majewski@samsung.com>
*
* 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 <dt-bindings/thermal/thermal.h>
/ {
thermal-zones {
cpu_thermal: cpu-thermal {
thermal-sensors = <&tmu 0>;
polling-delay-passive = <0>;
polling-delay = <0>;
trips {
cpu_alert0: cpu-alert-0 {
temperature = <70000>; /* millicelsius */
hysteresis = <10000>; /* millicelsius */
type = "active";
};
cpu_alert1: cpu-alert-1 {
temperature = <95000>; /* millicelsius */
hysteresis = <10000>; /* millicelsius */
type = "active";
};
cpu_alert2: cpu-alert-2 {
temperature = <110000>; /* millicelsius */
hysteresis = <10000>; /* millicelsius */
type = "active";
};
cpu_crit0: cpu-crit-0 {
temperature = <120000>; /* millicelsius */
hysteresis = <0>; /* millicelsius */
type = "critical";
};
};
cooling-maps {
map0 {
trip = <&cpu_alert0>;
};
map1 {
trip = <&cpu_alert1>;
};
};
};
};
};
...@@ -38,6 +38,7 @@ aliases { ...@@ -38,6 +38,7 @@ aliases {
i2c5 = &i2c_5; i2c5 = &i2c_5;
i2c6 = &i2c_6; i2c6 = &i2c_6;
i2c7 = &i2c_7; i2c7 = &i2c_7;
i2c8 = &i2c_8;
csis0 = &csis_0; csis0 = &csis_0;
csis1 = &csis_1; csis1 = &csis_1;
fimc0 = &fimc_0; fimc0 = &fimc_0;
...@@ -104,6 +105,7 @@ pd_tv: tv-power-domain@10023C20 { ...@@ -104,6 +105,7 @@ pd_tv: tv-power-domain@10023C20 {
compatible = "samsung,exynos4210-pd"; compatible = "samsung,exynos4210-pd";
reg = <0x10023C20 0x20>; reg = <0x10023C20 0x20>;
#power-domain-cells = <0>; #power-domain-cells = <0>;
power-domains = <&pd_lcd0>;
}; };
pd_cam: cam-power-domain@10023C00 { pd_cam: cam-power-domain@10023C00 {
...@@ -554,6 +556,22 @@ i2c_7: i2c@138D0000 { ...@@ -554,6 +556,22 @@ i2c_7: i2c@138D0000 {
status = "disabled"; status = "disabled";
}; };
i2c_8: i2c@138E0000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "samsung,s3c2440-hdmiphy-i2c";
reg = <0x138E0000 0x100>;
interrupts = <0 93 0>;
clocks = <&clock CLK_I2C_HDMI>;
clock-names = "i2c";
status = "disabled";
hdmi_i2c_phy: hdmiphy@38 {
compatible = "exynos4210-hdmiphy";
reg = <0x38>;
};
};
spi_0: spi@13920000 { spi_0: spi@13920000 {
compatible = "samsung,exynos4210-spi"; compatible = "samsung,exynos4210-spi";
reg = <0x13920000 0x100>; reg = <0x13920000 0x100>;
...@@ -663,6 +681,33 @@ fimd: fimd@11c00000 { ...@@ -663,6 +681,33 @@ fimd: fimd@11c00000 {
status = "disabled"; status = "disabled";
}; };
tmu: tmu@100C0000 {
#include "exynos4412-tmu-sensor-conf.dtsi"
};
hdmi: hdmi@12D00000 {
compatible = "samsung,exynos4210-hdmi";
reg = <0x12D00000 0x70000>;
interrupts = <0 92 0>;
clock-names = "hdmi", "sclk_hdmi", "sclk_pixel", "sclk_hdmiphy",
"mout_hdmi";
clocks = <&clock CLK_HDMI>, <&clock CLK_SCLK_HDMI>,
<&clock CLK_SCLK_PIXEL>, <&clock CLK_SCLK_HDMIPHY>,
<&clock CLK_MOUT_HDMI>;
phy = <&hdmi_i2c_phy>;
power-domains = <&pd_tv>;
samsung,syscon-phandle = <&pmu_system_controller>;
status = "disabled";
};
mixer: mixer@12C10000 {
compatible = "samsung,exynos4210-mixer";
interrupts = <0 91 0>;
reg = <0x12C10000 0x2100>, <0x12c00000 0x300>;
power-domains = <&pd_tv>;
status = "disabled";
};
ppmu_dmc0: ppmu_dmc0@106a0000 { ppmu_dmc0: ppmu_dmc0@106a0000 {
compatible = "samsung,exynos-ppmu"; compatible = "samsung,exynos-ppmu";
reg = <0x106a0000 0x2000>; reg = <0x106a0000 0x2000>;
......
...@@ -426,6 +426,25 @@ fimd@11c00000 { ...@@ -426,6 +426,25 @@ fimd@11c00000 {
status = "okay"; status = "okay";
}; };
tmu@100C0000 {
status = "okay";
};
thermal-zones {
cpu_thermal: cpu-thermal {
cooling-maps {
map0 {
/* Corresponds to 800MHz at freq_table */
cooling-device = <&cpu0 2 2>;
};
map1 {
/* Corresponds to 200MHz at freq_table */
cooling-device = <&cpu0 4 4>;
};
};
};
};
camera { camera {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <>; pinctrl-0 = <>;
......
...@@ -505,6 +505,63 @@ fimc_3: fimc@11830000 { ...@@ -505,6 +505,63 @@ fimc_3: fimc@11830000 {
assigned-clock-rates = <0>, <160000000>; assigned-clock-rates = <0>, <160000000>;
}; };
}; };
hdmi_en: voltage-regulator-hdmi-5v {
compatible = "regulator-fixed";
regulator-name = "HDMI_5V";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
gpio = <&gpe0 1 0>;
enable-active-high;
};
hdmi_ddc: i2c-ddc {
compatible = "i2c-gpio";
gpios = <&gpe4 2 0 &gpe4 3 0>;
i2c-gpio,delay-us = <100>;
#address-cells = <1>;
#size-cells = <0>;
pinctrl-0 = <&i2c_ddc_bus>;
pinctrl-names = "default";
status = "okay";
};
mixer@12C10000 {
status = "okay";
};
hdmi@12D00000 {
hpd-gpio = <&gpx3 7 0>;
pinctrl-names = "default";
pinctrl-0 = <&hdmi_hpd>;
hdmi-en-supply = <&hdmi_en>;
vdd-supply = <&ldo3_reg>;
vdd_osc-supply = <&ldo4_reg>;
vdd_pll-supply = <&ldo3_reg>;
ddc = <&hdmi_ddc>;
status = "okay";
};
i2c@138E0000 {
status = "okay";
};
};
&pinctrl_1 {
hdmi_hpd: hdmi-hpd {
samsung,pins = "gpx3-7";
samsung,pin-pud = <0>;
};
};
&pinctrl_0 {
i2c_ddc_bus: i2c-ddc-bus {
samsung,pins = "gpe4-2", "gpe4-3";
samsung,pin-function = <2>;
samsung,pin-pud = <3>;
samsung,pin-drv = <0>;
};
}; };
&mdma1 { &mdma1 {
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include "exynos4.dtsi" #include "exynos4.dtsi"
#include "exynos4210-pinctrl.dtsi" #include "exynos4210-pinctrl.dtsi"
#include "exynos4-cpu-thermal.dtsi"
/ { / {
compatible = "samsung,exynos4210", "samsung,exynos4"; compatible = "samsung,exynos4210", "samsung,exynos4";
...@@ -35,10 +36,13 @@ cpus { ...@@ -35,10 +36,13 @@ cpus {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
cpu@900 { cpu0: cpu@900 {
device_type = "cpu"; device_type = "cpu";
compatible = "arm,cortex-a9"; compatible = "arm,cortex-a9";
reg = <0x900>; reg = <0x900>;
cooling-min-level = <4>;
cooling-max-level = <2>;
#cooling-cells = <2>; /* min followed by max */
}; };
cpu@901 { cpu@901 {
...@@ -153,16 +157,38 @@ pinctrl_2: pinctrl@03860000 { ...@@ -153,16 +157,38 @@ pinctrl_2: pinctrl@03860000 {
reg = <0x03860000 0x1000>; reg = <0x03860000 0x1000>;
}; };
tmu@100C0000 { tmu: tmu@100C0000 {
compatible = "samsung,exynos4210-tmu"; compatible = "samsung,exynos4210-tmu";
interrupt-parent = <&combiner>; interrupt-parent = <&combiner>;
reg = <0x100C0000 0x100>; reg = <0x100C0000 0x100>;
interrupts = <2 4>; interrupts = <2 4>;
clocks = <&clock CLK_TMU_APBIF>; clocks = <&clock CLK_TMU_APBIF>;
clock-names = "tmu_apbif"; clock-names = "tmu_apbif";
samsung,tmu_gain = <15>;
samsung,tmu_reference_voltage = <7>;
status = "disabled"; status = "disabled";
}; };
thermal-zones {
cpu_thermal: cpu-thermal {
polling-delay-passive = <0>;
polling-delay = <0>;
thermal-sensors = <&tmu 0>;
trips {
cpu_alert0: cpu-alert-0 {
temperature = <85000>; /* millicelsius */
};
cpu_alert1: cpu-alert-1 {
temperature = <100000>; /* millicelsius */
};
cpu_alert2: cpu-alert-2 {
temperature = <110000>; /* millicelsius */
};
};
};
};
g2d@12800000 { g2d@12800000 {
compatible = "samsung,s5pv210-g2d"; compatible = "samsung,s5pv210-g2d";
reg = <0x12800000 0x1000>; reg = <0x12800000 0x1000>;
...@@ -203,6 +229,14 @@ fimc_3: fimc@11830000 { ...@@ -203,6 +229,14 @@ fimc_3: fimc@11830000 {
}; };
}; };
mixer: mixer@12C10000 {
clock-names = "mixer", "hdmi", "sclk_hdmi", "vp", "mout_mixer",
"sclk_mixer";
clocks = <&clock CLK_MIXER>, <&clock CLK_HDMI>,
<&clock CLK_SCLK_HDMI>, <&clock CLK_VP>,
<&clock CLK_MOUT_MIXER>, <&clock CLK_SCLK_MIXER>;
};
ppmu_lcd1: ppmu_lcd1@12240000 { ppmu_lcd1: ppmu_lcd1@12240000 {
compatible = "samsung,exynos-ppmu"; compatible = "samsung,exynos-ppmu";
reg = <0x12240000 0x2000>; reg = <0x12240000 0x2000>;
......
...@@ -26,10 +26,13 @@ cpus { ...@@ -26,10 +26,13 @@ cpus {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
cpu@A00 { cpu0: cpu@A00 {
device_type = "cpu"; device_type = "cpu";
compatible = "arm,cortex-a9"; compatible = "arm,cortex-a9";
reg = <0xA00>; reg = <0xA00>;
cooling-min-level = <13>;
cooling-max-level = <7>;
#cooling-cells = <2>; /* min followed by max */
}; };
cpu@A01 { cpu@A01 {
......
...@@ -249,6 +249,20 @@ ldo7_reg: LDO7 { ...@@ -249,6 +249,20 @@ ldo7_reg: LDO7 {
regulator-always-on; regulator-always-on;
}; };
ldo8_reg: ldo@8 {
regulator-compatible = "LDO8";
regulator-name = "VDD10_HDMI_1.0V";
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
};
ldo10_reg: ldo@10 {
regulator-compatible = "LDO10";
regulator-name = "VDDQ_MIPIHSI_1.8V";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
};
ldo11_reg: LDO11 { ldo11_reg: LDO11 {
regulator-name = "VDD18_ABB1_1.8V"; regulator-name = "VDD18_ABB1_1.8V";
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
...@@ -411,6 +425,51 @@ hsotg@12480000 { ...@@ -411,6 +425,51 @@ hsotg@12480000 {
ehci: ehci@12580000 { ehci: ehci@12580000 {
status = "okay"; status = "okay";
}; };
tmu@100C0000 {
vtmu-supply = <&ldo10_reg>;
status = "okay";
};
thermal-zones {
cpu_thermal: cpu-thermal {
cooling-maps {
map0 {
/* Corresponds to 800MHz at freq_table */
cooling-device = <&cpu0 7 7>;
};
map1 {
/* Corresponds to 200MHz at freq_table */
cooling-device = <&cpu0 13 13>;
};
};
};
};
mixer: mixer@12C10000 {
status = "okay";
};
hdmi@12D00000 {
hpd-gpio = <&gpx3 7 0>;
pinctrl-names = "default";
pinctrl-0 = <&hdmi_hpd>;
vdd-supply = <&ldo8_reg>;
vdd_osc-supply = <&ldo10_reg>;
vdd_pll-supply = <&ldo8_reg>;
ddc = <&hdmi_ddc>;
status = "okay";
};
hdmi_ddc: i2c@13880000 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&i2c2_bus>;
};
i2c@138E0000 {
status = "okay";
};
}; };
&pinctrl_1 { &pinctrl_1 {
...@@ -425,4 +484,9 @@ max77686_irq: max77686-irq { ...@@ -425,4 +484,9 @@ max77686_irq: max77686-irq {
samsung,pin-pud = <0>; samsung,pin-pud = <0>;
samsung,pin-drv = <0>; samsung,pin-drv = <0>;
}; };
hdmi_hpd: hdmi-hpd {
samsung,pins = "gpx3-7";
samsung,pin-pud = <1>;
};
}; };
/*
* Device tree sources for Exynos4412 TMU sensor configuration
*
* Copyright (c) 2014 Lukasz Majewski <l.majewski@samsung.com>
*
* 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 <dt-bindings/thermal/thermal_exynos.h>
#thermal-sensor-cells = <0>;
samsung,tmu_gain = <8>;
samsung,tmu_reference_voltage = <16>;
samsung,tmu_noise_cancel_mode = <4>;
samsung,tmu_efuse_value = <55>;
samsung,tmu_min_efuse_value = <40>;
samsung,tmu_max_efuse_value = <100>;
samsung,tmu_first_point_trim = <25>;
samsung,tmu_second_point_trim = <85>;
samsung,tmu_default_temp_offset = <50>;
samsung,tmu_cal_type = <TYPE_ONE_POINT_TRIMMING>;
...@@ -927,6 +927,21 @@ thermistor-battery@1 { ...@@ -927,6 +927,21 @@ thermistor-battery@1 {
pulldown-ohm = <100000>; /* 100K */ pulldown-ohm = <100000>; /* 100K */
io-channels = <&adc 2>; /* Battery temperature */ io-channels = <&adc 2>; /* Battery temperature */
}; };
thermal-zones {
cpu_thermal: cpu-thermal {
cooling-maps {
map0 {
/* Corresponds to 800MHz at freq_table */
cooling-device = <&cpu0 7 7>;
};
map1 {
/* Corresponds to 200MHz at freq_table */
cooling-device = <&cpu0 13 13>;
};
};
};
};
}; };
&pmu_system_controller { &pmu_system_controller {
......
...@@ -26,10 +26,13 @@ cpus { ...@@ -26,10 +26,13 @@ cpus {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
cpu@A00 { cpu0: cpu@A00 {
device_type = "cpu"; device_type = "cpu";
compatible = "arm,cortex-a9"; compatible = "arm,cortex-a9";
reg = <0xA00>; reg = <0xA00>;
cooling-min-level = <13>;
cooling-max-level = <7>;
#cooling-cells = <2>; /* min followed by max */
}; };
cpu@A01 { cpu@A01 {
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include "exynos4.dtsi" #include "exynos4.dtsi"
#include "exynos4x12-pinctrl.dtsi" #include "exynos4x12-pinctrl.dtsi"
#include "exynos4-cpu-thermal.dtsi"
/ { / {
aliases { aliases {
...@@ -297,4 +298,15 @@ tmu@100C0000 { ...@@ -297,4 +298,15 @@ tmu@100C0000 {
clock-names = "tmu_apbif"; clock-names = "tmu_apbif";
status = "disabled"; status = "disabled";
}; };
hdmi: hdmi@12D00000 {
compatible = "samsung,exynos4212-hdmi";
};
mixer: mixer@12C10000 {
compatible = "samsung,exynos4212-mixer";
clock-names = "mixer", "hdmi", "sclk_hdmi", "vp";
clocks = <&clock CLK_MIXER>, <&clock CLK_HDMI>,
<&clock CLK_SCLK_HDMI>, <&clock CLK_VP>;
};
}; };
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#include <dt-bindings/clock/exynos5250.h> #include <dt-bindings/clock/exynos5250.h>
#include "exynos5.dtsi" #include "exynos5.dtsi"
#include "exynos5250-pinctrl.dtsi" #include "exynos5250-pinctrl.dtsi"
#include "exynos4-cpu-thermal.dtsi"
#include <dt-bindings/clock/exynos-audss-clk.h> #include <dt-bindings/clock/exynos-audss-clk.h>
/ { / {
...@@ -58,11 +58,14 @@ cpus { ...@@ -58,11 +58,14 @@ cpus {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
cpu@0 { cpu0: cpu@0 {
device_type = "cpu"; device_type = "cpu";
compatible = "arm,cortex-a15"; compatible = "arm,cortex-a15";
reg = <0>; reg = <0>;
clock-frequency = <1700000000>; clock-frequency = <1700000000>;
cooling-min-level = <15>;
cooling-max-level = <9>;
#cooling-cells = <2>; /* min followed by max */
}; };
cpu@1 { cpu@1 {
device_type = "cpu"; device_type = "cpu";
...@@ -102,6 +105,12 @@ pd_mfc: mfc-power-domain@10044040 { ...@@ -102,6 +105,12 @@ pd_mfc: mfc-power-domain@10044040 {
#power-domain-cells = <0>; #power-domain-cells = <0>;
}; };
pd_disp1: disp1-power-domain@100440A0 {
compatible = "samsung,exynos4210-pd";
reg = <0x100440A0 0x20>;
#power-domain-cells = <0>;
};
clock: clock-controller@10010000 { clock: clock-controller@10010000 {
compatible = "samsung,exynos5250-clock"; compatible = "samsung,exynos5250-clock";
reg = <0x10010000 0x30000>; reg = <0x10010000 0x30000>;
...@@ -235,12 +244,32 @@ rtc: rtc@101E0000 { ...@@ -235,12 +244,32 @@ rtc: rtc@101E0000 {
status = "disabled"; status = "disabled";
}; };
tmu@10060000 { tmu: tmu@10060000 {
compatible = "samsung,exynos5250-tmu"; compatible = "samsung,exynos5250-tmu";
reg = <0x10060000 0x100>; reg = <0x10060000 0x100>;
interrupts = <0 65 0>; interrupts = <0 65 0>;
clocks = <&clock CLK_TMU>; clocks = <&clock CLK_TMU>;
clock-names = "tmu_apbif"; clock-names = "tmu_apbif";
#include "exynos4412-tmu-sensor-conf.dtsi"
};
thermal-zones {
cpu_thermal: cpu-thermal {
polling-delay-passive = <0>;
polling-delay = <0>;
thermal-sensors = <&tmu 0>;
cooling-maps {
map0 {
/* Corresponds to 800MHz at freq_table */
cooling-device = <&cpu0 9 9>;
};
map1 {
/* Corresponds to 200MHz at freq_table */
cooling-device = <&cpu0 15 15>;
};
};
};
}; };
serial@12C00000 { serial@12C00000 {
...@@ -719,6 +748,7 @@ gsc_3: gsc@13e30000 { ...@@ -719,6 +748,7 @@ gsc_3: gsc@13e30000 {
hdmi: hdmi { hdmi: hdmi {
compatible = "samsung,exynos4212-hdmi"; compatible = "samsung,exynos4212-hdmi";
reg = <0x14530000 0x70000>; reg = <0x14530000 0x70000>;
power-domains = <&pd_disp1>;
interrupts = <0 95 0>; interrupts = <0 95 0>;
clocks = <&clock CLK_HDMI>, <&clock CLK_SCLK_HDMI>, clocks = <&clock CLK_HDMI>, <&clock CLK_SCLK_HDMI>,
<&clock CLK_SCLK_PIXEL>, <&clock CLK_SCLK_HDMIPHY>, <&clock CLK_SCLK_PIXEL>, <&clock CLK_SCLK_HDMIPHY>,
...@@ -731,9 +761,11 @@ hdmi: hdmi { ...@@ -731,9 +761,11 @@ hdmi: hdmi {
mixer { mixer {
compatible = "samsung,exynos5250-mixer"; compatible = "samsung,exynos5250-mixer";
reg = <0x14450000 0x10000>; reg = <0x14450000 0x10000>;
power-domains = <&pd_disp1>;
interrupts = <0 94 0>; interrupts = <0 94 0>;
clocks = <&clock CLK_MIXER>, <&clock CLK_SCLK_HDMI>; clocks = <&clock CLK_MIXER>, <&clock CLK_HDMI>,
clock-names = "mixer", "sclk_hdmi"; <&clock CLK_SCLK_HDMI>;
clock-names = "mixer", "hdmi", "sclk_hdmi";
}; };
dp_phy: video-phy@10040720 { dp_phy: video-phy@10040720 {
...@@ -743,6 +775,7 @@ dp_phy: video-phy@10040720 { ...@@ -743,6 +775,7 @@ dp_phy: video-phy@10040720 {
}; };
dp: dp-controller@145B0000 { dp: dp-controller@145B0000 {
power-domains = <&pd_disp1>;
clocks = <&clock CLK_DP>; clocks = <&clock CLK_DP>;
clock-names = "dp"; clock-names = "dp";
phys = <&dp_phy>; phys = <&dp_phy>;
...@@ -750,6 +783,7 @@ dp: dp-controller@145B0000 { ...@@ -750,6 +783,7 @@ dp: dp-controller@145B0000 {
}; };
fimd: fimd@14400000 { fimd: fimd@14400000 {
power-domains = <&pd_disp1>;
clocks = <&clock CLK_SCLK_FIMD1>, <&clock CLK_FIMD1>; clocks = <&clock CLK_SCLK_FIMD1>, <&clock CLK_FIMD1>;
clock-names = "sclk_fimd", "fimd"; clock-names = "sclk_fimd", "fimd";
}; };
......
/*
* Device tree sources for default Exynos5420 thermal zone definition
*
* Copyright (c) 2014 Lukasz Majewski <l.majewski@samsung.com>
*
* 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.
*
*/
polling-delay-passive = <0>;
polling-delay = <0>;
trips {
cpu-alert-0 {
temperature = <85000>; /* millicelsius */
hysteresis = <10000>; /* millicelsius */
type = "active";
};
cpu-alert-1 {
temperature = <103000>; /* millicelsius */
hysteresis = <10000>; /* millicelsius */
type = "active";
};
cpu-alert-2 {
temperature = <110000>; /* millicelsius */
hysteresis = <10000>; /* millicelsius */
type = "active";
};
cpu-crit-0 {
temperature = <1200000>; /* millicelsius */
hysteresis = <0>; /* millicelsius */
type = "critical";
};
};
...@@ -740,8 +740,9 @@ mixer: mixer@14450000 { ...@@ -740,8 +740,9 @@ mixer: mixer@14450000 {
compatible = "samsung,exynos5420-mixer"; compatible = "samsung,exynos5420-mixer";
reg = <0x14450000 0x10000>; reg = <0x14450000 0x10000>;
interrupts = <0 94 0>; interrupts = <0 94 0>;
clocks = <&clock CLK_MIXER>, <&clock CLK_SCLK_HDMI>; clocks = <&clock CLK_MIXER>, <&clock CLK_HDMI>,
clock-names = "mixer", "sclk_hdmi"; <&clock CLK_SCLK_HDMI>;
clock-names = "mixer", "hdmi", "sclk_hdmi";
power-domains = <&disp_pd>; power-domains = <&disp_pd>;
}; };
...@@ -782,6 +783,7 @@ tmu_cpu0: tmu@10060000 { ...@@ -782,6 +783,7 @@ tmu_cpu0: tmu@10060000 {
interrupts = <0 65 0>; interrupts = <0 65 0>;
clocks = <&clock CLK_TMU>; clocks = <&clock CLK_TMU>;
clock-names = "tmu_apbif"; clock-names = "tmu_apbif";
#include "exynos4412-tmu-sensor-conf.dtsi"
}; };
tmu_cpu1: tmu@10064000 { tmu_cpu1: tmu@10064000 {
...@@ -790,6 +792,7 @@ tmu_cpu1: tmu@10064000 { ...@@ -790,6 +792,7 @@ tmu_cpu1: tmu@10064000 {
interrupts = <0 183 0>; interrupts = <0 183 0>;
clocks = <&clock CLK_TMU>; clocks = <&clock CLK_TMU>;
clock-names = "tmu_apbif"; clock-names = "tmu_apbif";
#include "exynos4412-tmu-sensor-conf.dtsi"
}; };
tmu_cpu2: tmu@10068000 { tmu_cpu2: tmu@10068000 {
...@@ -798,6 +801,7 @@ tmu_cpu2: tmu@10068000 { ...@@ -798,6 +801,7 @@ tmu_cpu2: tmu@10068000 {
interrupts = <0 184 0>; interrupts = <0 184 0>;
clocks = <&clock CLK_TMU>, <&clock CLK_TMU>; clocks = <&clock CLK_TMU>, <&clock CLK_TMU>;
clock-names = "tmu_apbif", "tmu_triminfo_apbif"; clock-names = "tmu_apbif", "tmu_triminfo_apbif";
#include "exynos4412-tmu-sensor-conf.dtsi"
}; };
tmu_cpu3: tmu@1006c000 { tmu_cpu3: tmu@1006c000 {
...@@ -806,6 +810,7 @@ tmu_cpu3: tmu@1006c000 { ...@@ -806,6 +810,7 @@ tmu_cpu3: tmu@1006c000 {
interrupts = <0 185 0>; interrupts = <0 185 0>;
clocks = <&clock CLK_TMU>, <&clock CLK_TMU_GPU>; clocks = <&clock CLK_TMU>, <&clock CLK_TMU_GPU>;
clock-names = "tmu_apbif", "tmu_triminfo_apbif"; clock-names = "tmu_apbif", "tmu_triminfo_apbif";
#include "exynos4412-tmu-sensor-conf.dtsi"
}; };
tmu_gpu: tmu@100a0000 { tmu_gpu: tmu@100a0000 {
...@@ -814,6 +819,30 @@ tmu_gpu: tmu@100a0000 { ...@@ -814,6 +819,30 @@ tmu_gpu: tmu@100a0000 {
interrupts = <0 215 0>; interrupts = <0 215 0>;
clocks = <&clock CLK_TMU_GPU>, <&clock CLK_TMU>; clocks = <&clock CLK_TMU_GPU>, <&clock CLK_TMU>;
clock-names = "tmu_apbif", "tmu_triminfo_apbif"; clock-names = "tmu_apbif", "tmu_triminfo_apbif";
#include "exynos4412-tmu-sensor-conf.dtsi"
};
thermal-zones {
cpu0_thermal: cpu0-thermal {
thermal-sensors = <&tmu_cpu0>;
#include "exynos5420-trip-points.dtsi"
};
cpu1_thermal: cpu1-thermal {
thermal-sensors = <&tmu_cpu1>;
#include "exynos5420-trip-points.dtsi"
};
cpu2_thermal: cpu2-thermal {
thermal-sensors = <&tmu_cpu2>;
#include "exynos5420-trip-points.dtsi"
};
cpu3_thermal: cpu3-thermal {
thermal-sensors = <&tmu_cpu3>;
#include "exynos5420-trip-points.dtsi"
};
gpu_thermal: gpu-thermal {
thermal-sensors = <&tmu_gpu>;
#include "exynos5420-trip-points.dtsi"
};
}; };
watchdog: watchdog@101D0000 { watchdog: watchdog@101D0000 {
......
/*
* Device tree sources for Exynos5440 TMU sensor configuration
*
* Copyright (c) 2014 Lukasz Majewski <l.majewski@samsung.com>
*
* 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 <dt-bindings/thermal/thermal_exynos.h>
#thermal-sensor-cells = <0>;
samsung,tmu_gain = <5>;
samsung,tmu_reference_voltage = <16>;
samsung,tmu_noise_cancel_mode = <4>;
samsung,tmu_efuse_value = <0x5d2d>;
samsung,tmu_min_efuse_value = <16>;
samsung,tmu_max_efuse_value = <76>;
samsung,tmu_first_point_trim = <25>;
samsung,tmu_second_point_trim = <70>;
samsung,tmu_default_temp_offset = <25>;
samsung,tmu_cal_type = <TYPE_ONE_POINT_TRIMMING>;
/*
* Device tree sources for default Exynos5440 thermal zone definition
*
* Copyright (c) 2014 Lukasz Majewski <l.majewski@samsung.com>
*
* 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.
*
*/
polling-delay-passive = <0>;
polling-delay = <0>;
trips {
cpu-alert-0 {
temperature = <100000>; /* millicelsius */
hysteresis = <0>; /* millicelsius */
type = "active";
};
cpu-crit-0 {
temperature = <1050000>; /* millicelsius */
hysteresis = <0>; /* millicelsius */
type = "critical";
};
};
...@@ -219,6 +219,7 @@ tmuctrl_0: tmuctrl@160118 { ...@@ -219,6 +219,7 @@ tmuctrl_0: tmuctrl@160118 {
interrupts = <0 58 0>; interrupts = <0 58 0>;
clocks = <&clock CLK_B_125>; clocks = <&clock CLK_B_125>;
clock-names = "tmu_apbif"; clock-names = "tmu_apbif";
#include "exynos5440-tmu-sensor-conf.dtsi"
}; };
tmuctrl_1: tmuctrl@16011C { tmuctrl_1: tmuctrl@16011C {
...@@ -227,6 +228,7 @@ tmuctrl_1: tmuctrl@16011C { ...@@ -227,6 +228,7 @@ tmuctrl_1: tmuctrl@16011C {
interrupts = <0 58 0>; interrupts = <0 58 0>;
clocks = <&clock CLK_B_125>; clocks = <&clock CLK_B_125>;
clock-names = "tmu_apbif"; clock-names = "tmu_apbif";
#include "exynos5440-tmu-sensor-conf.dtsi"
}; };
tmuctrl_2: tmuctrl@160120 { tmuctrl_2: tmuctrl@160120 {
...@@ -235,6 +237,22 @@ tmuctrl_2: tmuctrl@160120 { ...@@ -235,6 +237,22 @@ tmuctrl_2: tmuctrl@160120 {
interrupts = <0 58 0>; interrupts = <0 58 0>;
clocks = <&clock CLK_B_125>; clocks = <&clock CLK_B_125>;
clock-names = "tmu_apbif"; clock-names = "tmu_apbif";
#include "exynos5440-tmu-sensor-conf.dtsi"
};
thermal-zones {
cpu0_thermal: cpu0-thermal {
thermal-sensors = <&tmuctrl_0>;
#include "exynos5440-trip-points.dtsi"
};
cpu1_thermal: cpu1-thermal {
thermal-sensors = <&tmuctrl_1>;
#include "exynos5440-trip-points.dtsi"
};
cpu2_thermal: cpu2-thermal {
thermal-sensors = <&tmuctrl_2>;
#include "exynos5440-trip-points.dtsi"
};
}; };
sata@210000 { sata@210000 {
......
...@@ -161,6 +161,34 @@ static __init int exynos4_pm_init_power_domain(void) ...@@ -161,6 +161,34 @@ static __init int exynos4_pm_init_power_domain(void)
of_genpd_add_provider_simple(np, &pd->pd); of_genpd_add_provider_simple(np, &pd->pd);
} }
/* Assign the child power domains to their parents */
for_each_compatible_node(np, NULL, "samsung,exynos4210-pd") {
struct generic_pm_domain *child_domain, *parent_domain;
struct of_phandle_args args;
args.np = np;
args.args_count = 0;
child_domain = of_genpd_get_from_provider(&args);
if (!child_domain)
continue;
if (of_parse_phandle_with_args(np, "power-domains",
"#power-domain-cells", 0, &args) != 0)
continue;
parent_domain = of_genpd_get_from_provider(&args);
if (!parent_domain)
continue;
if (pm_genpd_add_subdomain(parent_domain, child_domain))
pr_warn("%s failed to add subdomain: %s\n",
parent_domain->name, child_domain->name);
else
pr_info("%s has as child subdomain: %s.\n",
parent_domain->name, child_domain->name);
of_node_put(np);
}
return 0; return 0;
} }
arch_initcall(exynos4_pm_init_power_domain); arch_initcall(exynos4_pm_init_power_domain);
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