1
0
Fork 0

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: Geert Uytterhoeven <geert@linux-m68k.org>
Reviewed-by: Stephen Boyd <sboyd@codeaurora.org>
Reviewed-by: Atsushi 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: Ralf Baechle <ralf@linux-mips.org>
hifive-unleashed-5.1
Geert Uytterhoeven 2016-09-11 10:59:58 +02:00 committed by Ralf Baechle
parent 39a3b63553
commit 44ce9a9ae9
2 changed files with 36 additions and 36 deletions

View File

@ -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"

View File

@ -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;