msm: clock-debug: Print dependency chains

Print the dependency chains in the debug_suspend output. This
allows us to accurately see which clock is using which PLL or XO.

Sample output:

Enabled clocks:
 pll8_clk -> pxo_clk
 pll4_clk -> pxo_clk
 afab_clk
 afab_a_clk
 dfab_clk
 dfab_a_clk
 ebi1_clk
 ebi1_a_clk
 gsbi5_uart_clk -> pll8_clk -> pxo_clk
 gsbi3_qup_clk -> pll8_clk -> pxo_clk
 gsbi4_qup_clk -> pll8_clk -> pxo_clk
 pmem_clk
 sdc1_clk -> pll8_clk -> pxo_clk
 dma_bam_p_clk
 gsbi3_p_clk
 gsbi4_p_clk
 gsbi5_p_clk
 usb_hs1_p_clk
 sdc1_p_clk
 audio_slimbus_clk -> pll4_clk -> pxo_clk
 dfab_usb_hs_clk -> dfab_clk
 dfab_sdc1_clk -> dfab_clk
Enabled clock count: 22

Change-Id: I53ba720348c4b86a3d24aa83a970d91ca0637b43
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
diff --git a/arch/arm/mach-msm/clock-debug.c b/arch/arm/mach-msm/clock-debug.c
index ab4d8c1..78586a8 100644
--- a/arch/arm/mach-msm/clock-debug.c
+++ b/arch/arm/mach-msm/clock-debug.c
@@ -141,9 +141,24 @@
 	return ret;
 }
 
+
+static int clock_debug_print_clock(struct clk *c)
+{
+	size_t ln = 0;
+	char s[128];
+
+	if (!c || !c->count)
+		return 0;
+
+	ln += snprintf(s, sizeof(s), "\t%s", c->dbg_name);
+	while (ln < sizeof(s) && (c = clk_get_parent(c)))
+		ln += snprintf(s + ln, sizeof(s) - ln, " -> %s", c->dbg_name);
+	pr_info("%s\n", s);
+	return 1;
+}
+
 void clock_debug_print_enabled(void)
 {
-	struct clk *clk;
 	unsigned i;
 	int cnt = 0;
 
@@ -151,14 +166,8 @@
 		return;
 
 	pr_info("Enabled clocks:\n");
-	for (i = 0; i < num_msm_clocks; i++) {
-		clk = msm_clocks[i].clk;
-
-		if (clk && clk->ops->is_enabled && clk->ops->is_enabled(clk)) {
-			pr_info("\t%s\n", clk->dbg_name);
-			cnt++;
-		}
-	}
+	for (i = 0; i < num_msm_clocks; i++)
+		cnt += clock_debug_print_clock(msm_clocks[i].clk);
 
 	if (cnt)
 		pr_info("Enabled clock count: %d\n", cnt);