mirror of
https://github.com/torvalds/linux.git
synced 2026-01-25 15:03:52 +08:00
Merge branch 'omap-for-v4.21/ti-sysc' into omap-for-v4.21/driver
This commit is contained in:
@@ -2345,6 +2345,17 @@ static int __init _init_mpu_rt_base(struct omap_hwmod *oh, void *data,
|
||||
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
|
||||
* @oh: struct omap_hwmod *
|
||||
@@ -2392,12 +2403,12 @@ static int __init _init(struct omap_hwmod *oh, void *data)
|
||||
}
|
||||
|
||||
if (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;
|
||||
struct device_node *child;
|
||||
|
||||
parse_module_flags(oh, np);
|
||||
child = of_get_next_child(np, NULL);
|
||||
if (child)
|
||||
parse_module_flags(oh, child);
|
||||
}
|
||||
|
||||
oh->_state = _HWMOD_STATE_INITIALIZED;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user