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; 24 int ret; 25 26 np = of_find_compatible_node(NULL, NULL, "pnpPNP,b00"); 27 if (!np) 28 return -ENODEV; 29 30 ret = of_address_to_resource(np, 0, &res); 31 of_node_put(np); 32 if (ret) 33 return ret; 34 35 /* 36 * RTC_PORT(x) is hardcoded in asm/mc146818rtc.h. Verify that the 37 * address provided by the device node matches. 38 */ 39 if (res.start != RTC_PORT(0)) 40 return -EINVAL; 41 42 pd = platform_device_register_simple("rtc_cmos", -1, 43 &res, 1); 44 if (IS_ERR(pd)) 45 return PTR_ERR(pd); 46 47 return 0; 48 } 49 fs_initcall(add_rtc); 50