2007-07-10 17:33:01 +01:00
/*
* This file is subject to the terms and conditions of the GNU General Public
* License . See the file " COPYING " in the main directory of this archive
* for more details .
*
* Copyright ( C ) 2007 Ralf Baechle ( ralf @ linux - mips . org )
*/
2007-05-24 12:54:04 +01:00
# include <linux/init.h>
# include <linux/platform_device.h>
2007-07-10 17:33:01 +01:00
# include <linux/serial_8250.h>
2015-04-16 12:49:09 -07:00
# include <linux/rtc/ds1685.h>
2007-07-10 17:33:01 +01:00
# include <asm/ip32/mace.h>
# include <asm/ip32/ip32_ints.h>
2015-04-16 12:49:09 -07:00
extern void ip32_prepare_poweroff ( void ) ;
2008-01-05 12:13:11 +01:00
# define MACEISA_SERIAL1_OFFS offsetof(struct sgi_mace, isa.serial1)
# define MACEISA_SERIAL2_OFFS offsetof(struct sgi_mace, isa.serial2)
# define MACE_PORT(offset,_irq) \
2007-07-10 17:33:01 +01:00
{ \
2008-01-05 12:13:11 +01:00
. mapbase = MACE_BASE + offset , \
. irq = _irq , \
2007-07-10 17:33:01 +01:00
. uartclk = 1843200 , \
. iotype = UPIO_MEM , \
2008-01-05 12:13:11 +01:00
. flags = UPF_SKIP_TEST | UPF_IOREMAP , \
2007-07-10 17:33:01 +01:00
. regshift = 8 , \
}
static struct plat_serial8250_port uart8250_data [ ] = {
2008-01-05 12:13:11 +01:00
MACE_PORT ( MACEISA_SERIAL1_OFFS , MACEISA_SERIAL1_IRQ ) ,
MACE_PORT ( MACEISA_SERIAL2_OFFS , MACEISA_SERIAL2_IRQ ) ,
2007-07-10 17:33:01 +01:00
{ } ,
} ;
static struct platform_device uart8250_device = {
. name = " serial8250 " ,
. id = PLAT8250_DEV_PLATFORM ,
. dev = {
. platform_data = uart8250_data ,
} ,
} ;
static int __init uart8250_init ( void )
{
return platform_device_register ( & uart8250_device ) ;
}
device_initcall ( uart8250_init ) ;
2007-05-24 12:54:04 +01:00
static __init int meth_devinit ( void )
{
struct platform_device * pd ;
int ret ;
pd = platform_device_alloc ( " meth " , - 1 ) ;
if ( ! pd )
return - ENOMEM ;
ret = platform_device_add ( pd ) ;
if ( ret )
platform_device_put ( pd ) ;
return ret ;
}
device_initcall ( meth_devinit ) ;
2007-07-10 17:33:01 +01:00
2008-07-05 01:12:13 +02:00
static __init int sgio2audio_devinit ( void )
{
struct platform_device * pd ;
int ret ;
pd = platform_device_alloc ( " sgio2audio " , - 1 ) ;
if ( ! pd )
return - ENOMEM ;
ret = platform_device_add ( pd ) ;
if ( ret )
platform_device_put ( pd ) ;
return ret ;
}
device_initcall ( sgio2audio_devinit ) ;
static __init int sgio2btns_devinit ( void )
{
2008-07-16 15:18:58 +02:00
return IS_ERR ( platform_device_register_simple ( " sgibtns " , - 1 , NULL , 0 ) ) ;
2008-07-05 01:12:13 +02:00
}
device_initcall ( sgio2btns_devinit ) ;
2015-04-16 12:49:09 -07:00
# define MACE_RTC_RES_START (MACE_BASE + offsetof(struct sgi_mace, isa.rtc))
# define MACE_RTC_RES_END (MACE_RTC_RES_START + 32767)
static struct resource ip32_rtc_resources [ ] = {
2008-09-23 00:53:20 +02:00
{
2015-04-16 12:49:09 -07:00
. start = MACEISA_RTC_IRQ ,
. end = MACEISA_RTC_IRQ ,
. flags = IORESOURCE_IRQ
} , {
. start = MACE_RTC_RES_START ,
. end = MACE_RTC_RES_END ,
. flags = IORESOURCE_MEM ,
2008-09-23 00:53:20 +02:00
}
} ;
2015-04-16 12:49:09 -07:00
/* RTC registers on IP32 are each padded by 256 bytes (0x100). */
static struct ds1685_rtc_platform_data
ip32_rtc_platform_data [ ] = {
{
. regstep = 0x100 ,
. bcd_mode = true ,
. no_irq = false ,
. uie_unsupported = false ,
. alloc_io_resources = true ,
. plat_prepare_poweroff = ip32_prepare_poweroff ,
} ,
} ;
struct platform_device ip32_rtc_device = {
. name = " rtc-ds1685 " ,
. id = - 1 ,
. dev = {
. platform_data = ip32_rtc_platform_data ,
} ,
. num_resources = ARRAY_SIZE ( ip32_rtc_resources ) ,
. resource = ip32_rtc_resources ,
} ;
2015-04-19 21:45:25 -04:00
static __init int sgio2_rtc_devinit ( void )
2008-09-23 00:53:20 +02:00
{
2015-04-16 12:49:09 -07:00
return platform_device_register ( & ip32_rtc_device ) ;
2008-09-23 00:53:20 +02:00
}
2015-04-19 21:45:25 -04:00
device_initcall ( sgio2_rtc_devinit ) ;