Merge branches 'clk-starfive', 'clk-ti', 'clk-terminate' and 'clk-cleanup' into clk...
[linux-2.6-microblaze.git] / drivers / clk / ti / clkctrl.c
index 864c484..064066e 100644 (file)
@@ -469,14 +469,32 @@ static void __init _clkctrl_add_provider(void *data,
        of_clk_add_hw_provider(np, _ti_omap4_clkctrl_xlate, data);
 }
 
-/* Get clock name based on compatible string for clkctrl */
-static char * __init clkctrl_get_name(struct device_node *np)
+/*
+ * Get clock name based on "clock-output-names" property or the
+ * compatible property for clkctrl.
+ */
+static const char * __init clkctrl_get_name(struct device_node *np)
 {
        struct property *prop;
        const int prefix_len = 11;
        const char *compat;
+       const char *output;
        char *name;
 
+       if (!of_property_read_string_index(np, "clock-output-names", 0,
+                                          &output)) {
+               const char *end;
+               int len;
+
+               len = strlen(output);
+               end = strstr(output, "_clkctrl");
+               if (end)
+                       len -= strlen(end);
+               name = kstrndup(output, len, GFP_KERNEL);
+
+               return name;
+       }
+
        of_property_for_each_string(np, "compatible", prop, compat) {
                if (!strncmp("ti,clkctrl-", compat, prefix_len)) {
                        /* Two letter minimum name length for l3, l4 etc */
@@ -505,7 +523,7 @@ static void __init _ti_omap4_clkctrl_setup(struct device_node *node)
        struct omap_clkctrl_clk *clkctrl_clk = NULL;
        const __be32 *addrp;
        bool legacy_naming;
-       char *clkctrl_name;
+       const char *clkctrl_name;
        u32 addr;
        int ret;
        char *c;
@@ -527,13 +545,8 @@ static void __init _ti_omap4_clkctrl_setup(struct device_node *node)
                data = omap5_clkctrl_data;
 #endif
 #ifdef CONFIG_SOC_DRA7XX
-       if (of_machine_is_compatible("ti,dra7")) {
-               if (ti_clk_get_features()->flags & TI_CLK_CLKCTRL_COMPAT)
-                       data = dra7_clkctrl_compat_data;
-               else
-                       data = dra7_clkctrl_data;
-       }
-
+       if (of_machine_is_compatible("ti,dra7"))
+               data = dra7_clkctrl_data;
        if (of_machine_is_compatible("ti,dra72"))
                soc_mask = CLKF_SOC_DRA72;
        if (of_machine_is_compatible("ti,dra74"))
@@ -542,27 +555,15 @@ static void __init _ti_omap4_clkctrl_setup(struct device_node *node)
                soc_mask = CLKF_SOC_DRA76;
 #endif
 #ifdef CONFIG_SOC_AM33XX
-       if (of_machine_is_compatible("ti,am33xx")) {
-               if (ti_clk_get_features()->flags & TI_CLK_CLKCTRL_COMPAT)
-                       data = am3_clkctrl_compat_data;
-               else
-                       data = am3_clkctrl_data;
-       }
+       if (of_machine_is_compatible("ti,am33xx"))
+               data = am3_clkctrl_data;
 #endif
 #ifdef CONFIG_SOC_AM43XX
-       if (of_machine_is_compatible("ti,am4372")) {
-               if (ti_clk_get_features()->flags & TI_CLK_CLKCTRL_COMPAT)
-                       data = am4_clkctrl_compat_data;
-               else
-                       data = am4_clkctrl_data;
-       }
+       if (of_machine_is_compatible("ti,am4372"))
+               data = am4_clkctrl_data;
 
-       if (of_machine_is_compatible("ti,am438x")) {
-               if (ti_clk_get_features()->flags & TI_CLK_CLKCTRL_COMPAT)
-                       data = am438x_clkctrl_compat_data;
-               else
-                       data = am438x_clkctrl_data;
-       }
+       if (of_machine_is_compatible("ti,am438x"))
+               data = am438x_clkctrl_data;
 #endif
 #ifdef CONFIG_SOC_TI81XX
        if (of_machine_is_compatible("ti,dm814"))
@@ -603,7 +604,7 @@ static void __init _ti_omap4_clkctrl_setup(struct device_node *node)
 
        /*
         * The code below can be removed when all clkctrl nodes use domain
-        * specific compatible proprerty and standard clock node naming
+        * specific compatible property and standard clock node naming
         */
        if (legacy_naming) {
                provider->clkdm_name = kasprintf(GFP_KERNEL, "%pOFnxxx", node->parent);