blob: d8a747291e03ed82a829e20e4e779013881f1197 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
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.
Paul Mundt74017292006-02-01 03:05:59 -08006 * Copyright (C) 2004, 2005 Paul Mundt
Linus Torvalds1da177e2005-04-16 15:20:36 -07007 *
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 */
Linus Torvalds1da177e2005-04-16 15:20:36 -070013#include <linux/init.h>
Russell Kingd052d1b2005-10-29 19:07:23 +010014#include <linux/platform_device.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070015#include <linux/ioport.h>
Paul Mundt74017292006-02-01 03:05:59 -080016#include <video/s1d13xxxfb.h>
Paul Mundt7639a452008-10-20 13:02:48 +090017#include <mach/microdev.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070018#include <asm/io.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070019#include <asm/machvec.h>
Paul Mundt0ef0e6c2008-12-17 13:14:22 +090020#include <asm/sizes.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070021
Linus Torvalds1da177e2005-04-16 15:20:36 -070022static struct resource smc91x_resources[] = {
23 [0] = {
24 .start = 0x300,
Paul Mundt0ef0e6c2008-12-17 13:14:22 +090025 .end = 0x300 + SZ_4K - 1,
Linus Torvalds1da177e2005-04-16 15:20:36 -070026 .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
Paul Mundt74017292006-02-01 03:05:59 -080042static 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,
Paul Mundt0ef0e6c2008-12-17 13:14:22 +0900160 .end = 0x07200000 + SZ_2M - 1,
Paul Mundt74017292006-02-01 03:05:59 -0800161 .flags = IORESOURCE_MEM,
162 },
163 [1] = {
164 .start = 0x07000000,
Paul Mundt0ef0e6c2008-12-17 13:14:22 +0900165 .end = 0x07000000 + SZ_2M - 1,
Paul Mundt74017292006-02-01 03:05:59 -0800166 .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};
Paul Mundt74017292006-02-01 03:05:59 -0800180
181static struct platform_device *microdev_devices[] __initdata = {
182 &smc91x_device,
Paul Mundt74017292006-02-01 03:05:59 -0800183 &s1d13806_device,
Paul Mundt74017292006-02-01 03:05:59 -0800184};
185
186static int __init microdev_devices_setup(void)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700187{
Paul Mundt74017292006-02-01 03:05:59 -0800188 return platform_add_devices(microdev_devices, ARRAY_SIZE(microdev_devices));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700189}
Paul Mundt0ef0e6c2008-12-17 13:14:22 +0900190device_initcall(microdev_devices_setup);
Paul Mundt2c7834a2006-09-27 18:17:31 +0900191
192/*
193 * The Machine Vector
Linus Torvalds1da177e2005-04-16 15:20:36 -0700194 */
Paul Mundt82f81f42007-05-15 15:19:34 +0900195static struct sh_machine_vector mv_sh4202_microdev __initmv = {
Paul Mundt2c7834a2006-09-27 18:17:31 +0900196 .mv_name = "SH4-202 MicroDev",
Paul Mundt0ef0e6c2008-12-17 13:14:22 +0900197 .mv_nr_irqs = 72,
Paul Mundt46bc8582010-10-29 18:42:22 +0900198 .mv_ioport_map = microdev_ioport_map,
Paul Mundt2c7834a2006-09-27 18:17:31 +0900199 .mv_init_irq = init_microdev_irq,
Paul Mundt2c7834a2006-09-27 18:17:31 +0900200};