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>
This commit is contained in:
Родитель
39a3b63553
Коммит
44ce9a9ae9
|
@ -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"
|
||||
|
|
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче