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
MODULE_AUTHOR ( " Ralf Baechle <ralf@linux-mips.org> " ) ;
MODULE_LICENSE ( " GPL " ) ;
MODULE_DESCRIPTION ( " 8250 UART probe driver for SGI IP32 aka O2 " ) ;