drac9210.c revision f29dbc25
1f29dbc25Smrg/* Copyright (c) 2005 Advanced Micro Devices, Inc.
2f29dbc25Smrg *
3f29dbc25Smrg * Permission is hereby granted, free of charge, to any person obtaining a copy
4f29dbc25Smrg * of this software and associated documentation files (the "Software"), to
5f29dbc25Smrg * deal in the Software without restriction, including without limitation the
6f29dbc25Smrg * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7f29dbc25Smrg * sell copies of the Software, and to permit persons to whom the Software is
8f29dbc25Smrg * furnished to do so, subject to the following conditions:
9f29dbc25Smrg *
10f29dbc25Smrg * The above copyright notice and this permission notice shall be included in
11f29dbc25Smrg * all copies or substantial portions of the Software.
12f29dbc25Smrg *
13f29dbc25Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14f29dbc25Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15f29dbc25Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16f29dbc25Smrg * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17f29dbc25Smrg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18f29dbc25Smrg * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
19f29dbc25Smrg * IN THE SOFTWARE.
20f29dbc25Smrg *
21f29dbc25Smrg * Neither the name of the Advanced Micro Devices, Inc. nor the names of its
22f29dbc25Smrg * contributors may be used to endorse or promote products derived from this
23f29dbc25Smrg * software without specific prior written permission.
24f29dbc25Smrg * */
25f29dbc25Smrg
26f29dbc25Smrg/*
27f29dbc25Smrg * File Contents:   This file contains the panel library files to the
28f29dbc25Smrg *                  platforms with 9210, and 9211 support.
29f29dbc25Smrg *
30f29dbc25Smrg * SubModule:       Geode FlatPanel library
31f29dbc25Smrg * */
32f29dbc25Smrg
33f29dbc25Smrg#include "drac9210.h"
34f29dbc25Smrg
35f29dbc25Smrg#define	CS9210			0x40   /* Chip select pin       */
36f29dbc25Smrg
37f29dbc25Smrg/* 9210 on Draco */
38f29dbc25Smrg#define CLOCK9210		0x04   /* Clock pin             */
39f29dbc25Smrg#define	DATAIN9210		0x20   /* Data from 9210        */
40f29dbc25Smrg#define	DATAOUT9210		0x80   /* Data to 9210          */
41f29dbc25Smrg
42f29dbc25Smrgstatic void DracoWriteData(unsigned char data);
43f29dbc25Smrgstatic void DracoReadData(unsigned char *data);
44f29dbc25Smrgstatic void Draco9210GpioInit();
45f29dbc25Smrgstatic void Draco9210SetCS(void);
46f29dbc25Smrgstatic unsigned char Draco9210ReadReg(unsigned char index);
47f29dbc25Smrgstatic void Draco9210WriteReg(unsigned char index, unsigned char data);
48f29dbc25Smrgstatic void Draco9210ClearCS(void);
49f29dbc25Smrgstatic void Draco9210SetDataOut(void);
50f29dbc25Smrgstatic void Draco9210ClearDataOut(void);
51f29dbc25Smrgstatic unsigned char Draco9210ReadDataIn(void);
52f29dbc25Smrgstatic void Draco9210ToggleClock(void);
53f29dbc25Smrg
54f29dbc25Smrgvoid
55f29dbc25SmrgDraco9210Init(Pnl_PanelStat * pstat)
56f29dbc25Smrg{
57f29dbc25Smrg    unsigned char panelvalues[] = {
58f29dbc25Smrg        0x2, 0x80,
59f29dbc25Smrg        0x2, 0x24,
60f29dbc25Smrg        0x03, 0x00,
61f29dbc25Smrg        0xc0, 0x00,
62f29dbc25Smrg        0xc1, 0x00,
63f29dbc25Smrg        0xc2, 0x00,
64f29dbc25Smrg        0xc3, 0x00,
65f29dbc25Smrg        0xc4, 0x00,
66f29dbc25Smrg        0xc5, 0x01,
67f29dbc25Smrg        0xc6, 0xff,
68f29dbc25Smrg        0xc7, 0xff,
69f29dbc25Smrg        0xc8, 0x3,
70f29dbc25Smrg        0xc9, 0xfe,
71f29dbc25Smrg        0xca, 0x0,
72f29dbc25Smrg        0xcb, 0x3f,
73f29dbc25Smrg        0xcc, 0xc,
74f29dbc25Smrg        0xcd, 0x1,
75f29dbc25Smrg        0xce, 0xff,
76f29dbc25Smrg        0xcf, 0xc1,
77f29dbc25Smrg        0xd0, 0x0,
78f29dbc25Smrg        0xd1, 0x7e,
79f29dbc25Smrg        0xd2, 0x3,
80f29dbc25Smrg        0xd3, 0xfe,
81f29dbc25Smrg        0xd4, 0x3,
82f29dbc25Smrg        0xd5, 0x81,
83f29dbc25Smrg        0xd6, 0xfc,
84f29dbc25Smrg        0xd7, 0x3f,
85f29dbc25Smrg        0xd8, 0x14,
86f29dbc25Smrg        0xd9, 0x1e,
87f29dbc25Smrg        0xda, 0x0f,
88f29dbc25Smrg        0xdb, 0xc7,
89f29dbc25Smrg        0xdc, 0x29,
90f29dbc25Smrg        0xdd, 0xe1,
91f29dbc25Smrg        0xde, 0xf1,
92f29dbc25Smrg        0xdf, 0xf9,
93f29dbc25Smrg        0xe0, 0x2,
94f29dbc25Smrg        0xe1, 0xe,
95f29dbc25Smrg        0xe2, 0x1e,
96f29dbc25Smrg        0xe3, 0x3e,
97f29dbc25Smrg        0xe4, 0x04,
98f29dbc25Smrg        0xe5, 0x71,
99f29dbc25Smrg        0xe6, 0xe3,
100f29dbc25Smrg        0xe7, 0xcf,
101f29dbc25Smrg        0xe8, 0x1,
102f29dbc25Smrg        0xe9, 0x86,
103f29dbc25Smrg        0xea, 0x3c,
104f29dbc25Smrg        0xeb, 0xf3,
105f29dbc25Smrg        0xec, 0xa,
106f29dbc25Smrg        0xed, 0x39,
107f29dbc25Smrg        0xee, 0xc7,
108f29dbc25Smrg        0xef, 0x3d,
109f29dbc25Smrg
110f29dbc25Smrg        0xf0, 0x14,
111f29dbc25Smrg        0xf1, 0xc6,
112f29dbc25Smrg        0xf2, 0x39,
113f29dbc25Smrg        0xf3, 0xce,
114f29dbc25Smrg        0xf4, 0x3,
115f29dbc25Smrg        0xf5, 0x19,
116f29dbc25Smrg        0xf6, 0xce,
117f29dbc25Smrg        0xf7, 0x77,
118f29dbc25Smrg        0xf8, 0x0,
119f29dbc25Smrg        0xf9, 0x66,
120f29dbc25Smrg        0xfa, 0x33,
121f29dbc25Smrg        0xfb, 0xbb,
122f29dbc25Smrg        0xfc, 0x2d,
123f29dbc25Smrg        0xfd, 0x99,
124f29dbc25Smrg        0xfe, 0xdd,
125f29dbc25Smrg        0xff, 0xdd,
126f29dbc25Smrg
127f29dbc25Smrg        0x3, 0x1,
128f29dbc25Smrg        0xc0, 0x2,
129f29dbc25Smrg        0xc1, 0x22,
130f29dbc25Smrg        0xc2, 0x66,
131f29dbc25Smrg        0xc3, 0x66,
132f29dbc25Smrg        0xc4, 0x0,
133f29dbc25Smrg        0xc5, 0xcd,
134f29dbc25Smrg        0xc6, 0x99,
135f29dbc25Smrg        0xc7, 0xbb,
136f29dbc25Smrg        0xc8, 0x5,
137f29dbc25Smrg        0xc9, 0x32,
138f29dbc25Smrg        0xca, 0x66,
139f29dbc25Smrg        0xcb, 0xdd,
140f29dbc25Smrg        0xcc, 0x1a,
141f29dbc25Smrg        0xcd, 0x4d,
142f29dbc25Smrg        0xce, 0x9b,
143f29dbc25Smrg        0xcf, 0x6f,
144f29dbc25Smrg        0xd0, 0x0,
145f29dbc25Smrg        0xd1, 0x92,
146f29dbc25Smrg        0xd2, 0x6d,
147f29dbc25Smrg        0xd3, 0xb6,
148f29dbc25Smrg        0xd4, 0x5,
149f29dbc25Smrg        0xd5, 0x25,
150f29dbc25Smrg        0xd6, 0xb6,
151f29dbc25Smrg        0xd7, 0xdb,
152f29dbc25Smrg        0xd8, 0x2,
153f29dbc25Smrg        0xd9, 0x5a,
154f29dbc25Smrg        0xda, 0x4b,
155f29dbc25Smrg        0xdb, 0x6d,
156f29dbc25Smrg        0xdc, 0x29,
157f29dbc25Smrg        0xdd, 0xa5,
158f29dbc25Smrg        0xde, 0xb5,
159f29dbc25Smrg        0xdf, 0xb7,
160f29dbc25Smrg        0xe0, 0x4,
161f29dbc25Smrg        0xe1, 0x4a,
162f29dbc25Smrg        0xe2, 0x5a,
163f29dbc25Smrg        0xe3, 0xda,
164f29dbc25Smrg        0xe4, 0x12,
165f29dbc25Smrg        0xe5, 0x95,
166f29dbc25Smrg        0xe6, 0xad,
167f29dbc25Smrg        0xe7, 0x6f,
168f29dbc25Smrg        0xe8, 0x1,
169f29dbc25Smrg        0xe9, 0x2a,
170f29dbc25Smrg        0xea, 0x56,
171f29dbc25Smrg        0xeb, 0xb5,
172f29dbc25Smrg        0xec, 0xe,
173f29dbc25Smrg        0xed, 0x55,
174f29dbc25Smrg        0xee, 0xab,
175f29dbc25Smrg        0xef, 0x5f,
176f29dbc25Smrg        0xf0, 0x0,
177f29dbc25Smrg        0xf1, 0xaa,
178f29dbc25Smrg        0xf2, 0x55,
179f29dbc25Smrg        0xf3, 0xea,
180f29dbc25Smrg        0xf4, 0x1,
181f29dbc25Smrg        0xf5, 0x55,
182f29dbc25Smrg        0xf6, 0xaa,
183f29dbc25Smrg        0xf7, 0xbf,
184f29dbc25Smrg        0xf8, 0x6,
185f29dbc25Smrg        0xf9, 0xaa,
186f29dbc25Smrg        0xfa, 0x55,
187f29dbc25Smrg        0xfb, 0x55,
188f29dbc25Smrg        0xfc, 0x39,
189f29dbc25Smrg        0xfd, 0x55,
190f29dbc25Smrg        0xfe, 0xff,
191f29dbc25Smrg        0xff, 0xff,
192f29dbc25Smrg
193f29dbc25Smrg        0x3, 0x2,
194f29dbc25Smrg        0xc0, 0x0,
195f29dbc25Smrg        0xc1, 0x0,
196f29dbc25Smrg        0xc2, 0xaa,
197f29dbc25Smrg        0xc3, 0xaa,
198f29dbc25Smrg        0xc4, 0x6,
199f29dbc25Smrg        0xc5, 0xab,
200f29dbc25Smrg        0xc6, 0x55,
201f29dbc25Smrg        0xc7, 0x55,
202f29dbc25Smrg        0xc8, 0x01,
203f29dbc25Smrg        0xc9, 0x54,
204f29dbc25Smrg        0xca, 0xaa,
205f29dbc25Smrg        0xcb, 0xbf,
206f29dbc25Smrg        0xcc, 0x8,
207f29dbc25Smrg        0xcd, 0xab,
208f29dbc25Smrg        0xce, 0x55,
209f29dbc25Smrg        0xcf, 0xeb,
210f29dbc25Smrg        0xd0, 0x6,
211f29dbc25Smrg        0xd1, 0x54,
212f29dbc25Smrg        0xd2, 0xab,
213f29dbc25Smrg        0xd3, 0x5e,
214f29dbc25Smrg        0xd4, 0x1,
215f29dbc25Smrg        0xd5, 0x2b,
216f29dbc25Smrg        0xd6, 0x56,
217f29dbc25Smrg        0xd7, 0xb5,
218f29dbc25Smrg        0xd8, 0x12,
219f29dbc25Smrg        0xd9, 0x94,
220f29dbc25Smrg        0xda, 0xad,
221f29dbc25Smrg        0xdb, 0x6f,
222f29dbc25Smrg        0xdc, 0x2d,
223f29dbc25Smrg        0xdd, 0x4b,
224f29dbc25Smrg        0xde, 0x5b,
225f29dbc25Smrg        0xdf, 0xdb,
226f29dbc25Smrg        0xe0, 0x0,
227f29dbc25Smrg        0xe1, 0xa4,
228f29dbc25Smrg        0xe2, 0xb4,
229f29dbc25Smrg        0xe3, 0xb6,
230f29dbc25Smrg        0xe4, 0x2,
231f29dbc25Smrg        0xe5, 0x5b,
232f29dbc25Smrg        0xe6, 0x4b,
233f29dbc25Smrg        0xe7, 0x6d,
234f29dbc25Smrg        0xe8, 0x5,
235f29dbc25Smrg        0xe9, 0x24,
236f29dbc25Smrg        0xea, 0xb6,
237f29dbc25Smrg        0xeb, 0xdb,
238f29dbc25Smrg        0xec, 0x8,
239f29dbc25Smrg        0xed, 0x93,
240f29dbc25Smrg        0xee, 0x6d,
241f29dbc25Smrg        0xef, 0xb7,
242f29dbc25Smrg        0xf0, 0x12,
243f29dbc25Smrg        0xf1, 0x4c,
244f29dbc25Smrg        0xf2, 0x9b,
245f29dbc25Smrg        0xf3, 0x6e,
246f29dbc25Smrg        0xf4, 0x5,
247f29dbc25Smrg        0xf5, 0x33,
248f29dbc25Smrg        0xf6, 0x66,
249f29dbc25Smrg        0xf7, 0xdd,
250f29dbc25Smrg        0xf8, 0x0,
251f29dbc25Smrg        0xf9, 0xcc,
252f29dbc25Smrg        0xfa, 0x99,
253f29dbc25Smrg        0xfb, 0xbb,
254f29dbc25Smrg        0xfc, 0x2b,
255f29dbc25Smrg        0xfd, 0x33,
256f29dbc25Smrg        0xfe, 0x77,
257f29dbc25Smrg        0xff, 0x77,
258f29dbc25Smrg
259f29dbc25Smrg        0x3, 0x3,
260f29dbc25Smrg        0xc0, 0x4,
261f29dbc25Smrg        0xc1, 0x88,
262f29dbc25Smrg        0xc2, 0xcc,
263f29dbc25Smrg        0xc3, 0xcc,
264f29dbc25Smrg        0xc4, 0x0,
265f29dbc25Smrg        0xc5, 0x67,
266f29dbc25Smrg        0xc6, 0x33,
267f29dbc25Smrg        0xc7, 0xbb,
268f29dbc25Smrg        0xc8, 0x3,
269f29dbc25Smrg        0xc9, 0x18,
270f29dbc25Smrg        0xca, 0xce,
271f29dbc25Smrg        0xcb, 0x77,
272f29dbc25Smrg        0xcc, 0x1c,
273f29dbc25Smrg        0xcd, 0xc7,
274f29dbc25Smrg        0xce, 0x39,
275f29dbc25Smrg        0xcf, 0xcf,
276f29dbc25Smrg
277f29dbc25Smrg        0xd0, 0x2,
278f29dbc25Smrg        0xd1, 0x38,
279f29dbc25Smrg        0xd2, 0xc7,
280f29dbc25Smrg        0xd3, 0x3c,
281f29dbc25Smrg        0xd4, 0x1,
282f29dbc25Smrg        0xd5, 0x87,
283f29dbc25Smrg        0xd6, 0x3c,
284f29dbc25Smrg        0xd7, 0xf3,
285f29dbc25Smrg        0xd8, 0x4,
286f29dbc25Smrg        0xd9, 0x70,
287f29dbc25Smrg        0xda, 0xe3,
288f29dbc25Smrg        0xdb, 0xcf,
289f29dbc25Smrg        0xdc, 0x2b,
290f29dbc25Smrg        0xdd, 0xf,
291f29dbc25Smrg        0xde, 0x1f,
292f29dbc25Smrg        0xdf, 0x3f,
293f29dbc25Smrg        0xe0, 0x00,
294f29dbc25Smrg        0xe1, 0xe0,
295f29dbc25Smrg        0xe2, 0xf0,
296f29dbc25Smrg        0xe3, 0xf8,
297f29dbc25Smrg        0xe4, 0x14,
298f29dbc25Smrg        0xe5, 0x1f,
299f29dbc25Smrg        0xe6, 0xf,
300f29dbc25Smrg        0xe7, 0xc7,
301f29dbc25Smrg        0xe8, 0x3,
302f29dbc25Smrg        0xe9, 0x80,
303f29dbc25Smrg        0xea, 0xfc,
304f29dbc25Smrg        0xeb, 0x3f,
305f29dbc25Smrg        0xec, 0x8,
306f29dbc25Smrg        0xed, 0x7f,
307f29dbc25Smrg        0xee, 0x3,
308f29dbc25Smrg        0xef, 0xff,
309f29dbc25Smrg        0xf0, 0x4,
310f29dbc25Smrg        0xf1, 0x0,
311f29dbc25Smrg        0xf2, 0xff,
312f29dbc25Smrg        0xf3, 0xc0,
313f29dbc25Smrg        0xf4, 0x3,
314f29dbc25Smrg        0xf5, 0xff,
315f29dbc25Smrg        0xf6, 0x0,
316f29dbc25Smrg        0xf7, 0x3f,
317f29dbc25Smrg        0xf8, 0x0,
318f29dbc25Smrg        0xf9, 0x0,
319f29dbc25Smrg        0xfa, 0xff,
320f29dbc25Smrg        0xfb, 0xff,
321f29dbc25Smrg        0xfc, 0x3f,
322f29dbc25Smrg        0xfd, 0xff,
323f29dbc25Smrg        0xfe, 0xff,
324f29dbc25Smrg        0xff, 0xff,
325f29dbc25Smrg        0x3, 0x4,
326f29dbc25Smrg
327f29dbc25Smrg        /* Setup the Diter to Pattern33 */
328f29dbc25Smrg        0x80, 0xdd,
329f29dbc25Smrg        0x81, 0xdd,
330f29dbc25Smrg        0x82, 0x33,
331f29dbc25Smrg        0x83, 0x33,
332f29dbc25Smrg        0x84, 0xdd,
333f29dbc25Smrg        0x85, 0xdd,
334f29dbc25Smrg        0x86, 0x33,
335f29dbc25Smrg        0x87, 0x33,
336f29dbc25Smrg        0x88, 0x33,
337f29dbc25Smrg        0x89, 0x33,
338f29dbc25Smrg        0x8a, 0x77,
339f29dbc25Smrg        0x8b, 0x77,
340f29dbc25Smrg        0x8c, 0x33,
341f29dbc25Smrg        0x8d, 0x33,
342f29dbc25Smrg        0x8e, 0x77,
343f29dbc25Smrg        0x8f, 0x77,
344f29dbc25Smrg        0x90, 0xdd,
345f29dbc25Smrg        0x91, 0xdd,
346f29dbc25Smrg        0x92, 0x33,
347f29dbc25Smrg        0x93, 0x33,
348f29dbc25Smrg        0x94, 0xdd,
349f29dbc25Smrg        0x95, 0xdd,
350f29dbc25Smrg        0x96, 0x33,
351f29dbc25Smrg        0x97, 0x33,
352f29dbc25Smrg        0x98, 0x33,
353f29dbc25Smrg        0x99, 0x33,
354f29dbc25Smrg        0x9a, 0x77,
355f29dbc25Smrg        0x9b, 0x77,
356f29dbc25Smrg        0x9c, 0x33,
357f29dbc25Smrg        0x9d, 0x33,
358f29dbc25Smrg        0x9e, 0x77,
359f29dbc25Smrg        0x9f, 0x77,
360f29dbc25Smrg
361f29dbc25Smrg        0x4, 0x20,
362f29dbc25Smrg        0x5, 0x3,
363f29dbc25Smrg        0x6, 0x56,
364f29dbc25Smrg        0x7, 0x2,
365f29dbc25Smrg        0x8, 0x1c,
366f29dbc25Smrg        0x9, 0x0,
367f29dbc25Smrg        0xa, 0x26,
368f29dbc25Smrg        0xb, 0x0,
369f29dbc25Smrg        0xc, 0x15,
370f29dbc25Smrg        0xd, 0x4,
371f29dbc25Smrg        0xe, 0x50,
372f29dbc25Smrg        0xf, 0x4,
373f29dbc25Smrg        0x10, 0xfa,
374f29dbc25Smrg        0x11, 0x0,
375f29dbc25Smrg        0x12, 0xc8,
376f29dbc25Smrg        0x13, 0x0,
377f29dbc25Smrg        0x14, 0x31,
378f29dbc25Smrg        0x15, 0x23,
379f29dbc25Smrg        0x16, 0x0,
380f29dbc25Smrg
381f29dbc25Smrg        /* Enable DSTN panel */
382f29dbc25Smrg        0x2, 0x64
383f29dbc25Smrg    };
384f29dbc25Smrg    unsigned char index, data;
385f29dbc25Smrg    int i;
386f29dbc25Smrg
387f29dbc25Smrg    gfx_delay_milliseconds(100);
388f29dbc25Smrg    Draco9210GpioInit();
389f29dbc25Smrg    Draco9210SetCS();
390f29dbc25Smrg    Draco9210ToggleClock();
391f29dbc25Smrg    Draco9210ToggleClock();
392f29dbc25Smrg    Draco9210ToggleClock();
393f29dbc25Smrg    Draco9210ToggleClock();
394f29dbc25Smrg    Draco9210ClearCS();
395f29dbc25Smrg
396f29dbc25Smrg#if defined(_WIN32)                    /* For Windows   */
397f29dbc25Smrg    for (i = 0; i < 10; i++) {
398f29dbc25Smrg        _asm {
399f29dbc25Smrg        out 0ED h, al}
400f29dbc25Smrg    }
401f29dbc25Smrg
402f29dbc25Smrg#elif defined(linux)                   /* Linux                 */
403f29dbc25Smrg
404f29dbc25Smrg#endif
405f29dbc25Smrg
406f29dbc25Smrg    for (i = 0; i < 630; i += 2) {
407f29dbc25Smrg        index = panelvalues[i];
408f29dbc25Smrg        data = panelvalues[i + 1];
409f29dbc25Smrg        Draco9210WriteReg(index, data);
410f29dbc25Smrg    }
411f29dbc25Smrg
412f29dbc25Smrg}
413f29dbc25Smrg
414f29dbc25Smrgstatic void
415f29dbc25SmrgDracoWriteData(unsigned char data)
416f29dbc25Smrg{
417f29dbc25Smrg    int i;
418f29dbc25Smrg    unsigned char mask = 0x80, databit;
419f29dbc25Smrg
420f29dbc25Smrg    for (i = 0; i < 8; i++) {
421f29dbc25Smrg
422f29dbc25Smrg        databit = data & mask;
423f29dbc25Smrg        if (data & mask) {
424f29dbc25Smrg            Draco9210SetDataOut();
425f29dbc25Smrg        } else {
426f29dbc25Smrg            Draco9210ClearDataOut();
427f29dbc25Smrg        }
428f29dbc25Smrg        mask >>= 1;
429f29dbc25Smrg        Draco9210ToggleClock();
430f29dbc25Smrg    }
431f29dbc25Smrg}
432f29dbc25Smrg
433f29dbc25Smrgstatic void
434f29dbc25SmrgDracoReadData(unsigned char *data)
435f29dbc25Smrg{
436f29dbc25Smrg    int i;
437f29dbc25Smrg    unsigned char tmp = 0, readbit;
438f29dbc25Smrg
439f29dbc25Smrg    Draco9210ClearDataOut();
440f29dbc25Smrg    Draco9210ToggleClock();
441f29dbc25Smrg    for (i = 0; i < 7; i++) {
442f29dbc25Smrg        readbit = Draco9210ReadDataIn();
443f29dbc25Smrg        tmp |= (readbit & 0x1);
444f29dbc25Smrg        tmp <<= 1;
445f29dbc25Smrg        Draco9210ToggleClock();
446f29dbc25Smrg    }
447f29dbc25Smrg    readbit = Draco9210ReadDataIn();
448f29dbc25Smrg    tmp |= (readbit & 0x1);
449f29dbc25Smrg    *data = tmp;
450f29dbc25Smrg}
451f29dbc25Smrg
452f29dbc25Smrg#if defined(_WIN32)                    /* For Windows */
453f29dbc25Smrg
454f29dbc25Smrgvoid
455f29dbc25SmrgDraco9210GpioInit()
456f29dbc25Smrg{
457f29dbc25Smrg    _asm {
458f29dbc25Smrg    pushf
459f29dbc25Smrg            cli
460f29dbc25Smrg            mov dx, 0 CF8h
461f29dbc25Smrg            mov eax, CX55x0_ID + 090 h
462f29dbc25Smrg            out dx, eax
463f29dbc25Smrg            mov dx, 0 CFCh mov al, 0 CFh mov ah, 00 h out dx, ax popf}
464f29dbc25Smrg}
465f29dbc25Smrg
466f29dbc25Smrgvoid
467f29dbc25SmrgDraco9210SetCS()
468f29dbc25Smrg{
469f29dbc25Smrg    _asm {
470f29dbc25Smrg        pushf;
471f29dbc25Smrg        Point to PCI address register mov dx, 0 CF8h;
472f29dbc25Smrg        55 XX GPIO data register mov eax, CX55x0_ID + 090 h out dx, eax;
473f29dbc25Smrg        Point to PCI data register (CFCh)
474f29dbc25Smrg    mov dx, 0 CFCh
475f29dbc25Smrg            in ax, dx
476f29dbc25Smrg            and ah, 30 h
477f29dbc25Smrg            mov ah, c92DataReg
478f29dbc25Smrg            or ah, CS9210 mov c92DataReg, ah out dx, ax popf}
479f29dbc25Smrg}
480f29dbc25Smrg
481f29dbc25Smrgvoid
482f29dbc25SmrgDraco9210ClearCS()
483f29dbc25Smrg{
484f29dbc25Smrg    _asm {
485f29dbc25Smrg        pushf;
486f29dbc25Smrg        Point to PCI address register mov dx, 0 CF8h;
487f29dbc25Smrg        55 XX GPIO data register mov eax, CX55x0_ID + 090 h out dx, eax;
488f29dbc25Smrg        Point to PCI data register (CFCh)
489f29dbc25Smrg        mov dx, 0 CFCh;
490f29dbc25Smrg    Set CS LOW
491f29dbc25Smrg            in ax, dx
492f29dbc25Smrg            mov ah, c92DataReg
493f29dbc25Smrg            and ah, NOT CS9210 mov c92DataReg, ah out dx, ax popf}
494f29dbc25Smrg}
495f29dbc25Smrg
496f29dbc25Smrgvoid
497f29dbc25SmrgDraco9210SetDataOut()
498f29dbc25Smrg{
499f29dbc25Smrg    _asm {
500f29dbc25Smrg        pushf;
501f29dbc25Smrg        Point to PCI address register mov dx, 0 CF8h;
502f29dbc25Smrg        55 XX GPIO data register mov eax, CX55x0_ID + 090 h out dx, eax;
503f29dbc25Smrg        Point to PCI data register (CFCh)
504f29dbc25Smrg        mov dx, 0 CFCh;
505f29dbc25Smrg    Set DATA HIGH
506f29dbc25Smrg            in ax, dx
507f29dbc25Smrg            mov ah, c92DataReg
508f29dbc25Smrg            or ah, DATAOUT9210 mov c92DataReg, ah out dx, ax popf}
509f29dbc25Smrg}
510f29dbc25Smrg
511f29dbc25Smrgvoid
512f29dbc25SmrgDraco9210ClearDataOut()
513f29dbc25Smrg{
514f29dbc25Smrg    _asm {
515f29dbc25Smrg        pushf;
516f29dbc25Smrg        Point to PCI address register
517f29dbc25Smrg            mov dx, 0 CF8h mov eax, CX55x0_ID + 090 h;
518f29dbc25Smrg        ;
519f29dbc25Smrg        55 XX GPIO data register out dx, eax;
520f29dbc25Smrg        Point to PCI data register (CFCh)
521f29dbc25Smrg        mov dx, 0 CFCh;
522f29dbc25Smrg    Set Data LOW
523f29dbc25Smrg            in ax, dx
524f29dbc25Smrg            mov ah, c92DataReg
525f29dbc25Smrg            and ah, NOT DATAOUT9210 mov c92DataReg, ah out dx, ax popf}
526f29dbc25Smrg}
527f29dbc25Smrg
528f29dbc25Smrgunsigned char
529f29dbc25SmrgDraco9210ReadDataIn()
530f29dbc25Smrg{
531f29dbc25Smrg    unsigned char readdata;
532f29dbc25Smrg
533f29dbc25Smrg    _asm {
534f29dbc25Smrg        pushf;
535f29dbc25Smrg        Point to PCI address register mov dx, 0 CF8h;
536f29dbc25Smrg        55 XX GPIO data register mov eax, CX55x0_ID + 090 h out dx, eax;
537f29dbc25Smrg        Point to PCI data register (CFCh)
538f29dbc25Smrg        mov dx, 0F Ch in ax, dx;
539f29dbc25Smrg        Preserve just Data IN bit and ah, DATAIN9210 mov al, ah cmp al, 0;
540f29dbc25Smrg        Is it LOW ? je readDataLow;
541f29dbc25Smrg    must be HIGH mov al, 1 readDataLow:mov readdata, al popf}
542f29dbc25Smrg    return (readdata);
543f29dbc25Smrg}
544f29dbc25Smrg
545f29dbc25Smrgvoid
546f29dbc25SmrgDraco9210ToggleClock()
547f29dbc25Smrg{
548f29dbc25Smrg    _asm {
549f29dbc25Smrg        pushf;
550f29dbc25Smrg        Point to PCI address register mov dx, 0 CF8h;
551f29dbc25Smrg        55 XX GPIO data register mov eax, CX55x0_ID + 090 h;
552f29dbc25Smrg        Point to PCI data register (CFCh)
553f29dbc25Smrg        out dx, eax mov dx, 0 CFCh;
554f29dbc25Smrg        SET CLOCK in ax, dx mov ah, c92DataReg or ah, CLOCK9210 mov c92DataReg, ah out dx, ax out 0ED h, al     /* IOPAUSE      */
555f29dbc25Smrg           ;
556f29dbc25Smrg        Point to PCI address register mov dx, 0 CF8h;
557f29dbc25Smrg        55 XX GPIO data register mov eax, CX55x0_ID + 090 h out dx, eax;
558f29dbc25Smrg        Point to PCI data register (CFCh)
559f29dbc25Smrg        mov dx, 0 CFCh;
560f29dbc25Smrg
561f29dbc25Smrg        ;
562f29dbc25Smrg    CLEAR CLOCK
563f29dbc25Smrg            in ax, dx
564f29dbc25Smrg            mov ah, c92DataReg
565f29dbc25Smrg            and ah, NOT CLOCK9210 mov c92DataReg, ah out dx, ax popf}
566f29dbc25Smrg}
567f29dbc25Smrg
568f29dbc25Smrg#elif defined(linux)                   /* Linux         */
569f29dbc25Smrg
570f29dbc25Smrgvoid
571f29dbc25SmrgDraco9210GpioInit()
572f29dbc25Smrg{
573f29dbc25Smrg}
574f29dbc25Smrgvoid
575f29dbc25SmrgDraco9210SetCS()
576f29dbc25Smrg{
577f29dbc25Smrg}
578f29dbc25Smrgvoid
579f29dbc25SmrgDraco9210ClearCS()
580f29dbc25Smrg{
581f29dbc25Smrg}
582f29dbc25Smrgvoid
583f29dbc25SmrgDraco9210SetDataOut()
584f29dbc25Smrg{
585f29dbc25Smrg}
586f29dbc25Smrgvoid
587f29dbc25SmrgDraco9210ClearDataOut()
588f29dbc25Smrg{
589f29dbc25Smrg}
590f29dbc25Smrgunsigned char
591f29dbc25SmrgDraco9210ReadDataIn()
592f29dbc25Smrg{
593f29dbc25Smrg}
594f29dbc25Smrgvoid
595f29dbc25SmrgDraco9210ToggleClock()
596f29dbc25Smrg{
597f29dbc25Smrg}
598f29dbc25Smrg
599f29dbc25Smrg#endif
600f29dbc25Smrg
601f29dbc25Smrgunsigned char
602f29dbc25SmrgDraco9210ReadReg(unsigned char index)
603f29dbc25Smrg{
604f29dbc25Smrg    unsigned char data;
605f29dbc25Smrg
606f29dbc25Smrg    Draco9210SetCS();
607f29dbc25Smrg    Draco9210ToggleClock();
608f29dbc25Smrg    Draco9210SetDataOut();
609f29dbc25Smrg    Draco9210ToggleClock();
610f29dbc25Smrg    Draco9210ClearDataOut();
611f29dbc25Smrg    Draco9210ToggleClock();
612f29dbc25Smrg    Draco9210ClearDataOut();
613f29dbc25Smrg    Draco9210ToggleClock();
614f29dbc25Smrg    Draco9210ClearDataOut();
615f29dbc25Smrg    Draco9210ToggleClock();
616f29dbc25Smrg
617f29dbc25Smrg    DracoWriteData(index);
618f29dbc25Smrg    DracoReadData(&data);
619f29dbc25Smrg
620f29dbc25Smrg    return (data);
621f29dbc25Smrg}
622f29dbc25Smrg
623f29dbc25Smrgvoid
624f29dbc25SmrgDraco9210WriteReg(unsigned char index, unsigned char data)
625f29dbc25Smrg{
626f29dbc25Smrg
627f29dbc25Smrg    Draco9210SetCS();
628f29dbc25Smrg    Draco9210ToggleClock();
629f29dbc25Smrg
630f29dbc25Smrg    Draco9210SetDataOut();
631f29dbc25Smrg    Draco9210ToggleClock();
632f29dbc25Smrg
633f29dbc25Smrg    Draco9210ClearDataOut();
634f29dbc25Smrg    Draco9210ToggleClock();
635f29dbc25Smrg
636f29dbc25Smrg    Draco9210ClearDataOut();
637f29dbc25Smrg    Draco9210ToggleClock();
638f29dbc25Smrg
639f29dbc25Smrg    Draco9210SetDataOut();
640f29dbc25Smrg    Draco9210ToggleClock();
641f29dbc25Smrg
642f29dbc25Smrg    DracoWriteData(index);
643f29dbc25Smrg    DracoWriteData(data);
644f29dbc25Smrg
645f29dbc25Smrg    Draco9210ClearDataOut();
646f29dbc25Smrg    Draco9210ToggleClock();
647f29dbc25Smrg
648f29dbc25Smrg    Draco9210ClearCS();
649f29dbc25Smrg    Draco9210ToggleClock();
650f29dbc25Smrg    Draco9210ToggleClock();
651f29dbc25Smrg
652f29dbc25Smrg}
653