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

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