2007-07-10 20:33:01 +04: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 11:16:08 +03:00
* Copyright ( C ) 2006 , 07 MIPS Technologies , Inc .
2007-07-10 20:33:01 +04:00
* written by Ralf Baechle ( ralf @ linux - mips . org )
2008-12-01 11:16:08 +03:00
* written by Ralf Baechle < ralf @ linux - mips . org >
2007-07-10 20:33:01 +04:00
*
2008-11-25 11:33:20 +03: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 20:33:01 +04: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 11:33:20 +03:00
*
* 2. Register RTC - CMOS platform device on Malta .
2007-07-10 20:33:01 +04:00
*/
# include <linux/init.h>
# include <linux/serial_8250.h>
2008-11-25 11:33:20 +03:00
# include <linux/mc146818rtc.h>
2008-12-01 11:16:08 +03:00
# include <linux/module.h>
# include <linux/mtd/partitions.h>
# include <linux/mtd/physmap.h>
2008-11-25 11:33:20 +03:00
# include <linux/platform_device.h>
2008-12-01 11:16:08 +03:00
# include <mtd/mtd-abi.h>
2007-07-10 20:33:01 +04: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 ) ,
{
. mapbase = 0x1f000900 , /* The CBUS UART */
. irq = MIPS_CPU_IRQ_BASE + 2 ,
. uartclk = 3686400 , /* Twice the usual clk! */
. iotype = UPIO_MEM32 ,
. flags = CBUS_UART_FLAGS ,
. regshift = 3 ,
} ,
{ } ,
} ;
2008-11-25 11:33:20 +03:00
static struct platform_device malta_uart8250_device = {
2007-07-10 20:33:01 +04:00
. name = " serial8250 " ,
2008-12-01 11:16:08 +03:00
. id = PLAT8250_DEV_PLATFORM ,
2007-07-10 20:33:01 +04:00
. dev = {
. platform_data = uart8250_data ,
} ,
} ;
2008-11-25 11:33:20 +03:00
struct resource malta_rtc_resources [ ] = {
{
. start = RTC_PORT ( 0 ) ,
. end = RTC_PORT ( 7 ) ,
. flags = IORESOURCE_IO ,
} , {
. start = RTC_IRQ ,
. end = RTC_IRQ ,
. flags = IORESOURCE_IRQ ,
}
} ;
static struct platform_device malta_rtc_device = {
. name = " rtc_cmos " ,
. id = - 1 ,
. resource = malta_rtc_resources ,
. num_resources = ARRAY_SIZE ( malta_rtc_resources ) ,
} ;
2008-12-01 11:16:08 +03:00
static struct mtd_partition malta_mtd_partitions [ ] = {
{
. name = " YAMON " ,
. offset = 0x0 ,
. size = 0x100000 ,
. mask_flags = MTD_WRITEABLE
} , {
. name = " User FS " ,
. offset = 0x100000 ,
. size = 0x2e0000
} , {
. name = " Board Config " ,
. offset = 0x3e0000 ,
. size = 0x020000 ,
. mask_flags = MTD_WRITEABLE
}
} ;
static struct physmap_flash_data malta_flash_data = {
. width = 4 ,
. nr_parts = ARRAY_SIZE ( malta_mtd_partitions ) ,
. parts = malta_mtd_partitions
} ;
static struct resource malta_flash_resource = {
. start = 0x1e000000 ,
. end = 0x1e3fffff ,
. flags = IORESOURCE_MEM
} ;
static struct platform_device malta_flash_device = {
. name = " physmap-flash " ,
. id = 0 ,
. dev = {
. platform_data = & malta_flash_data ,
} ,
. num_resources = 1 ,
. resource = & malta_flash_resource ,
} ;
2008-11-25 11:33:20 +03:00
static struct platform_device * malta_devices [ ] __initdata = {
& malta_uart8250_device ,
& malta_rtc_device ,
2008-12-01 11:16:08 +03:00
& malta_flash_device ,
2008-11-25 11:33:20 +03:00
} ;
static int __init malta_add_devices ( void )
2007-07-10 20:33:01 +04:00
{
2008-11-25 11:33:20 +03:00
int err ;
2007-07-10 20:33:01 +04:00
2008-11-25 11:33:20 +03:00
err = platform_add_devices ( malta_devices , ARRAY_SIZE ( malta_devices ) ) ;
if ( err )
return err ;
/*
* Set RTC to BCD mode to support current alarm code .
*/
CMOS_WRITE ( CMOS_READ ( RTC_CONTROL ) & ~ RTC_DM_BINARY , RTC_CONTROL ) ;
return 0 ;
}
2007-07-10 20:33:01 +04:00
2008-11-25 11:33:20 +03:00
device_initcall ( malta_add_devices ) ;