Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 23107802 authored by Gabor Juhos's avatar Gabor Juhos Committed by Ralf Baechle
Browse files

MIPS: ath79: Use a helper function to get system clock rates



The ath79 platform uses similar code to get the
rate of various clocks during init. Separate the
similar code into a new helper function and use
that to avoid code duplication.

Signed-off-by: default avatarGabor Juhos <juhosg@openwrt.org>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/5778/


Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 837f036c
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -400,6 +400,22 @@ void __init ath79_clocks_init(void)
		(ath79_ref_clk.rate / 1000) % 1000);
}

unsigned long __init
ath79_get_sys_clk_rate(const char *id)
{
	struct clk *clk;
	unsigned long rate;

	clk = clk_get(NULL, id);
	if (IS_ERR(clk))
		panic("unable to get %s clock, err=%d", id, (int) PTR_ERR(clk));

	rate = clk_get_rate(clk);
	clk_put(clk);

	return rate;
}

/*
 * Linux clock API
 */
+2 −0
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@
#define ATH79_MEM_SIZE_MAX	(128 * 1024 * 1024)

void ath79_clocks_init(void);
unsigned long ath79_get_sys_clk_rate(const char *id);

void ath79_ddr_wb_flush(unsigned int reg);

void ath79_gpio_function_enable(u32 mask);
+4 −6
Original line number Diff line number Diff line
@@ -81,21 +81,19 @@ static struct platform_device ar933x_uart_device = {

void __init ath79_register_uart(void)
{
	struct clk *clk;
	unsigned long uart_clk_rate;

	clk = clk_get(NULL, "uart");
	if (IS_ERR(clk))
		panic("unable to get UART clock, err=%ld", PTR_ERR(clk));
	uart_clk_rate = ath79_get_sys_clk_rate("uart");

	if (soc_is_ar71xx() ||
	    soc_is_ar724x() ||
	    soc_is_ar913x() ||
	    soc_is_ar934x() ||
	    soc_is_qca955x()) {
		ath79_uart_data[0].uartclk = clk_get_rate(clk);
		ath79_uart_data[0].uartclk = uart_clk_rate;
		platform_device_register(&ath79_uart_device);
	} else if (soc_is_ar933x()) {
		ar933x_uart_data.uartclk = clk_get_rate(clk);
		ar933x_uart_data.uartclk = uart_clk_rate;
		platform_device_register(&ar933x_uart_device);
	} else {
		BUG();
+3 −5
Original line number Diff line number Diff line
@@ -209,13 +209,11 @@ void __init plat_mem_setup(void)

void __init plat_time_init(void)
{
	struct clk *clk;
	unsigned long cpu_clk_rate;

	clk = clk_get(NULL, "cpu");
	if (IS_ERR(clk))
		panic("unable to get CPU clock, err=%ld", PTR_ERR(clk));
	cpu_clk_rate = ath79_get_sys_clk_rate("cpu");

	mips_hpt_frequency = clk_get_rate(clk) / 2;
	mips_hpt_frequency = cpu_clk_rate / 2;
}

static int __init ath79_setup(void)