diff options
author | Joonyoung Shim <jy0922.shim@samsung.com> | 2014-03-11 13:44:20 +0900 |
---|---|---|
committer | Chanho Park <chanho61.park@samsung.com> | 2014-03-20 17:44:19 +0900 |
commit | e59b6bda8e7040a49c2c5c07d62194cbfcdc6cfa (patch) | |
tree | ed023a47849c4d973d3588fba7bab36df3114bfb /arch/arm | |
parent | 741d1424152ef7f9ff990b2cb11a00fddc3cd7cf (diff) | |
download | linux-3.10-e59b6bda8e7040a49c2c5c07d62194cbfcdc6cfa.tar.gz linux-3.10-e59b6bda8e7040a49c2c5c07d62194cbfcdc6cfa.tar.bz2 linux-3.10-e59b6bda8e7040a49c2c5c07d62194cbfcdc6cfa.zip |
ARM: EXYNOS: register master power domain for genpd from DT
There is one case for EXYNOS4412 that mixer needs LCD0 power domain as
well as TV power domain. If disable LCD0 power domain, mixer occurs
underflow of mixer graphic layer0 line buffer and we can't output normal
data from hdmi. I don't know why mixer has dependency of LCD0 power
domain.
We can control the dependency as LCD0 power domain register to master of
TV power domain on genpd framework.
Change-Id: I71ef5bba37393d2e00c4dd7ea3f7da09d72e8db7
Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/boot/dts/exynos4412.dtsi | 4 | ||||
-rw-r--r-- | arch/arm/mach-exynos/pm_domains.c | 11 |
2 files changed, 15 insertions, 0 deletions
diff --git a/arch/arm/boot/dts/exynos4412.dtsi b/arch/arm/boot/dts/exynos4412.dtsi index b0fde4a6b4a..bf78f61ee8e 100644 --- a/arch/arm/boot/dts/exynos4412.dtsi +++ b/arch/arm/boot/dts/exynos4412.dtsi @@ -86,4 +86,8 @@ phy-names = "hdmiphy"; compatible = "samsung,exynos5-hdmi"; }; + + mixer: mixer@12C10000 { + samsung,power-domain-master = <&pd_lcd0>; + }; }; diff --git a/arch/arm/mach-exynos/pm_domains.c b/arch/arm/mach-exynos/pm_domains.c index 435e396850c..5a7eb8ec35b 100644 --- a/arch/arm/mach-exynos/pm_domains.c +++ b/arch/arm/mach-exynos/pm_domains.c @@ -124,6 +124,7 @@ static void exynos_read_domain_from_dt(struct device *dev) { struct platform_device *pd_pdev; struct exynos_pm_domain *pd; + struct exynos_pm_domain *master_pd; struct device_node *node; node = of_parse_phandle(dev->of_node, "samsung,power-domain", 0); @@ -134,6 +135,16 @@ static void exynos_read_domain_from_dt(struct device *dev) return; pd = platform_get_drvdata(pd_pdev); exynos_add_device_to_domain(pd, dev); + + /* make master and slave hierarchy */ + node = of_parse_phandle(dev->of_node, "samsung,power-domain-master", 0); + if (!node) + return; + pd_pdev = of_find_device_by_node(node); + if (!pd_pdev) + return; + master_pd = platform_get_drvdata(pd_pdev); + pm_genpd_add_subdomain(&master_pd->pd, &pd->pd); } static int exynos_pm_notifier_call(struct notifier_block *nb, |