2005-04-16 15:20:36 -07:00
/*
* linux / arch / arm / mach - sa1100 / lart . c
*/
# include <linux/init.h>
# include <linux/kernel.h>
2012-09-21 10:18:58 +01:00
# include <linux/platform_data/sa11x0-serial.h>
2005-04-16 15:20:36 -07:00
# include <linux/tty.h>
2012-03-14 02:22:03 +08:00
# include <linux/gpio.h>
# include <linux/leds.h>
# include <linux/platform_device.h>
2005-04-16 15:20:36 -07:00
2012-01-14 11:50:04 +00:00
# include <video/sa1100fb.h>
2008-08-05 16:14:15 +01:00
# include <mach/hardware.h>
2005-04-16 15:20:36 -07:00
# include <asm/setup.h>
# include <asm/mach-types.h>
2009-04-26 13:56:01 +01:00
# include <asm/page.h>
2005-04-16 15:20:36 -07:00
# include <asm/mach/arch.h>
# include <asm/mach/map.h>
2012-08-24 15:17:38 +02:00
# include <linux/platform_data/mfd-mcp-sa11x0.h>
2012-02-24 00:06:51 +01:00
# include <mach/irqs.h>
2005-04-16 15:20:36 -07:00
# include "generic.h"
2005-08-18 10:10:46 +01:00
static struct mcp_plat_data lart_mcp_data = {
. mccr0 = MCCR0_ADM ,
. sclk_rate = 11981000 ,
} ;
2012-01-14 11:50:04 +00:00
# ifdef LART_GREY_LCD
static struct sa1100fb_mach_info lart_grey_info = {
. pixclock = 150000 , . bpp = 4 ,
. xres = 320 , . yres = 240 ,
. hsync_len = 1 , . vsync_len = 1 ,
. left_margin = 4 , . upper_margin = 0 ,
. right_margin = 2 , . lower_margin = 0 ,
. cmap_greyscale = 1 ,
. sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT ,
. lccr0 = LCCR0_Mono | LCCR0_Sngl | LCCR0_Pas | LCCR0_4PixMono ,
. lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv ( 512 ) ,
} ;
# endif
# ifdef LART_COLOR_LCD
static struct sa1100fb_mach_info lart_color_info = {
. pixclock = 150000 , . bpp = 16 ,
. xres = 320 , . yres = 240 ,
. hsync_len = 2 , . vsync_len = 3 ,
. left_margin = 69 , . upper_margin = 14 ,
. right_margin = 8 , . lower_margin = 4 ,
. lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act ,
. lccr3 = LCCR3_OutEnH | LCCR3_PixFlEdg | LCCR3_ACBsDiv ( 512 ) ,
} ;
# endif
# ifdef LART_VIDEO_OUT
static struct sa1100fb_mach_info lart_video_info = {
. pixclock = 39721 , . bpp = 16 ,
. xres = 640 , . yres = 480 ,
. hsync_len = 95 , . vsync_len = 2 ,
. left_margin = 40 , . upper_margin = 32 ,
. right_margin = 24 , . lower_margin = 11 ,
. sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT ,
. lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act ,
. lccr3 = LCCR3_OutEnL | LCCR3_PixFlEdg | LCCR3_ACBsDiv ( 512 ) ,
} ;
# endif
# ifdef LART_KIT01_LCD
static struct sa1100fb_mach_info lart_kit01_info = {
. pixclock = 63291 , . bpp = 16 ,
. xres = 640 , . yres = 480 ,
. hsync_len = 64 , . vsync_len = 3 ,
. left_margin = 122 , . upper_margin = 45 ,
. right_margin = 10 , . lower_margin = 10 ,
. lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act ,
. lccr3 = LCCR3_OutEnH | LCCR3_PixFlEdg
} ;
# endif
2005-08-18 10:10:46 +01:00
static void __init lart_init ( void )
{
2012-01-14 11:50:04 +00:00
struct sa1100fb_mach_info * inf = NULL ;
# ifdef LART_GREY_LCD
inf = & lart_grey_info ;
# endif
# ifdef LART_COLOR_LCD
inf = & lart_color_info ;
# endif
# ifdef LART_VIDEO_OUT
inf = & lart_video_info ;
# endif
# ifdef LART_KIT01_LCD
inf = & lart_kit01_info ;
# endif
if ( inf )
sa11x0_register_lcd ( inf ) ;
2012-01-20 22:24:07 +00:00
sa11x0_ppc_configure_mcp ( ) ;
2009-10-06 14:55:53 +01:00
sa11x0_register_mcp ( & lart_mcp_data ) ;
2005-08-18 10:10:46 +01:00
}
2005-04-16 15:20:36 -07:00
static struct map_desc lart_io_desc [ ] __initdata = {
2005-10-28 15:19:04 +01:00
{ /* main flash memory */
. virtual = 0xe8000000 ,
. pfn = __phys_to_pfn ( 0x00000000 ) ,
. length = 0x00400000 ,
. type = MT_DEVICE
} , { /* main flash, alternative location */
. virtual = 0xec000000 ,
. pfn = __phys_to_pfn ( 0x08000000 ) ,
. length = 0x00400000 ,
. type = MT_DEVICE
}
2005-04-16 15:20:36 -07:00
} ;
2012-03-14 02:22:03 +08:00
/* LEDs */
struct gpio_led lart_gpio_leds [ ] = {
{
. name = " lart:red " ,
. default_trigger = " cpu0 " ,
. gpio = 23 ,
} ,
} ;
static struct gpio_led_platform_data lart_gpio_led_info = {
. leds = lart_gpio_leds ,
. num_leds = ARRAY_SIZE ( lart_gpio_leds ) ,
} ;
static struct platform_device lart_leds = {
. name = " leds-gpio " ,
. id = - 1 ,
. dev = {
. platform_data = & lart_gpio_led_info ,
}
} ;
2005-04-16 15:20:36 -07:00
static void __init lart_map_io ( void )
{
sa1100_map_io ( ) ;
iotable_init ( lart_io_desc , ARRAY_SIZE ( lart_io_desc ) ) ;
sa1100_register_uart ( 0 , 3 ) ;
sa1100_register_uart ( 1 , 1 ) ;
sa1100_register_uart ( 2 , 2 ) ;
GAFR | = ( GPIO_UART_TXD | GPIO_UART_RXD ) ;
GPDR | = GPIO_UART_TXD ;
GPDR & = ~ GPIO_UART_RXD ;
PPAR | = PPAR_UPR ;
2012-03-14 02:22:03 +08:00
platform_device_register ( & lart_leds ) ;
2005-04-16 15:20:36 -07:00
}
MACHINE_START ( LART , " LART " )
2011-07-05 22:38:17 -04:00
. atag_offset = 0x100 ,
2005-07-03 17:38:58 +01:00
. map_io = lart_map_io ,
2012-02-24 00:06:51 +01:00
. nr_irqs = SA1100_NR_IRQS ,
2005-07-03 17:38:58 +01:00
. init_irq = sa1100_init_irq ,
2005-08-18 10:10:46 +01:00
. init_machine = lart_init ,
2012-04-26 21:22:45 +08:00
. init_late = sa11x0_init_late ,
2012-11-08 12:40:59 -07:00
. init_time = sa1100_timer_init ,
2011-11-05 10:28:50 +00:00
. restart = sa11x0_restart ,
2005-04-16 15:20:36 -07:00
MACHINE_END