diff options
author | Yang Ling <gnaygnil@gmail.com> | 2016-09-06 10:11:38 +0800 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2016-10-04 16:13:57 +0200 |
commit | 60219c563c9b62aac237631a7c9aa092e8396138 (patch) | |
tree | 128403687dec398acf1e4656c2030f9c180f6735 /arch/mips/loongson32 | |
parent | 9f3b8081a4763022ccfabaffc485094be0064fa4 (diff) | |
download | linux-60219c563c9b62aac237631a7c9aa092e8396138.tar.bz2 |
MIPS: Add RTC support for Loongson1C board
The patch adds RTC support for Loongson1C board, and enable the external
crystal when the RTC is first powered up.
Signed-off-by: Yang Ling <gnaygnil@gmail.com>
Cc: keguang.zhang@gmail.com
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/14214/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/loongson32')
-rw-r--r-- | arch/mips/loongson32/common/platform.c | 13 | ||||
-rw-r--r-- | arch/mips/loongson32/ls1c/Makefile | 2 | ||||
-rw-r--r-- | arch/mips/loongson32/ls1c/board.c | 9 |
3 files changed, 18 insertions, 6 deletions
diff --git a/arch/mips/loongson32/common/platform.c b/arch/mips/loongson32/common/platform.c index 4d12e365dcb0..beff0852c6a4 100644 --- a/arch/mips/loongson32/common/platform.c +++ b/arch/mips/loongson32/common/platform.c @@ -23,6 +23,10 @@ #include <dma.h> #include <nand.h> +#define LS1X_RTC_CTRL ((void __iomem *)KSEG1ADDR(LS1X_RTC_BASE + 0x40)) +#define RTC_EXTCLK_OK (BIT(5) | BIT(8)) +#define RTC_EXTCLK_EN BIT(8) + /* 8250/16550 compatible UART */ #define LS1X_UART(_id) \ { \ @@ -66,6 +70,15 @@ void __init ls1x_serial_set_uartclk(struct platform_device *pdev) p->uartclk = clk_get_rate(clk); } +void __init ls1x_rtc_set_extclk(struct platform_device *pdev) +{ + u32 val; + + val = __raw_readl(LS1X_RTC_CTRL); + if (!(val & RTC_EXTCLK_OK)) + __raw_writel(val | RTC_EXTCLK_EN, LS1X_RTC_CTRL); +} + /* CPUFreq */ static struct plat_ls1x_cpufreq ls1x_cpufreq_pdata = { .clk_name = "cpu_clk", diff --git a/arch/mips/loongson32/ls1c/Makefile b/arch/mips/loongson32/ls1c/Makefile index 891eac482b82..a92c6cd3418d 100644 --- a/arch/mips/loongson32/ls1c/Makefile +++ b/arch/mips/loongson32/ls1c/Makefile @@ -1,5 +1,5 @@ # -# Makefile for loongson1B based machines. +# Makefile for loongson1C based machines. # obj-y += board.o diff --git a/arch/mips/loongson32/ls1c/board.c b/arch/mips/loongson32/ls1c/board.c index 3d69bd63ad56..a96bed5e3ea6 100644 --- a/arch/mips/loongson32/ls1c/board.c +++ b/arch/mips/loongson32/ls1c/board.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Ling Yang <gnaygnil@gmail.com> + * Copyright (c) 2016 Yang Ling <gnaygnil@gmail.com> * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -12,17 +12,16 @@ static struct platform_device *ls1c_platform_devices[] __initdata = { &ls1x_uart_pdev, &ls1x_eth0_pdev, + &ls1x_rtc_pdev, }; static int __init ls1c_platform_init(void) { - int err; - ls1x_serial_set_uartclk(&ls1x_uart_pdev); + ls1x_rtc_set_extclk(&ls1x_rtc_pdev); - err = platform_add_devices(ls1c_platform_devices, + return platform_add_devices(ls1c_platform_devices, ARRAY_SIZE(ls1c_platform_devices)); - return err; } arch_initcall(ls1c_platform_init); |