@@ -1081,7 +1081,8 @@ static int clk_fetch_parent_index(struct
if (core->parents[i])
continue;
- if (!strcmp(core->parent_names[i], parent->name)) {
+ if (core->parent_names[i] && !strcmp(core->parent_names[i],
+ parent->name)) {
core->parents[i] = clk_core_lookup(parent->name);
return i;
}
@@ -1675,7 +1676,7 @@ static struct clk_core *__clk_init_paren
if (core->num_parents == 1) {
if (IS_ERR_OR_NULL(core->parent))
- core->parent = clk_core_lookup(core->parent_names[0]);
+ core->parent = clk_core_get_parent_by_index(core, 0);
ret = core->parent;
goto out;
}
@@ -1749,7 +1750,8 @@ bool clk_has_parent(struct clk *clk, str
return true;
for (i = 0; i < core->num_parents; i++)
- if (strcmp(core->parent_names[i], parent_core->name) == 0)
+ if (core->parent_names[i] && strcmp(core->parent_names[i],
+ parent_core->name) == 0)
return true;
return false;
@@ -2337,7 +2339,7 @@ static int __clk_init(struct device *dev
/* throw a WARN if any entries in parent_names are NULL */
for (i = 0; i < core->num_parents; i++)
- WARN(!core->parent_names[i],
+ WARN(!core->parents && !core->parent_names[i],
"%s: invalid NULL in %s's .parent_names\n",
__func__, core->name);
@@ -2437,13 +2439,15 @@ static int __clk_init(struct device *dev
hlist_for_each_entry_safe(orphan, tmp2, &clk_orphan_list, child_node) {
if (orphan->num_parents && orphan->ops->get_parent) {
i = orphan->ops->get_parent(orphan->hw);
- if (!strcmp(core->name, orphan->parent_names[i]))
+ if (orphan->parent_names[i] &&
+ !strcmp(core->name, orphan->parent_names[i]))
clk_core_reparent(orphan, core);
continue;
}
for (i = 0; i < orphan->num_parents; i++)
- if (!strcmp(core->name, orphan->parent_names[i])) {
+ if (orphan->parent_names[i] &&
+ !strcmp(core->name, orphan->parent_names[i])) {
clk_core_reparent(orphan, core);
break;
}
@@ -2555,6 +2559,9 @@ struct clk *clk_register(struct device *
/* copy each string name in case parent_names is __initdata */
for (i = 0; i < core->num_parents; i++) {
+ if (!hw->init->parent_names[i])
+ continue;
+
core->parent_names[i] = kstrdup_const(hw->init->parent_names[i],
GFP_KERNEL);
if (!core->parent_names[i]) {