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_address.h> 15 #include <linux/of_platform.h> 16 #include <linux/slab.h> 17 18 static __initdata struct { 19 const char *compatible; 20 char *plat_name; 21 } of_rtc_table[] = { 22 { "ds1743-nvram", "rtc-ds1742" }, 23 }; 24 25 void __init of_instantiate_rtc(void) 26 { 27 struct device_node *node; 28 int err; 29 int i; 30 31 for (i = 0; i < ARRAY_SIZE(of_rtc_table); i++) { 32 char *plat_name = of_rtc_table[i].plat_name; 33 34 for_each_compatible_node(node, NULL, 35 of_rtc_table[i].compatible) { 36 struct resource *res; 37 38 res = kmalloc(sizeof(*res), GFP_KERNEL); 39 if (!res) { 40 printk(KERN_ERR "OF RTC: Out of memory " 41 "allocating resource structure for %s\n", 42 node->full_name); 43 continue; 44 } 45 46 err = of_address_to_resource(node, 0, res); 47 if (err) { 48 printk(KERN_ERR "OF RTC: Error " 49 "translating resources for %s\n", 50 node->full_name); 51 continue; 52 } 53 54 printk(KERN_INFO "OF_RTC: %s is a %s @ 0x%llx-0x%llx\n", 55 node->full_name, plat_name, 56 (unsigned long long)res->start, 57 (unsigned long long)res->end); 58 platform_device_register_simple(plat_name, -1, res, 1); 59 } 60 } 61 } 62