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