summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Tomsich <philipp.tomsich@theobroma-systems.com>2017-03-02 10:37:39 +0100
committerPhilipp Tomsich <philipp.tomsich@theobroma-systems.com>2017-03-09 01:40:25 +0100
commit3d2d82d1be91e2f839bb655b0d4784c0df3716fb (patch)
treef282f1fc3ce4aa084fda0d1924c75af12d801f07
parentc79568857424c47889695e5ae60e3a4721f94038 (diff)
cmd: clk: add set/get rate subcommand
-rw-r--r--cmd/clk.c33
1 files changed, 31 insertions, 2 deletions
diff --git a/cmd/clk.c b/cmd/clk.c
index 6d3d46a184..554a631d98 100644
--- a/cmd/clk.c
+++ b/cmd/clk.c
@@ -13,6 +13,32 @@ int __weak soc_clk_dump(void)
return 1;
}
+static int do_clk_rate(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
+{
+ struct clk clk;
+ const char* name;
+ ulong freq;
+ int ret;
+
+ name = argv[1];
+ ret = clk_get_by_output_name(name, &clk);
+
+ if (ret < 0) {
+ printf("clk output %s not found\n", name);
+ return 1;
+ }
+
+ if (argc > 2) {
+ freq = simple_strtoul(argv[2], NULL, 10);
+ freq = clk_set_rate(&clk, freq);
+ } else {
+ freq = clk_get_rate(&clk);
+ }
+
+ printf("%s: %ld hz\n", name, freq);
+ return 0;
+}
+
static int do_clk_dump(cmd_tbl_t *cmdtp, int flag, int argc,
char *const argv[])
{
@@ -21,6 +47,7 @@ static int do_clk_dump(cmd_tbl_t *cmdtp, int flag, int argc,
static cmd_tbl_t cmd_clk_sub[] = {
U_BOOT_CMD_MKENT(dump, 1, 1, do_clk_dump, "", ""),
+ U_BOOT_CMD_MKENT(rate, 2, 1, do_clk_rate, "", ""),
};
static int do_clk(cmd_tbl_t *cmdtp, int flag, int argc,
@@ -45,7 +72,9 @@ static int do_clk(cmd_tbl_t *cmdtp, int flag, int argc,
#ifdef CONFIG_SYS_LONGHELP
static char clk_help_text[] =
- "dump - Print clock frequencies";
+ "dump - Print clock frequencies\n" \
+ "clk rate clockname [freq] - get/set the rate of a named clock\n" \
+ ;
#endif
-U_BOOT_CMD(clk, 2, 1, do_clk, "CLK sub-system", clk_help_text);
+U_BOOT_CMD(clk, 4, 1, do_clk, "CLK sub-system", clk_help_text);