linux/arch/powerpc/sysdev/rtc_cmos_setup.c
<<
>>
Prefs
   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
  19static int  __init add_rtc(void)
  20{
  21        struct device_node *np;
  22        struct platform_device *pd;
  23        struct resource res[2];
  24        unsigned int num_res = 1;
  25        int ret;
  26
  27        memset(&res, 0, sizeof(res));
  28
  29        np = of_find_compatible_node(NULL, NULL, "pnpPNP,b00");
  30        if (!np)
  31                return -ENODEV;
  32
  33        ret = of_address_to_resource(np, 0, &res[0]);
  34        of_node_put(np);
  35        if (ret)
  36                return ret;
  37
  38        /*
  39         * RTC_PORT(x) is hardcoded in asm/mc146818rtc.h.  Verify that the
  40         * address provided by the device node matches.
  41         */
  42        if (res[0].start != RTC_PORT(0))
  43                return -EINVAL;
  44
  45        np = of_find_compatible_node(NULL, NULL, "chrp,iic");
  46        if (!np)
  47                np = of_find_compatible_node(NULL, NULL, "pnpPNP,000");
  48        if (np) {
  49                of_node_put(np);
  50                /*
  51                 * Use a fixed interrupt value of 8 since on PPC if we are
  52                 * using this its off an i8259 which we ensure has interrupt
  53                 * numbers 0..15.
  54                 */
  55                res[1].start = 8;
  56                res[1].end = 8;
  57                res[1].flags = IORESOURCE_IRQ;
  58                num_res++;
  59        }
  60
  61        pd = platform_device_register_simple("rtc_cmos", -1,
  62                                             &res[0], num_res);
  63
  64        if (IS_ERR(pd))
  65                return PTR_ERR(pd);
  66
  67        return 0;
  68}
  69fs_initcall(add_rtc);
  70
  71MODULE_LICENSE("GPL");
  72
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.