Version:  2.0.40 2.2.26 2.4.37 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15 3.16 3.17 3.18

Linux/drivers/rtc/rtc-ps3.c

  1 /*
  2  * PS3 RTC Driver
  3  *
  4  * Copyright 2009 Sony Corporation
  5  *
  6  * This program is free software; you can redistribute it and/or modify
  7  * it under the terms of the GNU General Public License as published by
  8  * the Free Software Foundation; version 2 of the License.
  9  *
 10  * This program is distributed in the hope that it will be useful,
 11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13  * GNU General Public License for more details.
 14  *
 15  * You should have received a copy of the GNU General Public License
 16  * along with this program.
 17  * If not, see <http://www.gnu.org/licenses/>.
 18  */
 19 
 20 #include <linux/kernel.h>
 21 #include <linux/module.h>
 22 #include <linux/platform_device.h>
 23 #include <linux/rtc.h>
 24 
 25 #include <asm/lv1call.h>
 26 #include <asm/ps3.h>
 27 
 28 
 29 static u64 read_rtc(void)
 30 {
 31         int result;
 32         u64 rtc_val;
 33         u64 tb_val;
 34 
 35         result = lv1_get_rtc(&rtc_val, &tb_val);
 36         BUG_ON(result);
 37 
 38         return rtc_val;
 39 }
 40 
 41 static int ps3_get_time(struct device *dev, struct rtc_time *tm)
 42 {
 43         rtc_time_to_tm(read_rtc() + ps3_os_area_get_rtc_diff(), tm);
 44         return rtc_valid_tm(tm);
 45 }
 46 
 47 static int ps3_set_time(struct device *dev, struct rtc_time *tm)
 48 {
 49         unsigned long now;
 50 
 51         rtc_tm_to_time(tm, &now);
 52         ps3_os_area_set_rtc_diff(now - read_rtc());
 53         return 0;
 54 }
 55 
 56 static const struct rtc_class_ops ps3_rtc_ops = {
 57         .read_time = ps3_get_time,
 58         .set_time = ps3_set_time,
 59 };
 60 
 61 static int __init ps3_rtc_probe(struct platform_device *dev)
 62 {
 63         struct rtc_device *rtc;
 64 
 65         rtc = devm_rtc_device_register(&dev->dev, "rtc-ps3", &ps3_rtc_ops,
 66                                   THIS_MODULE);
 67         if (IS_ERR(rtc))
 68                 return PTR_ERR(rtc);
 69 
 70         platform_set_drvdata(dev, rtc);
 71         return 0;
 72 }
 73 
 74 static struct platform_driver ps3_rtc_driver = {
 75         .driver = {
 76                 .name = "rtc-ps3",
 77                 .owner = THIS_MODULE,
 78         },
 79 };
 80 
 81 module_platform_driver_probe(ps3_rtc_driver, ps3_rtc_probe);
 82 
 83 MODULE_AUTHOR("Sony Corporation");
 84 MODULE_LICENSE("GPL");
 85 MODULE_DESCRIPTION("ps3 RTC driver");
 86 MODULE_ALIAS("platform:rtc-ps3");
 87 

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