2007-07-10 20:55:46 +04:00
/*
* Setup code for PC - style Real - Time Clock .
*
* Author : Wade Farnsworth < wfarnsworth @ mvista . com >
*
* 2007 ( c ) MontaVista Software , Inc . This file is licensed under
* the terms of the GNU General Public License version 2. This program
* is licensed " as is " without any warranty of any kind , whether express
* or implied .
*/
# include <linux/platform_device.h>
# include <linux/err.h>
# include <linux/init.h>
2011-05-27 21:23:32 +04:00
# include <linux/module.h>
2007-07-10 20:55:46 +04:00
# include <linux/mc146818rtc.h>
# include <asm/prom.h>
static int __init add_rtc ( void )
{
struct device_node * np ;
struct platform_device * pd ;
2007-08-17 08:44:00 +04:00
struct resource res [ 2 ] ;
2008-06-12 03:04:31 +04:00
unsigned int num_res = 1 ;
2007-07-10 20:55:46 +04:00
int ret ;
2007-08-17 08:44:00 +04:00
memset ( & res , 0 , sizeof ( res ) ) ;
2007-07-10 20:55:46 +04:00
np = of_find_compatible_node ( NULL , NULL , " pnpPNP,b00 " ) ;
if ( ! np )
return - ENODEV ;
2007-08-17 08:44:00 +04:00
ret = of_address_to_resource ( np , 0 , & res [ 0 ] ) ;
2007-07-10 20:55:46 +04:00
of_node_put ( np ) ;
if ( ret )
return ret ;
/*
* RTC_PORT ( x ) is hardcoded in asm / mc146818rtc . h . Verify that the
* address provided by the device node matches .
*/
2007-08-17 08:44:00 +04:00
if ( res [ 0 ] . start ! = RTC_PORT ( 0 ) )
2007-07-10 20:55:46 +04:00
return - EINVAL ;
2008-06-12 03:04:31 +04:00
np = of_find_compatible_node ( NULL , NULL , " chrp,iic " ) ;
if ( ! np )
np = of_find_compatible_node ( NULL , NULL , " pnpPNP,000 " ) ;
if ( np ) {
of_node_put ( np ) ;
/*
* Use a fixed interrupt value of 8 since on PPC if we are
* using this its off an i8259 which we ensure has interrupt
* numbers 0. .15 .
*/
res [ 1 ] . start = 8 ;
res [ 1 ] . end = 8 ;
res [ 1 ] . flags = IORESOURCE_IRQ ;
num_res + + ;
}
2007-08-17 08:44:00 +04:00
2007-07-10 20:55:46 +04:00
pd = platform_device_register_simple ( " rtc_cmos " , - 1 ,
2008-06-12 03:04:31 +04:00
& res [ 0 ] , num_res ) ;
2007-08-17 08:44:00 +04:00
2013-07-15 05:50:32 +04:00
return PTR_ERR_OR_ZERO ( pd ) ;
2007-07-10 20:55:46 +04:00
}
fs_initcall ( add_rtc ) ;
2008-04-14 18:19:42 +04:00
MODULE_LICENSE ( " GPL " ) ;