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 <[email protected]>
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
> [email protected]
> http://lists.linaro.org/mailman/listinfo/linaro-dev
_______________________________________________
linaro-dev mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/linaro-dev