Subject: [PATCH v3 2/7] ARM: Exynos: add support for sub-power domains

From: [email-masked] (Marek Szyprowski)
Date: Thu, 15 Jan 2015 10:52:59 +0100

Hello All,

I'm sorry for missing some CC: in this patch, when I posted v3 to 
mailing list.
It looks that CC: lines got lost after git am + git format-patch.

Ulf, could you also ack this patch, so Kukjin can finally merge the whole
series to Samsung kernel tree?

On 2015-01-14 14:44, Marek Szyprowski wrote:
> This patch adds support for making one power domain a sub-domain of
> other domain. This is useful for modeling power dependences for devices
> like TV Mixer or Camera ISP, which needs to have more than one power
> domain enabled to be operational.
>
> Based on previous work by Amit Daniel Kachhap <[email-masked]>.
>
> Signed-off-by: Marek Szyprowski <[email-masked]>
> ---
>   .../bindings/arm/exynos/power_domain.txt           |  2 ++
>   arch/arm/mach-exynos/pm_domains.c                  | 28 ++++++++++++++++++++++
>   2 files changed, 30 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/arm/exynos/power_domain.txt b/Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> index f4445e5..1e09703 100644
> --- a/Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> +++ b/Documentation/devicetree/bindings/arm/exynos/power_domain.txt
> @@ -22,6 +22,8 @@ Optional Properties:
>   	- 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)
>   		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
>   defined with a phandle to respective power domain.
> diff --git a/arch/arm/mach-exynos/pm_domains.c b/arch/arm/mach-exynos/pm_domains.c
> index 20f2671..37266a8 100644
> --- a/arch/arm/mach-exynos/pm_domains.c
> +++ b/arch/arm/mach-exynos/pm_domains.c
> @@ -161,6 +161,34 @@ no_clk:
>   		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;
>   }
>   arch_initcall(exynos4_pm_init_power_domain);

Best regards
-- 
Marek Szyprowski, PhD
Samsung R&D Institute Poland