In common clock framework (merged in 3.8-rc1) the directory
and attributes are changed, adapt to the new clock entries in
debugfs.

Signed-off-by: Sanjay Singh Rawat <sanjay.ra...@linaro.com>
---
 clocks.c |   69 ++++++++++++++++++++++++++++++++++++++++++++++++++------------
 1 file changed, 56 insertions(+), 13 deletions(-)

diff --git a/clocks.c b/clocks.c
index 2611a0d..95acf57 100644
--- a/clocks.c
+++ b/clocks.c
@@ -42,9 +42,19 @@ struct clock_info {
        int usecount;
        bool expanded;
        char *prefix;
+       int preparecount;
+       int enablecount;
+       int notifiercount;
 } *clocks_info;
 
+enum clock_fw_type{
+       CCF,    /* common clock framework */
+       OCF,    /* old clock framework */
+       MAX,
+};
+
 static struct tree *clock_tree = NULL;
+static int clock_fw;
 
 static int locate_debugfs(char *clk_path)
 {
@@ -144,9 +154,18 @@ static inline int read_clock_cb(struct tree *t, void *data)
 {
        struct clock_info *clk = t->private;
 
-       file_read_value(t->path, "flags", "%x", &clk->flags);
-       file_read_value(t->path, "rate", "%d", &clk->rate);
-       file_read_value(t->path, "usecount", "%d", &clk->usecount);
+       if(clock_fw == CCF) {
+               file_read_value(t->path, "clk_flags", "%x", &clk->flags);
+               file_read_value(t->path, "clk_rate", "%d", &clk->rate);
+               file_read_value(t->path, "clk_prepare_count", "%d", 
&clk->preparecount);
+               file_read_value(t->path, "clk_enable_count", "%d", 
&clk->enablecount);
+               file_read_value(t->path, "clk_notifier_count", "%d", 
&clk->notifiercount);
+       }
+       else {
+               file_read_value(t->path, "flags", "%x", &clk->flags);
+               file_read_value(t->path, "rate", "%d", &clk->rate);
+               file_read_value(t->path, "usecount", "%d", &clk->usecount);
+       }
 
        return 0;
 }
@@ -206,9 +225,17 @@ static char *clock_line(struct tree *t)
        if (asprintf(&clkrate, "%d%s", rate, clkunit) < 0)
                goto free_clkname;
 
-       if (asprintf(&clkline, "%-55s 0x%-16x %-12s %-9d %-8d", clkname,
-                    clk->flags, clkrate, clk->usecount, t->nrchild) < 0)
-               goto free_clkrate;
+       if(clock_fw == CCF) {
+               if (asprintf(&clkline, "%-35s 0x%-8x %-12s %-10d %-11d %-15d 
%-14d %-10d",
+                            clkname, clk->flags, clkrate, clk->usecount, 
t->nrchild,
+                            clk->preparecount, clk->enablecount, 
clk->notifiercount) < 0)
+                       goto free_clkrate;
+       }
+       else {
+               if (asprintf(&clkline, "%-55s 0x%-16x %-12s %-9d %-8d",
+                            clkname, clk->flags, clkrate, clk->usecount, 
t->nrchild) < 0)
+                       goto free_clkrate;
+       }
 
 free_clkrate:
        free(clkrate);
@@ -259,9 +286,17 @@ static int clock_print_header(void)
        char *buf;
        int ret;
 
-       if (asprintf(&buf, "%-55s %-16s %-12s %-9s %-8s",
+       if(clock_fw == CCF) {
+               if (asprintf(&buf, "%-35s %-10s %-12s %-10s %-11s %-15s %-14s 
%-14s",
+                    "Name", "Flags", "Rate", "Usecount", "Children", 
"Prepare_Count",
+                    "Enable_Count", "Notifier_Count") < 0)
+               return -1;
+       }
+       else {
+               if (asprintf(&buf, "%-55s %-16s %-12s %-9s %-8s",
                     "Name", "Flags", "Rate", "Usecount", "Children") < 0)
                return -1;
+       }
 
        ret = display_column_name(buf);
 
@@ -384,17 +419,25 @@ static struct display_ops clock_ops = {
  */
 int clock_init(void)
 {
-       char clk_dir_path[PATH_MAX];
+       char clk_dir_path[MAX+1][PATH_MAX];
 
-       if (locate_debugfs(clk_dir_path))
+       if (locate_debugfs(clk_dir_path[CCF]) || 
locate_debugfs(clk_dir_path[OCF]))
                return -1;
 
-       sprintf(clk_dir_path, "%s/clock", clk_dir_path);
-
-       if (access(clk_dir_path, F_OK))
+       sprintf(clk_dir_path[CCF], "%s/clk", clk_dir_path[CCF]);
+       sprintf(clk_dir_path[OCF], "%s/clock", clk_dir_path[OCF]);
+       if (!access(clk_dir_path[CCF], F_OK)) {
+               clock_fw = CCF;
+               strcpy(clk_dir_path[MAX],clk_dir_path[CCF]);
+       }
+       else if(!access(clk_dir_path[OCF], F_OK)) {
+               clock_fw = OCF;
+               strcpy(clk_dir_path[MAX],clk_dir_path[OCF]);
+       }
+       else
                return -1;
 
-       clock_tree = tree_load(clk_dir_path, NULL, false);
+       clock_tree = tree_load(clk_dir_path[MAX], NULL, false);
        if (!clock_tree)
                return -1;
 
-- 
1.7.9.5


_______________________________________________
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev

Reply via email to