1/* 2 * arch/sh/boards/superh/microdev/setup.c 3 * 4 * Copyright (C) 2003 Sean McGoogan (Sean.McGoogan@superh.com) 5 * Copyright (C) 2003, 2004 SuperH, Inc. 6 * Copyright (C) 2004, 2005 Paul Mundt 7 * 8 * SuperH SH4-202 MicroDev board support. 9 * 10 * May be copied or modified under the terms of the GNU General Public 11 * License. See linux/COPYING for more information. 12 */ 13#include <linux/init.h> 14#include <linux/platform_device.h> 15#include <linux/ioport.h> 16#include <video/s1d13xxxfb.h> 17#include <mach/microdev.h> 18#include <asm/io.h> 19#include <asm/machvec.h> 20#include <asm/sizes.h> 21 22static struct resource smc91x_resources[] = { 23 [0] = { 24 .start = 0x300, 25 .end = 0x300 + SZ_4K - 1, 26 .flags = IORESOURCE_MEM, 27 }, 28 [1] = { 29 .start = MICRODEV_LINUX_IRQ_ETHERNET, 30 .end = MICRODEV_LINUX_IRQ_ETHERNET, 31 .flags = IORESOURCE_IRQ, 32 }, 33}; 34 35static struct platform_device smc91x_device = { 36 .name = "smc91x", 37 .id = -1, 38 .num_resources = ARRAY_SIZE(smc91x_resources), 39 .resource = smc91x_resources, 40}; 41 42static struct s1d13xxxfb_regval s1d13806_initregs[] = { 43 { S1DREG_MISC, 0x00 }, 44 { S1DREG_COM_DISP_MODE, 0x00 }, 45 { S1DREG_GPIO_CNF0, 0x00 }, 46 { S1DREG_GPIO_CNF1, 0x00 }, 47 { S1DREG_GPIO_CTL0, 0x00 }, 48 { S1DREG_GPIO_CTL1, 0x00 }, 49 { S1DREG_CLK_CNF, 0x02 }, 50 { S1DREG_LCD_CLK_CNF, 0x01 }, 51 { S1DREG_CRT_CLK_CNF, 0x03 }, 52 { S1DREG_MPLUG_CLK_CNF, 0x03 }, 53 { S1DREG_CPU2MEM_WST_SEL, 0x02 }, 54 { S1DREG_SDRAM_REF_RATE, 0x03 }, 55 { S1DREG_SDRAM_TC0, 0x00 }, 56 { S1DREG_SDRAM_TC1, 0x01 }, 57 { S1DREG_MEM_CNF, 0x80 }, 58 { S1DREG_PANEL_TYPE, 0x25 }, 59 { S1DREG_MOD_RATE, 0x00 }, 60 { S1DREG_LCD_DISP_HWIDTH, 0x63 }, 61 { S1DREG_LCD_NDISP_HPER, 0x1e }, 62 { S1DREG_TFT_FPLINE_START, 0x06 }, 63 { S1DREG_TFT_FPLINE_PWIDTH, 0x03 }, 64 { S1DREG_LCD_DISP_VHEIGHT0, 0x57 }, 65 { S1DREG_LCD_DISP_VHEIGHT1, 0x02 }, 66 { S1DREG_LCD_NDISP_VPER, 0x00 }, 67 { S1DREG_TFT_FPFRAME_START, 0x0a }, 68 { S1DREG_TFT_FPFRAME_PWIDTH, 0x81 }, 69 { S1DREG_LCD_DISP_MODE, 0x03 }, 70 { S1DREG_LCD_MISC, 0x00 }, 71 { S1DREG_LCD_DISP_START0, 0x00 }, 72 { S1DREG_LCD_DISP_START1, 0x00 }, 73 { S1DREG_LCD_DISP_START2, 0x00 }, 74 { S1DREG_LCD_MEM_OFF0, 0x90 }, 75 { S1DREG_LCD_MEM_OFF1, 0x01 }, 76 { S1DREG_LCD_PIX_PAN, 0x00 }, 77 { S1DREG_LCD_DISP_FIFO_HTC, 0x00 }, 78 { S1DREG_LCD_DISP_FIFO_LTC, 0x00 }, 79 { S1DREG_CRT_DISP_HWIDTH, 0x63 }, 80 { S1DREG_CRT_NDISP_HPER, 0x1f }, 81 { S1DREG_CRT_HRTC_START, 0x04 }, 82 { S1DREG_CRT_HRTC_PWIDTH, 0x8f }, 83 { S1DREG_CRT_DISP_VHEIGHT0, 0x57 }, 84 { S1DREG_CRT_DISP_VHEIGHT1, 0x02 }, 85 { S1DREG_CRT_NDISP_VPER, 0x1b }, 86 { S1DREG_CRT_VRTC_START, 0x00 }, 87 { S1DREG_CRT_VRTC_PWIDTH, 0x83 }, 88 { S1DREG_TV_OUT_CTL, 0x10 }, 89 { S1DREG_CRT_DISP_MODE, 0x05 }, 90 { S1DREG_CRT_DISP_START0, 0x00 }, 91 { S1DREG_CRT_DISP_START1, 0x00 }, 92 { S1DREG_CRT_DISP_START2, 0x00 }, 93 { S1DREG_CRT_MEM_OFF0, 0x20 }, 94 { S1DREG_CRT_MEM_OFF1, 0x03 }, 95 { S1DREG_CRT_PIX_PAN, 0x00 }, 96 { S1DREG_CRT_DISP_FIFO_HTC, 0x00 }, 97 { S1DREG_CRT_DISP_FIFO_LTC, 0x00 }, 98 { S1DREG_LCD_CUR_CTL, 0x00 }, 99 { S1DREG_LCD_CUR_START, 0x01 }, 100 { S1DREG_LCD_CUR_XPOS0, 0x00 }, 101 { S1DREG_LCD_CUR_XPOS1, 0x00 }, 102 { S1DREG_LCD_CUR_YPOS0, 0x00 }, 103 { S1DREG_LCD_CUR_YPOS1, 0x00 }, 104 { S1DREG_LCD_CUR_BCTL0, 0x00 }, 105 { S1DREG_LCD_CUR_GCTL0, 0x00 }, 106 { S1DREG_LCD_CUR_RCTL0, 0x00 }, 107 { S1DREG_LCD_CUR_BCTL1, 0x1f }, 108 { S1DREG_LCD_CUR_GCTL1, 0x3f }, 109 { S1DREG_LCD_CUR_RCTL1, 0x1f }, 110 { S1DREG_LCD_CUR_FIFO_HTC, 0x00 }, 111 { S1DREG_CRT_CUR_CTL, 0x00 }, 112 { S1DREG_CRT_CUR_START, 0x01 }, 113 { S1DREG_CRT_CUR_XPOS0, 0x00 }, 114 { S1DREG_CRT_CUR_XPOS1, 0x00 }, 115 { S1DREG_CRT_CUR_YPOS0, 0x00 }, 116 { S1DREG_CRT_CUR_YPOS1, 0x00 }, 117 { S1DREG_CRT_CUR_BCTL0, 0x00 }, 118 { S1DREG_CRT_CUR_GCTL0, 0x00 }, 119 { S1DREG_CRT_CUR_RCTL0, 0x00 }, 120 { S1DREG_CRT_CUR_BCTL1, 0x1f }, 121 { S1DREG_CRT_CUR_GCTL1, 0x3f }, 122 { S1DREG_CRT_CUR_RCTL1, 0x1f }, 123 { S1DREG_CRT_CUR_FIFO_HTC, 0x00 }, 124 { S1DREG_BBLT_CTL0, 0x00 }, 125 { S1DREG_BBLT_CTL1, 0x00 }, 126 { S1DREG_BBLT_CC_EXP, 0x00 }, 127 { S1DREG_BBLT_OP, 0x00 }, 128 { S1DREG_BBLT_SRC_START0, 0x00 }, 129 { S1DREG_BBLT_SRC_START1, 0x00 }, 130 { S1DREG_BBLT_SRC_START2, 0x00 }, 131 { S1DREG_BBLT_DST_START0, 0x00 }, 132 { S1DREG_BBLT_DST_START1, 0x00 }, 133 { S1DREG_BBLT_DST_START2, 0x00 }, 134 { S1DREG_BBLT_MEM_OFF0, 0x00 }, 135 { S1DREG_BBLT_MEM_OFF1, 0x00 }, 136 { S1DREG_BBLT_WIDTH0, 0x00 }, 137 { S1DREG_BBLT_WIDTH1, 0x00 }, 138 { S1DREG_BBLT_HEIGHT0, 0x00 }, 139 { S1DREG_BBLT_HEIGHT1, 0x00 }, 140 { S1DREG_BBLT_BGC0, 0x00 }, 141 { S1DREG_BBLT_BGC1, 0x00 }, 142 { S1DREG_BBLT_FGC0, 0x00 }, 143 { S1DREG_BBLT_FGC1, 0x00 }, 144 { S1DREG_LKUP_MODE, 0x00 }, 145 { S1DREG_LKUP_ADDR, 0x00 }, 146 { S1DREG_PS_CNF, 0x10 }, 147 { S1DREG_PS_STATUS, 0x00 }, 148 { S1DREG_CPU2MEM_WDOGT, 0x00 }, 149 { S1DREG_COM_DISP_MODE, 0x02 }, 150}; 151 152static struct s1d13xxxfb_pdata s1d13806_platform_data = { 153 .initregs = s1d13806_initregs, 154 .initregssize = ARRAY_SIZE(s1d13806_initregs), 155}; 156 157static struct resource s1d13806_resources[] = { 158 [0] = { 159 .start = 0x07200000, 160 .end = 0x07200000 + SZ_2M - 1, 161 .flags = IORESOURCE_MEM, 162 }, 163 [1] = { 164 .start = 0x07000000, 165 .end = 0x07000000 + SZ_2M - 1, 166 .flags = IORESOURCE_MEM, 167 }, 168}; 169 170static struct platform_device s1d13806_device = { 171 .name = "s1d13806fb", 172 .id = -1, 173 .num_resources = ARRAY_SIZE(s1d13806_resources), 174 .resource = s1d13806_resources, 175 176 .dev = { 177 .platform_data = &s1d13806_platform_data, 178 }, 179}; 180 181static struct platform_device *microdev_devices[] __initdata = { 182 &smc91x_device, 183 &s1d13806_device, 184}; 185 186static int __init microdev_devices_setup(void) 187{ 188 return platform_add_devices(microdev_devices, ARRAY_SIZE(microdev_devices)); 189} 190device_initcall(microdev_devices_setup); 191 192/* 193 * The Machine Vector 194 */ 195static struct sh_machine_vector mv_sh4202_microdev __initmv = { 196 .mv_name = "SH4-202 MicroDev", 197 .mv_ioport_map = microdev_ioport_map, 198 .mv_init_irq = init_microdev_irq, 199}; 200