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