- use the clk_summary file of CCF for showing clocks
- add option to show active or all clocks

Signed-off-by: Sanjay Singh Rawat <sanjay.ra...@linaro.org>
---
 clocks.c  |   62 +++++++++++++++++++++++++++++++++++++++++++++++++------------
 display.c |    3 +++
 display.h |    1 +
 3 files changed, 54 insertions(+), 12 deletions(-)

diff --git a/clocks.c b/clocks.c
index 95acf57..a0510b4 100644
--- a/clocks.c
+++ b/clocks.c
@@ -287,9 +287,8 @@ static int clock_print_header(void)
        int ret;
 
        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)
+               if (asprintf(&buf, "%-30s %-10s %-12s %-10s (clock toggle 
key-'c')",
+                    "Name", "Enable_Count", "Prepare_Count", "Rate") < 0)
                return -1;
        }
        else {
@@ -297,23 +296,57 @@ static int clock_print_header(void)
                     "Name", "Flags", "Rate", "Usecount", "Children") < 0)
                return -1;
        }
-
        ret = display_column_name(buf);
-
        free(buf);
 
        return ret;
 }
 
+/*
+ * Display clocks by refering the clk_summary file of CCF
+ */
+static int display_clk_summary()
+{
+        FILE *fp;
+        char line[256];
+        int afterheader;
+        char clock[30];
+        int enable_cnt,prepare_cnt,rate;
+
+        afterheader = 0;
+        fp = fopen("/sys/kernel/debug/clk/clk_summary","r");
+        if (fp == NULL) {
+                printf("error: failed to open clock tree file\n");
+                return -1;
+        }
+
+        while (NULL != fgets(line,256,fp)) {
+                if (afterheader > 1) {
+                        sscanf(line,"%s %d %d 
%d",clock,&enable_cnt,&prepare_cnt,&rate);
+                        if (active_clks) {
+                               if (enable_cnt)
+                                       display_print_line(CLOCK,afterheader,
+                                               line,0,clock_tree);
+                       }
+                       else
+                               
display_print_line(CLOCK,afterheader,line,1,clock_tree);
+                }
+                afterheader++;
+        }
+       return 0;
+}
+
 static int clock_print_info(struct tree *tree)
 {
        int ret, line = 0;
 
        display_reset_cursor(CLOCK);
-
        clock_print_header();
 
-       ret = tree_for_each(tree, clock_print_info_cb, &line);
+       if (clock_fw == CCF)
+               ret = display_clk_summary();
+       else
+               ret = tree_for_each(tree, clock_print_info_cb, &line);
 
        display_refresh_pad(CLOCK);
 
@@ -426,8 +459,10 @@ int clock_init(void)
 
        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;
+               active_clks = true;
                strcpy(clk_dir_path[MAX],clk_dir_path[CCF]);
        }
        else if(!access(clk_dir_path[OCF], F_OK)) {
@@ -437,12 +472,15 @@ int clock_init(void)
        else
                return -1;
 
-       clock_tree = tree_load(clk_dir_path[MAX], NULL, false);
-       if (!clock_tree)
-               return -1;
+       /* Not preparing tree for CCF, will use the clk_summary file */
+       if(clock_fw != CCF) {
+               clock_tree = tree_load(clk_dir_path[MAX], NULL, false);
+               if (!clock_tree)
+                       return -1;
 
-       if (fill_clock_tree())
-               return -1;
+               if (fill_clock_tree())
+                       return -1;
+       }
 
        return display_register(CLOCK, &clock_ops);
 }
diff --git a/display.c b/display.c
index e9f4bf6..98544e6 100644
--- a/display.c
+++ b/display.c
@@ -416,6 +416,9 @@ static int display_keystroke(int fd, void *data)
        case 'r':
        case 'R':
                return display_refresh(current_win, true);
+       case 'c':
+               active_clks = active_clks ? false : true;
+               return display_refresh(current_win, true);
        default:
                return 0;
        }
diff --git a/display.h b/display.h
index 6362a48..24c9d59 100644
--- a/display.h
+++ b/display.h
@@ -33,4 +33,5 @@ extern int display_init(int wdefault);
 extern int display_register(int win, struct display_ops *ops);
 extern int display_column_name(const char *line);
 
+bool active_clks;
 #define NAME_MAX 255
-- 
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