1 |
27 |
unneback |
//==========================================================================
|
2 |
|
|
//
|
3 |
|
|
// sed135x_16bit.c
|
4 |
|
|
//
|
5 |
|
|
// Author(s): Michael Kelly - Cogent Computer Systems, Inc.
|
6 |
|
|
// Date: 05-24-2002
|
7 |
|
|
// Description: Init Code for SED135x Display Controller
|
8 |
|
|
//
|
9 |
|
|
//==========================================================================
|
10 |
|
|
// Copyright (C) 2003 Gary Thomas
|
11 |
|
|
|
12 |
|
|
#include <pkgconf/hal.h>
|
13 |
|
|
#include <cyg/infra/cyg_type.h>
|
14 |
|
|
#include <cyg/hal/lcd_support.h>
|
15 |
|
|
#include <cyg/hal/hal_io.h>
|
16 |
|
|
|
17 |
|
|
typedef unsigned char uchar;
|
18 |
|
|
typedef unsigned short ushort;
|
19 |
|
|
typedef volatile unsigned short vushort;
|
20 |
|
|
typedef unsigned long ulong;
|
21 |
|
|
typedef volatile unsigned long vulong;
|
22 |
|
|
|
23 |
|
|
// board specific defines needed by sed135x
|
24 |
|
|
#define SED_REG_BASE 0x78000000 // *RCE3
|
25 |
|
|
#define SED_MEM_BASE 0x78400000
|
26 |
|
|
#define SED_STEP 2 // 16-bit port on 32-bit boundary
|
27 |
|
|
|
28 |
|
|
// Control/Status Registers, 16-bit mode
|
29 |
|
|
#define SED_REG16(_x_) *(vushort *)((ulong)SED_REG_BASE + (((ulong)_x_ * SED_STEP) ^ 2))
|
30 |
|
|
#define H2SED(_x_) _le16(_x_)
|
31 |
|
|
#define SED_GET_PHYS_ADD(_reg_) (SED_MEM_BASE + ((_reg_ * SED_STEP) ^ 2))
|
32 |
|
|
#define RD_FB16(_reg_,_val_) ((_val_) = *(vushort *)SED_GET_PHYS_ADD(_reg_))
|
33 |
|
|
#define WR_FB16(_reg_,_val_) (*(vushort *)SED_GET_PHYS_ADD(_reg_) = (_val_))
|
34 |
|
|
|
35 |
|
|
#define SED_DISP_MODE_CRT 1
|
36 |
|
|
#define SED_DISP_MODE_LCD 0
|
37 |
|
|
|
38 |
|
|
#include "sed1356_16bit.h"
|
39 |
|
|
|
40 |
|
|
//------------------------------------------------------------------------
|
41 |
|
|
// Color Lookup Table Values
|
42 |
|
|
//
|
43 |
|
|
|
44 |
|
|
static ushort sed_lut_16bit[256][3] = {
|
45 |
|
|
// RED, GREEN, BLUE // Entry
|
46 |
|
|
{ 0x0000, 0x0000, 0x0000, }, // 00
|
47 |
|
|
{ 0x0000, 0x0000, 0x00A0, }, // 01
|
48 |
|
|
{ 0x0000, 0x00A0, 0x0000, }, // 02
|
49 |
|
|
{ 0x0000, 0x00A0, 0x00A0, }, // 03
|
50 |
|
|
{ 0x00A0, 0x0000, 0x0000, }, // 04
|
51 |
|
|
{ 0x00A0, 0x0000, 0x00A0, }, // 05
|
52 |
|
|
{ 0x00A0, 0x00A0, 0x0000, }, // 06
|
53 |
|
|
{ 0x00A0, 0x00A0, 0x00A0, }, // 07
|
54 |
|
|
{ 0x0050, 0x0050, 0x0050, }, // 08
|
55 |
|
|
{ 0x0050, 0x0050, 0x00F0, }, // 09
|
56 |
|
|
{ 0x0050, 0x00F0, 0x0050, }, // 0A
|
57 |
|
|
{ 0x0050, 0x00F0, 0x00F0, }, // 0B
|
58 |
|
|
{ 0x00F0, 0x0050, 0x0050, }, // 0C
|
59 |
|
|
{ 0x00F0, 0x0050, 0x00F0, }, // 0D
|
60 |
|
|
{ 0x00F0, 0x00F0, 0x0050, }, // 0E
|
61 |
|
|
{ 0x00F0, 0x00F0, 0x00F0, }, // 0F
|
62 |
|
|
{ 0x0000, 0x0000, 0x0000, }, // 10
|
63 |
|
|
{ 0x0010, 0x0010, 0x0010, }, // 11
|
64 |
|
|
{ 0x0020, 0x0020, 0x0020, }, // 12
|
65 |
|
|
{ 0x0020, 0x0020, 0x0020, }, // 13
|
66 |
|
|
{ 0x0030, 0x0030, 0x0030, }, // 14
|
67 |
|
|
{ 0x0040, 0x0040, 0x0040, }, // 15
|
68 |
|
|
{ 0x0050, 0x0050, 0x0050, }, // 16
|
69 |
|
|
{ 0x0060, 0x0060, 0x0060, }, // 17
|
70 |
|
|
{ 0x0070, 0x0070, 0x0070, }, // 18
|
71 |
|
|
{ 0x0080, 0x0080, 0x0080, }, // 19
|
72 |
|
|
{ 0x0090, 0x0090, 0x0090, }, // 1A
|
73 |
|
|
{ 0x00A0, 0x00A0, 0x00A0, }, // 1B
|
74 |
|
|
{ 0x00B0, 0x00B0, 0x00B0, }, // 1C
|
75 |
|
|
{ 0x00C0, 0x00C0, 0x00C0, }, // 1D
|
76 |
|
|
{ 0x00E0, 0x00E0, 0x00E0, }, // 1E
|
77 |
|
|
{ 0x00F0, 0x00F0, 0x00F0, }, // 1F
|
78 |
|
|
{ 0x0000, 0x0000, 0x00F0, }, // 20
|
79 |
|
|
{ 0x0040, 0x0000, 0x00F0, }, // 21
|
80 |
|
|
{ 0x0070, 0x0000, 0x00F0, }, // 22
|
81 |
|
|
{ 0x00B0, 0x0000, 0x00F0, }, // 23
|
82 |
|
|
{ 0x00F0, 0x0000, 0x00F0, }, // 24
|
83 |
|
|
{ 0x00F0, 0x0000, 0x00B0, }, // 25
|
84 |
|
|
{ 0x00F0, 0x0000, 0x0070, }, // 26
|
85 |
|
|
{ 0x00F0, 0x0000, 0x0040, }, // 27
|
86 |
|
|
{ 0x00F0, 0x0000, 0x0000, }, // 28
|
87 |
|
|
{ 0x00F0, 0x0040, 0x0000, }, // 29
|
88 |
|
|
{ 0x00F0, 0x0070, 0x0000, }, // 2A
|
89 |
|
|
{ 0x00F0, 0x00B0, 0x0000, }, // 2B
|
90 |
|
|
{ 0x00F0, 0x00F0, 0x0000, }, // 2C
|
91 |
|
|
{ 0x00B0, 0x00F0, 0x0000, }, // 2D
|
92 |
|
|
{ 0x0070, 0x00F0, 0x0000, }, // 2E
|
93 |
|
|
{ 0x0040, 0x00F0, 0x0000, }, // 2F
|
94 |
|
|
{ 0x0000, 0x00F0, 0x0000, }, // 30
|
95 |
|
|
{ 0x0000, 0x00F0, 0x0040, }, // 31
|
96 |
|
|
{ 0x0000, 0x00F0, 0x0070, }, // 32
|
97 |
|
|
{ 0x0000, 0x00F0, 0x00B0, }, // 33
|
98 |
|
|
{ 0x0000, 0x00F0, 0x00F0, }, // 34
|
99 |
|
|
{ 0x0000, 0x00B0, 0x00F0, }, // 35
|
100 |
|
|
{ 0x0000, 0x0070, 0x00F0, }, // 36
|
101 |
|
|
{ 0x0000, 0x0040, 0x00F0, }, // 37
|
102 |
|
|
{ 0x0070, 0x0070, 0x00F0, }, // 38
|
103 |
|
|
{ 0x0090, 0x0070, 0x00F0, }, // 39
|
104 |
|
|
{ 0x00B0, 0x0070, 0x00F0, }, // 3A
|
105 |
|
|
{ 0x00D0, 0x0070, 0x00F0, }, // 3B
|
106 |
|
|
{ 0x00F0, 0x0070, 0x00F0, }, // 3C
|
107 |
|
|
{ 0x00F0, 0x0070, 0x00D0, }, // 3D
|
108 |
|
|
{ 0x00F0, 0x0070, 0x00B0, }, // 3E
|
109 |
|
|
{ 0x00F0, 0x0070, 0x0090, }, // 3F
|
110 |
|
|
{ 0x00F0, 0x0070, 0x0070, }, // 40
|
111 |
|
|
{ 0x00F0, 0x0090, 0x0070, }, // 41
|
112 |
|
|
{ 0x00F0, 0x00B0, 0x0070, }, // 42
|
113 |
|
|
{ 0x00F0, 0x00D0, 0x0070, }, // 43
|
114 |
|
|
{ 0x00F0, 0x00F0, 0x0070, }, // 44
|
115 |
|
|
{ 0x00D0, 0x00F0, 0x0070, }, // 45
|
116 |
|
|
{ 0x00B0, 0x00F0, 0x0070, }, // 46
|
117 |
|
|
{ 0x0090, 0x00F0, 0x0070, }, // 47
|
118 |
|
|
{ 0x0070, 0x00F0, 0x0070, }, // 48
|
119 |
|
|
{ 0x0070, 0x00F0, 0x0090, }, // 49
|
120 |
|
|
{ 0x0070, 0x00F0, 0x00B0, }, // 4A
|
121 |
|
|
{ 0x0070, 0x00F0, 0x00D0, }, // 4B
|
122 |
|
|
{ 0x0070, 0x00F0, 0x00F0, }, // 4C
|
123 |
|
|
{ 0x0070, 0x00D0, 0x00F0, }, // 4D
|
124 |
|
|
{ 0x0070, 0x00B0, 0x00F0, }, // 4E
|
125 |
|
|
{ 0x0070, 0x0090, 0x00F0, }, // 4F
|
126 |
|
|
{ 0x00B0, 0x00B0, 0x00F0, }, // 50
|
127 |
|
|
{ 0x00C0, 0x00B0, 0x00F0, }, // 51
|
128 |
|
|
{ 0x00D0, 0x00B0, 0x00F0, }, // 52
|
129 |
|
|
{ 0x00E0, 0x00B0, 0x00F0, }, // 53
|
130 |
|
|
{ 0x00F0, 0x00B0, 0x00F0, }, // 54
|
131 |
|
|
{ 0x00F0, 0x00B0, 0x00E0, }, // 55
|
132 |
|
|
{ 0x00F0, 0x00B0, 0x00D0, }, // 56
|
133 |
|
|
{ 0x00F0, 0x00B0, 0x00C0, }, // 57
|
134 |
|
|
{ 0x00F0, 0x00B0, 0x00B0, }, // 58
|
135 |
|
|
{ 0x00F0, 0x00C0, 0x00B0, }, // 59
|
136 |
|
|
{ 0x00F0, 0x00D0, 0x00B0, }, // 5A
|
137 |
|
|
{ 0x00F0, 0x00E0, 0x00B0, }, // 5B
|
138 |
|
|
{ 0x00F0, 0x00F0, 0x00B0, }, // 5C
|
139 |
|
|
{ 0x00E0, 0x00F0, 0x00B0, }, // 5D
|
140 |
|
|
{ 0x00D0, 0x00F0, 0x00B0, }, // 5E
|
141 |
|
|
{ 0x00C0, 0x00F0, 0x00B0, }, // 5F
|
142 |
|
|
{ 0x00B0, 0x00F0, 0x00B0, }, // 60
|
143 |
|
|
{ 0x00B0, 0x00F0, 0x00C0, }, // 61
|
144 |
|
|
{ 0x00B0, 0x00F0, 0x00D0, }, // 62
|
145 |
|
|
{ 0x00B0, 0x00F0, 0x00E0, }, // 63
|
146 |
|
|
{ 0x00B0, 0x00F0, 0x00F0, }, // 64
|
147 |
|
|
{ 0x00B0, 0x00E0, 0x00F0, }, // 65
|
148 |
|
|
{ 0x00B0, 0x00D0, 0x00F0, }, // 66
|
149 |
|
|
{ 0x00B0, 0x00C0, 0x00F0, }, // 67
|
150 |
|
|
{ 0x0000, 0x0000, 0x0070, }, // 68
|
151 |
|
|
{ 0x0010, 0x0000, 0x0070, }, // 69
|
152 |
|
|
{ 0x0030, 0x0000, 0x0070, }, // 6A
|
153 |
|
|
{ 0x0050, 0x0000, 0x0070, }, // 6B
|
154 |
|
|
{ 0x0070, 0x0000, 0x0070, }, // 6C
|
155 |
|
|
{ 0x0070, 0x0000, 0x0050, }, // 6D
|
156 |
|
|
{ 0x0070, 0x0000, 0x0030, }, // 6E
|
157 |
|
|
{ 0x0070, 0x0000, 0x0010, }, // 6F
|
158 |
|
|
{ 0x0070, 0x0000, 0x0000, }, // 70
|
159 |
|
|
{ 0x0070, 0x0010, 0x0000, }, // 71
|
160 |
|
|
{ 0x0070, 0x0030, 0x0000, }, // 72
|
161 |
|
|
{ 0x0070, 0x0050, 0x0000, }, // 73
|
162 |
|
|
{ 0x0070, 0x0070, 0x0000, }, // 74
|
163 |
|
|
{ 0x0050, 0x0070, 0x0000, }, // 75
|
164 |
|
|
{ 0x0030, 0x0070, 0x0000, }, // 76
|
165 |
|
|
{ 0x0010, 0x0070, 0x0000, }, // 77
|
166 |
|
|
{ 0x0000, 0x0070, 0x0000, }, // 78
|
167 |
|
|
{ 0x0000, 0x0070, 0x0010, }, // 79
|
168 |
|
|
{ 0x0000, 0x0070, 0x0030, }, // 7A
|
169 |
|
|
{ 0x0000, 0x0070, 0x0050, }, // 7B
|
170 |
|
|
{ 0x0000, 0x0070, 0x0070, }, // 7C
|
171 |
|
|
{ 0x0000, 0x0050, 0x0070, }, // 7D
|
172 |
|
|
{ 0x0000, 0x0030, 0x0070, }, // 7E
|
173 |
|
|
{ 0x0000, 0x0010, 0x0070, }, // 7F
|
174 |
|
|
{ 0x0030, 0x0030, 0x0070, }, // 80
|
175 |
|
|
{ 0x0040, 0x0030, 0x0070, }, // 81
|
176 |
|
|
{ 0x0050, 0x0030, 0x0070, }, // 82
|
177 |
|
|
{ 0x0060, 0x0030, 0x0070, }, // 83
|
178 |
|
|
{ 0x0070, 0x0030, 0x0070, }, // 84
|
179 |
|
|
{ 0x0070, 0x0030, 0x0060, }, // 85
|
180 |
|
|
{ 0x0070, 0x0030, 0x0050, }, // 86
|
181 |
|
|
{ 0x0070, 0x0030, 0x0040, }, // 87
|
182 |
|
|
{ 0x0070, 0x0030, 0x0030, }, // 88
|
183 |
|
|
{ 0x0070, 0x0040, 0x0030, }, // 89
|
184 |
|
|
{ 0x0070, 0x0050, 0x0030, }, // 8A
|
185 |
|
|
{ 0x0070, 0x0060, 0x0030, }, // 8B
|
186 |
|
|
{ 0x0070, 0x0070, 0x0030, }, // 8C
|
187 |
|
|
{ 0x0060, 0x0070, 0x0030, }, // 8D
|
188 |
|
|
{ 0x0050, 0x0070, 0x0030, }, // 8E
|
189 |
|
|
{ 0x0040, 0x0070, 0x0030, }, // 8F
|
190 |
|
|
{ 0x0030, 0x0070, 0x0030, }, // 90
|
191 |
|
|
{ 0x0030, 0x0070, 0x0040, }, // 91
|
192 |
|
|
{ 0x0030, 0x0070, 0x0050, }, // 92
|
193 |
|
|
{ 0x0030, 0x0070, 0x0060, }, // 93
|
194 |
|
|
{ 0x0030, 0x0070, 0x0070, }, // 94
|
195 |
|
|
{ 0x0030, 0x0060, 0x0070, }, // 95
|
196 |
|
|
{ 0x0030, 0x0050, 0x0070, }, // 96
|
197 |
|
|
{ 0x0030, 0x0040, 0x0070, }, // 97
|
198 |
|
|
{ 0x0050, 0x0050, 0x0070, }, // 98
|
199 |
|
|
{ 0x0050, 0x0050, 0x0070, }, // 99
|
200 |
|
|
{ 0x0060, 0x0050, 0x0070, }, // 9A
|
201 |
|
|
{ 0x0060, 0x0050, 0x0070, }, // 9B
|
202 |
|
|
{ 0x0070, 0x0050, 0x0070, }, // 9C
|
203 |
|
|
{ 0x0070, 0x0050, 0x0060, }, // 9D
|
204 |
|
|
{ 0x0070, 0x0050, 0x0060, }, // 9E
|
205 |
|
|
{ 0x0070, 0x0050, 0x0050, }, // 9F
|
206 |
|
|
{ 0x0070, 0x0050, 0x0050, }, // A0
|
207 |
|
|
{ 0x0070, 0x0050, 0x0050, }, // A1
|
208 |
|
|
{ 0x0070, 0x0060, 0x0050, }, // A2
|
209 |
|
|
{ 0x0070, 0x0060, 0x0050, }, // A3
|
210 |
|
|
{ 0x0070, 0x0070, 0x0050, }, // A4
|
211 |
|
|
{ 0x0060, 0x0070, 0x0050, }, // A5
|
212 |
|
|
{ 0x0060, 0x0070, 0x0050, }, // A6
|
213 |
|
|
{ 0x0050, 0x0070, 0x0050, }, // A7
|
214 |
|
|
{ 0x0050, 0x0070, 0x0050, }, // A8
|
215 |
|
|
{ 0x0050, 0x0070, 0x0050, }, // A9
|
216 |
|
|
{ 0x0050, 0x0070, 0x0060, }, // AA
|
217 |
|
|
{ 0x0050, 0x0070, 0x0060, }, // AB
|
218 |
|
|
{ 0x0050, 0x0070, 0x0070, }, // AC
|
219 |
|
|
{ 0x0050, 0x0060, 0x0070, }, // AD
|
220 |
|
|
{ 0x0050, 0x0060, 0x0070, }, // AE
|
221 |
|
|
{ 0x0050, 0x0050, 0x0070, }, // AF
|
222 |
|
|
{ 0x0000, 0x0000, 0x0040, }, // B0
|
223 |
|
|
{ 0x0010, 0x0000, 0x0040, }, // B1
|
224 |
|
|
{ 0x0020, 0x0000, 0x0040, }, // B2
|
225 |
|
|
{ 0x0030, 0x0000, 0x0040, }, // B3
|
226 |
|
|
{ 0x0040, 0x0000, 0x0040, }, // B4
|
227 |
|
|
{ 0x0040, 0x0000, 0x0030, }, // B5
|
228 |
|
|
{ 0x0040, 0x0000, 0x0020, }, // B6
|
229 |
|
|
{ 0x0040, 0x0000, 0x0010, }, // B7
|
230 |
|
|
{ 0x0040, 0x0000, 0x0000, }, // B8
|
231 |
|
|
{ 0x0040, 0x0010, 0x0000, }, // B9
|
232 |
|
|
{ 0x0040, 0x0020, 0x0000, }, // BA
|
233 |
|
|
{ 0x0040, 0x0030, 0x0000, }, // BB
|
234 |
|
|
{ 0x0040, 0x0040, 0x0000, }, // BC
|
235 |
|
|
{ 0x0030, 0x0040, 0x0000, }, // BD
|
236 |
|
|
{ 0x0020, 0x0040, 0x0000, }, // BE
|
237 |
|
|
{ 0x0010, 0x0040, 0x0000, }, // BF
|
238 |
|
|
{ 0x0000, 0x0040, 0x0000, }, // C0
|
239 |
|
|
{ 0x0000, 0x0040, 0x0010, }, // C1
|
240 |
|
|
{ 0x0000, 0x0040, 0x0020, }, // C2
|
241 |
|
|
{ 0x0000, 0x0040, 0x0030, }, // C3
|
242 |
|
|
{ 0x0000, 0x0040, 0x0040, }, // C4
|
243 |
|
|
{ 0x0000, 0x0030, 0x0040, }, // C5
|
244 |
|
|
{ 0x0000, 0x0020, 0x0040, }, // C6
|
245 |
|
|
{ 0x0000, 0x0010, 0x0040, }, // C7
|
246 |
|
|
{ 0x0020, 0x0020, 0x0040, }, // C8
|
247 |
|
|
{ 0x0020, 0x0020, 0x0040, }, // C9
|
248 |
|
|
{ 0x0030, 0x0020, 0x0040, }, // CA
|
249 |
|
|
{ 0x0030, 0x0020, 0x0040, }, // CB
|
250 |
|
|
{ 0x0040, 0x0020, 0x0040, }, // CC
|
251 |
|
|
{ 0x0040, 0x0020, 0x0030, }, // CD
|
252 |
|
|
{ 0x0040, 0x0020, 0x0030, }, // CE
|
253 |
|
|
{ 0x0040, 0x0020, 0x0020, }, // CF
|
254 |
|
|
{ 0x0040, 0x0020, 0x0020, }, // D0
|
255 |
|
|
{ 0x0040, 0x0020, 0x0020, }, // D1
|
256 |
|
|
{ 0x0040, 0x0030, 0x0020, }, // D2
|
257 |
|
|
{ 0x0040, 0x0030, 0x0020, }, // D3
|
258 |
|
|
{ 0x0040, 0x0040, 0x0020, }, // D4
|
259 |
|
|
{ 0x0030, 0x0040, 0x0020, }, // D5
|
260 |
|
|
{ 0x0030, 0x0040, 0x0020, }, // D6
|
261 |
|
|
{ 0x0020, 0x0040, 0x0020, }, // D7
|
262 |
|
|
{ 0x0020, 0x0040, 0x0020, }, // D8
|
263 |
|
|
{ 0x0020, 0x0040, 0x0020, }, // D9
|
264 |
|
|
{ 0x0020, 0x0040, 0x0030, }, // DA
|
265 |
|
|
{ 0x0020, 0x0040, 0x0030, }, // DB
|
266 |
|
|
{ 0x0020, 0x0040, 0x0040, }, // DC
|
267 |
|
|
{ 0x0020, 0x0030, 0x0040, }, // DD
|
268 |
|
|
{ 0x0020, 0x0030, 0x0040, }, // DE
|
269 |
|
|
{ 0x0020, 0x0020, 0x0040, }, // DF
|
270 |
|
|
{ 0x0020, 0x0020, 0x0040, }, // E0
|
271 |
|
|
{ 0x0030, 0x0020, 0x0040, }, // E1
|
272 |
|
|
{ 0x0030, 0x0020, 0x0040, }, // E2
|
273 |
|
|
{ 0x0030, 0x0020, 0x0040, }, // E3
|
274 |
|
|
{ 0x0040, 0x0020, 0x0040, }, // E4
|
275 |
|
|
{ 0x0040, 0x0020, 0x0030, }, // E5
|
276 |
|
|
{ 0x0040, 0x0020, 0x0030, }, // E6
|
277 |
|
|
{ 0x0040, 0x0020, 0x0030, }, // E7
|
278 |
|
|
{ 0x0040, 0x0020, 0x0020, }, // E8
|
279 |
|
|
{ 0x0040, 0x0030, 0x0020, }, // E9
|
280 |
|
|
{ 0x0040, 0x0030, 0x0020, }, // EA
|
281 |
|
|
{ 0x0040, 0x0030, 0x0020, }, // EB
|
282 |
|
|
{ 0x0040, 0x0040, 0x0020, }, // EC
|
283 |
|
|
{ 0x0030, 0x0040, 0x0020, }, // ED
|
284 |
|
|
{ 0x0030, 0x0040, 0x0020, }, // EE
|
285 |
|
|
{ 0x0030, 0x0040, 0x0020, }, // EF
|
286 |
|
|
{ 0x0020, 0x0040, 0x0020, }, // F0
|
287 |
|
|
{ 0x0020, 0x0040, 0x0030, }, // F1
|
288 |
|
|
{ 0x0020, 0x0040, 0x0030, }, // F2
|
289 |
|
|
{ 0x0020, 0x0040, 0x0030, }, // F3
|
290 |
|
|
{ 0x0020, 0x0040, 0x0040, }, // F4
|
291 |
|
|
{ 0x0020, 0x0030, 0x0040, }, // F5
|
292 |
|
|
{ 0x0020, 0x0030, 0x0040, }, // F6
|
293 |
|
|
{ 0x0020, 0x0030, 0x0040, }, // F7
|
294 |
|
|
{ 0x0000, 0x0000, 0x0000, }, // F8
|
295 |
|
|
{ 0x0000, 0x0000, 0x0000, }, // F9
|
296 |
|
|
{ 0x0000, 0x0000, 0x0000, }, // FA
|
297 |
|
|
{ 0x0000, 0x0000, 0x0000, }, // FB
|
298 |
|
|
{ 0x0000, 0x0000, 0x0000, }, // FC
|
299 |
|
|
{ 0x0000, 0x0000, 0x0000, }, // FD
|
300 |
|
|
{ 0x0000, 0x0000, 0x0000, }, // FE
|
301 |
|
|
{ 0x0000, 0x0000, 0x0000, }, // FF
|
302 |
|
|
};
|
303 |
|
|
|
304 |
|
|
//--------------------------------------------------------------------------
|
305 |
|
|
// function prototypes
|
306 |
|
|
//
|
307 |
|
|
int sed135x_init(int depth, struct lcd_info *lcd);
|
308 |
|
|
static void sed135x_on(void);
|
309 |
|
|
static void sed135x_off(void);
|
310 |
|
|
static void sed_lcd_bkl(uchar bright);
|
311 |
|
|
|
312 |
|
|
extern void fs6377_init(int);
|
313 |
|
|
// Why doesn't the real mode work?
|
314 |
|
|
#define fs6377_init(mode) _csb281_fs6377_init(0)
|
315 |
|
|
|
316 |
|
|
// global flags to determine what, if anything, was found
|
317 |
|
|
static int sed135x_ok;
|
318 |
|
|
static int sed_disp_mode_crt;
|
319 |
|
|
|
320 |
|
|
// GPIO1 is used to control the LCD backlight on many CSB's
|
321 |
|
|
#define SED1356_BKL_ON SED1356_REG_GPIO_CTL |= H2SED(SED1356_GPIO_GPIO1) // GPIO1 = 1
|
322 |
|
|
#define SED1356_BKL_OFF SED1356_REG_GPIO_CTL &= H2SED(~SED1356_GPIO_GPIO1) // GPIO1 = 0
|
323 |
|
|
|
324 |
|
|
// GPIO2 is used to sense the presence of a monitor. 0 = monitor connected, 1 = no monitor
|
325 |
|
|
// we invert the sense to make it easier to test and more logical.
|
326 |
|
|
#define SED1356_CRT SED1356_REG_GPIO_CTL & H2SED(SED1356_GPIO_GPIO2)
|
327 |
|
|
|
328 |
|
|
#define SED_ROW_SIZE(_depth_) ((PIXELS_PER_ROW * _depth_) / 8)
|
329 |
|
|
|
330 |
|
|
//--------------------------------------------------------------------------
|
331 |
|
|
// sed135x_on
|
332 |
|
|
//
|
333 |
|
|
// This function turns on the SED1355 or SED1356 LCD and/or CRT
|
334 |
|
|
//
|
335 |
|
|
static void
|
336 |
|
|
sed135x_on(void)
|
337 |
|
|
{
|
338 |
|
|
uchar temp8;
|
339 |
|
|
int i;
|
340 |
|
|
|
341 |
|
|
sed135x_off();
|
342 |
|
|
|
343 |
|
|
// Turn on the LCD and/or CRT
|
344 |
|
|
// The SED1356 supports seperate LCD and CRT timing registers
|
345 |
|
|
// that have already been setup. We just blank the side we
|
346 |
|
|
// aren't using and enable the other.
|
347 |
|
|
if (sed_disp_mode_crt) { // 1 = CRT Mode
|
348 |
|
|
// Blank the LCD and CRT
|
349 |
|
|
SED1356_REG_LCD_DISP_MODE_and_MISC |= H2SED(SED1356_LCD_DISP_BLANK);
|
350 |
|
|
SED1356_REG_CRT_DISP_MODE |= H2SED(SED1356_CRT_DISP_BLANK);
|
351 |
|
|
|
352 |
|
|
// turn the LCD backlight off
|
353 |
|
|
sed_lcd_bkl(0);
|
354 |
|
|
|
355 |
|
|
// Set the SED1356 to CRT Mode
|
356 |
|
|
SED1356_REG_DISP_MODE = H2SED(SED1356_DISP_SWIV_NORM |
|
357 |
|
|
SED1356_DISP_MODE_CRT);
|
358 |
|
|
|
359 |
|
|
// Turn on the CRT
|
360 |
|
|
SED1356_REG_CRT_DISP_MODE &= ~H2SED(SED1356_CRT_DISP_BLANK);
|
361 |
|
|
} // if CRT mode
|
362 |
|
|
else { // 0 = LCD Mode
|
363 |
|
|
// Blank the LCD and CRT
|
364 |
|
|
SED1356_REG_LCD_DISP_MODE_and_MISC |= H2SED(SED1356_LCD_DISP_BLANK);
|
365 |
|
|
SED1356_REG_CRT_DISP_MODE |= H2SED(SED1356_CRT_DISP_BLANK);
|
366 |
|
|
|
367 |
|
|
// Set the SED1356 to LCD Mode
|
368 |
|
|
SED1356_REG_DISP_MODE = H2SED(SED1356_DISP_SWIV_NORM |
|
369 |
|
|
SED1356_DISP_MODE_LCD);
|
370 |
|
|
|
371 |
|
|
// Turn on the LCD
|
372 |
|
|
SED1356_REG_LCD_DISP_MODE_and_MISC &= ~H2SED(SED1356_LCD_DISP_BLANK);
|
373 |
|
|
sed_lcd_bkl(0xff); // turn the LCD backlight on/full brightness
|
374 |
|
|
} // else LCD Mode
|
375 |
|
|
}
|
376 |
|
|
|
377 |
|
|
//--------------------------------------------------------------------------
|
378 |
|
|
// sed_lcd_bkl()
|
379 |
|
|
//
|
380 |
|
|
// This function turns on the LCD backlight connected to GPIO1. This is
|
381 |
|
|
// not used if the board has a different method of controlling the
|
382 |
|
|
// backlight. Since the Sed has only a single GPIO bit and no way
|
383 |
|
|
// to modulate it, we use any non-zero value of bright to turn it on.
|
384 |
|
|
//
|
385 |
|
|
static void
|
386 |
|
|
sed_lcd_bkl(uchar bright)
|
387 |
|
|
{
|
388 |
|
|
// Any non-zero value for bright means on
|
389 |
|
|
if (bright)
|
390 |
|
|
SED1356_BKL_ON;
|
391 |
|
|
else
|
392 |
|
|
SED1356_BKL_OFF;
|
393 |
|
|
|
394 |
|
|
}
|
395 |
|
|
|
396 |
|
|
//--------------------------------------------------------------------------
|
397 |
|
|
// sed135x_off
|
398 |
|
|
//
|
399 |
|
|
// This function turns off the SED1356 LCD and/or CRT and the display
|
400 |
|
|
// fifo. It can also turn off the clocks if mode is true, thus allowing
|
401 |
|
|
// the programmable clock generator to be changed.
|
402 |
|
|
//
|
403 |
|
|
static void
|
404 |
|
|
sed135x_off(void)
|
405 |
|
|
{
|
406 |
|
|
SED1356_REG_DISP_MODE = H2SED(SED1356_DISP_SWIV_NORM |
|
407 |
|
|
SED1356_DISP_MODE_OFF);
|
408 |
|
|
sed_lcd_bkl(0); // turn the LCD backlight off
|
409 |
|
|
}
|
410 |
|
|
|
411 |
|
|
//--------------------------------------------------------------------------
|
412 |
|
|
// sed135x_init
|
413 |
|
|
//
|
414 |
|
|
// This function sets up the sed1355 or sed1356 whichever is found
|
415 |
|
|
//
|
416 |
|
|
int
|
417 |
|
|
sed135x_init(int depth, struct lcd_info *lcd)
|
418 |
|
|
{
|
419 |
|
|
vushort temp16;
|
420 |
|
|
int i;
|
421 |
|
|
|
422 |
|
|
sed135x_ok = 0;
|
423 |
|
|
sed_disp_mode_crt = 0; // assume LCD
|
424 |
|
|
|
425 |
|
|
if ((depth != 4) && (depth != 8) && (depth != 16)) {
|
426 |
|
|
diag_printf("Invalid depth: %d\n", depth);
|
427 |
|
|
return -1;
|
428 |
|
|
}
|
429 |
|
|
|
430 |
|
|
// enable host access
|
431 |
|
|
SED1356_REG_REV_and_MISC = 0x0000;
|
432 |
|
|
|
433 |
|
|
// Check the ID to make sure we even have a SED1356 installed
|
434 |
|
|
temp16 = SED1356_REG_REV_and_MISC & H2SED(SED1356_REV_ID_MASK);
|
435 |
|
|
|
436 |
|
|
if (temp16 != H2SED(SED1356_REV_ID_1356)){
|
437 |
|
|
diag_printf("SED1356 Not Found! SED_REG_REV = %04x.\n", temp16);
|
438 |
|
|
return -1;
|
439 |
|
|
}
|
440 |
|
|
|
441 |
|
|
// Disable the display
|
442 |
|
|
SED1356_REG_DISP_MODE = H2SED(SED1356_DISP_SWIV_NORM |
|
443 |
|
|
SED1356_DISP_MODE_OFF);
|
444 |
|
|
|
445 |
|
|
// Test for the presence of a CRT
|
446 |
|
|
SED1356_REG_GPIO_CTL = 0x0000; // Disable Backlight
|
447 |
|
|
SED1356_REG_GPIO_CFG = H2SED(SED1356_GPIO_GPIO1); // GPIO1 Out, GPIO2 In
|
448 |
|
|
if (SED1356_CRT) sed_disp_mode_crt = 0;
|
449 |
|
|
else sed_disp_mode_crt = 1;
|
450 |
|
|
|
451 |
|
|
// Enable Power Save Mode before we mess with the clocks
|
452 |
|
|
SED1356_REG_MEM_CFG_and_REF_RATE = H2SED(SED1356_REF_TYPE_SELF); // set dram to self refresh first
|
453 |
|
|
// shut off MCLK
|
454 |
|
|
SED1356_REG_PWR_CFG_and_STAT = H2SED(SED1356_PWR_MCLK);
|
455 |
|
|
|
456 |
|
|
// Wait until power is down - when MCLK bit goes true
|
457 |
|
|
while ((SED1356_REG_PWR_CFG_and_STAT & H2SED(SED1356_PWR_MCLK)) == 0){}
|
458 |
|
|
|
459 |
|
|
// Change the programmable clock generator to the desired timing
|
460 |
|
|
if (sed_disp_mode_crt) fs6377_init(SED_DISP_MODE_CRT);
|
461 |
|
|
else fs6377_init(SED_DISP_MODE_LCD);
|
462 |
|
|
|
463 |
|
|
// Re-enable Power
|
464 |
|
|
SED1356_REG_PWR_CFG_and_STAT = 0x0000;
|
465 |
|
|
|
466 |
|
|
// Common Control Registers
|
467 |
|
|
SED1356_REG_MCLK_CFG = H2SED(SED1356_MCLK_SRC_BCLK);
|
468 |
|
|
SED1356_REG_LCD_PCLK_CFG = H2SED(SED1356_PCLK_SRC_CLKI);
|
469 |
|
|
SED1356_REG_CRT_PCLK_CFG = H2SED(SED1356_PCLK_SRC_CLKI);
|
470 |
|
|
SED1356_REG_MEDIA_PCLK_CFG = 0x0000;
|
471 |
|
|
SED1356_REG_WAIT_STATE = H2SED(0x0001);
|
472 |
|
|
SED1356_REG_MEM_CFG_and_REF_RATE = H2SED(SED1356_MEM_CFG_2CAS_EDO |
|
473 |
|
|
SED1356_REF_RATE_2048);
|
474 |
|
|
SED1356_REG_MEM_TMG0_and_1 = H2SED(SED1356_MEM_TMG0_EDO50_MCLK33 |
|
475 |
|
|
SED1356_MEM_TMG1_EDO50_MCLK33);
|
476 |
|
|
SED1356_REG_PANEL_TYPE_and_MOD_RATE = H2SED(SED1356_PANEL_TYPE_16 |
|
477 |
|
|
SED1356_PANEL_TYPE_CLR |
|
478 |
|
|
SED1356_PANEL_TYPE_TFT);
|
479 |
|
|
|
480 |
|
|
// LCD Specific Registers
|
481 |
|
|
SED1356_REG_LCD_HOR_DISP = H2SED((PIXELS_PER_ROW/8) - 1);
|
482 |
|
|
SED1356_REG_LCD_HOR_NONDISP_and_START = H2SED(SED_HOR_NONDISP_LCD |
|
483 |
|
|
(SED_HOR_PULSE_START_LCD << 8));
|
484 |
|
|
SED1356_REG_LCD_HOR_PULSE = H2SED(SED1356_PULSE_WID(SED_HOR_PULSE_WIDTH_LCD) |
|
485 |
|
|
SED1356_PULSE_POL_LOW);
|
486 |
|
|
SED1356_REG_LCD_VER_DISP_HT_LO_and_HI = H2SED((PIXELS_PER_COL - 1) & 0x3ff);
|
487 |
|
|
SED1356_REG_LCD_VER_NONDISP_and_START = H2SED(SED_VER_NONDISP_LCD |
|
488 |
|
|
(SED_VER_PULSE_START_LCD << 8));
|
489 |
|
|
SED1356_REG_LCD_VER_PULSE = H2SED(SED1356_PULSE_WID(SED_VER_PULSE_WIDTH_LCD) |
|
490 |
|
|
SED1356_PULSE_POL_LOW);
|
491 |
|
|
switch (depth) {
|
492 |
|
|
case 4: SED1356_REG_LCD_DISP_MODE_and_MISC = H2SED(SED1356_LCD_DISP_BLANK |
|
493 |
|
|
SED1356_LCD_DISP_SWIV_NORM |
|
494 |
|
|
SED1356_LCD_DISP_4BPP);
|
495 |
|
|
break;
|
496 |
|
|
case 8: SED1356_REG_LCD_DISP_MODE_and_MISC = H2SED(SED1356_LCD_DISP_BLANK |
|
497 |
|
|
SED1356_LCD_DISP_SWIV_NORM |
|
498 |
|
|
SED1356_LCD_DISP_8BPP);
|
499 |
|
|
break;
|
500 |
|
|
default: SED1356_REG_LCD_DISP_MODE_and_MISC = H2SED(SED1356_LCD_DISP_BLANK |
|
501 |
|
|
SED1356_LCD_DISP_SWIV_NORM |
|
502 |
|
|
SED1356_LCD_DISP_16BPP); break;
|
503 |
|
|
}
|
504 |
|
|
|
505 |
|
|
SED1356_REG_LCD_DISP_START_LO_and_MID = 0x0000;
|
506 |
|
|
SED1356_REG_LCD_DISP_START_HI = 0x0000;
|
507 |
|
|
SED1356_REG_LCD_ADD_OFFSET_LO_and_HI = H2SED((SED_ROW_SIZE(depth) / 2) & 0x7ff);
|
508 |
|
|
SED1356_REG_LCD_PIXEL_PAN = 0x0000;
|
509 |
|
|
SED1356_REG_LCD_FIFO_THRESH_LO_and_HI = 0x0000; // auto mode
|
510 |
|
|
|
511 |
|
|
// LCD Specific Registers
|
512 |
|
|
SED1356_REG_CRT_HOR_DISP = H2SED((PIXELS_PER_ROW/8) - 1);
|
513 |
|
|
SED1356_REG_CRT_HOR_NONDISP_and_START = H2SED(SED_HOR_NONDISP_CRT |
|
514 |
|
|
(SED_HOR_PULSE_START_CRT << 8));
|
515 |
|
|
SED1356_REG_CRT_HOR_PULSE = H2SED(SED1356_PULSE_WID(SED_HOR_PULSE_WIDTH_CRT) |
|
516 |
|
|
SED1356_PULSE_POL_LOW);
|
517 |
|
|
SED1356_REG_CRT_VER_DISP_HT_LO_and_HI = H2SED((PIXELS_PER_COL - 1) & 0x3ff);
|
518 |
|
|
SED1356_REG_CRT_VER_NONDISP_and_START = H2SED(SED_VER_NONDISP_CRT |
|
519 |
|
|
(SED_VER_PULSE_START_CRT << 8));
|
520 |
|
|
SED1356_REG_CRT_VER_PULSE_and_OUT_CTL = H2SED(SED1356_PULSE_WID(SED_VER_PULSE_WIDTH_CRT) |
|
521 |
|
|
SED1356_PULSE_POL_LOW | SED1356_CRT_OUT_DAC_LVL);
|
522 |
|
|
switch (depth) {
|
523 |
|
|
case 4: SED1356_REG_CRT_DISP_MODE = H2SED(SED1356_CRT_DISP_BLANK |
|
524 |
|
|
SED1356_CRT_DISP_4BPP);
|
525 |
|
|
break;
|
526 |
|
|
case 8: SED1356_REG_CRT_DISP_MODE = H2SED(SED1356_CRT_DISP_BLANK |
|
527 |
|
|
SED1356_CRT_DISP_8BPP);
|
528 |
|
|
break;
|
529 |
|
|
default: SED1356_REG_CRT_DISP_MODE = H2SED(SED1356_CRT_DISP_BLANK |
|
530 |
|
|
SED1356_CRT_DISP_16BPP);
|
531 |
|
|
break;
|
532 |
|
|
}
|
533 |
|
|
|
534 |
|
|
|
535 |
|
|
SED1356_REG_CRT_DISP_START_LO_and_MID = 0x0000;
|
536 |
|
|
SED1356_REG_CRT_DISP_START_HI = 0x0000;
|
537 |
|
|
SED1356_REG_CRT_ADD_OFFSET_LO_and_HI = H2SED((SED_ROW_SIZE(depth) / 2) & 0x7ff);
|
538 |
|
|
SED1356_REG_CRT_PIXEL_PAN = 0x0000;
|
539 |
|
|
SED1356_REG_CRT_FIFO_THRESH_LO_and_HI = 0x0000; // auto mode
|
540 |
|
|
|
541 |
|
|
// Disable Cursor
|
542 |
|
|
SED1356_REG_LCD_CURSOR_CTL_and_START_ADD = 0x0000;
|
543 |
|
|
SED1356_REG_CRT_CURSOR_CTL_and_START_ADD = 0x0000;
|
544 |
|
|
|
545 |
|
|
// Disable BitBlt
|
546 |
|
|
SED1356_REG_BLT_CTL_0_and_1 = 0x0000;
|
547 |
|
|
SED1356_REG_BLT_ROP_CODE_and_BLT_OP = 0x0000;
|
548 |
|
|
SED1356_REG_BLT_SRC_START_LO_and_MID = 0x0000;
|
549 |
|
|
SED1356_REG_BLT_SRC_START_HI = 0x0000;
|
550 |
|
|
SED1356_REG_BLT_DEST_START_LO_and_MID = 0x0000;
|
551 |
|
|
SED1356_REG_BLT_DEST_START_HI = 0x0000;
|
552 |
|
|
SED1356_REG_BLT_ADD_OFFSET_LO_and_HI = 0x0000;
|
553 |
|
|
SED1356_REG_BLT_WID_LO_and_HI = 0x0000;
|
554 |
|
|
SED1356_REG_BLT_HGT_LO_and_HI = 0x0000;
|
555 |
|
|
SED1356_REG_BLT_BG_CLR_LO_and_HI = 0x0000;
|
556 |
|
|
SED1356_REG_BLT_FG_CLR_LO_and_HI = 0x0000;
|
557 |
|
|
|
558 |
|
|
// Fill the LUT, write to both LCD and CRT luts simultaneously
|
559 |
|
|
SED1356_REG_LUT_MODE = 0x0000;
|
560 |
|
|
for (i = 0; i < 256; i++){
|
561 |
|
|
|
562 |
|
|
SED1356_REG_LUT_ADD = H2SED(i);
|
563 |
|
|
SED1356_REG_LUT_DATA = H2SED(sed_lut_16bit[i][0]); // red
|
564 |
|
|
SED1356_REG_LUT_DATA = H2SED(sed_lut_16bit[i][1]); // green
|
565 |
|
|
SED1356_REG_LUT_DATA = H2SED(sed_lut_16bit[i][2]); // blue
|
566 |
|
|
}
|
567 |
|
|
|
568 |
|
|
// Disable Power Save Mode
|
569 |
|
|
SED1356_REG_PWR_CFG_and_STAT = 0x0000;
|
570 |
|
|
|
571 |
|
|
// Set Watchdog
|
572 |
|
|
// SED1356_REG_WATCHDOG_CTL = 0x0000;
|
573 |
|
|
|
574 |
|
|
// Device found & initialized
|
575 |
|
|
sed135x_ok = 1;
|
576 |
|
|
|
577 |
|
|
// turn on the display
|
578 |
|
|
sed135x_on();
|
579 |
|
|
|
580 |
|
|
// Fill in the info structure
|
581 |
|
|
lcd->height = 480; // FIXME
|
582 |
|
|
lcd->width = 640; // FIXME
|
583 |
|
|
lcd->bpp = depth;
|
584 |
|
|
lcd->type = FB_TRUE_RGB565;
|
585 |
|
|
lcd->rlen = (640*2*2); // FIXME
|
586 |
|
|
lcd->access_size = 2; // Framebuffer fixed at 16 bit access
|
587 |
|
|
lcd->stride = 4; // Only on "odd" 16 byte chunks
|
588 |
|
|
lcd->fb = SED_GET_PHYS_ADD(0);
|
589 |
|
|
lcd->on = sed135x_on;
|
590 |
|
|
lcd->off = sed135x_off;
|
591 |
|
|
|
592 |
|
|
return 0;
|
593 |
|
|
}
|
594 |
|
|
|
595 |
|
|
//--------------------------------------------------------------------------
|
596 |
|
|
// sed_pwr_dn()
|
597 |
|
|
static void
|
598 |
|
|
sed_pwr_dn(void)
|
599 |
|
|
{
|
600 |
|
|
|
601 |
|
|
// Enable Host Access
|
602 |
|
|
SED1356_REG_REV_and_MISC = 0x0000;
|
603 |
|
|
|
604 |
|
|
// Disable the display
|
605 |
|
|
SED1356_REG_DISP_MODE = H2SED(SED1356_DISP_MODE_OFF);
|
606 |
|
|
|
607 |
|
|
// Enable Power Save Mode
|
608 |
|
|
// set dram to self refresh first
|
609 |
|
|
SED1356_REG_MEM_CFG_and_REF_RATE = H2SED(SED1356_REF_TYPE_SELF);
|
610 |
|
|
|
611 |
|
|
// shut off MCLK
|
612 |
|
|
SED1356_REG_PWR_CFG_and_STAT = H2SED(SED1356_PWR_MCLK);
|
613 |
|
|
|
614 |
|
|
// Wait until power is down - when MCLK bit goes true
|
615 |
|
|
while ((SED1356_REG_PWR_CFG_and_STAT & H2SED(SED1356_PWR_MCLK)) == 0){}
|
616 |
|
|
}
|
617 |
|
|
|
618 |
|
|
|