c09ddc0dbeb32f4a153f67bf3095c0020e096d30
[linux-2.6.git] / arch / powerpc / sysdev / rtc_cmos_setup.c
1 /*
2  * Setup code for PC-style Real-Time Clock.
3  *
4  * Author: Wade Farnsworth <wfarnsworth@mvista.com>
5  *
6  * 2007 (c) MontaVista Software, Inc. This file is licensed under
7  * the terms of the GNU General Public License version 2. This program
8  * is licensed "as is" without any warranty of any kind, whether express
9  * or implied.
10  */
11
12 #include <linux/platform_device.h>
13 #include <linux/err.h>
14 #include <linux/init.h>
15 #include <linux/mc146818rtc.h>
16
17 #include <asm/prom.h>
18
19 static int  __init add_rtc(void)
20 {
21         struct device_node *np;
22         struct platform_device *pd;
23         struct resource res[2];
24         int ret;
25
26         memset(&res, 0, sizeof(res));
27
28         np = of_find_compatible_node(NULL, NULL, "pnpPNP,b00");
29         if (!np)
30                 return -ENODEV;
31
32         ret = of_address_to_resource(np, 0, &res[0]);
33         of_node_put(np);
34         if (ret)
35                 return ret;
36
37         /*
38          * RTC_PORT(x) is hardcoded in asm/mc146818rtc.h.  Verify that the
39          * address provided by the device node matches.
40          */
41         if (res[0].start != RTC_PORT(0))
42                 return -EINVAL;
43
44         /* Use a fixed interrupt value of 8 since on PPC if we are using this
45          * its off an i8259 which we ensure has interrupt numbers 0..15. */
46         res[1].start = 8;
47         res[1].end = 8;
48         res[1].flags = IORESOURCE_IRQ;
49
50         pd = platform_device_register_simple("rtc_cmos", -1,
51                                              &res[0], 2);
52
53         if (IS_ERR(pd))
54                 return PTR_ERR(pd);
55
56         return 0;
57 }
58 fs_initcall(add_rtc);
59
60 MODULE_LICENSE("GPL");