Loading arch/arm/mach-omap2/omap_hwmod.c +17 −6 Original line number Original line Diff line number Diff line Loading @@ -2345,6 +2345,17 @@ static int __init _init_mpu_rt_base(struct omap_hwmod *oh, void *data, return 0; return 0; } } static void __init parse_module_flags(struct omap_hwmod *oh, struct device_node *np) { if (of_find_property(np, "ti,no-reset-on-init", NULL)) oh->flags |= HWMOD_INIT_NO_RESET; if (of_find_property(np, "ti,no-idle-on-init", NULL)) oh->flags |= HWMOD_INIT_NO_IDLE; if (of_find_property(np, "ti,no-idle", NULL)) oh->flags |= HWMOD_NO_IDLE; } /** /** * _init - initialize internal data for the hwmod @oh * _init - initialize internal data for the hwmod @oh * @oh: struct omap_hwmod * * @oh: struct omap_hwmod * Loading Loading @@ -2392,12 +2403,12 @@ static int __init _init(struct omap_hwmod *oh, void *data) } } if (np) { if (np) { if (of_find_property(np, "ti,no-reset-on-init", NULL)) struct device_node *child; oh->flags |= HWMOD_INIT_NO_RESET; if (of_find_property(np, "ti,no-idle-on-init", NULL)) parse_module_flags(oh, np); oh->flags |= HWMOD_INIT_NO_IDLE; child = of_get_next_child(np, NULL); if (of_find_property(np, "ti,no-idle", NULL)) if (child) oh->flags |= HWMOD_NO_IDLE; parse_module_flags(oh, child); } } oh->_state = _HWMOD_STATE_INITIALIZED; oh->_state = _HWMOD_STATE_INITIALIZED; Loading drivers/bus/ti-sysc.c +25 −7 Original line number Original line Diff line number Diff line Loading @@ -91,6 +91,9 @@ struct sysc { struct delayed_work idle_work; 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) void sysc_write(struct sysc *ddata, int offset, u32 value) { { writel_relaxed(value, ddata->module_va + offset); writel_relaxed(value, ddata->module_va + offset); Loading Loading @@ -379,6 +382,7 @@ static int sysc_check_one_child(struct sysc *ddata, dev_warn(ddata->dev, "really a child ti,hwmods property?"); dev_warn(ddata->dev, "really a child ti,hwmods property?"); sysc_check_quirk_stdout(ddata, np); sysc_check_quirk_stdout(ddata, np); sysc_parse_dts_quirks(ddata, np, true); return 0; return 0; } } Loading Loading @@ -1279,23 +1283,37 @@ static const struct sysc_dts_quirk sysc_dts_quirks[] = { .mask = SYSC_QUIRK_NO_RESET_ON_INIT, }, .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; const struct property *prop; int i, len, error; int i, len; u32 val; ddata->legacy_mode = of_get_property(np, "ti,hwmods", NULL); for (i = 0; i < ARRAY_SIZE(sysc_dts_quirks); i++) { 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) if (!prop) continue; continue; ddata->cfg.quirks |= sysc_dts_quirks[i].mask; 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); error = of_property_read_u32(np, "ti,sysc-delay-us", &val); if (!error) { if (!error) { if (val > 255) { if (val > 255) { Loading Loading
arch/arm/mach-omap2/omap_hwmod.c +17 −6 Original line number Original line Diff line number Diff line Loading @@ -2345,6 +2345,17 @@ static int __init _init_mpu_rt_base(struct omap_hwmod *oh, void *data, return 0; return 0; } } static void __init parse_module_flags(struct omap_hwmod *oh, struct device_node *np) { if (of_find_property(np, "ti,no-reset-on-init", NULL)) oh->flags |= HWMOD_INIT_NO_RESET; if (of_find_property(np, "ti,no-idle-on-init", NULL)) oh->flags |= HWMOD_INIT_NO_IDLE; if (of_find_property(np, "ti,no-idle", NULL)) oh->flags |= HWMOD_NO_IDLE; } /** /** * _init - initialize internal data for the hwmod @oh * _init - initialize internal data for the hwmod @oh * @oh: struct omap_hwmod * * @oh: struct omap_hwmod * Loading Loading @@ -2392,12 +2403,12 @@ static int __init _init(struct omap_hwmod *oh, void *data) } } if (np) { if (np) { if (of_find_property(np, "ti,no-reset-on-init", NULL)) struct device_node *child; oh->flags |= HWMOD_INIT_NO_RESET; if (of_find_property(np, "ti,no-idle-on-init", NULL)) parse_module_flags(oh, np); oh->flags |= HWMOD_INIT_NO_IDLE; child = of_get_next_child(np, NULL); if (of_find_property(np, "ti,no-idle", NULL)) if (child) oh->flags |= HWMOD_NO_IDLE; parse_module_flags(oh, child); } } oh->_state = _HWMOD_STATE_INITIALIZED; oh->_state = _HWMOD_STATE_INITIALIZED; Loading
drivers/bus/ti-sysc.c +25 −7 Original line number Original line Diff line number Diff line Loading @@ -91,6 +91,9 @@ struct sysc { struct delayed_work idle_work; 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) void sysc_write(struct sysc *ddata, int offset, u32 value) { { writel_relaxed(value, ddata->module_va + offset); writel_relaxed(value, ddata->module_va + offset); Loading Loading @@ -379,6 +382,7 @@ static int sysc_check_one_child(struct sysc *ddata, dev_warn(ddata->dev, "really a child ti,hwmods property?"); dev_warn(ddata->dev, "really a child ti,hwmods property?"); sysc_check_quirk_stdout(ddata, np); sysc_check_quirk_stdout(ddata, np); sysc_parse_dts_quirks(ddata, np, true); return 0; return 0; } } Loading Loading @@ -1279,23 +1283,37 @@ static const struct sysc_dts_quirk sysc_dts_quirks[] = { .mask = SYSC_QUIRK_NO_RESET_ON_INIT, }, .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; const struct property *prop; int i, len, error; int i, len; u32 val; ddata->legacy_mode = of_get_property(np, "ti,hwmods", NULL); for (i = 0; i < ARRAY_SIZE(sysc_dts_quirks); i++) { 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) if (!prop) continue; continue; ddata->cfg.quirks |= sysc_dts_quirks[i].mask; 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); error = of_property_read_u32(np, "ti,sysc-delay-us", &val); if (!error) { if (!error) { if (val > 255) { if (val > 255) { Loading