mirror of
https://github.com/u-boot/u-boot.git
synced 2024-11-26 13:44:29 +08:00
clk: add support for setting clk rate from cmdline
Add new clk subcommand "clk setfreq", for setting up a clock rate directly from u-boot cmdline. This is handy for any debugging purposes towards clocks. Acked-by: Lukasz Majewski <lukma@denx.de> Signed-off-by: Tero Kristo <t-kristo@ti.com> Signed-off-by: Tero Kristo <kristo@kernel.org>
This commit is contained in:
parent
920ea5a7f8
commit
7ab418fbe6
53
cmd/clk.c
53
cmd/clk.c
@ -98,8 +98,56 @@ static int do_clk_dump(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||
return ret;
|
||||
}
|
||||
|
||||
#if CONFIG_IS_ENABLED(DM) && CONFIG_IS_ENABLED(CLK)
|
||||
struct udevice *clk_lookup(const char *name)
|
||||
{
|
||||
int i = 0;
|
||||
struct udevice *dev;
|
||||
|
||||
do {
|
||||
uclass_get_device(UCLASS_CLK, i++, &dev);
|
||||
if (!strcmp(name, dev->name))
|
||||
return dev;
|
||||
} while (dev);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int do_clk_setfreq(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||
char *const argv[])
|
||||
{
|
||||
struct clk *clk = NULL;
|
||||
s32 freq;
|
||||
struct udevice *dev;
|
||||
|
||||
freq = simple_strtoul(argv[2], NULL, 10);
|
||||
|
||||
dev = clk_lookup(argv[1]);
|
||||
|
||||
if (dev)
|
||||
clk = dev_get_clk_ptr(dev);
|
||||
|
||||
if (!clk) {
|
||||
printf("clock '%s' not found.\n", argv[1]);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
freq = clk_set_rate(clk, freq);
|
||||
if (freq < 0) {
|
||||
printf("set_rate failed: %d\n", freq);
|
||||
return CMD_RET_FAILURE;
|
||||
}
|
||||
|
||||
printf("set_rate returns %u\n", freq);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static struct cmd_tbl cmd_clk_sub[] = {
|
||||
U_BOOT_CMD_MKENT(dump, 1, 1, do_clk_dump, "", ""),
|
||||
#if CONFIG_IS_ENABLED(DM) && CONFIG_IS_ENABLED(CLK)
|
||||
U_BOOT_CMD_MKENT(setfreq, 3, 1, do_clk_setfreq, "", ""),
|
||||
#endif
|
||||
};
|
||||
|
||||
static int do_clk(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||
@ -124,7 +172,8 @@ static int do_clk(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||
|
||||
#ifdef CONFIG_SYS_LONGHELP
|
||||
static char clk_help_text[] =
|
||||
"dump - Print clock frequencies";
|
||||
"dump - Print clock frequencies\n"
|
||||
"setfreq [clk] [freq] - Set clock frequency";
|
||||
#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);
|
||||
|
Loading…
Reference in New Issue
Block a user