1/* 2 * linux/arch/arm/mach-sa1100/lart.c 3 */ 4 5#include <linux/init.h> 6#include <linux/kernel.h> 7#include <linux/tty.h> 8 9#include <video/sa1100fb.h> 10 11#include <mach/hardware.h> 12#include <asm/setup.h> 13#include <asm/mach-types.h> 14#include <asm/page.h> 15 16#include <asm/mach/arch.h> 17#include <asm/mach/map.h> 18#include <asm/mach/serial_sa1100.h> 19#include <mach/mcp.h> 20#include <mach/irqs.h> 21 22#include "generic.h" 23 24 25#warning "include/asm/arch-sa1100/ide.h needs fixing for lart" 26 27static struct mcp_plat_data lart_mcp_data = { 28 .mccr0 = MCCR0_ADM, 29 .sclk_rate = 11981000, 30}; 31 32#ifdef LART_GREY_LCD 33static struct sa1100fb_mach_info lart_grey_info = { 34 .pixclock = 150000, .bpp = 4, 35 .xres = 320, .yres = 240, 36 37 .hsync_len = 1, .vsync_len = 1, 38 .left_margin = 4, .upper_margin = 0, 39 .right_margin = 2, .lower_margin = 0, 40 41 .cmap_greyscale = 1, 42 .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, 43 44 .lccr0 = LCCR0_Mono | LCCR0_Sngl | LCCR0_Pas | LCCR0_4PixMono, 45 .lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(512), 46}; 47#endif 48#ifdef LART_COLOR_LCD 49static struct sa1100fb_mach_info lart_color_info = { 50 .pixclock = 150000, .bpp = 16, 51 .xres = 320, .yres = 240, 52 53 .hsync_len = 2, .vsync_len = 3, 54 .left_margin = 69, .upper_margin = 14, 55 .right_margin = 8, .lower_margin = 4, 56 57 .lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act, 58 .lccr3 = LCCR3_OutEnH | LCCR3_PixFlEdg | LCCR3_ACBsDiv(512), 59}; 60#endif 61#ifdef LART_VIDEO_OUT 62static struct sa1100fb_mach_info lart_video_info = { 63 .pixclock = 39721, .bpp = 16, 64 .xres = 640, .yres = 480, 65 66 .hsync_len = 95, .vsync_len = 2, 67 .left_margin = 40, .upper_margin = 32, 68 .right_margin = 24, .lower_margin = 11, 69 70 .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, 71 72 .lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act, 73 .lccr3 = LCCR3_OutEnL | LCCR3_PixFlEdg | LCCR3_ACBsDiv(512), 74}; 75#endif 76 77#ifdef LART_KIT01_LCD 78static struct sa1100fb_mach_info lart_kit01_info = { 79 .pixclock = 63291, .bpp = 16, 80 .xres = 640, .yres = 480, 81 82 .hsync_len = 64, .vsync_len = 3, 83 .left_margin = 122, .upper_margin = 45, 84 .right_margin = 10, .lower_margin = 10, 85 86 .lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act, 87 .lccr3 = LCCR3_OutEnH | LCCR3_PixFlEdg 88}; 89#endif 90 91static void __init lart_init(void) 92{ 93 struct sa1100fb_mach_info *inf = NULL; 94 95#ifdef LART_GREY_LCD 96 inf = &lart_grey_info; 97#endif 98#ifdef LART_COLOR_LCD 99 inf = &lart_color_info; 100#endif 101#ifdef LART_VIDEO_OUT 102 inf = &lart_video_info; 103#endif 104#ifdef LART_KIT01_LCD 105 inf = &lart_kit01_info; 106#endif 107 108 if (inf) 109 sa11x0_register_lcd(inf); 110 111 sa11x0_ppc_configure_mcp(); 112 sa11x0_register_mcp(&lart_mcp_data); 113} 114 115static struct map_desc lart_io_desc[] __initdata = { 116 { /* main flash memory */ 117 .virtual = 0xe8000000, 118 .pfn = __phys_to_pfn(0x00000000), 119 .length = 0x00400000, 120 .type = MT_DEVICE 121 }, { /* main flash, alternative location */ 122 .virtual = 0xec000000, 123 .pfn = __phys_to_pfn(0x08000000), 124 .length = 0x00400000, 125 .type = MT_DEVICE 126 } 127}; 128 129static void __init lart_map_io(void) 130{ 131 sa1100_map_io(); 132 iotable_init(lart_io_desc, ARRAY_SIZE(lart_io_desc)); 133 134 sa1100_register_uart(0, 3); 135 sa1100_register_uart(1, 1); 136 sa1100_register_uart(2, 2); 137 138 GAFR |= (GPIO_UART_TXD | GPIO_UART_RXD); 139 GPDR |= GPIO_UART_TXD; 140 GPDR &= ~GPIO_UART_RXD; 141 PPAR |= PPAR_UPR; 142} 143 144MACHINE_START(LART, "LART") 145 .atag_offset = 0x100, 146 .map_io = lart_map_io, 147 .nr_irqs = SA1100_NR_IRQS, 148 .init_irq = sa1100_init_irq, 149 .init_machine = lart_init, 150 .timer = &sa1100_timer, 151 .restart = sa11x0_restart, 152MACHINE_END 153