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