From c797f3c168e2c3fd8bc9532680b7c587652ac8c1 Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Mon, 24 Sep 2012 00:38:25 +0200 Subject: commands: Add clk commands This adds some basic commands to manupulate clocks on the command line. Right now we have: - clk_set_parent - clk_set_rate - clk_enable - clk_disable - clk_dump The commands work based on the clock name, otherwise they behave like the Linux Kernel C functions. clk_dump will dump the clocktree to the console. Signed-off-by: Sascha Hauer --- commands/clk.c | 144 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 commands/clk.c (limited to 'commands/clk.c') diff --git a/commands/clk.c b/commands/clk.c new file mode 100644 index 0000000000..241dc79c36 --- /dev/null +++ b/commands/clk.c @@ -0,0 +1,144 @@ +#include +#include +#include +#include +#include + +static int do_clk_enable(int argc, char *argv[]) +{ + struct clk *clk; + + if (argc != 2) + return COMMAND_ERROR_USAGE; + + clk = clk_lookup(argv[1]); + if (IS_ERR(clk)) + return PTR_ERR(clk); + + return clk_enable(clk); +} + +BAREBOX_CMD_HELP_START(clk_enable) +BAREBOX_CMD_HELP_USAGE("clk_enable \n") +BAREBOX_CMD_HELP_SHORT("enable \n") +BAREBOX_CMD_HELP_END + +BAREBOX_CMD_START(clk_enable) + .cmd = do_clk_enable, + .usage = "enable a clock", + BAREBOX_CMD_HELP(cmd_clk_enable_help) +BAREBOX_CMD_END + +static int do_clk_disable(int argc, char *argv[]) +{ + struct clk *clk; + + if (argc != 2) + return COMMAND_ERROR_USAGE; + + clk = clk_lookup(argv[1]); + if (IS_ERR(clk)) + return PTR_ERR(clk); + + clk_disable(clk); + + return 0; +} + +BAREBOX_CMD_HELP_START(clk_disable) +BAREBOX_CMD_HELP_USAGE("clk_disable \n") +BAREBOX_CMD_HELP_SHORT("disable \n") +BAREBOX_CMD_HELP_END + +BAREBOX_CMD_START(clk_disable) + .cmd = do_clk_disable, + .usage = "disable a clock", + BAREBOX_CMD_HELP(cmd_clk_disable_help) +BAREBOX_CMD_END + +static int do_clk_set_rate(int argc, char *argv[]) +{ + struct clk *clk; + unsigned long rate; + + if (argc != 3) + return COMMAND_ERROR_USAGE; + + clk = clk_lookup(argv[1]); + if (IS_ERR(clk)) + return PTR_ERR(clk); + + rate = simple_strtoul(argv[2], NULL, 0); + + return clk_set_rate(clk, rate); +} + +BAREBOX_CMD_HELP_START(clk_set_rate) +BAREBOX_CMD_HELP_USAGE("clk_set_rate \n") +BAREBOX_CMD_HELP_SHORT("Set clock to \n") +BAREBOX_CMD_HELP_END + +BAREBOX_CMD_START(clk_set_rate) + .cmd = do_clk_set_rate, + .usage = "set a clocks rate", + BAREBOX_CMD_HELP(cmd_clk_set_rate_help) +BAREBOX_CMD_END + +static int do_clk_dump(int argc, char *argv[]) +{ + int opt, verbose = 0; + + while ((opt = getopt(argc, argv, "v")) > 0) { + switch(opt) { + case 'v': + verbose = 1; + break; + default: + return -EINVAL; + + } + } + + clk_dump(verbose); + + return 0; +} + +BAREBOX_CMD_HELP_START(clk_dump) +BAREBOX_CMD_HELP_USAGE("clk_dump [-v]\n") +BAREBOX_CMD_HELP_OPT ("-v", "verbose\n") +BAREBOX_CMD_HELP_END + +BAREBOX_CMD_START(clk_dump) + .cmd = do_clk_dump, + .usage = "show information about registered clocks", + BAREBOX_CMD_HELP(cmd_clk_dump_help) +BAREBOX_CMD_END + +static int do_clk_set_parent(int argc, char *argv[]) +{ + struct clk *clk, *parent; + + if (argc != 3) + return COMMAND_ERROR_USAGE; + + clk = clk_lookup(argv[1]); + if (IS_ERR(clk)) + return PTR_ERR(clk); + parent = clk_lookup(argv[2]); + if (IS_ERR(parent)) + return PTR_ERR(parent); + + return clk_set_parent(clk, parent); +} + +BAREBOX_CMD_HELP_START(clk_set_parent) +BAREBOX_CMD_HELP_USAGE("clk_set_parent \n") +BAREBOX_CMD_HELP_SHORT("Set parent of to \n") +BAREBOX_CMD_HELP_END + +BAREBOX_CMD_START(clk_set_parent) + .cmd = do_clk_set_parent, + .usage = "set a parent of a clock", + BAREBOX_CMD_HELP(cmd_clk_set_parent_help) +BAREBOX_CMD_END -- cgit v1.2.3