aboutsummaryrefslogtreecommitdiff
path: root/SrcShared/Palm/Device/EZAustin/IncsPrv/SED1375Hwr.h
blob: dc85e2a75812ddb4af0846c9cb1ef9f9437c731d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
/******************************************************************************
 *
 * Copyright (c) 1998-1999 Palm Computing, Inc. or its subsidiaries.
 * All rights reserved.
 *
 * File: SED1375Hwr.h
 *
 * Description:
 *             	Hardware definitions for SED1375 controller.
 *
 * History:
 * 12/14/98 BRM	Adpated from SED1374 Test tool by Bob Ebert.
 *
 *****************************************************************************/

//-----------------------------------------------------------------------
// SED1375 Registers
//-----------------------------------------------------------------------

typedef struct SED1375RegsType {
	UInt8 productRevisionCode;				// 0x00
	UInt8 mode0;								// 0x01
	
	UInt8 mode1;								// 0x02
	UInt8 mode2;								// 0x03
	
	UInt8 horizontalPanelSize;				// 0x04
	UInt8 verticalPanelSizeLSB;			// 0x05
	
	UInt8 verticalPanelSizeMSB;			// 0x06
	UInt8 FPLineStartPosition;				// 0x07
	
	UInt8 horizontalNonDisplayPeriod;	// 0x08
	UInt8 FPFRAMEStartPosition;			// 0x09
		
	UInt8 verticalNonDisplayPeriod;		// 0x0A
	UInt8 MODRate;								// 0x0B
	
	UInt8 screen1StartAddressLSB;			// 0x0C
	UInt8 screen1StartAddressMSB;			// 0x0D
	
	UInt8 screen2StartAddressLSB;			// 0x0E
	UInt8 screen2StartAddressMSB;			// 0x0F

	UInt8 screen1StartAddressMSBit;		// 0x10	!!! YES, screen1MSBit in a weird place. Send complaints to Epson.
	UInt8 memoryAddressOffset;				// 0x11
	
	UInt8 screen1VerticalSizeLSB;			// 0x12
	UInt8 screen1VerticalSizeMSB;			// 0x13
	
	UInt8 unused1;								// 0x14
	UInt8 lookUpTableAddress;				// 0x15
		
	UInt8 unused2;								// 0x16
	UInt8 lookUpTableData;					// 0x17
	
	UInt8 GPIOConfigurationControl;		// 0x18
	UInt8 GPIOStatusControl;				// 0x19
	
	UInt8 scratchPad;							// 0x1A	
	UInt8 portraitMode;						// 0x1B
	
	UInt8 lineByteCountRegister;			// 0x1C, for portrait mode only
	UInt8 unused3;								// 0x01D not used

	UInt8 unused4;								// 0x1E
	UInt8 unused5;								// 0x1F
} SED1375RegsType;

typedef volatile SED1375RegsType *SED1375RegsPtr;


//-----------------------------------------------------------------------
// Register constants and definitions
//-----------------------------------------------------------------------
#define sed1375BaseAddress								0x1F000000
#define sed1375RegisterOffset 						0x1FFE0
#define sed1375RegsAddr									((UInt8 *)sed1375BaseAddress + sed1375RegisterOffset)

#define sed1375VideoMemStart							sed1375BaseAddress
#define sed1375VideoMemSize							81920		// 80K of memory for VRAM and CLUT's


// REG[0x00] Revision Code Register
// bits 7-2 are product code, bits 1-0 are revision code
#define sed1375RevisionCodeRegister					0x00
#define sed1375ProductCodeMask						0xFC
#define sed1375RevisionCodeMask						0x03
#define sed1375ProductCode								0x06
#define sed1375ProductCodeExpected					(sed1375ProductCode << 2)
#define sed1375RevisionCodeExpected					0x00

// REG[0x01] Mode Register 0
// bits 6 (Dual/Single) and 5 (Color/Mono) and 1 (mode) are ignored if bit 7 is set.
#define sed1375ModeRegister0							0x01
#define sed1375ModeTFT									0x80		// bit 7
#define sed1375ModeDual									0x40		// bit 6
#define sed1375ModeColor								0x20		// bit 5								
#define sed1375FPLineActiveHigh						0x10		// bit 4
#define sed1375FPFramePolarityActiveHigh			0x07		// bit 3
#define sed1375FPShiftMasked							0x04		// bit 2
#define sed1375DataWidth12BitTFTPanel				0x01		// bits 1-0

// REG[0x02] Mode Register 1
#define sed1375ModeRegister1							0x02
#define sed1375BPPMask									0xC0		// bits 7,6
#define sed1375BPPShift									6
#define sed1375BPP(n)									((((n) - 1) & 0x04) << sed1375BPPShift)
#define sed13758bpp										0xC0	
#define sed13754bpp										0x80
#define sed13752bpp										0x40
#define sed13751bpp										0x00
#define sed1375HighPerformance						0x20		// bit 5
#define sed1375InputClockDiv2							0x10		// bit 4
#define sed1375DisplayBlank							0x08		// bit 3
#define sed1375FrameRepeat								0x04		// bit 2
#define sed1375HardwareVideoInvertEnable			0x02		// bit 1
#define sed1375SoftwareVideoInvert					0x01		// bit 0

// REG[0x03] Mode Register 2
#define sed1375ModeRegister2							0x03
#define sed1375LCDPWROverride							0x08		// bit 3
#define sed1375HwrPowerSaveEnable					0x04		// bit 2
#define sed1375PowerSaveMode							0x00		// bits 1,0
#define sed1375PowerSaveNormalOperation			0x03

// REG[0x04] Horizontal Panel Size Register
// (Horizontal Panel Resolution pixels / 8)-1
#define sed1375HorizontalPanelSizeRegister		0x04
#define sed1375HorizontalResolutionMask			0x7F		// bits 6-0

// REG[0x05] Vertical Panel Size Register (LSB)
// REG[0x06] Vertical Panel Size Register (MSB)
// together define 10 bits of vertical lines, set to # of lines - 1
#define sed1375VerticalPanelSizeRegisterLSB		0x05
#define sed1375VerticalPanelSizeRegisterMSB		0x06
#define sed1375VerticalResolutionMSBMask			0x30		// bits 1,0

// REG[0x07] FPLINE Start Position
#define sed1375FPLINEStartPosition					0x07
#define sed1375FPLINEStartPositionMask				0x1F		// bits 4-0

// REG[0x08] Horizontal Non-Display Period
#define sed1375HorizontalNonDisplayPeriod			0x08
#define sed1375HorizontalNonDisplayMask			0x1F		// bits 4-0
#define sed1375NoHorizontalNonDisplay				0x00

// REG[0x09] FPFRAME Start Position
#define sed1375FPFRAMEStartPosition					0x09
#define sed1375FPFRAMEStartPositionMask			0x3F		// bits 5-0

// REG[0x0A] Vertical Non-Display Period
#define sed1375VerticalNonDisplayPeriod			0x0A
#define sed1375VerticalNonDisplayStatus			0x80		// bit 7
#define sed1375VerticalNonDisplayMask				0x3F		// bits 5-0
#define sed1375NoVerticalNonDisplay					0x00

// REG[0x0B] MOD Rate Register (passive LCD only)
#define sed1375MODRateRegister						0x0B
#define sed1375MODRateUnused							0x00

// REG[0x0C] Screen 1 Start Address Register (LSB)
// REG[0x0D] Screen 1 Start Address Register (MSB)
#define sed1375Screen1StartAddressRegisterLSB	0x0C
#define sed1375Screen1StartAddressRegisterMSB	0x0D

// REG[0x0F] Screen 2 Start Address Register (LSB)
// REG[0x10] Screen 2 Start Address Register (MSB)
#define sed1375Screen2StartAddressRegisterLSB	0x0F
#define sed1375Screen2StartAddressRegisterMSB	0x10

// REG[0x12] Memory Address Offset Register
#define sed1375MemoryAddressOffsetRegister		0x12

// REG[0x13] Screen 1 Vertical Size Register (LSB)
// REG[0x14] Screen 1 Vertical Size Register (MSB)
#define sed1375Screen1VerticalSizeRegisterLSB	0x13
#define sed1375Screen1VerticalSizeRegisterMSB	0x14

// REG[0x15] Look-Up Table Address Register
#define sed1375LookUpTableAddressRegister			0x15
#define sed1375LookUpAutoIncrement					0x00
#define sed1375LookUpRedTableSelect					0x10
#define sed1375LookUpGrayGreenTableSelect			0x20
#define sed1375LookUpBlueTableSelect				0x30
#define sed1375LookUpTableAddressMask				0x0F

// REG[0x16] Look-Up Table Bank Select Register
#define sed1375LookUpTableBankSelectRegister		0x16
#define sed1375LookUpTableRedBank(n)				(((n) & 0x03) << 4)
#define sed1375LookUpTableGreenBank(n)				(((n) & 0x03) << 2)
#define sed1375LookUpTableBlueBank(n)				((n) & 0x03)
#define sed1375LookUpTableBank(n)					(sed1375LookUpTableRedBank(n) | sed1375LookUpTableGreenBank(n) | sed1375LookUpTableBlueBank(n))

// REG[0x17] Look-Up Table Data Register
#define sed1375LookUpTableDataRegister				0x17
#define sed1375LookUpTableDataMask					0x0F

// REG[0x18] GPIO Configuration Control Register
#define sed1375GPIOConfigurationControlRegister	0x18
#define sed1375GPIOPinOut(n, v)						(((v) ? 1:0) << (n))

// REG[0x19] GPIO Status/Control Register
#define sed1375GPIOStatusControlRegister			0x19
#define sed1375GPIOPinStatusMask(n)					(1 << (n))
#define sed1375GPIOPinSet(n, v)						(((v) ? 1:0) << (n))

// REG[0x1A] Scratch Pad Register
#define sed1375ScratchPadRegister					0x1A

// REG[0x1B] Portrait Mode Register
#define sed1375PortraitModeRegister					0x1B
#define sed1375LandscapeMode							0x00
#define sed1375PortraitModeEnable					0x80	// bit 7
#define sed1375X2SchemeSelect							0x40	// bit 6
#define sed1375MCLKAutoDisable						0x04	// bit 2
#define sed1375PCLKSelectBit1							0x02	// bit 1
#define sed1375PCLKSelectBit0							0x01	// bit 0

// REG[0x1C] Line UInt8 Count Register (for Portrait Mode)
#define sed1375LineByteCountRegister				0x1C

// REG[0x1D] ???? Register
#define sed1375UnusualRegister						0x1D
#define sed1375RepeatFrame								0x80
#define sed1375Skip128FramesDuringPS				0x40
#define sed1375OverlayEnable							0x20
#define sed1375OverlayOperationBit1					0x10
#define sed1375OverlayOperationBit0					0x08
#define sed1375ForceHighClock							0x04
#define sed1375FrameSkip								0x02
#define sed1375FrameSkipStatus						0x01

// REG[0x1F] Test Mode Register
#define sed1375TestModeRegister						0x1F
#define sed1375TestMode(n)								((n & 0x03) << 6)
#define sed1375TestInput(n)							((n & 0x07) << 3)
#define sed1375TestOutputMask							0x07
#define sed1375TestModeNormal							0x00
#define sed1375TestModeUnusual						sed1375TestMode(1)