sdk-hwV1.3/lichee/brandy-2.0/u-boot-2018/cmd/sunxi_clk.c

62 lines
1.6 KiB
C

/*
* Copyright (C) 2016 Allwinnertech
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* Adjustable factor-based clock implementation
*/
#include <common.h>
#include <command.h>
#include <malloc.h>
#include <fdt_support.h>
#include <linux/compat.h>
#include <clk/clk.h>
static int do_sunxi_clk_test(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
{
int i = 0;
struct clk *clk;
int ret;
struct clk *parent_clk;
unsigned long rate;
char *test_clk[1024] = {"hosc", "pll_periph0_2x", "pll_periph1_2x", "pll_periph1_800m", "pll_periph1_600m", "pll_periph0_300m", "sdmmc0_mod", "sdmmc2_mod"};
for (i = 0; i < 9; i++) {
/* 获得时钟 */
clk = clk_get(NULL, test_clk[i]);
if (!clk) {
printf("error to get clk: %s\n", test_clk[i]);
} else {
printf("success get clk: %s\n", test_clk[i]);
}
ret = clk_prepare_enable(clk);
if (ret)
printf("enable clk: %s failed!\n", clk->name);
else
printf("enable clk: %s \n", clk->name);
/* 获得父时钟 */
parent_clk = clk_get_parent(clk);
if (!parent_clk || IS_ERR(parent_clk)) {
printf("error to get clk: %s parent_name: %s\n", test_clk[i], parent_clk->name);
} else {
printf("success to get clk: %s parent_name: %s\n", test_clk[i], parent_clk->name);
}
/* 获得当前频率 */
rate = clk_get_rate(clk);
printf("success to get clk: %s parent_name: %s\n rate: %ld\n", test_clk[i], parent_clk->name, rate);
}
return 0;
}
U_BOOT_CMD(
sunxi_clk, 3, 1, do_sunxi_clk_test,
"do clk test",
"sunxi_clk test_cmd"
);