On Monday 06 May 2013 09:36 PM, Mike Turquette wrote:
Quoting Sanjay Singh Rawat (2013-05-04 13:27:58)
- 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>

clk_dump gives a JSON-formatted description of the clock tree, so it is
a bit more machine readable than clk_summary.  Also if you wanted to
actually represent a tree structure then clk_dump would be a better
starting point than using clk_summary, which does not include
parent-child relationship information.

Regards,
Mike
thanks Mike
- The way the clocks are displayed with this patch, the alignment takes care of the parent/child relationship. - The format of the content doesn't matter here IIUC, as anyway we have to parse the content and show it in the clock window.

---
  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


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

Reply via email to