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