PageRenderTime 20ms CodeModel.GetById 10ms app.highlight 7ms RepoModel.GetById 1ms app.codeStats 0ms

/arch/powerpc/sysdev/of_rtc.c

http://github.com/mirrors/linux
C | 57 lines | 44 code | 7 blank | 6 comment | 3 complexity | 825db5bbc7edd7bcc997f5e7d4c04312 MD5 | raw file
 1// SPDX-License-Identifier: GPL-2.0-or-later
 2/*
 3 * Instantiate mmio-mapped RTC chips based on device tree information
 4 *
 5 * Copyright 2007 David Gibson <dwg@au1.ibm.com>, IBM Corporation.
 6 */
 7#include <linux/kernel.h>
 8#include <linux/of.h>
 9#include <linux/init.h>
10#include <linux/of_address.h>
11#include <linux/of_platform.h>
12#include <linux/slab.h>
13
14static __initdata struct {
15	const char *compatible;
16	char *plat_name;
17} of_rtc_table[] = {
18	{ "ds1743-nvram", "rtc-ds1742" },
19};
20
21void __init of_instantiate_rtc(void)
22{
23	struct device_node *node;
24	int err;
25	int i;
26
27	for (i = 0; i < ARRAY_SIZE(of_rtc_table); i++) {
28		char *plat_name = of_rtc_table[i].plat_name;
29
30		for_each_compatible_node(node, NULL,
31					 of_rtc_table[i].compatible) {
32			struct resource *res;
33
34			res = kmalloc(sizeof(*res), GFP_KERNEL);
35			if (!res) {
36				printk(KERN_ERR "OF RTC: Out of memory "
37				       "allocating resource structure for %pOF\n",
38				       node);
39				continue;
40			}
41
42			err = of_address_to_resource(node, 0, res);
43			if (err) {
44				printk(KERN_ERR "OF RTC: Error "
45				       "translating resources for %pOF\n",
46				       node);
47				continue;
48			}
49
50			printk(KERN_INFO "OF_RTC: %pOF is a %s @ 0x%llx-0x%llx\n",
51			       node, plat_name,
52			       (unsigned long long)res->start,
53			       (unsigned long long)res->end);
54			platform_device_register_simple(plat_name, -1, res, 1);
55		}
56	}
57}