diff options
| author | Tiejun Chen <tiejun.chen@windriver.com> | 2008-11-25 03:33:20 -0500 |
|---|---|---|
| committer | Ralf Baechle <ralf@linux-mips.org> | 2008-12-04 12:47:27 -0500 |
| commit | 192cc7f0900a088e464635a59a63d974ee7a3e97 (patch) | |
| tree | 18b8c7f2104f18314e82f6cc186a7f68c7375bba /arch | |
| parent | e807f9574e37a3f202e677feaaad1b7c5d2c0db8 (diff) | |
MIPS: Malta: Add back RTC support
With the conversion of MIPS to RTC_LIB the old RTC driver CONFIG_RTC became
unselectable. Fix by setting up a platform device. Also enable
RTC_CLASS so system time gets set from RTC on kernel initialization.
[Ralf: Original patch by Tiejun; polished nice and shiny by me]
Signed-off-by: Tiejun Chen <tiejun.chen@windriver.com>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/mips/configs/malta_defconfig | 39 | ||||
| -rw-r--r-- | arch/mips/mti-malta/malta-platform.c | 56 |
2 files changed, 84 insertions, 11 deletions
diff --git a/arch/mips/configs/malta_defconfig b/arch/mips/configs/malta_defconfig index 74daa0cf87e6..a69956573d17 100644 --- a/arch/mips/configs/malta_defconfig +++ b/arch/mips/configs/malta_defconfig | |||
| @@ -1126,7 +1126,6 @@ CONFIG_LEGACY_PTY_COUNT=256 | |||
| 1126 | # CONFIG_IPMI_HANDLER is not set | 1126 | # CONFIG_IPMI_HANDLER is not set |
| 1127 | # CONFIG_WATCHDOG is not set | 1127 | # CONFIG_WATCHDOG is not set |
| 1128 | CONFIG_HW_RANDOM=m | 1128 | CONFIG_HW_RANDOM=m |
| 1129 | CONFIG_RTC=y | ||
| 1130 | # CONFIG_R3964 is not set | 1129 | # CONFIG_R3964 is not set |
| 1131 | # CONFIG_APPLICOM is not set | 1130 | # CONFIG_APPLICOM is not set |
| 1132 | # CONFIG_DRM is not set | 1131 | # CONFIG_DRM is not set |
| @@ -1199,7 +1198,43 @@ CONFIG_USB_ARCH_HAS_EHCI=y | |||
| 1199 | # CONFIG_MMC is not set | 1198 | # CONFIG_MMC is not set |
| 1200 | # CONFIG_NEW_LEDS is not set | 1199 | # CONFIG_NEW_LEDS is not set |
| 1201 | # CONFIG_INFINIBAND is not set | 1200 | # CONFIG_INFINIBAND is not set |
| 1202 | # CONFIG_RTC_CLASS is not set | 1201 | CONFIG_RTC_LIB=y |
| 1202 | CONFIG_RTC_CLASS=y | ||
| 1203 | CONFIG_RTC_HCTOSYS=y | ||
| 1204 | CONFIG_RTC_HCTOSYS_DEVICE="rtc0" | ||
| 1205 | # CONFIG_RTC_DEBUG is not set | ||
| 1206 | |||
| 1207 | # | ||
| 1208 | # RTC interfaces | ||
| 1209 | # | ||
| 1210 | CONFIG_RTC_INTF_SYSFS=y | ||
| 1211 | CONFIG_RTC_INTF_PROC=y | ||
| 1212 | CONFIG_RTC_INTF_DEV=y | ||
| 1213 | # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set | ||
| 1214 | # CONFIG_RTC_DRV_TEST is not set | ||
| 1215 | |||
| 1216 | # | ||
| 1217 | # SPI RTC drivers | ||
| 1218 | # | ||
| 1219 | |||
| 1220 | # | ||
| 1221 | # Platform RTC drivers | ||
| 1222 | # | ||
| 1223 | CONFIG_RTC_DRV_CMOS=y | ||
| 1224 | # CONFIG_RTC_DRV_DS1286 is not set | ||
| 1225 | # CONFIG_RTC_DRV_DS1511 is not set | ||
| 1226 | # CONFIG_RTC_DRV_DS1553 is not set | ||
| 1227 | # CONFIG_RTC_DRV_DS1742 is not set | ||
| 1228 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
| 1229 | # CONFIG_RTC_DRV_M48T86 is not set | ||
| 1230 | # CONFIG_RTC_DRV_M48T35 is not set | ||
| 1231 | # CONFIG_RTC_DRV_M48T59 is not set | ||
| 1232 | # CONFIG_RTC_DRV_BQ4802 is not set | ||
| 1233 | # CONFIG_RTC_DRV_V3020 is not set | ||
| 1234 | |||
| 1235 | # | ||
| 1236 | # on-CPU RTC drivers | ||
| 1237 | # | ||
| 1203 | 1238 | ||
| 1204 | # | 1239 | # |
| 1205 | # DMA Engine support | 1240 | # DMA Engine support |
diff --git a/arch/mips/mti-malta/malta-platform.c b/arch/mips/mti-malta/malta-platform.c index 83b9bab3cd3f..6a476f7733b3 100644 --- a/arch/mips/mti-malta/malta-platform.c +++ b/arch/mips/mti-malta/malta-platform.c | |||
| @@ -6,7 +6,10 @@ | |||
| 6 | * Copyright (C) 2007 MIPS Technologies, Inc. | 6 | * Copyright (C) 2007 MIPS Technologies, Inc. |
| 7 | * written by Ralf Baechle (ralf@linux-mips.org) | 7 | * written by Ralf Baechle (ralf@linux-mips.org) |
| 8 | * | 8 | * |
| 9 | * Probe driver for the Malta's UART ports: | 9 | * Copyright (C) 2008 Wind River Systems, Inc. |
| 10 | * updated by Tiejun Chen <tiejun.chen@windriver.com> | ||
| 11 | * | ||
| 12 | * 1. Probe driver for the Malta's UART ports: | ||
| 10 | * | 13 | * |
| 11 | * o 2 ports in the SMC SuperIO | 14 | * o 2 ports in the SMC SuperIO |
| 12 | * o 1 port in the CBUS UART, a discrete 16550 which normally is only used | 15 | * o 1 port in the CBUS UART, a discrete 16550 which normally is only used |
| @@ -14,10 +17,14 @@ | |||
| 14 | * | 17 | * |
| 15 | * We don't use 8250_platform.c on Malta as it would result in the CBUS | 18 | * We don't use 8250_platform.c on Malta as it would result in the CBUS |
| 16 | * UART becoming ttyS0. | 19 | * UART becoming ttyS0. |
| 20 | * | ||
| 21 | * 2. Register RTC-CMOS platform device on Malta. | ||
| 17 | */ | 22 | */ |
| 18 | #include <linux/module.h> | 23 | #include <linux/module.h> |
| 19 | #include <linux/init.h> | 24 | #include <linux/init.h> |
| 20 | #include <linux/serial_8250.h> | 25 | #include <linux/serial_8250.h> |
| 26 | #include <linux/mc146818rtc.h> | ||
| 27 | #include <linux/platform_device.h> | ||
| 21 | 28 | ||
| 22 | #define SMC_PORT(base, int) \ | 29 | #define SMC_PORT(base, int) \ |
| 23 | { \ | 30 | { \ |
| @@ -45,7 +52,7 @@ static struct plat_serial8250_port uart8250_data[] = { | |||
| 45 | { }, | 52 | { }, |
| 46 | }; | 53 | }; |
| 47 | 54 | ||
| 48 | static struct platform_device uart8250_device = { | 55 | static struct platform_device malta_uart8250_device = { |
| 49 | .name = "serial8250", | 56 | .name = "serial8250", |
| 50 | .id = PLAT8250_DEV_PLATFORM2, | 57 | .id = PLAT8250_DEV_PLATFORM2, |
| 51 | .dev = { | 58 | .dev = { |
| @@ -53,13 +60,44 @@ static struct platform_device uart8250_device = { | |||
| 53 | }, | 60 | }, |
| 54 | }; | 61 | }; |
| 55 | 62 | ||
| 56 | static int __init uart8250_init(void) | 63 | struct resource malta_rtc_resources[] = { |
| 64 | { | ||
| 65 | .start = RTC_PORT(0), | ||
| 66 | .end = RTC_PORT(7), | ||
| 67 | .flags = IORESOURCE_IO, | ||
| 68 | }, { | ||
| 69 | .start = RTC_IRQ, | ||
| 70 | .end = RTC_IRQ, | ||
| 71 | .flags = IORESOURCE_IRQ, | ||
| 72 | } | ||
| 73 | }; | ||
| 74 | |||
| 75 | static struct platform_device malta_rtc_device = { | ||
| 76 | .name = "rtc_cmos", | ||
| 77 | .id = -1, | ||
| 78 | .resource = malta_rtc_resources, | ||
| 79 | .num_resources = ARRAY_SIZE(malta_rtc_resources), | ||
| 80 | }; | ||
| 81 | |||
| 82 | static struct platform_device *malta_devices[] __initdata = { | ||
| 83 | &malta_uart8250_device, | ||
| 84 | &malta_rtc_device, | ||
| 85 | }; | ||
| 86 | |||
| 87 | static int __init malta_add_devices(void) | ||
| 57 | { | 88 | { |
| 58 | return platform_device_register(&uart8250_device); | 89 | int err; |
| 59 | } | ||
| 60 | 90 | ||
| 61 | module_init(uart8250_init); | 91 | err = platform_add_devices(malta_devices, ARRAY_SIZE(malta_devices)); |
| 92 | if (err) | ||
| 93 | return err; | ||
| 94 | |||
| 95 | /* | ||
| 96 | * Set RTC to BCD mode to support current alarm code. | ||
| 97 | */ | ||
| 98 | CMOS_WRITE(CMOS_READ(RTC_CONTROL) & ~RTC_DM_BINARY, RTC_CONTROL); | ||
| 99 | |||
| 100 | return 0; | ||
| 101 | } | ||
| 62 | 102 | ||
| 63 | MODULE_AUTHOR("Ralf Baechle <ralf@linux-mips.org>"); | 103 | device_initcall(malta_add_devices); |
| 64 | MODULE_LICENSE("GPL"); | ||
| 65 | MODULE_DESCRIPTION("8250 UART probe driver for the Malta CBUS UART"); | ||
