2008-08-29 10:02:36 +04:00
/* rtc-starfire.c: Starfire platform RTC driver.
2016-10-31 21:55:26 +03:00
*
* Author : David S . Miller
* License : GPL
2008-08-29 10:02:36 +04:00
*
* Copyright ( C ) 2008 David S . Miller < davem @ davemloft . net >
*/
# include <linux/kernel.h>
# include <linux/init.h>
# include <linux/rtc.h>
# include <linux/platform_device.h>
# include <asm/oplib.h>
static u32 starfire_get_time ( void )
{
static char obp_gettod [ 32 ] ;
static u32 unix_tod ;
sprintf ( obp_gettod , " h# %08x unix-gettod " ,
( unsigned int ) ( long ) & unix_tod ) ;
prom_feval ( obp_gettod ) ;
return unix_tod ;
}
static int starfire_read_time ( struct device * dev , struct rtc_time * tm )
{
2020-03-06 03:59:10 +03:00
rtc_time64_to_tm ( starfire_get_time ( ) , tm ) ;
2018-02-19 18:23:55 +03:00
return 0 ;
2008-08-29 10:02:36 +04:00
}
static const struct rtc_class_ops starfire_rtc_ops = {
. read_time = starfire_read_time ,
} ;
2008-11-21 12:24:38 +03:00
static int __init starfire_rtc_probe ( struct platform_device * pdev )
2008-08-29 10:02:36 +04:00
{
2013-04-30 03:19:50 +04:00
struct rtc_device * rtc ;
2020-03-06 03:59:09 +03:00
rtc = devm_rtc_allocate_device ( & pdev - > dev ) ;
2008-11-21 12:24:38 +03:00
if ( IS_ERR ( rtc ) )
return PTR_ERR ( rtc ) ;
2008-08-29 10:02:36 +04:00
2020-03-06 03:59:09 +03:00
rtc - > ops = & starfire_rtc_ops ;
rtc - > range_max = U32_MAX ;
2008-11-21 12:24:38 +03:00
platform_set_drvdata ( pdev , rtc ) ;
2008-08-29 10:02:36 +04:00
2020-03-06 03:59:09 +03:00
return rtc_register_device ( rtc ) ;
2008-08-29 10:02:36 +04:00
}
static struct platform_driver starfire_rtc_driver = {
. driver = {
. name = " rtc-starfire " ,
} ,
} ;
2016-10-31 21:55:26 +03:00
builtin_platform_driver_probe ( starfire_rtc_driver , starfire_rtc_probe ) ;