]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
soc: samsung: pm_domains: Read domain name from the new label property
authorMarek Szyprowski <m.szyprowski@samsung.com>
Mon, 30 Jan 2017 12:18:59 +0000 (13:18 +0100)
committerKrzysztof Kozlowski <krzk@kernel.org>
Tue, 31 Jan 2017 19:30:07 +0000 (21:30 +0200)
Device tree nodes for each power domain should use generic "power-domain"
name, so using it as a domain name doesn't give much benefits. This patch
adds support for human readable names defined in 'label' property. Such
names are visible to userspace and makes debugging much easier. When no
'label' property is found, driver keeps using the name constructed from
full node name.

Suggested-by: Krzysztof Kozlowski <krzk@kernel.org>
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
Documentation/devicetree/bindings/power/pd-samsung.txt
drivers/soc/samsung/pm_domains.c

index 4e947372a69324cb491676494b2c0a18afc23a3b..c461b1090cb64c4f446e32f2201003b23106ea07 100644 (file)
@@ -12,6 +12,8 @@ Required Properties:
     must be 0.
 
 Optional Properties:
+- label: Human readable string with domain name. Will be visible in userspace
+       to let user to distinguish between multiple domains in SoC.
 - clocks: List of clock handles. The parent clocks of the input clocks to the
        devices in this power domain are set to oscclk before power gating
        and restored back after powering on a domain. This is required for
@@ -38,6 +40,7 @@ Example:
                compatible = "samsung,exynos4210-pd";
                reg = <0x10023C00 0x10>;
                #power-domain-cells = <0>;
+               label = "LCD0";
        };
 
        mfc_pd: power-domain@10044060 {
@@ -46,6 +49,7 @@ Example:
                clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MOUT_USER_ACLK333>;
                clock-names = "oscclk", "clk0";
                #power-domain-cells = <0>;
+               label = "MFC";
        };
 
 See Documentation/devicetree/bindings/power/power_domain.txt for description
index 0649024fce092ea029ebf1a439fd796cdb419a21..31270171f23d31e2ac7f06ace93c803383880f3b 100644 (file)
@@ -135,6 +135,15 @@ static const struct of_device_id exynos_pm_domain_of_match[] __initconst = {
        { },
 };
 
+static __init const char *exynos_get_domain_name(struct device_node *node)
+{
+       const char *name;
+
+       if (of_property_read_string(node, "label", &name) < 0)
+               name = strrchr(node->full_name, '/') + 1;
+       return kstrdup_const(name, GFP_KERNEL);
+}
+
 static __init int exynos4_pm_init_power_domain(void)
 {
        struct device_node *np;
@@ -152,8 +161,7 @@ static __init int exynos4_pm_init_power_domain(void)
                        of_node_put(np);
                        return -ENOMEM;
                }
-               pd->pd.name = kstrdup_const(strrchr(np->full_name, '/') + 1,
-                                           GFP_KERNEL);
+               pd->pd.name = exynos_get_domain_name(np);
                if (!pd->pd.name) {
                        kfree(pd);
                        of_node_put(np);