aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/powerpc/boot/dts/ebony.dts5
-rw-r--r--arch/powerpc/boot/dts/walnut.dts5
-rw-r--r--arch/powerpc/platforms/40x/walnut.c1
-rw-r--r--arch/powerpc/platforms/44x/Kconfig1
-rw-r--r--arch/powerpc/platforms/44x/ebony.c2
-rw-r--r--arch/powerpc/platforms/Kconfig6
-rw-r--r--arch/powerpc/sysdev/Makefile1
-rw-r--r--arch/powerpc/sysdev/of_rtc.c59
8 files changed, 76 insertions, 4 deletions
diff --git a/arch/powerpc/boot/dts/ebony.dts b/arch/powerpc/boot/dts/ebony.dts
index f8790c4747df..7aad135a44b0 100644
--- a/arch/powerpc/boot/dts/ebony.dts
+++ b/arch/powerpc/boot/dts/ebony.dts
@@ -158,9 +158,10 @@
158 }; 158 };
159 }; 159 };
160 160
161 ds1743@1,0 { 161 nvram@1,0 {
162 /* NVRAM & RTC */ 162 /* NVRAM & RTC */
163 compatible = "ds1743"; 163 compatible = "ds1743-nvram";
164 #bytes = <2000>;
164 reg = <1 0 2000>; 165 reg = <1 0 2000>;
165 }; 166 };
166 167
diff --git a/arch/powerpc/boot/dts/walnut.dts b/arch/powerpc/boot/dts/walnut.dts
index 0e3825e599dc..dcc21b0438e5 100644
--- a/arch/powerpc/boot/dts/walnut.dts
+++ b/arch/powerpc/boot/dts/walnut.dts
@@ -175,9 +175,10 @@
175 }; 175 };
176 }; 176 };
177 177
178 ds1743@1,0 { 178 nvram@1,0 {
179 /* NVRAM and RTC */ 179 /* NVRAM and RTC */
180 compatible = "ds1743"; 180 compatible = "ds1743-nvram";
181 #bytes = <2000>;
181 reg = <1 0 2000>; 182 reg = <1 0 2000>;
182 }; 183 };
183 184
diff --git a/arch/powerpc/platforms/40x/walnut.c b/arch/powerpc/platforms/40x/walnut.c
index f115b6dbf5ad..5d9edd917f92 100644
--- a/arch/powerpc/platforms/40x/walnut.c
+++ b/arch/powerpc/platforms/40x/walnut.c
@@ -36,6 +36,7 @@ static __initdata struct of_device_id walnut_of_bus[] = {
36static int __init walnut_device_probe(void) 36static int __init walnut_device_probe(void)
37{ 37{
38 of_platform_bus_probe(NULL, walnut_of_bus, NULL); 38 of_platform_bus_probe(NULL, walnut_of_bus, NULL);
39 of_instantiate_rtc();
39 40
40 return 0; 41 return 0;
41} 42}
diff --git a/arch/powerpc/platforms/44x/Kconfig b/arch/powerpc/platforms/44x/Kconfig
index d24801305344..c3e4e8c3c467 100644
--- a/arch/powerpc/platforms/44x/Kconfig
+++ b/arch/powerpc/platforms/44x/Kconfig
@@ -13,6 +13,7 @@ config EBONY
13 default y 13 default y
14 select 440GP 14 select 440GP
15 select PCI 15 select PCI
16 select OF_RTC
16 help 17 help
17 This option enables support for the IBM PPC440GP evaluation board. 18 This option enables support for the IBM PPC440GP evaluation board.
18 19
diff --git a/arch/powerpc/platforms/44x/ebony.c b/arch/powerpc/platforms/44x/ebony.c
index 481a016e1535..1a8d467bff85 100644
--- a/arch/powerpc/platforms/44x/ebony.c
+++ b/arch/powerpc/platforms/44x/ebony.c
@@ -18,6 +18,7 @@
18 18
19#include <linux/init.h> 19#include <linux/init.h>
20#include <linux/of_platform.h> 20#include <linux/of_platform.h>
21#include <linux/rtc.h>
21 22
22#include <asm/machdep.h> 23#include <asm/machdep.h>
23#include <asm/prom.h> 24#include <asm/prom.h>
@@ -38,6 +39,7 @@ static __initdata struct of_device_id ebony_of_bus[] = {
38static int __init ebony_device_probe(void) 39static int __init ebony_device_probe(void)
39{ 40{
40 of_platform_bus_probe(NULL, ebony_of_bus, NULL); 41 of_platform_bus_probe(NULL, ebony_of_bus, NULL);
42 of_instantiate_rtc();
41 43
42 return 0; 44 return 0;
43} 45}
diff --git a/arch/powerpc/platforms/Kconfig b/arch/powerpc/platforms/Kconfig
index 2cec34314d2e..4286664741dd 100644
--- a/arch/powerpc/platforms/Kconfig
+++ b/arch/powerpc/platforms/Kconfig
@@ -321,6 +321,12 @@ config FSL_ULI1575
321config CPM 321config CPM
322 bool 322 bool
323 323
324config OF_RTC
325 bool
326 help
327 Uses information from the OF or flattened device tree to instatiate
328 platform devices for direct mapped RTC chips like the DS1742 or DS1743.
329
324source "arch/powerpc/sysdev/bestcomm/Kconfig" 330source "arch/powerpc/sysdev/bestcomm/Kconfig"
325 331
326endmenu 332endmenu
diff --git a/arch/powerpc/sysdev/Makefile b/arch/powerpc/sysdev/Makefile
index f17e7b885f60..702916bf28fa 100644
--- a/arch/powerpc/sysdev/Makefile
+++ b/arch/powerpc/sysdev/Makefile
@@ -28,6 +28,7 @@ obj-$(CONFIG_PPC_I8259) += i8259.o
28obj-$(CONFIG_IPIC) += ipic.o 28obj-$(CONFIG_IPIC) += ipic.o
29obj-$(CONFIG_4xx) += uic.o 29obj-$(CONFIG_4xx) += uic.o
30obj-$(CONFIG_XILINX_VIRTEX) += xilinx_intc.o 30obj-$(CONFIG_XILINX_VIRTEX) += xilinx_intc.o
31obj-$(CONFIG_OF_RTC) += of_rtc.o
31ifeq ($(CONFIG_PCI),y) 32ifeq ($(CONFIG_PCI),y)
32obj-$(CONFIG_4xx) += ppc4xx_pci.o 33obj-$(CONFIG_4xx) += ppc4xx_pci.o
33endif 34endif
diff --git a/arch/powerpc/sysdev/of_rtc.c b/arch/powerpc/sysdev/of_rtc.c
new file mode 100644
index 000000000000..3d54450640c1
--- /dev/null
+++ b/arch/powerpc/sysdev/of_rtc.c
@@ -0,0 +1,59 @@
1/*
2 * Instantiate mmio-mapped RTC chips based on device tree information
3 *
4 * Copyright 2007 David Gibson <dwg@au1.ibm.com>, IBM Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2 of the License, or (at your
9 * option) any later version.
10 */
11#include <linux/kernel.h>
12#include <linux/of.h>
13#include <linux/init.h>
14#include <linux/of_platform.h>
15
16static __initdata struct {
17 const char *compatible;
18 char *plat_name;
19} of_rtc_table[] = {
20 { "ds1743-nvram", "rtc-ds1742" },
21};
22
23void __init of_instantiate_rtc(void)
24{
25 struct device_node *node;
26 int err;
27 int i;
28
29 for (i = 0; i < ARRAY_SIZE(of_rtc_table); i++) {
30 char *plat_name = of_rtc_table[i].plat_name;
31
32 for_each_compatible_node(node, NULL,
33 of_rtc_table[i].compatible) {
34 struct resource *res;
35
36 res = kmalloc(sizeof(*res), GFP_KERNEL);
37 if (!res) {
38 printk(KERN_ERR "OF RTC: Out of memory "
39 "allocating resource structure for %s\n",
40 node->full_name);
41 continue;
42 }
43
44 err = of_address_to_resource(node, 0, res);
45 if (err) {
46 printk(KERN_ERR "OF RTC: Error "
47 "translating resources for %s\n",
48 node->full_name);
49 continue;
50 }
51
52 printk(KERN_INFO "OF_RTC: %s is a %s @ 0x%llx-0x%llx\n",
53 node->full_name, plat_name,
54 (unsigned long long)res->start,
55 (unsigned long long)res->end);
56 platform_device_register_simple(plat_name, -1, res, 1);
57 }
58 }
59}