Version:  2.0.40 2.2.26 2.4.37 3.10 3.11 3.12 3.13 3.14 3.15 3.16 3.17 3.18 3.19 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7

Linux/drivers/rtc/rtc-generic.c

  1 /* rtc-generic: RTC driver using the generic RTC abstraction
  2  *
  3  * Copyright (C) 2008 Kyle McMartin <kyle@mcmartin.ca>
  4  */
  5 
  6 #include <linux/kernel.h>
  7 #include <linux/module.h>
  8 #include <linux/time.h>
  9 #include <linux/platform_device.h>
 10 #include <linux/rtc.h>
 11 
 12 #if defined(CONFIG_M68K) || defined(CONFIG_PARISC) || \
 13     defined(CONFIG_PPC) || defined(CONFIG_SUPERH32)
 14 #include <asm/rtc.h>
 15 
 16 static int generic_get_time(struct device *dev, struct rtc_time *tm)
 17 {
 18         unsigned int ret = get_rtc_time(tm);
 19 
 20         if (ret & RTC_BATT_BAD)
 21                 return -EOPNOTSUPP;
 22 
 23         return rtc_valid_tm(tm);
 24 }
 25 
 26 static int generic_set_time(struct device *dev, struct rtc_time *tm)
 27 {
 28         if (set_rtc_time(tm) < 0)
 29                 return -EOPNOTSUPP;
 30 
 31         return 0;
 32 }
 33 
 34 static const struct rtc_class_ops generic_rtc_ops = {
 35         .read_time = generic_get_time,
 36         .set_time = generic_set_time,
 37 };
 38 #else
 39 #define generic_rtc_ops *(struct rtc_class_ops*)NULL
 40 #endif
 41 
 42 static int __init generic_rtc_probe(struct platform_device *dev)
 43 {
 44         struct rtc_device *rtc;
 45         const struct rtc_class_ops *ops;
 46 
 47         ops = dev_get_platdata(&dev->dev);
 48         if (!ops)
 49                 ops = &generic_rtc_ops;
 50 
 51         rtc = devm_rtc_device_register(&dev->dev, "rtc-generic",
 52                                         ops, THIS_MODULE);
 53         if (IS_ERR(rtc))
 54                 return PTR_ERR(rtc);
 55 
 56         platform_set_drvdata(dev, rtc);
 57 
 58         return 0;
 59 }
 60 
 61 static struct platform_driver generic_rtc_driver = {
 62         .driver = {
 63                 .name = "rtc-generic",
 64         },
 65 };
 66 
 67 module_platform_driver_probe(generic_rtc_driver, generic_rtc_probe);
 68 
 69 MODULE_AUTHOR("Kyle McMartin <kyle@mcmartin.ca>");
 70 MODULE_LICENSE("GPL");
 71 MODULE_DESCRIPTION("Generic RTC driver");
 72 MODULE_ALIAS("platform:rtc-generic");
 73 

This page was automatically generated by LXR 0.3.1 (source).  •  Linux is a registered trademark of Linus Torvalds  •  Contact us