2009-03-26 11:06:08 +03:00
/*
* Common devices definition for Gemini
*
* Copyright ( C ) 2008 - 2009 Paulius Zaleckas < paulius . zaleckas @ teltonika . lt >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*/
# include <linux/kernel.h>
# include <linux/init.h>
# include <linux/io.h>
# include <linux/platform_device.h>
# include <linux/serial_8250.h>
# include <linux/mtd/physmap.h>
# include <mach/irqs.h>
# include <mach/hardware.h>
# include <mach/global_reg.h>
static struct plat_serial8250_port serial_platform_data [ ] = {
{
. membase = ( void * ) IO_ADDRESS ( GEMINI_UART_BASE ) ,
. mapbase = GEMINI_UART_BASE ,
. irq = IRQ_UART ,
. uartclk = UART_CLK ,
. regshift = 2 ,
. iotype = UPIO_MEM ,
. type = PORT_16550A ,
. flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_FIXED_TYPE ,
} ,
{ } ,
} ;
static struct platform_device serial_device = {
. name = " serial8250 " ,
. id = PLAT8250_DEV_PLATFORM ,
. dev = {
. platform_data = serial_platform_data ,
} ,
} ;
int platform_register_uart ( void )
{
return platform_device_register ( & serial_device ) ;
}
static struct resource flash_resource = {
. start = GEMINI_FLASH_BASE ,
. flags = IORESOURCE_MEM ,
} ;
static struct physmap_flash_data pflash_platform_data = { } ;
static struct platform_device pflash_device = {
. name = " physmap-flash " ,
. id = 0 ,
. dev = {
. platform_data = & pflash_platform_data ,
} ,
. resource = & flash_resource ,
. num_resources = 1 ,
} ;
int platform_register_pflash ( unsigned int size , struct mtd_partition * parts ,
unsigned int nr_parts )
{
unsigned int reg ;
reg = __raw_readl ( IO_ADDRESS ( GEMINI_GLOBAL_BASE ) + GLOBAL_STATUS ) ;
if ( ( reg & FLASH_TYPE_MASK ) ! = FLASH_TYPE_PARALLEL )
return - ENXIO ;
if ( reg & FLASH_WIDTH_16BIT )
pflash_platform_data . width = 2 ;
else
pflash_platform_data . width = 1 ;
/* enable parallel flash pins and disable others */
reg = __raw_readl ( IO_ADDRESS ( GEMINI_GLOBAL_BASE ) + GLOBAL_MISC_CTRL ) ;
reg & = ~ PFLASH_PADS_DISABLE ;
reg | = SFLASH_PADS_DISABLE | NAND_PADS_DISABLE ;
__raw_writel ( reg , IO_ADDRESS ( GEMINI_GLOBAL_BASE ) + GLOBAL_MISC_CTRL ) ;
flash_resource . end = flash_resource . start + size - 1 ;
pflash_platform_data . parts = parts ;
pflash_platform_data . nr_parts = nr_parts ;
return platform_device_register ( & pflash_device ) ;
}
2010-12-26 13:02:29 +03:00
static struct resource gemini_rtc_resources [ ] = {
[ 0 ] = {
. start = GEMINI_RTC_BASE ,
. end = GEMINI_RTC_BASE + 0x24 ,
. flags = IORESOURCE_MEM ,
} ,
[ 1 ] = {
. start = IRQ_RTC ,
. end = IRQ_RTC ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct platform_device gemini_rtc_device = {
. name = " rtc-gemini " ,
. id = 0 ,
. num_resources = ARRAY_SIZE ( gemini_rtc_resources ) ,
. resource = gemini_rtc_resources ,
} ;
int __init platform_register_rtc ( void )
{
return platform_device_register ( & gemini_rtc_device ) ;
}