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 )
*/
# include <linux/module.h>
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>
# include <asm/ip32/mace.h>
# include <asm/ip32/ip32_ints.h>
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 ) ;
2008-09-23 00:53:20 +02:00
static struct resource sgio2_cmos_rsrc [ ] = {
{
. start = 0x70 ,
. end = 0x71 ,
. flags = IORESOURCE_IO
}
} ;
static __init int sgio2_cmos_devinit ( void )
{
return IS_ERR ( platform_device_register_simple ( " rtc_cmos " , - 1 ,
sgio2_cmos_rsrc , 1 ) ) ;
}
device_initcall ( sgio2_cmos_devinit ) ;
2007-07-10 17:33:01 +01:00
MODULE_AUTHOR ( " Ralf Baechle <ralf@linux-mips.org> " ) ;
MODULE_LICENSE ( " GPL " ) ;
MODULE_DESCRIPTION ( " 8250 UART probe driver for SGI IP32 aka O2 " ) ;