171d7fec4Smrg/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nsc/panel/drac9210.c,v 1.1 2002/12/10 15:12:28 alanh Exp $ */
271d7fec4Smrg/*
371d7fec4Smrg * $Workfile: drac9210.c $
471d7fec4Smrg * $Revision: 1.1.1.1 $
571d7fec4Smrg *
671d7fec4Smrg * File Contents: This file contains the panel library files to the
771d7fec4Smrg *                platforms with 9210, and 9211 support.
871d7fec4Smrg *
971d7fec4Smrg * SubModule:     Geode FlatPanel library
1071d7fec4Smrg *
1171d7fec4Smrg */
1271d7fec4Smrg
1371d7fec4Smrg/*
1471d7fec4Smrg * NSC_LIC_ALTERNATIVE_PREAMBLE
1571d7fec4Smrg *
1671d7fec4Smrg * Revision 1.0
1771d7fec4Smrg *
1871d7fec4Smrg * National Semiconductor Alternative GPL-BSD License
1971d7fec4Smrg *
2071d7fec4Smrg * National Semiconductor Corporation licenses this software
2171d7fec4Smrg * ("Software"):
2271d7fec4Smrg *
2371d7fec4Smrg * Panel Library
2471d7fec4Smrg *
2571d7fec4Smrg * under one of the two following licenses, depending on how the
2671d7fec4Smrg * Software is received by the Licensee.
2771d7fec4Smrg *
2871d7fec4Smrg * If this Software is received as part of the Linux Framebuffer or
2971d7fec4Smrg * other GPL licensed software, then the GPL license designated
3071d7fec4Smrg * NSC_LIC_GPL applies to this Software; in all other circumstances
3171d7fec4Smrg * then the BSD-style license designated NSC_LIC_BSD shall apply.
3271d7fec4Smrg *
3371d7fec4Smrg * END_NSC_LIC_ALTERNATIVE_PREAMBLE */
3471d7fec4Smrg
3571d7fec4Smrg/* NSC_LIC_BSD
3671d7fec4Smrg *
3771d7fec4Smrg * National Semiconductor Corporation Open Source License for
3871d7fec4Smrg *
3971d7fec4Smrg * Panel Library
4071d7fec4Smrg *
4171d7fec4Smrg * (BSD License with Export Notice)
4271d7fec4Smrg *
4371d7fec4Smrg * Copyright (c) 1999-2001
4471d7fec4Smrg * National Semiconductor Corporation.
4571d7fec4Smrg * All rights reserved.
4671d7fec4Smrg *
4771d7fec4Smrg * Redistribution and use in source and binary forms, with or without
4871d7fec4Smrg * modification, are permitted provided that the following conditions
4971d7fec4Smrg * are met:
5071d7fec4Smrg *
5171d7fec4Smrg *   * Redistributions of source code must retain the above copyright
5271d7fec4Smrg *     notice, this list of conditions and the following disclaimer.
5371d7fec4Smrg *
5471d7fec4Smrg *   * Redistributions in binary form must reproduce the above
5571d7fec4Smrg *     copyright notice, this list of conditions and the following
5671d7fec4Smrg *     disclaimer in the documentation and/or other materials provided
5771d7fec4Smrg *     with the distribution.
5871d7fec4Smrg *
5971d7fec4Smrg *   * Neither the name of the National Semiconductor Corporation nor
6071d7fec4Smrg *     the names of its contributors may be used to endorse or promote
6171d7fec4Smrg *     products derived from this software without specific prior
6271d7fec4Smrg *     written permission.
6371d7fec4Smrg *
6471d7fec4Smrg * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
6571d7fec4Smrg * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
6671d7fec4Smrg * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
6771d7fec4Smrg * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
6871d7fec4Smrg * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY
6971d7fec4Smrg * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
7071d7fec4Smrg * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
7171d7fec4Smrg * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
7271d7fec4Smrg * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
7371d7fec4Smrg * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE,
7471d7fec4Smrg * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY
7571d7fec4Smrg * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
7671d7fec4Smrg * OF SUCH DAMAGE.
7771d7fec4Smrg *
7871d7fec4Smrg * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF
7971d7fec4Smrg * YOUR JURISDICTION. It is licensee's responsibility to comply with
8071d7fec4Smrg * any export regulations applicable in licensee's jurisdiction. Under
8171d7fec4Smrg * CURRENT (2001) U.S. export regulations this software
8271d7fec4Smrg * is eligible for export from the U.S. and can be downloaded by or
8371d7fec4Smrg * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed
8471d7fec4Smrg * destinations which include Cuba, Iraq, Libya, North Korea, Iran,
8571d7fec4Smrg * Syria, Sudan, Afghanistan and any other country to which the U.S.
8671d7fec4Smrg * has embargoed goods and services.
8771d7fec4Smrg *
8871d7fec4Smrg * END_NSC_LIC_BSD */
8971d7fec4Smrg
9071d7fec4Smrg/* NSC_LIC_GPL
9171d7fec4Smrg *
9271d7fec4Smrg * National Semiconductor Corporation Gnu General Public License for
9371d7fec4Smrg *
9471d7fec4Smrg * Panel Library
9571d7fec4Smrg *
9671d7fec4Smrg * (GPL License with Export Notice)
9771d7fec4Smrg *
9871d7fec4Smrg * Copyright (c) 1999-2001
9971d7fec4Smrg * National Semiconductor Corporation.
10071d7fec4Smrg * All rights reserved.
10171d7fec4Smrg *
10271d7fec4Smrg * Redistribution and use in source and binary forms, with or without
10371d7fec4Smrg * modification, are permitted under the terms of the GNU General
10471d7fec4Smrg * Public License as published by the Free Software Foundation; either
10571d7fec4Smrg * version 2 of the License, or (at your option) any later version
10671d7fec4Smrg *
10771d7fec4Smrg * In addition to the terms of the GNU General Public License, neither
10871d7fec4Smrg * the name of the National Semiconductor Corporation nor the names of
10971d7fec4Smrg * its contributors may be used to endorse or promote products derived
11071d7fec4Smrg * from this software without specific prior written permission.
11171d7fec4Smrg *
11271d7fec4Smrg * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
11371d7fec4Smrg * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
11471d7fec4Smrg * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
11571d7fec4Smrg * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
11671d7fec4Smrg * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY
11771d7fec4Smrg * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
11871d7fec4Smrg * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
11971d7fec4Smrg * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
12071d7fec4Smrg * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
12171d7fec4Smrg * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE,
12271d7fec4Smrg * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY
12371d7fec4Smrg * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
12471d7fec4Smrg * OF SUCH DAMAGE. See the GNU General Public License for more details.
12571d7fec4Smrg *
12671d7fec4Smrg * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF
12771d7fec4Smrg * YOUR JURISDICTION. It is licensee's responsibility to comply with
12871d7fec4Smrg * any export regulations applicable in licensee's jurisdiction. Under
12971d7fec4Smrg * CURRENT (2001) U.S. export regulations this software
13071d7fec4Smrg * is eligible for export from the U.S. and can be downloaded by or
13171d7fec4Smrg * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed
13271d7fec4Smrg * destinations which include Cuba, Iraq, Libya, North Korea, Iran,
13371d7fec4Smrg * Syria, Sudan, Afghanistan and any other country to which the U.S.
13471d7fec4Smrg * has embargoed goods and services.
13571d7fec4Smrg *
13671d7fec4Smrg * You should have received a copy of the GNU General Public License
13771d7fec4Smrg * along with this file; if not, write to the Free Software Foundation,
13871d7fec4Smrg * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
13971d7fec4Smrg *
14071d7fec4Smrg * END_NSC_LIC_GPL */
14171d7fec4Smrg
14271d7fec4Smrg#include "drac9210.h"
14371d7fec4Smrg
14471d7fec4Smrg#define	CS9210			0x40	/* Chip select pin */
14571d7fec4Smrg
14671d7fec4Smrg/* 9210 on Draco */
14771d7fec4Smrg#define CLOCK9210		0x04	/* Clock pin */
14871d7fec4Smrg#define	DATAIN9210		0x20	/* Data from 9210 */
14971d7fec4Smrg#define	DATAOUT9210		0x80	/* Data to 9210 */
15071d7fec4Smrg
15171d7fec4Smrgstatic void DracoWriteData(unsigned char data);
15271d7fec4Smrgstatic void DracoReadData(unsigned char *data);
15371d7fec4Smrgstatic void Draco9210GpioInit();
15471d7fec4Smrgstatic void Draco9210SetCS(void);
15571d7fec4Smrgstatic unsigned char Draco9210ReadReg(unsigned char index);
15671d7fec4Smrgstatic void Draco9210WriteReg(unsigned char index, unsigned char data);
15771d7fec4Smrgstatic void Draco9210ClearCS(void);
15871d7fec4Smrgstatic void Draco9210SetDataOut(void);
15971d7fec4Smrgstatic void Draco9210ClearDataOut(void);
16071d7fec4Smrgstatic unsigned char Draco9210ReadDataIn(void);
16171d7fec4Smrgstatic void Draco9210ToggleClock(void);
16271d7fec4Smrg
16371d7fec4Smrgvoid
16471d7fec4SmrgDraco9210Init(Pnl_PanelStat * pstat)
16571d7fec4Smrg{
16671d7fec4Smrg   unsigned char panelvalues[] = {
16771d7fec4Smrg      0x2, 0x80,
16871d7fec4Smrg      0x2, 0x24,
16971d7fec4Smrg      0x03, 0x00,
17071d7fec4Smrg      0xc0, 0x00,
17171d7fec4Smrg      0xc1, 0x00,
17271d7fec4Smrg      0xc2, 0x00,
17371d7fec4Smrg      0xc3, 0x00,
17471d7fec4Smrg      0xc4, 0x00,
17571d7fec4Smrg      0xc5, 0x01,
17671d7fec4Smrg      0xc6, 0xff,
17771d7fec4Smrg      0xc7, 0xff,
17871d7fec4Smrg      0xc8, 0x3,
17971d7fec4Smrg      0xc9, 0xfe,
18071d7fec4Smrg      0xca, 0x0,
18171d7fec4Smrg      0xcb, 0x3f,
18271d7fec4Smrg      0xcc, 0xc,
18371d7fec4Smrg      0xcd, 0x1,
18471d7fec4Smrg      0xce, 0xff,
18571d7fec4Smrg      0xcf, 0xc1,
18671d7fec4Smrg      0xd0, 0x0,
18771d7fec4Smrg      0xd1, 0x7e,
18871d7fec4Smrg      0xd2, 0x3,
18971d7fec4Smrg      0xd3, 0xfe,
19071d7fec4Smrg      0xd4, 0x3,
19171d7fec4Smrg      0xd5, 0x81,
19271d7fec4Smrg      0xd6, 0xfc,
19371d7fec4Smrg      0xd7, 0x3f,
19471d7fec4Smrg      0xd8, 0x14,
19571d7fec4Smrg      0xd9, 0x1e,
19671d7fec4Smrg      0xda, 0x0f,
19771d7fec4Smrg      0xdb, 0xc7,
19871d7fec4Smrg      0xdc, 0x29,
19971d7fec4Smrg      0xdd, 0xe1,
20071d7fec4Smrg      0xde, 0xf1,
20171d7fec4Smrg      0xdf, 0xf9,
20271d7fec4Smrg      0xe0, 0x2,
20371d7fec4Smrg      0xe1, 0xe,
20471d7fec4Smrg      0xe2, 0x1e,
20571d7fec4Smrg      0xe3, 0x3e,
20671d7fec4Smrg      0xe4, 0x04,
20771d7fec4Smrg      0xe5, 0x71,
20871d7fec4Smrg      0xe6, 0xe3,
20971d7fec4Smrg      0xe7, 0xcf,
21071d7fec4Smrg      0xe8, 0x1,
21171d7fec4Smrg      0xe9, 0x86,
21271d7fec4Smrg      0xea, 0x3c,
21371d7fec4Smrg      0xeb, 0xf3,
21471d7fec4Smrg      0xec, 0xa,
21571d7fec4Smrg      0xed, 0x39,
21671d7fec4Smrg      0xee, 0xc7,
21771d7fec4Smrg      0xef, 0x3d,
21871d7fec4Smrg
21971d7fec4Smrg      0xf0, 0x14,
22071d7fec4Smrg      0xf1, 0xc6,
22171d7fec4Smrg      0xf2, 0x39,
22271d7fec4Smrg      0xf3, 0xce,
22371d7fec4Smrg      0xf4, 0x3,
22471d7fec4Smrg      0xf5, 0x19,
22571d7fec4Smrg      0xf6, 0xce,
22671d7fec4Smrg      0xf7, 0x77,
22771d7fec4Smrg      0xf8, 0x0,
22871d7fec4Smrg      0xf9, 0x66,
22971d7fec4Smrg      0xfa, 0x33,
23071d7fec4Smrg      0xfb, 0xbb,
23171d7fec4Smrg      0xfc, 0x2d,
23271d7fec4Smrg      0xfd, 0x99,
23371d7fec4Smrg      0xfe, 0xdd,
23471d7fec4Smrg      0xff, 0xdd,
23571d7fec4Smrg
23671d7fec4Smrg      0x3, 0x1,
23771d7fec4Smrg      0xc0, 0x2,
23871d7fec4Smrg      0xc1, 0x22,
23971d7fec4Smrg      0xc2, 0x66,
24071d7fec4Smrg      0xc3, 0x66,
24171d7fec4Smrg      0xc4, 0x0,
24271d7fec4Smrg      0xc5, 0xcd,
24371d7fec4Smrg      0xc6, 0x99,
24471d7fec4Smrg      0xc7, 0xbb,
24571d7fec4Smrg      0xc8, 0x5,
24671d7fec4Smrg      0xc9, 0x32,
24771d7fec4Smrg      0xca, 0x66,
24871d7fec4Smrg      0xcb, 0xdd,
24971d7fec4Smrg      0xcc, 0x1a,
25071d7fec4Smrg      0xcd, 0x4d,
25171d7fec4Smrg      0xce, 0x9b,
25271d7fec4Smrg      0xcf, 0x6f,
25371d7fec4Smrg      0xd0, 0x0,
25471d7fec4Smrg      0xd1, 0x92,
25571d7fec4Smrg      0xd2, 0x6d,
25671d7fec4Smrg      0xd3, 0xb6,
25771d7fec4Smrg      0xd4, 0x5,
25871d7fec4Smrg      0xd5, 0x25,
25971d7fec4Smrg      0xd6, 0xb6,
26071d7fec4Smrg      0xd7, 0xdb,
26171d7fec4Smrg      0xd8, 0x2,
26271d7fec4Smrg      0xd9, 0x5a,
26371d7fec4Smrg      0xda, 0x4b,
26471d7fec4Smrg      0xdb, 0x6d,
26571d7fec4Smrg      0xdc, 0x29,
26671d7fec4Smrg      0xdd, 0xa5,
26771d7fec4Smrg      0xde, 0xb5,
26871d7fec4Smrg      0xdf, 0xb7,
26971d7fec4Smrg      0xe0, 0x4,
27071d7fec4Smrg      0xe1, 0x4a,
27171d7fec4Smrg      0xe2, 0x5a,
27271d7fec4Smrg      0xe3, 0xda,
27371d7fec4Smrg      0xe4, 0x12,
27471d7fec4Smrg      0xe5, 0x95,
27571d7fec4Smrg      0xe6, 0xad,
27671d7fec4Smrg      0xe7, 0x6f,
27771d7fec4Smrg      0xe8, 0x1,
27871d7fec4Smrg      0xe9, 0x2a,
27971d7fec4Smrg      0xea, 0x56,
28071d7fec4Smrg      0xeb, 0xb5,
28171d7fec4Smrg      0xec, 0xe,
28271d7fec4Smrg      0xed, 0x55,
28371d7fec4Smrg      0xee, 0xab,
28471d7fec4Smrg      0xef, 0x5f,
28571d7fec4Smrg      0xf0, 0x0,
28671d7fec4Smrg      0xf1, 0xaa,
28771d7fec4Smrg      0xf2, 0x55,
28871d7fec4Smrg      0xf3, 0xea,
28971d7fec4Smrg      0xf4, 0x1,
29071d7fec4Smrg      0xf5, 0x55,
29171d7fec4Smrg      0xf6, 0xaa,
29271d7fec4Smrg      0xf7, 0xbf,
29371d7fec4Smrg      0xf8, 0x6,
29471d7fec4Smrg      0xf9, 0xaa,
29571d7fec4Smrg      0xfa, 0x55,
29671d7fec4Smrg      0xfb, 0x55,
29771d7fec4Smrg      0xfc, 0x39,
29871d7fec4Smrg      0xfd, 0x55,
29971d7fec4Smrg      0xfe, 0xff,
30071d7fec4Smrg      0xff, 0xff,
30171d7fec4Smrg
30271d7fec4Smrg      0x3, 0x2,
30371d7fec4Smrg      0xc0, 0x0,
30471d7fec4Smrg      0xc1, 0x0,
30571d7fec4Smrg      0xc2, 0xaa,
30671d7fec4Smrg      0xc3, 0xaa,
30771d7fec4Smrg      0xc4, 0x6,
30871d7fec4Smrg      0xc5, 0xab,
30971d7fec4Smrg      0xc6, 0x55,
31071d7fec4Smrg      0xc7, 0x55,
31171d7fec4Smrg      0xc8, 0x01,
31271d7fec4Smrg      0xc9, 0x54,
31371d7fec4Smrg      0xca, 0xaa,
31471d7fec4Smrg      0xcb, 0xbf,
31571d7fec4Smrg      0xcc, 0x8,
31671d7fec4Smrg      0xcd, 0xab,
31771d7fec4Smrg      0xce, 0x55,
31871d7fec4Smrg      0xcf, 0xeb,
31971d7fec4Smrg      0xd0, 0x6,
32071d7fec4Smrg      0xd1, 0x54,
32171d7fec4Smrg      0xd2, 0xab,
32271d7fec4Smrg      0xd3, 0x5e,
32371d7fec4Smrg      0xd4, 0x1,
32471d7fec4Smrg      0xd5, 0x2b,
32571d7fec4Smrg      0xd6, 0x56,
32671d7fec4Smrg      0xd7, 0xb5,
32771d7fec4Smrg      0xd8, 0x12,
32871d7fec4Smrg      0xd9, 0x94,
32971d7fec4Smrg      0xda, 0xad,
33071d7fec4Smrg      0xdb, 0x6f,
33171d7fec4Smrg      0xdc, 0x2d,
33271d7fec4Smrg      0xdd, 0x4b,
33371d7fec4Smrg      0xde, 0x5b,
33471d7fec4Smrg      0xdf, 0xdb,
33571d7fec4Smrg      0xe0, 0x0,
33671d7fec4Smrg      0xe1, 0xa4,
33771d7fec4Smrg      0xe2, 0xb4,
33871d7fec4Smrg      0xe3, 0xb6,
33971d7fec4Smrg      0xe4, 0x2,
34071d7fec4Smrg      0xe5, 0x5b,
34171d7fec4Smrg      0xe6, 0x4b,
34271d7fec4Smrg      0xe7, 0x6d,
34371d7fec4Smrg      0xe8, 0x5,
34471d7fec4Smrg      0xe9, 0x24,
34571d7fec4Smrg      0xea, 0xb6,
34671d7fec4Smrg      0xeb, 0xdb,
34771d7fec4Smrg      0xec, 0x8,
34871d7fec4Smrg      0xed, 0x93,
34971d7fec4Smrg      0xee, 0x6d,
35071d7fec4Smrg      0xef, 0xb7,
35171d7fec4Smrg      0xf0, 0x12,
35271d7fec4Smrg      0xf1, 0x4c,
35371d7fec4Smrg      0xf2, 0x9b,
35471d7fec4Smrg      0xf3, 0x6e,
35571d7fec4Smrg      0xf4, 0x5,
35671d7fec4Smrg      0xf5, 0x33,
35771d7fec4Smrg      0xf6, 0x66,
35871d7fec4Smrg      0xf7, 0xdd,
35971d7fec4Smrg      0xf8, 0x0,
36071d7fec4Smrg      0xf9, 0xcc,
36171d7fec4Smrg      0xfa, 0x99,
36271d7fec4Smrg      0xfb, 0xbb,
36371d7fec4Smrg      0xfc, 0x2b,
36471d7fec4Smrg      0xfd, 0x33,
36571d7fec4Smrg      0xfe, 0x77,
36671d7fec4Smrg      0xff, 0x77,
36771d7fec4Smrg
36871d7fec4Smrg      0x3, 0x3,
36971d7fec4Smrg      0xc0, 0x4,
37071d7fec4Smrg      0xc1, 0x88,
37171d7fec4Smrg      0xc2, 0xcc,
37271d7fec4Smrg      0xc3, 0xcc,
37371d7fec4Smrg      0xc4, 0x0,
37471d7fec4Smrg      0xc5, 0x67,
37571d7fec4Smrg      0xc6, 0x33,
37671d7fec4Smrg      0xc7, 0xbb,
37771d7fec4Smrg      0xc8, 0x3,
37871d7fec4Smrg      0xc9, 0x18,
37971d7fec4Smrg      0xca, 0xce,
38071d7fec4Smrg      0xcb, 0x77,
38171d7fec4Smrg      0xcc, 0x1c,
38271d7fec4Smrg      0xcd, 0xc7,
38371d7fec4Smrg      0xce, 0x39,
38471d7fec4Smrg      0xcf, 0xcf,
38571d7fec4Smrg
38671d7fec4Smrg      0xd0, 0x2,
38771d7fec4Smrg      0xd1, 0x38,
38871d7fec4Smrg      0xd2, 0xc7,
38971d7fec4Smrg      0xd3, 0x3c,
39071d7fec4Smrg      0xd4, 0x1,
39171d7fec4Smrg      0xd5, 0x87,
39271d7fec4Smrg      0xd6, 0x3c,
39371d7fec4Smrg      0xd7, 0xf3,
39471d7fec4Smrg      0xd8, 0x4,
39571d7fec4Smrg      0xd9, 0x70,
39671d7fec4Smrg      0xda, 0xe3,
39771d7fec4Smrg      0xdb, 0xcf,
39871d7fec4Smrg      0xdc, 0x2b,
39971d7fec4Smrg      0xdd, 0xf,
40071d7fec4Smrg      0xde, 0x1f,
40171d7fec4Smrg      0xdf, 0x3f,
40271d7fec4Smrg      0xe0, 0x00,
40371d7fec4Smrg      0xe1, 0xe0,
40471d7fec4Smrg      0xe2, 0xf0,
40571d7fec4Smrg      0xe3, 0xf8,
40671d7fec4Smrg      0xe4, 0x14,
40771d7fec4Smrg      0xe5, 0x1f,
40871d7fec4Smrg      0xe6, 0xf,
40971d7fec4Smrg      0xe7, 0xc7,
41071d7fec4Smrg      0xe8, 0x3,
41171d7fec4Smrg      0xe9, 0x80,
41271d7fec4Smrg      0xea, 0xfc,
41371d7fec4Smrg      0xeb, 0x3f,
41471d7fec4Smrg      0xec, 0x8,
41571d7fec4Smrg      0xed, 0x7f,
41671d7fec4Smrg      0xee, 0x3,
41771d7fec4Smrg      0xef, 0xff,
41871d7fec4Smrg      0xf0, 0x4,
41971d7fec4Smrg      0xf1, 0x0,
42071d7fec4Smrg      0xf2, 0xff,
42171d7fec4Smrg      0xf3, 0xc0,
42271d7fec4Smrg      0xf4, 0x3,
42371d7fec4Smrg      0xf5, 0xff,
42471d7fec4Smrg      0xf6, 0x0,
42571d7fec4Smrg      0xf7, 0x3f,
42671d7fec4Smrg      0xf8, 0x0,
42771d7fec4Smrg      0xf9, 0x0,
42871d7fec4Smrg      0xfa, 0xff,
42971d7fec4Smrg      0xfb, 0xff,
43071d7fec4Smrg      0xfc, 0x3f,
43171d7fec4Smrg      0xfd, 0xff,
43271d7fec4Smrg      0xfe, 0xff,
43371d7fec4Smrg      0xff, 0xff,
43471d7fec4Smrg      0x3, 0x4,
43571d7fec4Smrg
43671d7fec4Smrg      /* Setup the Diter to Pattern33 */
43771d7fec4Smrg      0x80, 0xdd,
43871d7fec4Smrg      0x81, 0xdd,
43971d7fec4Smrg      0x82, 0x33,
44071d7fec4Smrg      0x83, 0x33,
44171d7fec4Smrg      0x84, 0xdd,
44271d7fec4Smrg      0x85, 0xdd,
44371d7fec4Smrg      0x86, 0x33,
44471d7fec4Smrg      0x87, 0x33,
44571d7fec4Smrg      0x88, 0x33,
44671d7fec4Smrg      0x89, 0x33,
44771d7fec4Smrg      0x8a, 0x77,
44871d7fec4Smrg      0x8b, 0x77,
44971d7fec4Smrg      0x8c, 0x33,
45071d7fec4Smrg      0x8d, 0x33,
45171d7fec4Smrg      0x8e, 0x77,
45271d7fec4Smrg      0x8f, 0x77,
45371d7fec4Smrg      0x90, 0xdd,
45471d7fec4Smrg      0x91, 0xdd,
45571d7fec4Smrg      0x92, 0x33,
45671d7fec4Smrg      0x93, 0x33,
45771d7fec4Smrg      0x94, 0xdd,
45871d7fec4Smrg      0x95, 0xdd,
45971d7fec4Smrg      0x96, 0x33,
46071d7fec4Smrg      0x97, 0x33,
46171d7fec4Smrg      0x98, 0x33,
46271d7fec4Smrg      0x99, 0x33,
46371d7fec4Smrg      0x9a, 0x77,
46471d7fec4Smrg      0x9b, 0x77,
46571d7fec4Smrg      0x9c, 0x33,
46671d7fec4Smrg      0x9d, 0x33,
46771d7fec4Smrg      0x9e, 0x77,
46871d7fec4Smrg      0x9f, 0x77,
46971d7fec4Smrg
47071d7fec4Smrg      0x4, 0x20,
47171d7fec4Smrg      0x5, 0x3,
47271d7fec4Smrg      0x6, 0x56,
47371d7fec4Smrg      0x7, 0x2,
47471d7fec4Smrg      0x8, 0x1c,
47571d7fec4Smrg      0x9, 0x0,
47671d7fec4Smrg      0xa, 0x26,
47771d7fec4Smrg      0xb, 0x0,
47871d7fec4Smrg      0xc, 0x15,
47971d7fec4Smrg      0xd, 0x4,
48071d7fec4Smrg      0xe, 0x50,
48171d7fec4Smrg      0xf, 0x4,
48271d7fec4Smrg      0x10, 0xfa,
48371d7fec4Smrg      0x11, 0x0,
48471d7fec4Smrg      0x12, 0xc8,
48571d7fec4Smrg      0x13, 0x0,
48671d7fec4Smrg      0x14, 0x31,
48771d7fec4Smrg      0x15, 0x23,
48871d7fec4Smrg      0x16, 0x0,
48971d7fec4Smrg
49071d7fec4Smrg      /* Enable DSTN panel */
49171d7fec4Smrg      0x2, 0x64
49271d7fec4Smrg   };
49371d7fec4Smrg   unsigned char index, data;
49471d7fec4Smrg   int i;
49571d7fec4Smrg
49671d7fec4Smrg   gfx_delay_milliseconds(100);
49771d7fec4Smrg   Draco9210GpioInit();
49871d7fec4Smrg   Draco9210SetCS();
49971d7fec4Smrg   Draco9210ToggleClock();
50071d7fec4Smrg   Draco9210ToggleClock();
50171d7fec4Smrg   Draco9210ToggleClock();
50271d7fec4Smrg   Draco9210ToggleClock();
50371d7fec4Smrg   Draco9210ClearCS();
50471d7fec4Smrg
50571d7fec4Smrg#if defined(_WIN32)			/* For Windows */
50671d7fec4Smrg   for (i = 0; i < 10; i++) {
50771d7fec4Smrg      _asm {
50871d7fec4Smrg      out 0EDh, al}
50971d7fec4Smrg   }
51071d7fec4Smrg
51171d7fec4Smrg#elif defined(linux)			/* Linux */
51271d7fec4Smrg
51371d7fec4Smrg#endif
51471d7fec4Smrg
51571d7fec4Smrg   for (i = 0; i < 630; i += 2) {
51671d7fec4Smrg      index = panelvalues[i];
51771d7fec4Smrg      data = panelvalues[i + 1];
51871d7fec4Smrg      Draco9210WriteReg(index, data);
51971d7fec4Smrg   }
52071d7fec4Smrg
52171d7fec4Smrg}
52271d7fec4Smrg
52371d7fec4Smrgstatic void
52471d7fec4SmrgDracoWriteData(unsigned char data)
52571d7fec4Smrg{
52671d7fec4Smrg   int i;
52771d7fec4Smrg   unsigned char mask = 0x80, databit;
52871d7fec4Smrg
52971d7fec4Smrg   for (i = 0; i < 8; i++) {
53071d7fec4Smrg
53171d7fec4Smrg      databit = data & mask;
53271d7fec4Smrg      if (data & mask) {
53371d7fec4Smrg	 Draco9210SetDataOut();
53471d7fec4Smrg      } else {
53571d7fec4Smrg	 Draco9210ClearDataOut();
53671d7fec4Smrg      }
53771d7fec4Smrg      mask >>= 1;
53871d7fec4Smrg      Draco9210ToggleClock();
53971d7fec4Smrg   }
54071d7fec4Smrg}
54171d7fec4Smrg
54271d7fec4Smrgstatic void
54371d7fec4SmrgDracoReadData(unsigned char *data)
54471d7fec4Smrg{
54571d7fec4Smrg   int i;
54671d7fec4Smrg   unsigned char tmp = 0, readbit;
54771d7fec4Smrg
54871d7fec4Smrg   Draco9210ClearDataOut();
54971d7fec4Smrg   Draco9210ToggleClock();
55071d7fec4Smrg   for (i = 0; i < 7; i++) {
55171d7fec4Smrg      readbit = Draco9210ReadDataIn();
55271d7fec4Smrg      tmp |= (readbit & 0x1);
55371d7fec4Smrg      tmp <<= 1;
55471d7fec4Smrg      Draco9210ToggleClock();
55571d7fec4Smrg   }
55671d7fec4Smrg   readbit = Draco9210ReadDataIn();
55771d7fec4Smrg   tmp |= (readbit & 0x1);
55871d7fec4Smrg   *data = tmp;
55971d7fec4Smrg}
56071d7fec4Smrg
56171d7fec4Smrg#if defined(_WIN32)			/* For Windows */
56271d7fec4Smrg
56371d7fec4Smrgvoid
56471d7fec4SmrgDraco9210GpioInit()
56571d7fec4Smrg{
56671d7fec4Smrg   _asm {
56771d7fec4Smrg      pushf
56871d7fec4Smrg      cli
56971d7fec4Smrg	  mov dx, 0CF8h
57071d7fec4Smrg	  mov eax, CX55x0_ID + 090h
57171d7fec4Smrg	  out dx, eax
57271d7fec4Smrg	  mov dx, 0CFCh
57371d7fec4Smrg	  mov al, 0CFh
57471d7fec4Smrg	  mov ah, 00h
57571d7fec4Smrg	  out dx, ax
57671d7fec4Smrg	  popf
57771d7fec4Smrg   }
57871d7fec4Smrg}
57971d7fec4Smrg
58071d7fec4Smrgvoid
58171d7fec4SmrgDraco9210SetCS()
58271d7fec4Smrg{
58371d7fec4Smrg   _asm {
58471d7fec4Smrg      pushf
58571d7fec4Smrg      ;Point to PCI address register
58671d7fec4Smrg      mov dx, 0CF8h
58771d7fec4Smrg      ;55 XX GPIO data register
58871d7fec4Smrg      mov eax, CX55x0_ID + 090h
58971d7fec4Smrg      out dx, eax
59071d7fec4Smrg      ;Point to PCI data register (CFCh)
59171d7fec4Smrg      mov dx, 0CFCh
59271d7fec4Smrg
59371d7fec4Smrg      in ax, dx
59471d7fec4Smrg      and ah, 30h
59571d7fec4Smrg      mov ah, c92DataReg
59671d7fec4Smrg      or ah, CS9210
59771d7fec4Smrg      mov c92DataReg, ah
59871d7fec4Smrg      out dx, ax
59971d7fec4Smrg      popf
60071d7fec4Smrg   }
60171d7fec4Smrg}
60271d7fec4Smrg
60371d7fec4Smrgvoid
60471d7fec4SmrgDraco9210ClearCS()
60571d7fec4Smrg{
60671d7fec4Smrg   _asm {
60771d7fec4Smrg      pushf
60871d7fec4Smrg      ;Point to PCI address register
60971d7fec4Smrg      mov dx, 0CF8h
61071d7fec4Smrg      ;55 XX GPIO data register
61171d7fec4Smrg      mov eax, CX55x0_ID + 090h
61271d7fec4Smrg      out dx, eax
61371d7fec4Smrg      ;Point to PCI data register (CFCh)
61471d7fec4Smrg      mov dx, 0CFCh
61571d7fec4Smrg      ;Set CS LOW
61671d7fec4Smrg      in ax, dx
61771d7fec4Smrg      mov ah, c92DataReg
61871d7fec4Smrg      and ah, NOT CS9210
61971d7fec4Smrg      mov c92DataReg, ah
62071d7fec4Smrg      out dx, ax
62171d7fec4Smrg      popf
62271d7fec4Smrg   }
62371d7fec4Smrg}
62471d7fec4Smrg
62571d7fec4Smrgvoid
62671d7fec4SmrgDraco9210SetDataOut()
62771d7fec4Smrg{
62871d7fec4Smrg   _asm {
62971d7fec4Smrg      pushf
63071d7fec4Smrg      ;Point to PCI address register
63171d7fec4Smrg      mov dx, 0CF8h
63271d7fec4Smrg      ;55 XX GPIO data register
63371d7fec4Smrg      mov eax, CX55x0_ID + 090h
63471d7fec4Smrg      out dx, eax
63571d7fec4Smrg      ;Point to PCI data register (CFCh)
63671d7fec4Smrg      mov dx, 0CFCh
63771d7fec4Smrg      ;Set DATA HIGH
63871d7fec4Smrg      in ax, dx
63971d7fec4Smrg      mov ah, c92DataReg
64071d7fec4Smrg      or ah, DATAOUT9210
64171d7fec4Smrg      mov c92DataReg, ah
64271d7fec4Smrg      out dx, ax
64371d7fec4Smrg      popf
64471d7fec4Smrg   }
64571d7fec4Smrg}
64671d7fec4Smrg
64771d7fec4Smrgvoid
64871d7fec4SmrgDraco9210ClearDataOut()
64971d7fec4Smrg{
65071d7fec4Smrg   _asm {
65171d7fec4Smrg      pushf
65271d7fec4Smrg      ;Point to PCI address register
65371d7fec4Smrg      mov dx, 0CF8h
65471d7fec4Smrg      mov eax, CX55x0_ID + 090h;
65571d7fec4Smrg      ;55 XX GPIO data register
65671d7fec4Smrg      out dx, eax
65771d7fec4Smrg      ;Point to PCI data register (CFCh)
65871d7fec4Smrg      mov dx, 0CFCh
65971d7fec4Smrg      ;Set Data LOW
66071d7fec4Smrg      in ax, dx
66171d7fec4Smrg      mov ah, c92DataReg
66271d7fec4Smrg      and ah, NOT DATAOUT9210
66371d7fec4Smrg      mov c92DataReg, ah
66471d7fec4Smrg      out dx, ax
66571d7fec4Smrg      popf
66671d7fec4Smrg   }
66771d7fec4Smrg}
66871d7fec4Smrg
66971d7fec4Smrgunsigned char
67071d7fec4SmrgDraco9210ReadDataIn()
67171d7fec4Smrg{
67271d7fec4Smrg   unsigned char readdata;
67371d7fec4Smrg
67471d7fec4Smrg   _asm {
67571d7fec4Smrg      pushf
67671d7fec4Smrg      ;Point to PCI address register
67771d7fec4Smrg      mov dx, 0CF8h
67871d7fec4Smrg      ;55 XX GPIO data register
67971d7fec4Smrg      mov eax, CX55x0_ID + 090h
68071d7fec4Smrg      out dx, eax
68171d7fec4Smrg      ;Point to PCI data register (CFCh)
68271d7fec4Smrg      mov dx, 0FCh
68371d7fec4Smrg
68471d7fec4Smrg      in ax, dx
68571d7fec4Smrg      ;Preserve just Data IN bit
68671d7fec4Smrg      and ah, DATAIN9210
68771d7fec4Smrg      mov al, ah
68871d7fec4Smrg      cmp al, 0
68971d7fec4Smrg      ;Is it LOW ?
69071d7fec4Smrg      je readDataLow
69171d7fec4Smrg      ;must be HIGH
69271d7fec4Smrg      mov al, 1
69371d7fec4Smrg   readDataLow:
69471d7fec4Smrg      mov readdata, al
69571d7fec4Smrg      popf
69671d7fec4Smrg   }
69771d7fec4Smrg   return (readdata);
69871d7fec4Smrg}
69971d7fec4Smrg
70071d7fec4Smrgvoid
70171d7fec4SmrgDraco9210ToggleClock()
70271d7fec4Smrg{
70371d7fec4Smrg   _asm {
70471d7fec4Smrg      pushf
70571d7fec4Smrg      ;Point to PCI address register
70671d7fec4Smrg      mov dx, 0CF8h
70771d7fec4Smrg      ;55 XX GPIO data register
70871d7fec4Smrg      mov eax, CX55x0_ID + 090h
70971d7fec4Smrg      ;Point to PCI data register (CFCh)
71071d7fec4Smrg      out dx, eax
71171d7fec4Smrg      mov dx, 0CFCh
71271d7fec4Smrg      ;SET CLOCK
71371d7fec4Smrg      in ax, dx
71471d7fec4Smrg      mov ah, c92DataReg
71571d7fec4Smrg      or ah, CLOCK9210
71671d7fec4Smrg      mov c92DataReg, ah
71771d7fec4Smrg      out dx, ax
71871d7fec4Smrg      out 0EDh, al	/*      IOPAUSE */
71971d7fec4Smrg      ;Point to PCI address register
72071d7fec4Smrg      mov dx, 0CF8h
72171d7fec4Smrg      ;55 XX GPIO data register
72271d7fec4Smrg      mov eax, CX55x0_ID + 090h
72371d7fec4Smrg      out dx, eax
72471d7fec4Smrg      ;Point to PCI data register (CFCh)
72571d7fec4Smrg      mov dx, 0CFCh;
72671d7fec4Smrg      ;CLEAR CLOCK
72771d7fec4Smrg      in ax, dx
72871d7fec4Smrg      mov ah, c92DataReg
72971d7fec4Smrg      and ah, NOT CLOCK9210
73071d7fec4Smrg      mov c92DataReg, ah
73171d7fec4Smrg      out dx, ax
73271d7fec4Smrg      popf
73371d7fec4Smrg   }
73471d7fec4Smrg}
73571d7fec4Smrg
73671d7fec4Smrg#elif defined(linux)			/* Linux */
73771d7fec4Smrg
73871d7fec4Smrgvoid
73971d7fec4SmrgDraco9210GpioInit()
74071d7fec4Smrg{
74171d7fec4Smrg}
74271d7fec4Smrgvoid
74371d7fec4SmrgDraco9210SetCS()
74471d7fec4Smrg{
74571d7fec4Smrg}
74671d7fec4Smrgvoid
74771d7fec4SmrgDraco9210ClearCS()
74871d7fec4Smrg{
74971d7fec4Smrg}
75071d7fec4Smrgvoid
75171d7fec4SmrgDraco9210SetDataOut()
75271d7fec4Smrg{
75371d7fec4Smrg}
75471d7fec4Smrgvoid
75571d7fec4SmrgDraco9210ClearDataOut()
75671d7fec4Smrg{
75771d7fec4Smrg}
75871d7fec4Smrgunsigned char
75971d7fec4SmrgDraco9210ReadDataIn()
76071d7fec4Smrg{
76171d7fec4Smrg}
76271d7fec4Smrgvoid
76371d7fec4SmrgDraco9210ToggleClock()
76471d7fec4Smrg{
76571d7fec4Smrg}
76671d7fec4Smrg
76771d7fec4Smrg#endif
76871d7fec4Smrg
76971d7fec4Smrgunsigned char
77071d7fec4SmrgDraco9210ReadReg(unsigned char index)
77171d7fec4Smrg{
77271d7fec4Smrg   unsigned char data;
77371d7fec4Smrg
77471d7fec4Smrg   Draco9210SetCS();
77571d7fec4Smrg   Draco9210ToggleClock();
77671d7fec4Smrg   Draco9210SetDataOut();
77771d7fec4Smrg   Draco9210ToggleClock();
77871d7fec4Smrg   Draco9210ClearDataOut();
77971d7fec4Smrg   Draco9210ToggleClock();
78071d7fec4Smrg   Draco9210ClearDataOut();
78171d7fec4Smrg   Draco9210ToggleClock();
78271d7fec4Smrg   Draco9210ClearDataOut();
78371d7fec4Smrg   Draco9210ToggleClock();
78471d7fec4Smrg
78571d7fec4Smrg   DracoWriteData(index);
78671d7fec4Smrg   DracoReadData(&data);
78771d7fec4Smrg
78871d7fec4Smrg   return (data);
78971d7fec4Smrg}
79071d7fec4Smrg
79171d7fec4Smrgvoid
79271d7fec4SmrgDraco9210WriteReg(unsigned char index, unsigned char data)
79371d7fec4Smrg{
79471d7fec4Smrg
79571d7fec4Smrg   Draco9210SetCS();
79671d7fec4Smrg   Draco9210ToggleClock();
79771d7fec4Smrg
79871d7fec4Smrg   Draco9210SetDataOut();
79971d7fec4Smrg   Draco9210ToggleClock();
80071d7fec4Smrg
80171d7fec4Smrg   Draco9210ClearDataOut();
80271d7fec4Smrg   Draco9210ToggleClock();
80371d7fec4Smrg
80471d7fec4Smrg   Draco9210ClearDataOut();
80571d7fec4Smrg   Draco9210ToggleClock();
80671d7fec4Smrg
80771d7fec4Smrg   Draco9210SetDataOut();
80871d7fec4Smrg   Draco9210ToggleClock();
80971d7fec4Smrg
81071d7fec4Smrg   DracoWriteData(index);
81171d7fec4Smrg   DracoWriteData(data);
81271d7fec4Smrg
81371d7fec4Smrg   Draco9210ClearDataOut();
81471d7fec4Smrg   Draco9210ToggleClock();
81571d7fec4Smrg
81671d7fec4Smrg   Draco9210ClearCS();
81771d7fec4Smrg   Draco9210ToggleClock();
81871d7fec4Smrg   Draco9210ToggleClock();
81971d7fec4Smrg
82071d7fec4Smrg}
821