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

Commit 44ce9a9a authored by Geert Uytterhoeven's avatar Geert Uytterhoeven Committed by Ralf Baechle
Browse files

MIPS: TXx9: Convert to Common Clock Framework



Replace the custom minimal clock implementation for Toshiba TXx9 by a
basic implementation using the Common Clock Framework.

The only clocks that are provided are those needed by TXx9-specific
drivers ("imbus" and "spi" (TX4938 only)), and their common parent
clock "gbus". Other clocks can be added when needed.

Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
Reviewed-by: default avatarStephen Boyd <sboyd@codeaurora.org>
Reviewed-by: default avatarAtsushi Nemoto <anemo@mba.ocn.ne.jp>
Cc: Wim Van Sebroeck <wim@iguana.be>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: linux-clk@vger.kernel.org
Cc: linux-mips@linux-mips.org
Cc: linux-watchdog@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/14239/


Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 39a3b635
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@ config MACH_TXX9
	select SYS_SUPPORTS_32BIT_KERNEL
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_SUPPORTS_BIG_ENDIAN
	select HAVE_CLK
	select COMMON_CLK

config TOSHIBA_JMR3927
	bool "Toshiba JMR-TX3927 board"
+35 −35
Original line number Diff line number Diff line
@@ -15,7 +15,8 @@
#include <linux/interrupt.h>
#include <linux/string.h>
#include <linux/module.h>
#include <linux/clk.h>
#include <linux/clk-provider.h>
#include <linux/clkdev.h>
#include <linux/err.h>
#include <linux/gpio/driver.h>
#include <linux/platform_device.h>
@@ -83,40 +84,6 @@ int txx9_ccfg_toeon __initdata;
int txx9_ccfg_toeon __initdata = 1;
#endif

/* Minimum CLK support */

struct clk *clk_get(struct device *dev, const char *id)
{
	if (!strcmp(id, "spi-baseclk"))
		return (struct clk *)((unsigned long)txx9_gbus_clock / 2 / 2);
	if (!strcmp(id, "imbus_clk"))
		return (struct clk *)((unsigned long)txx9_gbus_clock / 2);
	return ERR_PTR(-ENOENT);
}
EXPORT_SYMBOL(clk_get);

int clk_enable(struct clk *clk)
{
	return 0;
}
EXPORT_SYMBOL(clk_enable);

void clk_disable(struct clk *clk)
{
}
EXPORT_SYMBOL(clk_disable);

unsigned long clk_get_rate(struct clk *clk)
{
	return (unsigned long)clk;
}
EXPORT_SYMBOL(clk_get_rate);

void clk_put(struct clk *clk)
{
}
EXPORT_SYMBOL(clk_put);

#define BOARD_VEC(board)	extern struct txx9_board_vec board;
#include <asm/txx9/boards.h>
#undef BOARD_VEC
@@ -560,8 +527,41 @@ void __init plat_time_init(void)
	txx9_board_vec->time_init();
}

static void txx9_clk_init(void)
{
	struct clk_hw *hw;
	int error;

	hw = clk_hw_register_fixed_rate(NULL, "gbus", NULL, 0, txx9_gbus_clock);
	if (IS_ERR(hw)) {
		error = PTR_ERR(hw);
		goto fail;
	}

	hw = clk_hw_register_fixed_factor(NULL, "imbus", "gbus", 0, 1, 2);
	error = clk_hw_register_clkdev(hw, "imbus_clk", NULL);
	if (error)
		goto fail;

#ifdef CONFIG_CPU_TX49XX
	if (TX4938_REV_PCODE() == 0x4938) {
		hw = clk_hw_register_fixed_factor(NULL, "spi", "gbus", 0, 1, 4);
		error = clk_hw_register_clkdev(hw, "spi-baseclk", NULL);
		if (error)
			goto fail;
	}
#endif

	return;

fail:
	pr_err("Failed to register clocks: %d\n", error);
}

static int __init _txx9_arch_init(void)
{
	txx9_clk_init();

	if (txx9_board_vec->arch_init)
		txx9_board_vec->arch_init();
	return 0;