aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/clk/clk.c70
1 files changed, 42 insertions, 28 deletions
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
index 0230c9d95975..013a3c7fea5b 100644
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -343,6 +343,39 @@ out:
343} 343}
344 344
345/** 345/**
346 * clk_debug_reparent - reparent clk node in the debugfs clk tree
347 * @clk: the clk being reparented
348 * @new_parent: the new clk parent, may be NULL
349 *
350 * Rename clk entry in the debugfs clk tree if debugfs has been
351 * initialized. Otherwise it bails out early since the debugfs clk tree
352 * will be created lazily by clk_debug_init as part of a late_initcall.
353 *
354 * Caller must hold prepare_lock.
355 */
356static void clk_debug_reparent(struct clk *clk, struct clk *new_parent)
357{
358 struct dentry *d;
359 struct dentry *new_parent_d;
360
361 if (!inited)
362 return;
363
364 if (new_parent)
365 new_parent_d = new_parent->dentry;
366 else
367 new_parent_d = orphandir;
368
369 d = debugfs_rename(clk->dentry->d_parent, clk->dentry,
370 new_parent_d, clk->name);
371 if (d)
372 clk->dentry = d;
373 else
374 pr_debug("%s: failed to rename debugfs entry for %s\n",
375 __func__, clk->name);
376}
377
378/**
346 * clk_debug_init - lazily create the debugfs clk tree visualization 379 * clk_debug_init - lazily create the debugfs clk tree visualization
347 * 380 *
348 * clks are often initialized very early during boot before memory can 381 * clks are often initialized very early during boot before memory can
@@ -396,6 +429,9 @@ static int __init clk_debug_init(void)
396late_initcall(clk_debug_init); 429late_initcall(clk_debug_init);
397#else 430#else
398static inline int clk_debug_register(struct clk *clk) { return 0; } 431static inline int clk_debug_register(struct clk *clk) { return 0; }
432static inline void clk_debug_reparent(struct clk *clk, struct clk *new_parent)
433{
434}
399#endif 435#endif
400 436
401/* caller must hold prepare_lock */ 437/* caller must hold prepare_lock */
@@ -1277,16 +1313,8 @@ out:
1277 return ret; 1313 return ret;
1278} 1314}
1279 1315
1280void __clk_reparent(struct clk *clk, struct clk *new_parent) 1316static void clk_reparent(struct clk *clk, struct clk *new_parent)
1281{ 1317{
1282#ifdef CONFIG_COMMON_CLK_DEBUG
1283 struct dentry *d;
1284 struct dentry *new_parent_d;
1285#endif
1286
1287 if (!clk || !new_parent)
1288 return;
1289
1290 hlist_del(&clk->child_node); 1318 hlist_del(&clk->child_node);
1291 1319
1292 if (new_parent) 1320 if (new_parent)
@@ -1294,27 +1322,13 @@ void __clk_reparent(struct clk *clk, struct clk *new_parent)
1294 else 1322 else
1295 hlist_add_head(&clk->child_node, &clk_orphan_list); 1323 hlist_add_head(&clk->child_node, &clk_orphan_list);
1296 1324
1297#ifdef CONFIG_COMMON_CLK_DEBUG
1298 if (!inited)
1299 goto out;
1300
1301 if (new_parent)
1302 new_parent_d = new_parent->dentry;
1303 else
1304 new_parent_d = orphandir;
1305
1306 d = debugfs_rename(clk->dentry->d_parent, clk->dentry,
1307 new_parent_d, clk->name);
1308 if (d)
1309 clk->dentry = d;
1310 else
1311 pr_debug("%s: failed to rename debugfs entry for %s\n",
1312 __func__, clk->name);
1313out:
1314#endif
1315
1316 clk->parent = new_parent; 1325 clk->parent = new_parent;
1326}
1317 1327
1328void __clk_reparent(struct clk *clk, struct clk *new_parent)
1329{
1330 clk_reparent(clk, new_parent);
1331 clk_debug_reparent(clk, new_parent);
1318 __clk_recalc_rates(clk, POST_RATE_CHANGE); 1332 __clk_recalc_rates(clk, POST_RATE_CHANGE);
1319} 1333}
1320 1334