2007-07-11 02:55:46 +10: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>
# include <linux/mc146818rtc.h>
# include <asm/prom.h>
static int __init add_rtc ( void )
{
struct device_node * np ;
struct platform_device * pd ;
2007-08-16 23:44:00 -05:00
struct resource res [ 2 ] ;
2008-06-12 03:04:31 +04:00
unsigned int num_res = 1 ;
2007-07-11 02:55:46 +10:00
int ret ;
2007-08-16 23:44:00 -05:00
memset ( & res , 0 , sizeof ( res ) ) ;
2007-07-11 02:55:46 +10:00
np = of_find_compatible_node ( NULL , NULL , " pnpPNP,b00 " ) ;
if ( ! np )
return - ENODEV ;
2007-08-16 23:44:00 -05:00
ret = of_address_to_resource ( np , 0 , & res [ 0 ] ) ;
2007-07-11 02:55:46 +10: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-16 23:44:00 -05:00
if ( res [ 0 ] . start ! = RTC_PORT ( 0 ) )
2007-07-11 02:55:46 +10: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-16 23:44:00 -05:00
2007-07-11 02:55:46 +10:00
pd = platform_device_register_simple ( " rtc_cmos " , - 1 ,
2008-06-12 03:04:31 +04:00
& res [ 0 ] , num_res ) ;
2007-08-16 23:44:00 -05:00
2007-07-11 02:55:46 +10:00
if ( IS_ERR ( pd ) )
return PTR_ERR ( pd ) ;
return 0 ;
}
fs_initcall ( add_rtc ) ;
2008-04-15 00:19:42 +10:00
MODULE_LICENSE ( " GPL " ) ;