Samsung tmu and hdmi regression fixes for v4.0

- 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.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.11 (GNU/Linux)
 
 iQIcBAABAgAGBQJU9LGEAAoJEA0Cl+kVi2xqXHYP/jyUQoCEEtgBrm9Rui0JgeJ5
 AxknhqAQQNNSL5npsGGkrmYNsZraIwn5rfALCbXAt0xfq+pACiqYLna81J2j33dF
 fk5t2MzmoHFKrDxeR7uQOgGd6QU9q4nRUL0Cttp7G38BBCJkH/cj6nu8RxVpl2b3
 walBlRmgt8AKzFNCeOaNxpp0dmOj1RSU8xLwR4bvo3qWPSNI9LrqkCfSz1/gZLOQ
 J6e9U6+GmOPiui6aEpI+9CQ78amrMUE0QwgI5YJwVNWT0Vx0kG8SWV0DRGPz8UJv
 aFrizdSdqHZWVaMez+yv7sM5ga+KHqseWX29lVgcJHXj3tlMpsP0RH3Vvq2jDkfG
 AEbcsTbm6Jd9kbq9/Edr/TDIu97SLmQhLM7wm1EBhi70CuglPeLWydB23sXL3wCc
 5V1sPIEiLx0epcfP6JIHHExKS2amBR7RHbn5E+mWjs9ChKCDNyG/6cu7eWzFGrFm
 LW4MHwU4dW9WHOzMBUDPnMrDhpJYe+9XLBgzeD67xda2YE80BAb2Ro/LO/pwEv5y
 spuFqDlXnahOs4wP68f+TDHyhPg81QbkC+35w+mNXFYEgUQbROm4PgHEK4jRbB5K
 zAZHIReEwYqxne5Suv6uSAUiiBmaa3aujnj56bhwHns6KDYnVmCdbw6h0CymAtSA
 Inie5Ipbq5XAtatLVWA+
 =gbWq
 -----END PGP SIGNATURE-----

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
This commit is contained in:
Arnd Bergmann 2015-03-04 20:59:03 +01:00
commit 3c02bfc4c0
21 changed files with 565 additions and 11 deletions

View File

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

View File

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

View File

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

View File

@ -0,0 +1,52 @@
/*
* 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>;
};
};
};
};
};

View File

@ -38,6 +38,7 @@
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 @@
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 @@
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 @@
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>;

View File

@ -426,6 +426,25 @@
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 = <>;

View File

@ -505,6 +505,63 @@
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 {

View File

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

View File

@ -26,10 +26,13 @@
#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 {

View File

@ -249,6 +249,20 @@
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 @@
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 @@
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>;
};
}; };

View File

@ -0,0 +1,24 @@
/*
* 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>;

View File

@ -927,6 +927,21 @@
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 {

View File

@ -26,10 +26,13 @@
#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 {

View File

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

View File

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

View File

@ -0,0 +1,35 @@
/*
* 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";
};
};

View File

@ -740,8 +740,9 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 {

View File

@ -0,0 +1,24 @@
/*
* 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>;

View File

@ -0,0 +1,25 @@
/*
* 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";
};
};

View File

@ -219,6 +219,7 @@
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 @@
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 @@
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 {

View File

@ -161,6 +161,34 @@ no_clk:
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);