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 .
*
2008-12-01 08:16:08 +00:00
* Copyright ( C ) 2006 , 07 MIPS Technologies , Inc .
2007-07-10 17:33:01 +01:00
* written by Ralf Baechle ( ralf @ linux - mips . org )
2008-12-01 08:16:08 +00:00
* written by Ralf Baechle < ralf @ linux - mips . org >
2007-07-10 17:33:01 +01:00
*
2008-11-25 16:33:20 +08:00
* Copyright ( C ) 2008 Wind River Systems , Inc .
* updated by Tiejun Chen < tiejun . chen @ windriver . com >
*
* 1. Probe driver for the Malta ' s UART ports :
2007-07-10 17:33:01 +01:00
*
* o 2 ports in the SMC SuperIO
* o 1 port in the CBUS UART , a discrete 16550 which normally is only used
* for bringups .
*
* We don ' t use 8250 _platform . c on Malta as it would result in the CBUS
* UART becoming ttyS0 .
2008-11-25 16:33:20 +08:00
*
* 2. Register RTC - CMOS platform device on Malta .
2007-07-10 17:33:01 +01:00
*/
# include <linux/init.h>
# include <linux/serial_8250.h>
2010-10-07 14:08:54 +01:00
# include <linux/irq.h>
2008-11-25 16:33:20 +08:00
# include <linux/platform_device.h>
2012-11-13 10:41:50 +01:00
# include <asm/mips-boards/maltaint.h>
2007-07-10 17:33:01 +01:00
# define SMC_PORT(base, int) \
{ \
. iobase = base , \
. irq = int , \
. uartclk = 1843200 , \
. iotype = UPIO_PORT , \
. flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST , \
. regshift = 0 , \
}
# define CBUS_UART_FLAGS (UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_IOREMAP)
static struct plat_serial8250_port uart8250_data [ ] = {
SMC_PORT ( 0x3F8 , 4 ) ,
SMC_PORT ( 0x2F8 , 3 ) ,
2013-10-14 09:49:25 +01:00
# ifndef CONFIG_MIPS_CMP
2007-07-10 17:33:01 +01:00
{
. mapbase = 0x1f000900 , /* The CBUS UART */
2012-11-13 10:41:50 +01:00
. irq = MIPS_CPU_IRQ_BASE + MIPSCPU_INT_MB2 ,
2007-07-10 17:33:01 +01:00
. uartclk = 3686400 , /* Twice the usual clk! */
. iotype = UPIO_MEM32 ,
. flags = CBUS_UART_FLAGS ,
. regshift = 3 ,
} ,
2013-10-14 09:49:25 +01:00
# endif
2007-07-10 17:33:01 +01:00
{ } ,
} ;
2008-11-25 16:33:20 +08:00
static struct platform_device malta_uart8250_device = {
2007-07-10 17:33:01 +01:00
. name = " serial8250 " ,
2008-12-01 08:16:08 +00:00
. id = PLAT8250_DEV_PLATFORM ,
2007-07-10 17:33:01 +01:00
. dev = {
. platform_data = uart8250_data ,
} ,
} ;
2008-11-25 16:33:20 +08:00
static struct platform_device * malta_devices [ ] __initdata = {
& malta_uart8250_device ,
} ;
static int __init malta_add_devices ( void )
2007-07-10 17:33:01 +01:00
{
2016-09-15 00:31:01 +09:00
return platform_add_devices ( malta_devices , ARRAY_SIZE ( malta_devices ) ) ;
2008-11-25 16:33:20 +08:00
}
2007-07-10 17:33:01 +01:00
2008-11-25 16:33:20 +08:00
device_initcall ( malta_add_devices ) ;