Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma
[linux-2.6-microblaze.git] / drivers / bus / ti-sysc.c
index 46a6c52..f94d335 100644 (file)
@@ -91,6 +91,9 @@ struct sysc {
        struct delayed_work idle_work;
 };
 
+static void sysc_parse_dts_quirks(struct sysc *ddata, struct device_node *np,
+                                 bool is_child);
+
 void sysc_write(struct sysc *ddata, int offset, u32 value)
 {
        writel_relaxed(value, ddata->module_va + offset);
@@ -379,6 +382,7 @@ static int sysc_check_one_child(struct sysc *ddata,
                dev_warn(ddata->dev, "really a child ti,hwmods property?");
 
        sysc_check_quirk_stdout(ddata, np);
+       sysc_parse_dts_quirks(ddata, np, true);
 
        return 0;
 }
@@ -1279,23 +1283,37 @@ static const struct sysc_dts_quirk sysc_dts_quirks[] = {
          .mask = SYSC_QUIRK_NO_RESET_ON_INIT, },
 };
 
-static int sysc_init_dts_quirks(struct sysc *ddata)
+static void sysc_parse_dts_quirks(struct sysc *ddata, struct device_node *np,
+                                 bool is_child)
 {
-       struct device_node *np = ddata->dev->of_node;
        const struct property *prop;
-       int i, len, error;
-       u32 val;
-
-       ddata->legacy_mode = of_get_property(np, "ti,hwmods", NULL);
+       int i, len;
 
        for (i = 0; i < ARRAY_SIZE(sysc_dts_quirks); i++) {
-               prop = of_get_property(np, sysc_dts_quirks[i].name, &len);
+               const char *name = sysc_dts_quirks[i].name;
+
+               prop = of_get_property(np, name, &len);
                if (!prop)
                        continue;
 
                ddata->cfg.quirks |= sysc_dts_quirks[i].mask;
+               if (is_child) {
+                       dev_warn(ddata->dev,
+                                "dts flag should be at module level for %s\n",
+                                name);
+               }
        }
+}
+
+static int sysc_init_dts_quirks(struct sysc *ddata)
+{
+       struct device_node *np = ddata->dev->of_node;
+       int error;
+       u32 val;
+
+       ddata->legacy_mode = of_get_property(np, "ti,hwmods", NULL);
 
+       sysc_parse_dts_quirks(ddata, np, false);
        error = of_property_read_u32(np, "ti,sysc-delay-us", &val);
        if (!error) {
                if (val > 255) {