www.pudn.com > init_t102_au.rar > gpio.c


#include "user_init.h" 
#include "pu8560.h" 
#include "config.h" 
#include "regmap.h" 
#include "global.h" 
 
 
#include "epp.h" 
#include "gpio.h" 
 
#ifdef SUPPORT_CARD_STORAGE 
#include "cardfs.h" 
#endif 
#include "osd.h" 
//#define     GPIO_DBG        1 
#include "iop.h" 
#include "kernel.h" 
#ifdef EASTWIN 
#include "iop.h" 
#include "kernel.h"         // Kevin Sep 20,04  
extern void show_level(int id,INT8 level,BYTE total_level);  
//extern void load_t102_factory_value(void); 
 
#if 1 
/* Default parameter table of AN2526H */ 
unsigned char color_drv_data[16] = { 0x84,0x8b,0xbf,0x73,/* 0,1,2,3 */ 
                                     0x47,0xca,0xad,0x7f,/* 4,5,6,7 */             
                                     0x5f,0x5f,0x85,0x7f,/* 8,9,10,11 */ 
                                     0xe4,0x6e,0x3c,0xcc /* 12,13,14,15 */ 
                                    };  
#endif 
 
#if 0 
/* Default parameter table of AN2526H from Maple */ 
unsigned char color_drv_data[16] = { 0x13,0x11,0xe0,0xdd,/* 0,1,2,3 */ 
                                     0x8f,0xed,0xa5,0x80,/* 4,5,6,7 */             
                                     0x7f,0x73,0x80,0x80,/* 8,9,10,11 */ 
                                     0xff,0x82,0x80,0xac /* 12,13,14,15 */ 
                                    };  
#endif 
#endif 
 
#ifdef SUPPORT_Auo_2inch_Digital_panel 
void init_auo_digital_panel(void); 
#endif 
 
#ifdef SUPPORT_Auo_UPS053_Digital_panel 
#if 0 
BYTE auo_053_ntsc[25]={ /*00*/0xE3, /*01*/0xE0, /*02*/0x96, /*03*/0x06,  
                        /*04*/0x00,/*05*/0x0E, /*06*/0x52, /*07*/0x02, 
                        /*08*/0x6A, /*09*/0x9C,/*0A*/0xB4, /*0B*/0x50, 
                        /*0C*/0xF7, /*0D*/0x80, /*0E*/0x20, /*0F*/0xC1, 
                        /*10*/0xCE, /*11*/0x07, /*12*/0x91, /*13*/0x01, 
                        /*14*/0x80, /*15*/0x00, /*16*/0x00, /*17*/0x00, 
                        /*18*/0x00 
                    }; 
                     
                 
                     
BYTE auo_053_ntsc[25]={ /*00*/0xE2, /*01*/0x28, /*02*/0x96, /*03*/0x06,  
                        /*04*/0x00,/*05*/0x10, /*06*/0x52, /*07*/0x02, 
                        /*08*/0x6A, /*09*/0x9C,/*0A*/0xB4, /*0B*/0x50, 
                        /*0C*/0xF7, /*0D*/0x80, /*0E*/0x20, /*0F*/0xC1, 
                        /*10*/0xCE, /*11*/0x00, /*12*/0x91, /*13*/0x01, 
                        /*14*/0x30, /*15*/0x00, /*16*/0x00, /*17*/0x00, 
                        /*18*/0xc7 
                    };                   
BYTE auo_053_ntsc[25]={ 
         /*00*/0xE1, /*1*/0x28, /*2*/0x96, /*3*/0x06,  
         /*04*/0x0B,/*5*/0x10, /*6*/0x15, /*7*/0x07, 
         /*08*/0x44, /*9*/0x9C,/*A*/0xB4, /*B*/0x52, 
         /*0C*/0xE4, /*D=4A-DVD;8A-decoder*/0x4A, /*E*/0x60, /*F*/0x40, 
         /*10*/0x6C, /*1*/0x00, /*2*/0x91, /*3*/0x01, 
         /*14*/0x30, /*5*/0xFF, /*6*/0x00, /*7*/0x00, 
         /*18*/0x47 
};                       
#endif     
BYTE auo_053_ntsc[25]={ /*00*/0xE2, /*01*/0x28, /*02*/0x96, /*03*/0x06,  
                        /*04*/0x00,/*05*/0x10, /*06*/0x52, /*07*/0x02, 
                        /*08*/0x6A, /*09*/0x9C,/*0A*/0xB4, /*0B*/0x50, 
                        /*0C*/0xF7, /*0D*/0x80, /*0E*/0x20, /*0F*/0xC1, 
                        /*10*/0xCE, /*11*/0x00, /*12*/0x91, /*13*/0x01, 
                        /*14*/0x30, /*15*/0x00, /*16*/0x00, /*17*/0x00, 
                        /*18*/0xc7 
                     
};     
                              
                     
                     
void init_auo_ups053_digital_panel(void);                                
 
#endif 
 
#ifdef SUPPORT_Auo_UPS018_Digital_panel 
#if 0    
BYTE auo_018_ntsc[5]={ /*00*/0x7a, /*1*/0x4e, /*2*/0x71, /*3*/0x80,  
         /*04*/0x91};//////for 480*234 pannel (1) 
BYTE auo_018_ntsc[5]={ /*00*/0x7b, /*1*/0x4e, /*2*/0x71, /*3*/0x80,  
         /*04*/0x91};//////for 480*234 pannel (2)         
BYTE auo_018_ntsc[5]={ /*00*/0x67, /*1*/0x4e, /*2*/0x71, /*3*/0x80,  
         /*04*/0x91};/////for 7" pannel out for 4:3      
BYTE auo_018_ntsc[5]={ /*00*/0x7f, /*1*/0x4e, /*2*/0x71, /*3*/0x80,  
         /*04*/0x91};/////for 7" pannel out for 16:9              
#endif 
BYTE auo_018_ntsc[5]={ /*00*/0x7a, /*1*/0x4e, /*2*/0x71, /*3*/0x80,  
         /*04*/0x91};//////for 480*234 pannel (1) 
BYTE color_drv_data[16] = { 0x84,0x8b,0xbf,0x73,/* 0,1,2,3 */ 
                                     0x47,0xca,0xad,0x7f,/* 4,5,6,7 */             
                                     0x5f,0x5f,0x85,0x7f,/* 8,9,10,11 */ 
                                     0xe4,0x6e,0x3c,0xcc /* 12,13,14,15 */ 
                                    };  
BYTE an2526_data_ntsc[16] = 
    { 
        0x84,       // 0 Vertical sync. signal output position 
        0x8e,       // 1 Horizontal sync. signal output position 
        0x80,       // 2 PWM duty 
        0x98,       // 3 Common pulse amplitude 
        0x80,       // 4 Y-gain 
        0xcf,//0xbf,        // 5 Color gain 
        0xbe,//0xbe,        // 6 Hue 
        0x80,       // 7 Black-limiter level 
        0x5f,//0x6c,        // 8 Bright 
        0x80,       // 9 Y-aperture gain 
        0x8b,       // 10 R-ch. sub bright 
        0x87,       // 11 B-ch. sub bright 
        0x80,       // 12 White peak limiter 
        0x89,       // 13 Gamma-1 Knee level 
        0x80,       // 14 Gamma-2 Knee level 
        0x99//0x8a      // 15 RGB contrast 
    };     
          
              
void init_auo_ups018_digital_panel(void);  
#endif 
 
 
 
// 
// FUNCTION 
// reset_gpio 
// 
// restore GPIO initial state 
// 
 
#ifdef PORTABLE_DVD 
#include "gpio_portable.c" //0725 splitted for portable 
#endif 
 
#if defined(PMP_DVD) 
//extern void hwHddPowerOn(void);//kenny 2005/5/13 
extern void Set_PMP_Key(void); 
 
//kenny 2005/5/12 move the code from pmp_drv.c 
///for PMP power control 
void ioPowerOff(void) 
{ 
    //CUT_USB_PWR  set it to be low  
    regs0->sft_cfg1=regs0->sft_cfg1&(~(1<<0x02));//pin77,GPIO 17 
    GPIO_M_SET(17,1); 
    GPIO_E_SET(17,1); 
    GPIO_O_SET(17,0); 
     
}    
 
inline void hwCfpowerOn(void) 
{ 
    //pin78  set it to be high , let CF power on 
    regs0->sft_cfg1=regs0->sft_cfg1&(~(1<<0x01));//pin78,GPIO 18 
    GPIO_M_SET(18,1); 
    GPIO_E_SET(18,1); 
    GPIO_O_SET(18,1); 
     
}    
 
inline void hw8202IdeBusOn(void) 
{ 
    //pin61  set it to be high , let 8202 ide bus switch on 
    regs0->sft_cfg4=regs0->sft_cfg4&(~(1<<0x04));//pin61,GPIO 4 
    GPIO_M_SET(4,1); 
    GPIO_E_SET(4,1); 
    GPIO_O_SET(4,1); 
     
}    
 
inline void hwHddPowerOn(void) 
{ 
     //Power on HDD  HDD_PWR is set to high , pin152 GPIO 31 
     
      
     GPIO_M_SET(30,1); 
     GPIO_E_SET(30,1); 
     GPIO_O_SET(30,1); 
         
}    
 
void ioPowerOn(void) 
{ 
     
    //CUT_USB_PWR  set it to be high, cut the connect between VCC5_USB and Vcc5_IO  
    regs0->sft_cfg1=regs0->sft_cfg1&(~(1<<0x02));//pin77,GPIO 17 
    GPIO_M_SET(17,1); 
    GPIO_E_SET(17,1); 
    GPIO_O_SET(17,1); 
    hw8202IdeBusOn(); 
    hwHddPowerOn(); 
    delay_1ms(10); 
    hwCfpowerOn(); 
     
     
     
} 
 
 
 
void PMP_gpio_init() 
{ 
   regs0->sft_cfg1 &= ~(0x1 << 2);  //set GPIO 17 ca8202 pin77  yangli add 2005/4/20 
    GPIO_M_SET(CUT_PANEL_POWER ,1); 
    GPIO_E_SET(CUT_PANEL_POWER ,1);  
    GPIO_O_SET(CUT_PANEL_POWER ,0); 
      
    regs0->sft_cfg4 &= ~(0x1 << 2); 
    GPIO_M_SET(2 ,1); 
    GPIO_E_SET(2 ,0);  
     
    regs0->sft_cfg0 &= ~(0x1 << 5);     //set GPIO 38 ca8202 pin161 
    GPIO_E_SET(PC_USB_CONNECT_PIN, 0);  //pin161 is Pc Usb Vcc detect pin 
    //pin61  set it to be high , let 8202 ide bus switch on 
    regs0->sft_cfg4=regs0->sft_cfg4&(~(1<<0x04));  //pin61,GPIO 4 
    GPIO_M_SET(IDE_BUS_SWITCH_CONTROL_PIN,1); 
    GPIO_E_SET(IDE_BUS_SWITCH_CONTROL_PIN,1);  
    GPIO_O_SET(IDE_BUS_SWITCH_CONTROL_PIN,1); 
    //pin64 
    GPIO_M_SET(USB_DEVICE_CHIP_POWER_PIN,1); 
    GPIO_E_SET(USB_DEVICE_CHIP_POWER_PIN,1);  
   #ifdef PMP_PCB_VER_B  
    GPIO_O_SET(USB_DEVICE_CHIP_POWER_PIN,0); 
   #else  //PMP_PCB_VER_C 
    GPIO_O_SET(USB_DEVICE_CHIP_POWER_PIN,1); 
    hwHddPowerOn(); 
   #endif 
    #ifdef PMP_KEYBOARD//xyy add 2005-1-13 
    Set_PMP_Key(); 
    #endif 
} 
 
 
#endif //#if defined(PMP_DVD) 
 
 
//kenny 2005/5/12 move the code from pmp_drv.c 
#ifdef IDE_CF_SW 
 
 
/************************************************************************** 
 *                                                                        * 
 *  Function Name: hwCfCardStandby                                              * 
 *                                                                        * 
 *  Purposes:                                                             * 
 *      disable CF card interface                                         * 
 *  Descriptions:                                                         * 
 *                                                                        * 
 *  Arguments:                                                            * 
 *      on     : 1 -> CF enter to stanby                                  * 
 *               0 -> CF out of stand by mode                             * 
 *  Returns:                                                              * 
 *      None                                                              * 
 *  See also:                                                             * 
 *                                                                        * 
 **************************************************************************/ 
void hwCfCardStandby(UINT8 on) 
{ 
     
    regs0->sft_cfg3=regs0->sft_cfg3&(~(1<<7));//pin194 GPIO51 
    GPIO_M_SET(51,1); 
    GPIO_E_SET(51,1); 
     
    if(on) 
    { 
   // printf("CF is OFF #########################\n");     
    GPIO_O_SET(51,0); 
    delay_1ms(2); 
     
    } 
    else 
    { 
   // printf("CF is ON #########################\n"); 
    GPIO_O_SET(51,1); 
    delay_1ms(10); 
    } 
     
}    
 
 
 
#endif //#ifdef IDE_CF_SW  
 
 
 
 
 
 
 
 
 
void reset_gpio(void) 
{	  
    #ifdef  CONTROL_STANDBY_MCU 
     GPIO_M_SET(CONTROL_POWER_GPIO,1);    
     GPIO_E_SET(CONTROL_POWER_GPIO,1); 
     GPIO_O_SET(CONTROL_POWER_GPIO,1);       
    #endif 
 
    #ifdef MIDI_CHECK_PASSWORD_PASS_MCU //lijd 2005-2-25 14:25 
        //Set gpio STB,CLK,DAT use for RISC     
        GPIO_M_SET(STB, 1); 
        GPIO_M_SET(CLK, 1); 
        GPIO_M_SET(DAT, 1); 
        //Set gpio STB  as input port 
        GPIO_E_SET(STB, 0); 
        //Set gpio CLK,DAT as output port         
        GPIO_E_SET(CLK, 1); 
        GPIO_E_SET(DAT, 1); 
        //Set gpio CLK,DAT output high         
        GPIO_O_SET(CLK, 1); 
        GPIO_O_SET(DAT, 1); 
    #endif 
 
//wanghaoying add 2005-3-28 9:51 for wuxi-oritron w5690 type: slot in loader dector pin 
#ifdef W5690 
    //---> set 8202/256 pin62 as gpio5 
    regs0->sft_cfg2 &= ~(0x3 << 10); 
    regs0->sft_cfg4 &= ~(0x1 << 5); 
    regs0->sft_cfg8 &= ~(0x3 << 8); 
    //---> set gpio5 control by RISC 
    GPIO_M_SET(5,1); 
    //---> set gpio5 as input pin 
    GPIO_E_SET(5,0); 
 
    //---> set 8202/256 pin65 as gpio8 
    regs0->sft_cfg2 &= ~(0x3 << 10); 
    regs0->sft_cfg4 &= ~(0x1 << 6); 
    regs0->sft_cfg8 &= ~(0x1 << 9); 
    //---> set gpio8 control by RISC 
    GPIO_M_SET(8,1); 
    //---> set gpio8 as input pin 
    GPIO_E_SET(8,0); 
    //---> set 8202/256 pin78 as gpio18 
    regs0->sft_cfg1 &= ~(0x1 << 1); 
    regs0->sft_cfg8 &= ~(0x1 << 9); 
    //---> set gpio18 control by RISC 
    GPIO_M_SET(18,1); 
    //---> set gpio18 as input pin 
    GPIO_E_SET(18,0); 
#endif//#ifdef W5690 
     
    #if defined(MINTON_DVD)&&defined(TOP_DOOR_LOADER)  //liudan,for ngailik top_door sense pin,2005-1-12 11:31 
    regs0->sft_cfg4 &= ~(0x1 << 6); 
     
    GPIO_M_SET(8,1); 
    GPIO_E_SET(8,0); 
    #endif 
     
    #ifdef IR_SWITCH_CD_USB_CF_OTHER  //dingzhy use vfd data test bus switch 4-10-22 10:41 
      //   GPIO_E_SET(23,1); 
    #endif 
     
    #ifdef AKI_2CH_KEY_SCAN     //linrc add for AKI 2004-12-31 10:42 
    GPIO_M_SET(22,1); 
    GPIO_M_SET(23,1); 
    GPIO_E_SET(22,1); 
    GPIO_E_SET(23,1); 
    GPIO_O_SET(22,1); 
    GPIO_O_SET(23,1); 
    #endif 
     
    #ifdef NINTAUS_612_SCAN_KEY     //linrc 2004-6-9 17:52 
    regs0->sft_cfg1 &= ~(0x1 << 3);//PIN29 use as CARD_RESET gpio3 
     
    GPIO_M_SET(3,1); 
    GPIO_M_SET(4,1); 
    GPIO_M_SET(54,1);//set  used by RISC 
    GPIO_M_SET(55,1);//set    
    GPIO_M_SET(56,1);//set    
    GPIO_E_SET(54,0);//set  CLK as input 
    GPIO_E_SET(55,0);//set  STB as input 
    GPIO_E_SET(56,1);//set  STB as output   
    GPIO_E_SET(3,1);   //linrc modify 2004-6-7 19:30  
    GPIO_E_SET(4,1); 
    #endif      //end NINTAUS_612_SCAN_KEY 
     
    #if defined(HANYANG_SCAN_KEY)||defined(HJ2439_SCAN_KEY)  //caoh  2004-4-19 12:00 
    regs0->sft_cfg3 &= ~(0x1 << 5);//PIN163 use as SCART_RGB gpio57 
    regs0->sft_cfg6 &= ~(0x1 << 5);//PIN151 use as SCART_SW gpio18 
    GPIO_M_SET(54,1); 
    GPIO_M_SET(55,1); 
    GPIO_M_SET(56,1); 
    GPIO_M_SET(57,1); 
    GPIO_M_SET(18,1); 
     
    GPIO_E_SET(57,1); 
    GPIO_E_SET(18,1); 
    GPIO_E_SET(55,1); 
    #endif    
     
#ifdef DP3240_KEY_SCAN   // add xrh  
    #ifdef STBY_CONTROLLER_IO_61PIN_12GPIO 
    GPIO_M_SET(12,1);   //pin 61 gpio 12 s-by 
    GPIO_E_SET(12,1);   //pin 61 gpio 12 s-by 
       GPIO_O_SET(12,1);    //pin 61 gpio 12 s-by 
       #endif 
 
    GPIO_M_SET(PLAY_LED_1,1);   //  gpio 13  pin 62  led 2 
    GPIO_E_SET(PLAY_LED_1,1);   // gpio 13   pin 62  led 2 
    GPIO_O_SET(PLAY_LED_1,1); 
     
    
     
    GPIO_M_SET(POWER_LED_2,1);   // gpio 14 pin 63  led 3 
    GPIO_E_SET(POWER_LED_2,1);   //gpio 14 pin 63  led 3 
    GPIO_O_SET(POWER_LED_2,1); 
#endif 
 
   #ifdef DP2030_SCAN_KEY  //caoh  2004-4-19 12:00 
 
    GPIO_M_SET(PANEL_LED_PLAY,1);   //PANEL_LED1  pin82      
    GPIO_E_SET(PANEL_LED_PLAY,1);       //SETUP AS OUTPUT  
        GPIO_O_SET(PANEL_LED_PLAY,1);   //PLAY  
         
        GPIO_M_SET(PANEL_LED_POWER,1);      //PANEL_LED2    pin83 
        GPIO_E_SET(PANEL_LED_POWER,1); 
        GPIO_O_SET(PANEL_LED_POWER,1);  //POWER 
     
    GPIO_M_SET(23,1);       //SCAN_KEY1 pin84     
    GPIO_M_SET(93,1);       //SCAN_KEY2 pin226     
    GPIO_M_SET(94,1);       //SCAN_KEY3 pin227 
    GPIO_M_SET(97,1);   //SCAN_KEY4 pin230 
    GPIO_M_SET(98,1);       //SCAN_KEY5 pin231 
    GPIO_M_SET(100,1);      //SCAN_KEY6 pin233 
 
    GPIO_M_SET(99,1);   //DOOR_SENSE_GPIO 
 
     
     
    GPIO_E_SET(23,1);       //KEY1 
    GPIO_E_SET(93,1);       //KEY2 
    GPIO_E_SET(98,1);       //KEY5 
 
     
    GPIO_E_SET(99,0);   //as input  DOOR_SENSE_GPIO 
    GPIO_E_SET(94,0);       //KEY3 
    GPIO_E_SET(97,0);       //KEY4 
    GPIO_E_SET(100,0);      //KEY6 
 
    //GPIO_O_SET(DOOR_SENSE_GPIO,1); 
    #endif//#ifdef DP2030_SCAN_KEY  
 
#ifdef DP30H0_KEY_SCAN  //add  2004-5-14 xia         
//wthsin 
    regs0->sdc_data_cnt[6][0] |= (0x0c);//Disable ROM_A21(Pin226),ROM_A22(Pin227) as GPIO93,94   
    GPIO_M_SET(21,1);   //PANEL_LED1  pin82 
    GPIO_M_SET(22,1);   //PANEL_LED2  pin83 
    GPIO_M_SET(23,1);      //bit   PIN 84 
    regs0->sft_cfg1 &= ~(0x1 << 4); //gpio 94  intput 
    regs0->sft_cfg1 &= ~(0x1 << 5); //gpio 97  output 
    GPIO_M_SET(93,1);       //SCAN_KEY1 pin226 
    GPIO_M_SET(94,1);       //SCAN_KEY2 pin227 
    GPIO_M_SET(97,1);       //SCAN_KEY3 pin230 
    GPIO_M_SET(98,1);   //SCAN_KEY4 pin231 
    GPIO_M_SET(99,1);       //SCAN_KEY5 pin232   
    GPIO_M_SET(100,1);      //SCAN_KEY6 pin233 
    GPIO_E_SET(21,1);       //SETUP AS OUTPUT  
    GPIO_E_SET(22,1); 
    GPIO_E_SET(23,1);    
    GPIO_E_SET(97,1);       //KEY3 
    GPIO_E_SET(98,1);       //KEY4 
    GPIO_E_SET(99,1);       //KEY5 
    GPIO_E_SET(100,1);      //KEY6 
    GPIO_E_SET(93,0);   //key1 
    GPIO_E_SET(94,0);   //key2 
    GPIO_O_SET(PANEL_LED_POWER,1);  //POWER 
    GPIO_O_SET(PANEL_LED_PLAY,1);   //PLAY   
    GPIO_O_SET(PANEL_LED_CLOCK,0);      //clock 
    GPIO_O_SET(IR_LED,0); 
#endif//#ifdef DP30H0_KEY_SCAN 
//dingzhy  3-11-17 10:15     
#ifdef USE_VFD_GAME_PORT_TO_KEYBOARD_HJ_DP313 
    regs0->sft_cfg6 &= ~(0x1 << 4); // A11 as GPIO14 
    regs0->sft_cfg6 &= ~(0x1 << 6); // BA1 as GPIO15 
    GPIO_M_SET(14,1);//1 risc use 
    GPIO_M_SET(15,1); 
    GPIO_M_SET(56,1); 
    GPIO_M_SET(55,1); 
    GPIO_M_SET(54,1); 
    GPIO_E_SET(14,0);// 0 input 
    GPIO_E_SET(15,0); 
    GPIO_E_SET(56,0); 
    GPIO_E_SET(55,0); 
    GPIO_E_SET(54,0); 
     
     
    regs0->sft_cfg1 &= ~(0x1 << 3);//GPIO3  pin29 use as MP3 LIGHT 
    regs0->sft_cfg3 &= ~(0x3 << 14);//GPIO62 63  pin175 176 use as DVD CD LIGHT 
    regs0->sft_cfg2 &= ~(0x7 << 2);//GPIO62 63  pin175 176 use as DVD CD LIGHT 
    GPIO_M_SET(3,1);//1 risc use 
    GPIO_M_SET(62,1); 
    GPIO_M_SET(63,1); 
    GPIO_E_SET(3,1);// 1 output 
    GPIO_E_SET(62,1); 
    GPIO_E_SET(63,1); 
        
    GPIO_O_SET(3,1); 
    GPIO_O_SET(62,1); 
    GPIO_O_SET(63,1); 
     
 
#endif       
     
#ifndef ROM_ATA_SHARE_BUS    
    regs0->sft_cfg1 &= ~(0x3 << 1); 
#else 
    #ifdef SUPPORT_CARD_STORAGE 
        regs0->sft_cfg1 |= (0x7 << 0); 
        regs0->sft_cfg1 &= ~(0x1 << 3); 
    #endif 
#endif 
 
#ifdef PORTABLE_DVD //Jack added for all PDVD customers 
    portable_reset_gpio(); //0725 splitted for portable 
#endif 
 
/* 
#ifdef SUPPORT_8202_EXT_ADC        //chyeh 2005/03/21 
	regs0->sft_cfg3 &= 0xf3ff;        
	regs0->sft_cfg3 |= 0x0400; 
#endif 
*/ 
 
#ifdef SUPPORT_8202D_EXT_ADC        //chyeh 2005/03/21 
	regs0->sft_cfg13 &= (~((0x1f)<<4)); 
	regs0->sft_cfg13 |= (0x4<<4); 
#endif 
 
#ifdef SUPPORT_RECEIVER     // benosn add extrenal AD interface PIN 130,131,133  
#ifdef SUPPORT_EXT_ADC   
    regs0->sft_cfg0 &= ~((0x0fffc)<<1); 
    regs0->gpio_master[2]|= 0x01b0;    //GPIO 37~47 
        //regs0->gpio_oe[2]|= 0xe980;         
        regs0->gpio_oe[2]&= ~(0x01b0);      
        //regs0->gpio_out[2]|= 0x0900; 
        //regs0->gpio_out[2]&= ~(0xe080);        
        regs0->sft_cfg3 &= 0xfff8; 
        regs0->sft_cfg3 |= 0x0004; 
#endif   
 
 
#ifdef SUPPORT_8202_216_EXT_ADC    //  benson add 2004.08.18  pin 59,61,62 hongfeng modify 2005-05-18 
	regs0->sft_cfg3 &= 0xf3ff; 
	regs0->sft_cfg3 |= 0x0400;   
#endif 
 
#ifdef SUPPORT_8202_EXT_ADC    //  benson add 2004.08.23  pin 169,171,172 
	regs0->sft_cfg3 &= 0xf3ff; 
	regs0->sft_cfg3 |= 0x0800;   
#endif 
 
#endif 
 
 
 
    #if defined(SUPPORT_USB)&&defined(HOST_SL811HS) //wthsin, 2004/1/12 01:36pm 
        regs0->sft_cfg1 |= (0x7 << 0); 
    #endif 
 
/*a block is removed. huziqin 2004-2-26*/ 
     
#ifdef PCM1742 //Jeff 20030917 
    regs0->sft_cfg1 |= (0x7 << 0); 
    regs0->sft_cfg1 &= ~(0x1 << 3); 
#endif 
 
#if defined(PCM1742)&&defined(CHECK_DAC_ZERO_FLAG_TO_GPIO_MUTE)     //gerry,3-10-20 11:36 
    regs0->sft_cfg6 &= ~(0x1 << 4); // SA11 as GPIO 14, pin 109 
    GPIO_M_SET(14,1);//GPIO_M_SET(35,1); 
    GPIO_E_SET(14,0);//GPIO_E_SET(35,0);     
#endif 
 
#ifdef USE_CD_SENSE_PIN_AS_LED_GPIO     //gerry,2004-2-10 18:33 
    GPIO_M_SET(4,1); 
    GPIO_E_SET(4,1); 
    GPIO_O_SET(4,0); 
#endif//USE_CD_SENSE_PIN_AS_LED_GPIO 
 
#ifdef USE_PIN31_CONTROL_POWER_LED      //gerry,normal led is high on,2004/2/11 05:31¤U¤È 
    GPIO_M_SET(4,1); 
    GPIO_E_SET(4,1); 
    GPIO_O_SET(4,0); 
#endif//USE_PIN31_CONTROL_POWER_LED 
 
#ifdef GBM_USE_GPIO_CONTROL_LED         //use gpio44(pin138) control led on/off,2004/2/11 08:54¤U¤È 
    GPIO_M_SET(44,1); 
    GPIO_E_SET(44,1); 
    GPIO_O_SET(44,1); 
#endif//GBM_USE_GPIO44_CONTROL_LED 
 
#if defined(SUPPORT_CARD_STORAGE) && defined(CARD_HOT_PLUG) 
  //#ifndef GBM_CARD_READER 
  #if (!defined(GBM_CARD_READER))&&(!defined(HJ023_CARD_READER))&&(!defined(QSI_PORTABLE_DVD))//wangfeng 2003-12-3 21:32 
        #ifdef MIDI_4_FSLOADER_CARD 
            regs0->sft_cfg3 &= ~(0x1 << 5); //PIN163 use as CD_CARD_DETECT_PIN(GPIO57) 
        #else 
            regs0->sft_cfg6 &= ~(0x1 << 4);//PIN109 use as SCART_SW1 gpio14 //wthsin 
        #endif 
  #endif//#ifndef GBM_CARD_READER 
    regs0->gpio_master[CARD_RESET_PIN / 16] |= (0x1 << (CARD_RESET_PIN % 16)); 
    regs0->gpio_master[CF_CARD_DETECT_PIN / 16] |= (0x1 << (CF_CARD_DETECT_PIN % 16)); 
    regs0->gpio_master[CD_CARD_DETECT_PIN / 16] |= (0x1 << (CD_CARD_DETECT_PIN % 16)); 
#elif defined(CF_GPIO_CONTROL_COLOR) 
 
   // #define VFD_BACK_COLOR_RED        3 //GPIO 17 ca720 pin29 
    //#define VFD_BACK_COLOR_GREEN    2 //GPIO 18 ca720 pin28 
   // #define VFD_BACK_COLOR_BLUE    4 //GPIO 19 ca720 pin163 
    regs0->gpio_master[3 / 16] |= (0x1 << (3 % 16)); 
    regs0->gpio_master[2 / 16] |= (0x1 << (2 % 16)); 
    regs0->gpio_master[4 / 16] |= (0x1 << (4 % 16)); 
 
      GPIO_E_SET(3,1); 
      GPIO_E_SET(2,1); 
      GPIO_E_SET(4,1); 
 
#endif 
 
#ifdef CHECKPHONE               //////////////////////yangli2004-10-10 
regs0->sft_cfg3 &= ~((0x01)<<8);  //////PIN164 use as PHONE_SW gpio58 
    GPIO_M_SET(58,1); 
    GPIO_E_SET(58,0); 
#endif 
 
#ifdef AUDIO_MUTE_2 
    regs0->sft_cfg1 |= (0x7 << 0); 
    regs0->sft_cfg1 &= ~(0x1 << 3); 
     
    regs0->gpio_master[ 2/16 ] |= 0x1 << (2%16); 
    regs0->gpio_master[ 3/16 ] |= 0x1 << (3%16); 
     
    regs0->gpio_oe[ 2/16 ] |= 0x1 << (2%16); 
    regs0->gpio_out[2/16 ] &= ~(0x1 << (2%16)); 
    regs0->gpio_oe[ 3/16 ] |= 0x1 << (3%16); 
    regs0->gpio_out[3/16 ] &= ~(0x1 << (3%16)); 
     
    delay_1ms(1000); 
    regs0->gpio_out[3/16 ] |= (0x1<<(3%16)); 
    delay_1ms(1000); 
    regs0->gpio_out[2/16 ] |= (0x1<<(2%16)); 
#endif 
 
#ifdef USE_PIN151CN_LED         //freyman 2004-3-16 11:19 for wuxi oritron   
    regs0->sft_cfg6 &= ~(0x1 << 5); 
    GPIO_M_SET(18,1); 
    GPIO_E_SET(18,1); 
    GPIO_O_SET(18,0); 
#endif 
 
#if defined(SUPPORT_AUDIO_RESET)&&defined(HANYANG_4340_AUDRESET) 
//#ifdef SUPPORT_AUDIO_RESET     //2004-4-27 01:03?ÓîM 
    GpioResetAudio(); 
#endif     
 
#if defined(SCART_TV)&&defined(ORI_SCART_TV) 
    // GPIO39 (ROM_ADDR22) = SCART_SIGNAL_MODE 
    // GPIO38 (ROM_ADDR21) = SCART_DISPLAY_MODE 
    // GPIO37 (ROM_ADDR20) = SCART_RELEASE_TV 
 
    regs0->sft_cfg0 &= ~(0x3f << 1); 
    regs0->gpio_oe[37 / 16] |= (0x7 << (37 % 16)); 
 
    regs0->gpio_out[37 / 16] &= ~(0x1 << (37 % 16)); 
    regs0->gpio_out[38 / 16] &= ~(0x1 << (38 % 16)); 
    regs0->gpio_out[39 / 16] &= ~(0x1 << (39 % 16)); 
#elif defined(KSD_SCART_TV) 
    regs0->sft_cfg3 &= ~(0x1 << 5);//PIN163 use as SCART_RGB gpio57 
    regs0->sft_cfg6 &= ~(0x1 << 5);//PIN151 use as SCART_SW gpio18 
    GPIO_M_SET(57,1); 
    GPIO_E_SET(57,1); 
    GPIO_O_SET(57,0); 
     
    GPIO_M_SET(18,1); 
    GPIO_E_SET(18,1); 
    GPIO_O_SET(18,0); 
 
#elif defined(SCART_TV_2)       //wanghaoying 2003-8-13 15:11 added 
    regs0->sft_cfg3 &= ~(0x1 << 5);//PIN163 use as SCART_RGB gpio57 
    regs0->sft_cfg6 &= ~(0x1 << 5);//PIN151 use as SCART_SW gpio18 
    GPIO_M_SET(57,1); 
    GPIO_E_SET(57,1); 
    GPIO_O_SET(57,0); 
     
    GPIO_M_SET(18,1); 
    GPIO_E_SET(18,1); 
    GPIO_O_SET(18,0); 
 
    #ifdef NIN_SCART_TV //fangang added 4-2-11 17:13 
    GPIO_M_SET(2,1);    //pin28 use as scart_standby gpio2 
    GPIO_E_SET(2,1); 
    GPIO_O_SET(2,0); 
    #endif 
 
    #ifdef YILI_SCART_TV      //hq add for ngailik 1003, 4-2-17 10:03 
    GPIO_M_SET(4,1);    //pin31 use as scart_standby gpio2 
    GPIO_E_SET(4,1); 
    GPIO_O_SET(4,0);     
    #endif 
     
    #ifdef GBM_USE_A11_AS_SCART_TV_RELEASE 
    regs0->sft_cfg6 &= ~(0x1 << 4); 
    GPIO_M_SET(14, 1); 
    GPIO_E_SET(14, 1); 
    GPIO_O_SET(14, 0); 
    #endif 
 
    #ifdef SCART_TV_2_ADD_RELEASE  //David 2003-12-6 10:25 
    regs0->sft_cfg1 &= ~(0x01 << 2);  // pin71 GPIO36 
    GPIO_M_SET(36,1); 
    GPIO_E_SET(36,1); 
    GPIO_O_SET(36,0); 
    #endif 
     
#elif defined(SCART_TV_3) 
    regs0->sft_cfg3 &= ~(0x1 << 5);//PIN163 use as SCART_RGB gpio57 
    regs0->sft_cfg6 &= ~(0x1 << 5);//PIN151 use as SCART_SW gpio18 
    regs0->sft_cfg6 &= ~(0x1 << 4);//PIN109 use as SCART_SW1 gpio14 
   #if defined(SKYWORTH_DVD) 
    GPIO_M_SET(57,1); 
    GPIO_E_SET(57,1); 
    GPIO_O_SET(57,0); 
   #else     
        GPIO_M_SET(57,1); 
    GPIO_E_SET(57,1); 
    GPIO_O_SET(57,1); 
   #endif    
    GPIO_M_SET(18,1); 
    GPIO_E_SET(18,1); 
    GPIO_O_SET(18,0); 
 
    GPIO_M_SET(14,1); 
    GPIO_E_SET(14,1); 
    GPIO_O_SET(14,0); 
#elif defined(SCART_TV_4)       //nono 2003-9-26 1:23 for himage HJ-018 
    regs0->sft_cfg1 |= (0x7 << 0);//pin28   use as SCART_TV gpio2//SCART_SW1 
    regs0->sft_cfg1 &= ~(0x1 << 3);//pin29  use as SCART_RGB gpio3 
 
    GPIO_M_SET(2,1); 
    GPIO_E_SET(2,1); 
    GPIO_O_SET(2,0); 
     
    GPIO_M_SET(3,1); 
    GPIO_E_SET(3,1); 
    GPIO_O_SET(3,0); 
     
    GPIO_M_SET(4,1);//pin31 use as SCART_SW gpio4 
    GPIO_E_SET(4,1); 
    GPIO_O_SET(4,0); 
#elif defined(SCART_TV_5)//wangfeng 2003-12-2 11:43 for himage HJ-023 
    SetScartTV5(); 
    GPIO_O_SET(62,0); 
    GPIO_O_SET(63,0); 
    //GPIO_O_SET(2,0);   
#elif defined(XQ_SCART_TV)//xyy 2004-4-29 
    regs0->sft_cfg6 &= ~(0x1 << 5);//used to set pin151(GPIO18),SCART_DISPLAY 
    GPIO_M_SET(SCART_RELEASE,1); 
    GPIO_E_SET(SCART_RELEASE,1); 
    GPIO_M_SET(SCART_SIG,1); 
    GPIO_E_SET(SCART_SIG,1); 
    GPIO_M_SET(SCART_DISPLAY,1); 
    GPIO_E_SET(SCART_DISPLAY,1); 
     
#endif 
 
#ifndef DVD_SERVO 
    regs0->sft_cfg2 |=1;    // for 8200 real chip + ATAPI loader 
#endif 
 
#ifdef SUPPORT_VIDEO_BUFFER_STANDBY //kenny 2003/5/13     
    video_buff_power_on(); 
#endif 
 
#ifdef SUPPORT_EXTERNAL_MIC 
    extern_mic_detect_on(); 
#endif   
 
    SFT_CFG_GPIO(); 
    GPIO_MUTE(); 
 
#ifdef SUPPORT_SCART_TV//SPHE8202//nono 4-3-26 23:45 
    SET_SCART_GPIO_SFT_CFG_CTRL(); 
 
    SCART_TV_SET_TO_CVBS(); 
    SCART_TV_SET_TO_DVDPLAYER(); 
    SCART_TV_SET_TO_DISPLAY_4B3(); 
 
#endif//SPHE8202 
 
/*deleted by xyy 2004-8-12*/ 
 
 
#ifdef SUPPORT_COAXIAL_IN//xyy 2004-4-29 10:22 for XQ 
    GPIO_M_SET(OPT_COAX_SEL,1);//GPIO48: OPTICAL/COAXIAL SEL 
    GPIO_E_SET(OPT_COAX_SEL,1); 
#endif 
 
#ifndef SUPPORT_EXT_MCU 
#ifdef SUPPORT_EXT_ADC//xyy 2004-4-29  
    GPIO_M_SET(EXT_ADC_RESET,1); 
    GPIO_E_SET(EXT_ADC_RESET,1); 
#endif 
#endif 
 
#ifdef PROVIEW_GPIO_KEY 
 
    //#define DVD_LED_GPIO          56 // VFD_DATA 
    //#define CD_LED_GPIO           54 // VFD_CLK 
    //#define MP3_LED_GPIO          55 // VFD_STB 
 
    //#define NEXT_KEY_GPIO         2 // CARD_RESET 
    //#define PREV_KEY_GPIO         14 
    //#define STOP_KEY_GPIO         3 // CF_SENSE 
    //#define PAUSEPLAY_KEY_GPIO    15 
    //#define EJECT_KEY_GPIO        32 
 
    regs0->sft_cfg0 &= ~(0x1 << 0); // pin 66 as GPIO 32 
    regs0->sft_cfg1 &= ~(0x1 << 3); // CS4 as GPIO3 
    regs0->sft_cfg6 &= ~(0x1 << 4); // A11 as GPIO14 
    regs0->sft_cfg6 &= ~(0x1 << 6); // BA1 as GPIO15 
       #ifndef PROVIEW_GPIO_KEY_527 
    regs0->gpio_master[NEXT_KEY_GPIO / 16] |= (0x1 << (NEXT_KEY_GPIO % 16)); 
    regs0->gpio_master[PREV_KEY_GPIO / 16] |= (0x1 << (PREV_KEY_GPIO % 16)); 
       #endif // PROVIEW_GPIO_KEY_527    
    regs0->gpio_master[STOP_KEY_GPIO / 16] |= (0x1 << (STOP_KEY_GPIO % 16)); 
    regs0->gpio_master[PAUSEPLAY_KEY_GPIO / 16] |= (0x1 << (PAUSEPLAY_KEY_GPIO % 16)); 
    regs0->gpio_master[EJECT_KEY_GPIO / 16] |= (0x1 << (EJECT_KEY_GPIO % 16)); 
       #ifndef PROVIEW_GPIO_KEY_527  
    regs0->gpio_master[DVD_LED_GPIO / 16] |= (0x1 << (DVD_LED_GPIO % 16)); 
    regs0->gpio_master[CD_LED_GPIO / 16] |= (0x1 << (CD_LED_GPIO % 16)); 
    regs0->gpio_master[MP3_LED_GPIO / 16] |= (0x1 << (MP3_LED_GPIO % 16)); 
       #else 
        regs0->gpio_master[RED_LED_GPIO / 16] |= (0x1 << (RED_LED_GPIO % 16)); 
    regs0->gpio_master[GREEN_LED_GPIO / 16] |= (0x1 << (GREEN_LED_GPIO % 16));    
       #endif // PROVIEW_GPIO_KEY_527   
        
       #ifndef PROVIEW_GPIO_KEY_527 
    regs0->gpio_oe[NEXT_KEY_GPIO / 16] &= ~(0x1 << (NEXT_KEY_GPIO % 16)); 
    regs0->gpio_oe[PREV_KEY_GPIO / 16] &= ~(0x1 << (PREV_KEY_GPIO % 16)); 
       #endif // PROVIEW_GPIO_KEY_527   
    regs0->gpio_oe[STOP_KEY_GPIO / 16] &= ~(0x1 << (STOP_KEY_GPIO % 16)); 
    regs0->gpio_oe[PAUSEPLAY_KEY_GPIO / 16] &= ~(0x1 << (PAUSEPLAY_KEY_GPIO % 16)); 
    regs0->gpio_oe[EJECT_KEY_GPIO / 16] &= ~(0x1 << (EJECT_KEY_GPIO % 16)); 
   #ifndef PROVIEW_GPIO_KEY_527  
    regs0->gpio_oe[DVD_LED_GPIO / 16] |= (0x1 << (DVD_LED_GPIO % 16)); 
    regs0->gpio_oe[CD_LED_GPIO / 16] |= (0x1 << (CD_LED_GPIO % 16)); 
    regs0->gpio_oe[MP3_LED_GPIO / 16] |= (0x1 << (MP3_LED_GPIO % 16)); 
   #else  
    regs0->gpio_oe[RED_LED_GPIO / 16] |= (0x1 << (RED_LED_GPIO % 16)); 
    regs0->gpio_oe[GREEN_LED_GPIO / 16] |= (0x1 << (GREEN_LED_GPIO % 16));    
   #endif // PROVIEW_GPIO_KEY_527   
 #ifndef PROVIEW_GPIO_KEY_527  
  #ifdef LED_HIGH_LIGHT 
    GPIO_O_SET(DVD_LED_GPIO, 0); // DVD 
    GPIO_O_SET(CD_LED_GPIO, 0); // CD 
    GPIO_O_SET(MP3_LED_GPIO, 0); // MP3 
  #else 
    GPIO_O_SET(DVD_LED_GPIO, 1); // DVD 
    GPIO_O_SET(CD_LED_GPIO, 1); // CD 
    GPIO_O_SET(MP3_LED_GPIO, 1); // MP3 
  #endif 
 #else 
  #ifdef LED_HIGH_LIGHT 
    GPIO_O_SET(RED_LED_GPIO, 0);   
    GPIO_O_SET(GREEN_LED_GPIO, 0);        
  #else 
    GPIO_O_SET(RED_LED_GPIO, 1);   
    GPIO_O_SET(GREEN_LED_GPIO, 1);   
  #endif 
 #endif 
#endif 
 
#ifdef ROTARY_VOLUME 
#ifdef HJ_8202_8408 
     regs0->sft_cfg1 &= ~(0x1 << 3);//GPIO16 
     regs0->sft_cfg1 &= ~(0x1 << 2);//GPIO17 
     GPIO_M_SET(16,1); 
     GPIO_M_SET(17,1); 
     GPIO_E_SET(16,0); 
     GPIO_E_SET(17,0); 
#else     
    regs0->sft_cfg6 &= ~(0x1 << 6); 
    regs0->sft_cfg6 &= ~(0x1 << 4); 
    regs0->gpio_master[14/16] |= (0x3 << (14%16)); 
    regs0->gpio_oe[14/16] &= ~(0x3 << (14%16) ); 
    //regs0->gpio_out[14/16] &= ~(0x3 << (14%16) ); 
#endif  
#endif    
 
#ifdef GPIO14_STANDBY_LED  //for Ngailik LCD1003_6ch, hq, 2004-3-20 14:06 
    regs0->sft_cfg6 &= ~(0x1 << 4);  
    GPIO_M_SET(14,1); 
    GPIO_E_SET(14,1); 
    GPIO_O_SET(14,0); 
#endif      
 
#ifdef GPIO15_STANDBY_LED  //for Ngailik LCD1003, liudan, 2005-1-12 11:35	 
	GPIO_M_SET(15,1); 
        GPIO_E_SET(15,1); 
        GPIO_O_SET(15,0); 
#endif        
 
#if defined(QSI_PORTABLE_DVD) && defined(QSI_PLATFORM)  //qsi: merge by johnson 20040712 
//#ifdef MA0QS1_SLM 
    GPIO_M_SET(GPIO_IS_FOR_SLED_OP_SW,1); 
    GPIO_E_SET(GPIO_IS_FOR_SLED_OP_SW,0); 
    GPIO_M_SET(GPIO_IS_FOR_EJECT_BUTTON,1); 
    GPIO_E_SET(GPIO_IS_FOR_EJECT_BUTTON,0); 
    GPIO_M_SET(GPIO_IS_FOR_SYSTEM_LED,1); 
    GPIO_E_SET(GPIO_IS_FOR_SYSTEM_LED,1); 
    GPIO_O_SET(GPIO_IS_FOR_SYSTEM_LED,0); 
//#endif 
//qsi: add by sharon 
#endif 
 
#ifdef DVI_AUDIO_MUTE 
#ifdef SPHE8202 
 
#else /*SPHE8202*/ 
#define AUDIO_MUTE_GPIO 37 
regs0->sft_cfg0 &= ~(0x3f << 1); 
GPIO_M_SET(AUDIO_MUTE_GPIO, 1); //audio_mute is gpio 37,pin129 
GPIO_E_SET(AUDIO_MUTE_GPIO, 1); 
GPIO_O_SET(AUDIO_MUTE_GPIO, 1); 
#endif /*SPHE8202*/ 
#endif 
 
#ifdef RESET_TO_DVI311  //tjf 04-05-06 
#ifdef SPHE8202 
 
#else /*SPHE8202*/ 
#define RESET_DVI311_GPIO 40 
regs0->sft_cfg0 &= ~(0xfff<<3);   //ra21~ra26 is gpio 
GPIO_M_SET(RESET_DVI311_GPIO, 1); //dvi311_reset is gpio 37,pin129 
GPIO_E_SET(RESET_DVI311_GPIO, 1); 
GPIO_O_SET(RESET_DVI311_GPIO, 1); 
#endif/*SPHE8202*/ 
#endif 
 
#ifdef USE_GPIO52_AS_HEADPHONE_SENSE   //xyy add for Oritron 2004-8-13 
    GPIO_M_SET(HEADPHONE_SENSE,1); 
    GPIO_E_SET(HEADPHONE_SENSE,0); 
#endif 
 
#ifdef MINTON_8202_601           //heqiang added,2004-9-8 20:53 
    SFT_CFG_GPIO56(); 
#endif 
 
#ifdef PMP_DVD           //wthsin added,2004/11/9 02:47 
    PMP_gpio_init(); 
#endif //#if defined(PMP_DVD) 
 
#ifdef HANYANG_DP02CD_WF_8202S_16//added by wangwei,2005-2-3 11:41 
//use VFD pin 
GPIO_M_SET(21, 1); 
GPIO_E_SET(21, 0); 
 
GPIO_M_SET(22, 1); 
GPIO_E_SET(22, 0); 
 
GPIO_M_SET(23, 1); 
GPIO_E_SET(23, 0); 
 
 
GPIO_M_SET(15, 1); 
GPIO_E_SET(15, 0); 
/* 
regs0->sft_cfg1 &= ~(0x1 << 3); 
regs0->sft_cfg1 &= ~(0x1 << 7); 
regs0->sft_cfg8 &= ~(0x1 << 9);*/ 
GPIO_M_SET(16, 1); 
GPIO_E_SET(16, 0); 
#endif//HANYANG_DP02CD_WF_8202S_16 
 
#ifdef GBM_AP_DVD_16//added by wangwei,2005-2-25 13:06//for 8200 
regs0->sft_cfg0 &= ~(0xfff << 3);//ra21~ra26//pin 130~131, pin 133~136 
 
GPIO_M_SET(43,1); 
GPIO_M_SET(42,1); 
GPIO_M_SET(41,1); 
GPIO_M_SET(40,1); 
 
GPIO_E_SET(43,0); 
GPIO_E_SET(42,0); 
GPIO_E_SET(41,0); 
GPIO_E_SET(40,0); 
#endif 
 
#ifdef HANYANG_DP02CD_WG_8202S_16//added by wangwei,2005-3-11 14:21 
// Use VFD_CLK/VFD_STB/VFD_DATA/PIN65/PIN66 to scan key. 
// VFD_DATA/PIN65/PIN66---PULL LOW,INPUT PIN. 
// VFD_CLK/VFD_STB---PULL HIGH,OUPUT PIN. 
//regs0->sft_cfg6 &= ~(0x1 << 6);// BA1 as GPIO15 
regs0->sft_cfg1 &= ~(0x1 << 3);// GPIO16 
GPIO_M_SET(23, 1);// VFD_DATA 
GPIO_E_SET(23, 0); 
//GPIO_O_SET(23, 1); 
GPIO_M_SET(15, 1);// PIN65 
GPIO_E_SET(15, 0); 
//GPIO_O_SET(15, 0); 
GPIO_M_SET(16, 1);// PIN66 
GPIO_E_SET(16, 0); 
//GPIO_O_SET(16, 1); 
 
GPIO_M_SET(21, 1);// VFD_CLK 
GPIO_E_SET(21, 1); 
//GPIO_O_SET(21, 1); 
GPIO_M_SET(22, 1);// VFD_STB 
GPIO_E_SET(22, 1); 
//GPIO_O_SET(22, 1); 
#endif//HANYANG_DP02CD_WG_8202S_16 
 
#ifdef IC_8202D 
#if defined(EMU_BOARD_216_PIN) || defined(MP_BOARD_216_PIN) || defined(MP_BOARD_216_PIN_NON_SHARE) 
int i; 
regs0->sdc_data_cnt[6][0] |= (1<<3)|(1<<2); // group 41, reg #12, bit #2~3 = 1 
for (i=92;i<=100;i++) 
{ 
    GPIO_M_SET(i,1); 
    GPIO_E_SET(i,1); 
    GPIO_O_SET(i,0); 
}     
#endif 
#endif 
 
#ifdef THJK_GPIO_KEY 
		 GPIO_M_SET(34, 1); 
		 GPIO_E_SET(34, 1); 
		 GPIO_O_SET(34, 1); 
		  
		 GPIO_M_SET(35, 1); 
		 GPIO_E_SET(35, 1); 
		 GPIO_O_SET(35, 1); 
		  
		 GPIO_M_SET(36, 1); 
		 GPIO_E_SET(36, 1); 
		 GPIO_O_SET(36, 1);	 
 
		 GPIO_M_SET(37, 1); 
		 GPIO_E_SET(37, 1); 
		 GPIO_O_SET(37, 1);	 
#endif 
 
#ifdef TFT_BACKLIGHT_GPIO 
  		regs0->sft_cfg4 &= ~(0x1 << 6); 
		 GPIO_M_SET(TFT_BACKLIGHT_GPIO, 1); 
		 GPIO_E_SET(TFT_BACKLIGHT_GPIO, 1); 
		 GPIO_O_SET(TFT_BACKLIGHT_GPIO, 1);	 
#endif 
 
#ifdef FM_POWER_GPIO 
               GPIO_M_SET(FM_POWER_GPIO, 1); 
		 GPIO_E_SET(FM_POWER_GPIO, 1); 
		 GPIO_O_SET(FM_POWER_GPIO, 0);	 
		 GPIO_M_SET(FM_SET_GPIO1, 1); 
		 GPIO_E_SET(FM_SET_GPIO1, 1); 
		 GPIO_O_SET(FM_SET_GPIO1, 1);	 
		 GPIO_M_SET(FM_SET_GPIO2, 1); 
		 GPIO_E_SET(FM_SET_GPIO2, 1); 
		 GPIO_O_SET(FM_SET_GPIO2, 1); 
		 GPIO_M_SET(FM_SET_GPIO3, 1); 
		 GPIO_E_SET(FM_SET_GPIO3, 1); 
		 GPIO_O_SET(FM_SET_GPIO3, 1); 
#endif 
 
 #ifdef DSA_COM_CONTROL 
regs0->sft_cfg0 &= ~(0x1<<7);  //pin173-- gpio48 
regs0->sft_cfg1 &= ~(0x1<<5);  //pin174-- gpio49 
 #endif 
 #ifdef AV_IN_OUT_GPIO 
 regs0->sft_cfg3 &= ~(0x1<<5);  //pin193-- gpio50 
    		GPIO_M_SET(AV_IN_OUT_GPIO, 1); 
		 GPIO_E_SET(AV_IN_OUT_GPIO, 1); 
		 GPIO_O_SET(AV_IN_OUT_GPIO, 1); 
 #endif 
} 
 
#if defined(GPIO_KEY_LIGHT) 
void init_keylight_io(void) 
{ 
#if defined(USE_VFD_GAME_PORT_TO_KEYBOARD_HJ) 
init_hj_keylight_io(); 
#elif defined(USE_VFDPORT_TO_KEYLIGHT_GBM) 
init_gbm_keylight_io(); 
#elif defined(USE_VFDPORT_TO_KEYLIGHT_MINTON)       //wanghaoying 2003-8-19 20:00 
init_minton_keylight_io(); 
    #elif defined(USE_VFDPORT_TO_KEYLIGHT_IDALL) 
    init_idall_keylight_io(); 
#elif defined(USE_VFDPORT_TO_KEYLIGHT_THAKRAL) 
    init_thakral_keylight_io(); 
#elif defined(USE_GPIO_TO_KEYLIGHT_WINGSUM) 
	init_wingsum_keylight_io(); 
#elif defined(OP_SCAN_KEY_USE_GPIO)//lijd 2005-6-13 18:45         
    init_op_hk_keylight_io();	 
#endif//#if defined(USE_VFD_GAME_PORT_TO_KEYBOARD_HJ) 
} 
#if defined(OP_SCAN_KEY_USE_GPIO)//lijd 2005-6-13 18:42 
void init_op_hk_keylight_io(void) 
{ 
   GPIO_M_SET(STB, 1); 
   GPIO_M_SET(CLK, 1); 
   GPIO_M_SET(DAT, 1);         
   GPIO_E_SET(STB, 0); 
   GPIO_E_SET(CLK, 0); 
   GPIO_E_SET(DAT, 0); 
}   
#endif 
 
#if defined(USE_GPIO_TO_KEYLIGHT_WINGSUM) 
void init_wingsum_keylight_io(void) 
{ 
	regs0->sft_cfg1 &= ~(0x1 <<1);//to set gpio16 ---> pin66 
	GPIO_M_SET(16,1); 
	GPIO_E_SET(16,0); 
 
	GPIO_M_SET(14,1); 
	GPIO_E_SET(14,0); 
 
	GPIO_M_SET(13,1); 
	GPIO_E_SET(13,0); 
 
} 
#endif 
 
#if defined(USE_VFD_GAME_PORT_TO_KEYBOARD_HJ) 
void init_hj_keylight_io(void) 
{ 
    regs0->sft_cfg6 &= ~(0x1 << 6);//gpio15 
    regs0->sft_cfg6 &= ~(0x1 << 4);//gpio14 
    regs0->gpio_master[54 / 16] |= (0x7 << (54 % 16));  // gpio[54~56] 
    //regs0->gpio_master[4 / 16] |= (0x1 << (4 % 16)); 
    regs0->gpio_master[14 / 16] |= (0x3 << (14 % 16)); 
     
     
    regs0->gpio_oe[54 / 16] &= ~(0x7 << (54 % 16)); 
    regs0->gpio_oe[14 / 16] &= ~(0x3 << (14 % 16)); 
//  regs0->gpio_oe[4 / 16] &= ~(0x1 << (4 % 16)); 
 
    //printf("1.regs0->gpio_out[3]=%x\n", regs0->gpio_out[3]); 
} 
#elif defined(USE_VFDPORT_TO_KEYLIGHT_GBM) 
void init_gbm_keylight_io(void) 
{ 
    regs0->gpio_master[54 / 16] |= (0x7 << (54 % 16));  // gpio[54~56] 
    //   vfd          gpio     IN/OUT(for 720) 
    //   DATA        gpio56       IN/OUT 
    //   STB         gpio55       IN/OUT 
    //   CLK         gpio54       IN/OUT 
     
     
    regs0->gpio_master[54 / 16] |= (0x7 << (54 % 16));//pin151 
    regs0->gpio_oe[54 / 16] |= (0x7 << (54 % 16)); 
    regs0->gpio_out[54 / 16] &= ~(0x7 << (54 % 16));       
 
}    
#elif defined(USE_VFDPORT_TO_KEYLIGHT_GBM_2) 
void init_gbm_keylight_io(void) 
{ 
    //PIN141(GPIO45):GPIO1->LED1 
    //PIN138(GPIO44):GPIO2->LED2 
    //PIN136(GPIO43):GPIO3->PLAY/PAUSE 
    //PIN135(GPIO42):GPIO4->STOP 
    //PIN134(GPIO41):GPIO5->F.F.(NEXT) 
    //PIN133(GPIO40):GPIO6->F.R.(PREV) 
    //PIN131(GPIO39):GPIO7->reversed 
    //PIN130(GPIO38):GPIO8->reversed 
    regs0->sft_cfg0 &= ~(0xfff << 3);//ra21~ra26//pin 130~131, pin 133~136 
     
     
    regs0->gpio_master[38 / 16] |= (0xff << (38 % 16)); // gpio[38~45] 
    //   vfd          gpio     IN/OUT(for 720) 
    //   DATA        gpio56       IN/OUT 
    //   STB         gpio55       IN/OUT 
    //   CLK         gpio54       IN/OUT 
 
    regs0->gpio_oe[44 / 16] |= (0x3 << (44 % 16)); 
    regs0->gpio_oe[38 / 16] |= (0x3f << (38 % 16)); 
 
}    
#elif defined(USE_VFDPORT_TO_KEYLIGHT_MINTON) 
void init_minton_keylight_io(void) 
{ 
    //regs0->sft_cfg6 &= ~(0x1 << 6); 
    regs0->sft_cfg6 &= ~(0x1 << 4); 
    regs0->gpio_master[54 / 16] |= (0x7 << (54 % 16));  // gpio[54~56] 
    regs0->gpio_master[14 / 16] |= (0x1 << (14 % 16)); 
     
     
    //regs0->gpio_oe[54 / 16] &= ~(0x7 << (54 % 16)); 
    regs0->gpio_oe[14 / 16] |= (0x1 << (14 % 16)); 
 
} 
#elif defined(USE_VFDPORT_TO_KEYLIGHT_IDALL) 
void init_idall_keylight_io(void) 
{ 
    regs0->sft_cfg6 &= ~(0x1 << 4); // SA11 as GPIO 14, pin 109 
    regs0->gpio_master[14/16] |= (0x1<<(14%16)); 
    regs0->gpio_oe[14/16] &= ~(0x1<<(14%16)); 
 
    regs0->sft_cfg1 &= ~(0x1 << 2); //ROM_CS3 as GPIO 36, pin 71 
    regs0->gpio_master[36/16] |= (0x1<<(36%16)); 
    regs0->gpio_oe[36/16] &= ~(0x1<<(36%16)); 
 
    regs0->gpio_master[54/16] |= (0x7<<(54%16));//VFD_CLK as GPIO54, pin154 
    regs0->gpio_oe[54/16] &= ~(0x1<<(54%16)); 
    regs0->gpio_oe[55/16] |= (0x1<<(55%16)); 
    regs0->gpio_oe[56/16] |= (0x1<<(56%16)); 
} 
#elif defined(USE_VFDPORT_TO_KEYLIGHT_THAKRAL) 
void init_thakral_keylight_io(void) 
{ 
    regs0->gpio_master[54 / 16] |= (0x7 << (54 % 16));  // gpio[54~56] 
    //   vfd          gpio     IN/OUT(for 720) 
    //   DATA        gpio56       IN/OUT 
    //   STB         gpio55       IN/OUT 
    //   CLK         gpio54       IN/OUT 
    regs0->gpio_master[54 / 16] |= (0x7 << (54 % 16));//pin151 
    regs0->gpio_oe[54 / 16] &= ~(0x7 << (54 % 16)); 
 
    regs0->sft_cfg1 &= ~(0x1 << 2);  
    //ROM_CS3 as GPIO 36, pin 71 
    //ROM_CS2 as GPIO 35, pin 70 
    regs0->gpio_master[35/16] |= (0x3<<(36%16)); 
    regs0->gpio_oe[36/16] &= ~(0x1<<(36%16)); 
    regs0->gpio_oe[35/16] |=  (0x1<<(35%16)); 
    //regs0->gpio_out[35 /16] |=  (0x1 << (35 % 16)); 
/* 
    regs0->gpio_oe[54 / 16] |=  (0x7 << (54 % 16)); 
    regs0->gpio_out[54 / 16] |= (0x7<<(54 % 16)); 
    regs0->gpio_oe[36 / 16] |=  (0x1 << (36 % 16)); 
    regs0->gpio_out[36 /16] |=  (0x1 << (36 % 16)); 
    regs0->gpio_oe[35 / 16] |=  (0x1 << (35 % 16)); 
    regs0->gpio_out[35 /16] |=  (0x1 << (35 % 16)); 
*/ 
} 
#endif//#if defined(USE_VFD_GAME_PORT_TO_KEYBOARD_HJ) 
 
#endif//defined(GPIO_KEY_LIGHT) 
 
 
 
#ifdef SUPPORT_AUDIO_RESET 
void GpioResetAudio(void) 
{ 
    // QISHENG_DVD use pin 151(GPIO 18) to reset audio DAC 
#ifdef QISHENG_DVD  // alan, 2003/9/8 10:40¤W¤È 
    regs0->sft_cfg6 &= 0xFFDF;  // SBA12 disable 
    regs0->gpio_master[18 / 16] |= (0x01 << (18 % 16)); 
    regs0->gpio_oe[18 / 16] |= (0x01 << (18 % 16)); 
    delay_srv_10ms(30); 
    regs0->gpio_out[18 / 16] |= (0x01 << (18 % 16)); 
#elif 0//defined(HANYANG_DVD)    //2004-4-27 01:02?ÓîM 
     regs0->sft_cfg3 &= ~(0x1 << 4); 
    regs0->gpio_master[60 / 16] |= (0x01 << (60 % 16)); 
    regs0->gpio_oe[60 / 16] |= (0x01 << (60 % 16)); 
    regs0->gpio_out[60 / 16] &= ~(0x01 << (60 % 16)); 
    //delay_srv_10ms(100); 
    //regs0->gpio_out[60 / 16] |= (0x01 << (60 % 16)); 
#else 
    regs0->sft_cfg6 &= 0xFFBF;  // SBA1 disable 
    regs0->gpio_master[15 / 16] |= (0x01 << (15 % 16)); 
    regs0->gpio_oe[15 / 16] |= (0x01 << (15 % 16)); 
    delay_srv_10ms(30); 
    regs0->gpio_out[15 / 16] |= (0x01 << (15 % 16)); 
#endif 
} 
#endif 
 
#ifdef  TCL_VFD_GPIO//2004-3-22 12:52 lijd 
    void  tcl_led(void) 
{ 
    regs0->gpio_master[DVD_LED_GPIO / 16] |= (0x1 << (DVD_LED_GPIO % 16)); 
    regs0->gpio_master[CD_LED_GPIO / 16] |= (0x1 << (CD_LED_GPIO % 16)); 
    regs0->gpio_master[MP3_LED_GPIO / 16] |= (0x1 << (MP3_LED_GPIO % 16)); 
 
    switch(cd_type_loaded) 
    { 
        case CDDVD:  
        GPIO_O_SET(DVD_LED_GPIO, 0); // DVD 
        GPIO_O_SET(CD_LED_GPIO, 1); // CD 
        GPIO_O_SET(MP3_LED_GPIO, 1); // MP3 
        break; 
 
        case CDDA: 
        GPIO_O_SET(DVD_LED_GPIO, 1); // DVD 
        GPIO_O_SET(CD_LED_GPIO, 0); // CD 
        GPIO_O_SET(MP3_LED_GPIO, 1); // MP3 
        break; 
 
        case CDSVCD: 
        case CDVCD10: 
        case CDVCD20: 
        case CDROM: 
        GPIO_O_SET(DVD_LED_GPIO, 1); // DVD 
        GPIO_O_SET(CD_LED_GPIO, 1); // CD 
        GPIO_O_SET(MP3_LED_GPIO, 0); // MP3 
        break; 
 
        default: 
        GPIO_O_SET(DVD_LED_GPIO, 1); // DVD 
        GPIO_O_SET(CD_LED_GPIO, 1); // CD 
        GPIO_O_SET(MP3_LED_GPIO, 1); // MP3 
        break; 
    } 
} 
#endif 
 
 
#ifdef SUPPORT_EXTERNAL_MIC 
void extern_mic_detect_on(void) 
{ 
    regs0->sft_cfg3 &=0xffdf ; 
    regs0->gpio_oe[EXTERN_MIC_DECT / 16] &= ~(0x1 << (EXTERN_MIC_DECT % 16)); 
    regs0->sft_cfg6 &=0xffdf ; 
    regs0->gpio_oe[EXTERN_MIC_MUTE / 16] |= (0x1 << (EXTERN_MIC_MUTE % 16)); 
    regs0->gpio_out[EXTERN_MIC_MUTE / 16] |= (0x1 << (EXTERN_MIC_MUTE % 16)); 
 
} 
 
void extern_mic_unmute(void) 
{ 
    regs0->gpio_out[EXTERN_MIC_MUTE / 16] &= ~(0x1 << (EXTERN_MIC_MUTE % 16)); 
}    
 
void extern_mic_mute(void) 
{ 
    regs0->gpio_out[EXTERN_MIC_MUTE / 16] |= (0x1 << (EXTERN_MIC_MUTE % 16)); 
}    
 
 
int extern_mic_is_detected(void) 
{ 
    if((regs0->gpio_in[EXTERN_MIC_DECT / 16]>>(EXTERN_MIC_DECT % 16))&0x1) 
    return 1; 
    else 
    return 0; 
     
}    
 
#endif 
 
#ifdef SUPPORT_VIDEO_BUFFER_STANDBY //kenny 2003/5/13 
void video_buff_power_off(void) 
{ 
    regs0->gpio_oe[STANDBY_GPIO / 16] |= (0x1 << (STANDBY_GPIO % 16));   
    regs0->gpio_out[STANDBY_GPIO / 16] &= ~(0x1 << (STANDBY_GPIO % 16));     
     
}    
 
void video_buff_power_on(void) 
{ 
    regs0->gpio_oe[STANDBY_GPIO / 16] |= (0x1 << (STANDBY_GPIO % 16)); 
 
    regs0->gpio_out[STANDBY_GPIO / 16] |= (0x1 << (STANDBY_GPIO % 16)); 
     
}    
 
 
#endif 
 
#ifdef YI_XIAN_TONG//zhaoyanhua add  03-11-3 22:04 
#define AUDIOMODE_GPIO   14 
void GpioStereoOutput(void) 
{ 
    regs0->sft_cfg6 &= ~(0x1 << 4); // SA11 as GPIO 14, pin 109 
    GPIO_M_SET(AUDIOMODE_GPIO ,1); //set master 
    GPIO_E_SET(AUDIOMODE_GPIO ,1); //enable output 
    GPIO_O_SET(AUDIOMODE_GPIO ,1); //set ouput high 
} 
 
void Gpio5ChOutput(void) 
{ 
    regs0->sft_cfg6 &= ~(0x1 << 4); // SA11 as GPIO 14, pin 109 
    GPIO_M_SET(AUDIOMODE_GPIO,1);//set master 
    GPIO_E_SET(AUDIOMODE_GPIO,1);//enable output  
    GPIO_O_SET(AUDIOMODE_GPIO,0);//set output low 
} 
#endif 
 
 
/* 
#define I2C_SDA 59      // GPIOE[0] 
#define I2C_SCL 60      // GPIOE[1] 
 
 
#define I2C_SCL_SET(d)  GPIO_O_SET(I2C_SCL,d) 
#define I2C_SDA_SET(d)  GPIO_O_SET(I2C_SDA,d) 
#define I2C_SDA_GET()   GPIO_I_GET(I2C_SDA) 
 
#define I2C_SCL_IN()    GPIO_E_SET(I2C_SCL,0) 
#define I2C_SDA_IN()    GPIO_E_SET(I2C_SDA,0) 
#define I2C_SCL_OUT()   GPIO_E_SET(I2C_SCL,1) 
#define I2C_SDA_OUT()   GPIO_E_SET(I2C_SDA,1) 
 
static void delay_gpio(int i) 
{ 
    do 
    { 
        int j =1000; 
        do 
        { 
            asm volatile ("nop"); 
        } while (--j >= 0); 
    } while (--i >= 0); 
} 
 
#define delay_i2c(i)    delay_gpio(i) 
 
void    write_i2c(int add, int aa, int data) 
{ 
  int i; 
 
  add = (add << 1) | 0; // write_BIT 
 
  I2C_SCL_SET(1); delay_i2c(1);         // scl -- high 
  I2C_SDA_SET(0); delay_i2c(1);         //      (start) 
   
  for (i=7; i>=0; i--) 
  { 
    I2C_SCL_SET(0); delay_i2c(1);       // scl -> low 
    I2C_SDA_SET((add>>i) & 0x01); delay_i2c(1);// scl -- low 
    I2C_SCL_SET(1); delay_i2c(1);       // scl -> high 
  } 
 
  I2C_SCL_SET(0); delay_i2c(1);         // scl -> low 
  I2C_SDA_IN();  delay_i2c(1);          // scl -- low 
  I2C_SCL_SET(1); delay_i2c(1);         // scl -> high 
  if (I2C_SDA_GET()) {  
      #ifdef GPIO_DBG 
      epp_write("fail\n"); 
      #endif 
  } //      (ack) 
 
  // address 
  for (i=7; i>=0; i--) 
  { 
    I2C_SCL_SET(0); delay_i2c(1);       // scl -> low 
    I2C_SDA_SET((aa>>i) & 0x01); delay_i2c(1);// scl -- low 
    I2C_SDA_OUT(); delay_i2c(1);        // scl -- low 
    I2C_SCL_SET(1); delay_i2c(1);       // scl -> high 
  } 
 
  I2C_SCL_SET(0); delay_i2c(1);         // scl -> low 
  I2C_SDA_IN();  delay_i2c(1);          // scl -- low 
  I2C_SCL_SET(1); delay_i2c(1);         // scl -> high 
  if (I2C_SDA_GET()) {  
      #ifdef GPIO_DBG 
      epp_write("fail\n"); 
      #endif 
  } //      (ack) 
 
  // data 
  for (i=7; i>=0; i--) 
  { 
    I2C_SCL_SET(0); delay_i2c(1);       // scl -> low 
    I2C_SDA_SET((data>>i) & 0x01); delay_i2c(1);// scl -- low 
    I2C_SDA_OUT(); delay_i2c(1);        // scl -- low 
    I2C_SCL_SET(1); delay_i2c(1);       // scl -> high 
  } 
 
  I2C_SCL_SET(0); delay_i2c(1);         // scl -> low 
  I2C_SDA_IN();  delay_i2c(1);          // scl -- low 
  I2C_SCL_SET(1); delay_i2c(1);         // scl -> high 
  if (I2C_SDA_GET()) {  
      #ifdef GPIO_DBG 
      epp_write("fail\n"); 
      #endif 
  } //      (ack) 
 
  I2C_SCL_SET(0); delay_i2c(1);         // scl -> low 
  I2C_SDA_SET(0); delay_i2c(1);         // scl -- low 
  I2C_SDA_OUT(); delay_i2c(1);          // scl -- low 
 
  I2C_SCL_SET(1); delay_i2c(1);         // scl -> high 
  I2C_SDA_SET(1); delay_i2c(1);         //      (stop) 
} 
*/ 
 
#ifdef SCART_TV_5   //wangfeng 2003-12-2 11:43 for himage HJ-023 
void SetScartTV5(void)//As Scart 
{ 
    regs0->sft_cfg2 &= ~(0x7 << 2);//GPIO62 63  pin175 176 use as not uart 
    regs0->sft_cfg3 &= ~(0x3 << 14);//GPIO62 63  pin175 176 use as gpio 
    //regs0->sft_cfg1 |= (0x7 << 0);//pin28 use as SCART_TV gpio2//SCART_SW1 
    //1 risc use 
    GPIO_M_SET(62,1); 
    GPIO_M_SET(63,1); 
    //GPIO_M_SET(2,1); 
    // 1 output 
    GPIO_E_SET(62,1); 
    GPIO_E_SET(63,1); 
    //GPIO_E_SET(2,1); 
 
//  GPIO_O_SET(62,0); 
//  GPIO_O_SET(63,0); 
//  GPIO_O_SET(2,0); 
} 
 
void ReSetScartTV5(void)//As V/H SYNC 
{ 
    //regs0->sft_cfg2 &= ~(0x7 << 2);//GPIO62 63  pin175 176 use as not uart 
    regs0->sft_cfg3 &= ~(0x1 << 15);//GPIO62 63  pin175 176 use as h/v sync 
    regs0->sft_cfg3 |= (0x1 << 14);//GPIO62 63  pin175 176 use as h/v sync 
} 
#endif 
 
 
#ifdef SUPPORT_T100_LCD_PANEL 
#define T100_RESET_GPIO	22 //11//39//98 
//#define T100_BL_EN_GPIO	97//97	 
#define TW100         0x50 
//#include "init_t100_lg.c"	 
//#include "init_t100_au.c"	 
#include "T102_i2c.c" 
#include "init_t102_au.c"	 
//#include "t100_lcd_pannel.c"	 
#ifdef TFT_FORMAT_CHANGE_SPECIAL_DEAL 
extern BYTE switch_format_flag; 
#endif 
#ifdef T100_RESET_GPIO 
static void delay_lay(int i) 
{ 
  do { 
     
    int j =6;//kevin change add it to 100 it should be also OK if setted to 2 without HDCP 
 
    do { 
      asm volatile ("nop"); 
    } while (--j>=0); 
  } while (--i>=0); 
} 
 
void Reset_T100_LCD_PANEL(void) 
{ 
      // regs0->sft_cfg0 &= ~(0x1 << 4);  
	GPIO_M_SET(T100_RESET_GPIO,1);      
    	GPIO_E_SET(T100_RESET_GPIO,1); 
    	GPIO_O_SET(T100_RESET_GPIO,0);   
	delay_lay(500); 
	//delay_srv_10ms(5);  	 
	GPIO_O_SET(T100_RESET_GPIO,1);  
	delay_lay(500); 
	//delay_srv_10ms(2); 
} 
#endif 
void T100_Write_TCONData(void) 
{ 
	init_command_tcondata(); 
} 
void T100_Close_Panel(void) 
{ 
	BYTE data=0; 
	//BL_EN=1; 
	//GPIO_M_SET(T100_BL_EN_GPIO,1);      
       //GPIO_E_SET(T100_BL_EN_GPIO,1); 
      //  GPIO_O_SET(T100_BL_EN_GPIO,1);     
    ReadFromddc(TW100, 0xC2,&data,1); 
    data|=0x12;	 
	WriteToDDC(TW100, 0xC2,&data,1);	 
	data=0x87; 
	WriteToDDC(TW100, 0x91,&data,1); 
	 
	 
} 
 
void T100_Open_Panel(void) 
{ 
	BYTE data=0;	   
    ReadFromddc(TW100, 0xC2,&data,1); 
    data&=0xed;	 
	WriteToDDC(TW100, 0xC2,&data,1); 
		 
	ReadFromddc(TW100, 0x91,&data,1); 
    data&=~0x80;	 
	WriteToDDC(TW100, 0x91,&data,1); 
	delay_srv_10ms(2);	 
	//BL_EN=0; 
	 
    //GPIO_O_SET(T100_BL_EN_GPIO,0);   
	 
} 
 
void T100_Write_T100Init(void) 
{ 
	init_command_t100init(); 
} 
void T100_Write_GAMMAData(void) 
{ 
	init_command_gammadata(); 
} 
void T100_Write_FilterData(void) 
{ 
	init_command_filterdata(); 
} 
#if 1 
void T100_Set_Mode(BYTE tv_mode,BYTE tft_mode,BYTE av_switch) 
{	 
	BYTE data=0; 
	//NTSC 
	  data=0x01; 
	  WriteToDDC(TW100+4,0x3F,&data,1);//reset 
   if(tv_mode == TFT_NTSC)     
    {	 
            if(tft_mode == TFT_16_9) 
      	     { 
	      init_command_ntsc_fulldata(); 
    	      } 
	      else 
		{ 
	       init_command_ntsc_43data(); 
		} 
	data=0x03; 
	WriteToDDC(TW100+4,0x03,&data,1); 
	////////////////////////////////////// 
#ifdef AV_SWITCH_DEAL 
	if (av_switch==1) 
	//{ 
    //    if(GPIO_I_GET(16)==0)//tft cvbs av in.  
        { 
    	      data=0x00; // cvbs 
            WriteToDDC(TW100+4,0x00,&data,1); 
        } 
    		else 
    		{ 
    	      data=0x01; // svideo 
            WriteToDDC(TW100+4,0x00,&data,1); 
    		} 
	//} 
#endif 
	///////////////////////////////// 
		 
   } 
   else  if( tv_mode == TFT_PAL) 
   { 
	//PAL 
	     if(tft_mode == TFT_16_9) 
		{ 
	        init_command_pal_fulldata(); 
		} 
	     else 
		{ 
	      init_command_pal_43data(); 
		} 
	data=0x03; 
	WriteToDDC(TW100+4,0x03,&data,1); 
#ifdef AV_SWITCH_DEAL 
	if (av_switch==1) 
//{ 
//    if(GPIO_I_GET(16)==0)//tft cvbs av in.  
    { 
	      data=0x32; // cvbs 
        WriteToDDC(TW100+4,0x00,&data,1); 
    } 
		else  
		{ 
	     data=0x33; // svideo 
       WriteToDDC(TW100+4,0x00,&data,1);  
	} 
//} 
#endif 
		 
   } 
		delay_1ms(10); 
	  data=0x00; 
	  WriteToDDC(TW100+4,0x3F,&data,1);			  
} 
#else 
void T100_Set_Mode(void) 
{	 
	BYTE data=0; 
	//NTSC 
	      init_command_ntsc_fulldata(); 
	data=0x03; 
	WriteToDDC(TW100+4,0x03,&data,1); 
	data=0x01; 
    WriteToDDC(TW100+4,0x00,&data,1); 
} 
#endif 
void T100_Set_Source(BYTE source) 
{ 
	  BYTE data=0; 
	  data=0x01; 
	  WriteToDDC(TW100+4,0x3F,&data,1);//reset 
if(!source) 
{ 
	//init_command_cvbs2data(); 
	//init_command_cvbs3data(); 
	//init_command_cvbs4data(); 
 init_command_svideodata(); 
	//init_command_cvbsdata(); 
	 
		delay_1ms(10); 
	  
	} 
else	 
	{init_command_cvbsdata(); 
  
	delay_1ms(10); 
	} 
	 data=0x00; 
	  WriteToDDC(TW100+4,0x3F,&data,1);	 
} 
 
/* 
void T100_Set_Source(void) 
{ 
	  BYTE data=0; 
 
	  data=0x01; 
	  WriteToDDC(TW100+4,0x3F,&data,1);//reset 
	//init_command_cvbs2data(); 
	//init_command_cvbs3data(); 
	//init_command_cvbs4data(); 
	  init_command_svideodata(); 
		delay_1ms(10); 
	  data=0x00; 
	  WriteToDDC(TW100+4,0x3F,&data,1);		 
} 
*/ 
void T100_Set_UD_LR(void) 
{ 
	BYTE data =0xf4; /*0xf4 pansnic  au;   0xAC lg*/ 
	WriteToDDC(TW100,0xe1,&data,1); 
} 
void T100_Set_DU_RL(void) 
{ 
	BYTE data =0xbc; /*0xf4 pansnic  au;   0xAC lg*/ 
	WriteToDDC(TW100,0xe1,&data,1); 
} 
 
void init_panel_ntsc(void) 
{ 
	  BYTE data=0; 
#ifdef TFT_FORMAT_CHANGE_SPECIAL_DEAL 
	if (switch_format_flag)  
		{ 
		GPIO_M_SET(TFT_BL_CTL_GPIO, 1); 
   		GPIO_E_SET(TFT_BL_CTL_GPIO, 1); 
  		GPIO_O_SET(TFT_BL_CTL_GPIO, 0); 
		} 
#endif 
	  data=0x01; 
	  WriteToDDC(TW100+4,0x3F,&data,1);//reset 
		 
  	init_command_ntsc_fulldata(); 
  	data=0x03; 
  	WriteToDDC(TW100+4,0x03,&data,1); 
	if(tft_var.av_mode==AV_IN)//wool add 
   // if(GPIO_I_GET(16)==0)//tft cvbs av in.  
    { 
	      data=0x00; // cvbs 
        WriteToDDC(TW100+4,0x00,&data,1); 
    } 
		else 
		{ 
	      data=0x01; // svideo 
        WriteToDDC(TW100+4,0x00,&data,1); 
		} 
 
		delay_1ms(10); 
	  data=0x00; 
	  WriteToDDC(TW100+4,0x3F,&data,1);		 
 
	  #ifdef TFT_RATIO_AUTO_TOGGLE_WHEN_FORMAT_CHANGE 
          //  ReadFromI2c(0xa0,202,(BYTE *)&tft_ratio_flag,sizeof(tft_ratio_flag)); 
	  if(tft_ratio_flag==1) 
            { 
        T100_Set_Mode(TFT_NTSC,TFT_4_3,0);//4   /*4:3*/ 
	} 
	else if(tft_ratio_flag==2) 
	{ 
       T100_Set_Mode(TFT_NTSC,TFT_16_9,0);/*16:9*/ 
	} 
         #endif	  
 
} 
void init_panel_pal(void) 
{ 
	BYTE data=0; 
#ifdef TFT_FORMAT_CHANGE_SPECIAL_DEAL 
	if (switch_format_flag)   
		{ 
	GPIO_M_SET(TFT_BL_CTL_GPIO, 1); 
   	GPIO_E_SET(TFT_BL_CTL_GPIO, 1); 
  	GPIO_O_SET(TFT_BL_CTL_GPIO, 0); 
		} 
#endif 
	  data=0x01; 
	  WriteToDDC(TW100+4,0x3F,&data,1);//reset 
	init_command_pal_fulldata(); 
	//init_command_pal_43data(); 
	data=0x03; 
	WriteToDDC(TW100+4,0x03,&data,1); 
   // if(GPIO_I_GET(16)==0)//tft cvbs av in.  
   	if(tft_var.av_mode==AV_IN)//wool add 
    { 
	      data=0x32; // cvbs 
        WriteToDDC(TW100+4,0x00,&data,1); 
    } 
		else  
		{ 
	data=0x33; 
    WriteToDDC(TW100+4,0x00,&data,1); 
		} 
		 
		delay_1ms(10); 
	  data=0x00; 
	  WriteToDDC(TW100+4,0x3F,&data,1);		 
 
        #ifdef TFT_RATIO_AUTO_TOGGLE_WHEN_FORMAT_CHANGE 
           // ReadFromI2c(0xa0,202,(BYTE *)&tft_ratio_flag,sizeof(tft_ratio_flag)); 
	  if (tft_ratio_flag==1) 
            { 
        T100_Set_Mode(TFT_PAL,TFT_4_3,0);//4   /*4:3*/ 
	} 
	else if(tft_ratio_flag==2) 
	{ 
       T100_Set_Mode(TFT_PAL,TFT_16_9,0);/*16:9*/ 
	} 
         #endif	  
} 
 
 
#ifdef AUTO_DETECT_NTSC_PAL 
BYTE source_pre=0; 
//BYTE v_signal=0; 
void DetectNTSC_PAL(void) 
{ 
    BYTE Rdata; 
	ReadFromddc(TW100+4, 0x3C,&Rdata,1); 
   if (source_pre!=Rdata) 
	{ 
	 source_pre=Rdata; 
	#ifdef TFT_FORMAT_CHANGE_SPECIAL_DEAL 
		switch_format_flag=2; 
		GPIO_M_SET(TFT_BL_CTL_GPIO, 1); 
   		GPIO_E_SET(TFT_BL_CTL_GPIO, 1); 
  		GPIO_O_SET(TFT_BL_CTL_GPIO, 0); 
	#endif 
 	   if((Rdata & 0x07) == 0) // NTSC 
		   { 
	       T100_Set_Mode(TFT_NTSC,TFT_16_9,1);				   
		} 
   	 else  //PAL 
  		{ 
	       T100_Set_Mode(TFT_PAL,TFT_16_9,1);					 
   		 } 
	 delay_1ms(20); 
	} 
/* 
   ReadFromddc(TW100+4, 0x3A,(BYTE *)&Rdata,1); 
   Rdata&=0x01; 
    if (v_signal!=Rdata) 
    	{ 
    	if (Rdata)  WriteI2c(TW100, 0x91, 0x87, 1); 
	else 	WriteI2c(TW100, 0x91, 0x07, 1); 
	v_signal=Rdata; 
    	} 
    	*/ 
} 
#endif 
 
///////////////////////////////////////////////// 
void Detect_Sig(BYTE detect) 
{ 
	BYTE tmp; 
    	ReadFromddc(TW100+4, 0x3A,(BYTE *)&tmp,1); 
 
	if(tmp&0x01)  // No signal 
	{ 
	//  if(detect)  // When switch to signal lost input or Signal lost 
	//  { 
	  	BYTE temp; 
		temp= ReadFromddc(TW100, 0xC2,(BYTE *)&temp,1); 
	  	WriteI2c(TW100, 0xC2, temp|0x12,1); 
	  	WriteI2c(TW100, 0x9d, 0x10,1); 
	  	WriteI2c(TW100, 0x9e, 0xff,1); 
	  	WriteI2c(TW100, 0x9f, 0x50,1); 
	    WriteI2c(TW100, 0x91, 0x87,1); 
	//  } 
	} 
	/*else 
	{ 
		if(detect)  //When video switch and signal is normal 
			T100_Open_Panel(); 
 		else //if (NoSignal!=tmp)  //Not video switch and signal recover 
		{ 
			BYTE temp,temp1; 
			temp= ReadFromddc(TW100, 0xC2,(BYTE *)&temp,1); 
			WriteI2c(TW100, 0xC2, temp&~0x12,1); 
	  	//	SourceSelect(); 
	  		WriteI2c(TW100, 0x9d, 0x10,1); 
	  		WriteI2c(TW100, 0x9e, 0x80,1); 
	  		WriteI2c(TW100, 0x9f, 0x80,1); 
			temp1= ReadFromddc(TW100, 0xC2,(BYTE *)&temp1,1); 
	  		WriteI2c(TW100, 0x91, temp1&~0x80,1); 
		} 
    	} 
	*/ 
} 
 
///////////////////////////////////////////////// 
void Switch_video_source(BYTE source) 
{ 
BYTE data; 
if (source==1) 
{ 
	WriteI2c(TW100, 0x91, 0x07, 1); 
//	ReadFromddc(0xa0,202,(BYTE *)&tft_ratio_flag,sizeof(tft_ratio_flag)); 
      //  if (tv_format==TV_FORMAT_PAL) 
      //  T100_Set_Mode(TFT_PAL,tft_ratio_flag-1,1);//4   /*4:3*/ 
    //    else 
	// T100_Set_Mode(TFT_NTSC,tft_ratio_flag-1,1);//4    
} 
else if (!source) 
	{ 
	if (tv_format==TV_FORMAT_PAL) 
	T100_Set_Mode(TFT_PAL,TFT_16_9,1); 
	else 
       T100_Set_Mode(TFT_NTSC,TFT_16_9,1);/*16:9*/ 
	} 
} 
//extern void load_t102_factory_default_value(void); 
//extern void Write_Gamma_table(void); 
//extern void Write_Gamma_value(void); 
extern void load_t102_factory_value(void); 
 
void Init_T100_LCD_PANEL(void) 
{ 
	 
	Reset_T100_LCD_PANEL(); 
	 
	T100_Write_TCONData(); 
	 
	T100_Close_Panel(); 
	 
	T100_Write_T100Init(); 
	//Write_Gamma_table();//wool add 
	T100_Write_GAMMAData(); 
//	Write_Gamma_value(); 
	T100_Write_FilterData(); 
	T100_Set_Source(tft_var.av_mode);	 
	T100_Set_UD_LR(); 
	T100_Open_Panel(); 
	 change_t100_as_setup();  //bonnie 050912 
	//load_e2prom_panel_setting(); 
	//write_panel_setting(); 
//load_t102_factory_value(); 
//load_t102_factory_default_value(); 
} 
 
 void  set_tft_format_mode(BYTE mode)  // 0 ntsc 1 pal 
	 { 
	 if(mode) 
	 	{ 
	 //	init_panel_pal(); 
	 	T100_Set_Mode(TFT_PAL,tft_var.ratio_type,0);//wool add 
	 	} 
	else 
		{ 
	//	init_panel_ntsc(); 
		T100_Set_Mode(TFT_NTSC,tft_var.ratio_type,0);	 
		} 
 } 
 
void change_t100_as_setup(void) 
{ 
	if (tv_format==MODE_PAL) 
           { 
         //  init_panel_pal(); 
	   T100_Set_Mode(TFT_PAL,tft_var.ratio_type,0);//wool add 
	  } 
else  //if(tv_format==MODE_NTSC) 
	{//	  init_panel_ntsc(); 
	      T100_Set_Mode(TFT_NTSC,tft_var.ratio_type,0);	 
	} 
} 
#endif//end SUPPORT_T100_LCD_PANEL 
 
 
 
#ifdef SUPPORT_I2C_LCD_Panel 
 
void init_I2C_panel_4094(void) 
{ 
    int i; 
    const Data4094[8]={0,0,0,0,0,0,0,0}; 
                 
        regs0->sft_cfg0 &= ~(0xfffc << 1);  //Disable ra20~ra26 pin 129~131, pin 133~136 
    GPIO_M_SET(42,1); 
    GPIO_E_SET(42,1); 
    GPIO_O_SET(42,1);    //Set TFT_SB to H ,Enable TFT 9V.  
    GPIO_M_SET(41,1); 
    GPIO_E_SET(41,1); 
    GPIO_O_SET(41,0);    //Set STROBE to L 
        GPIO_M_SET(0,1);     //Set I2C_CLK to RISC 
        GPIO_E_SET(0,1); 
        GPIO_O_SET(0,1);     //Set I2C_CLK to L  
         
         
        GPIO_M_SET(1,1);     //Set I2C_DATA to RISC 
        GPIO_E_SET(1,1); 
        GPIO_O_SET(1,1);     //Set I2C_DATA to H 
        delay_1us(100); 
        GPIO_O_SET(41,1);    //Set STROBE to H for 4094 transfer data 
        delay_1us(10); 
        GPIO_O_SET(0,0);     //Set I2C_CLK to L  
        delay_1us(7); 
         
        for(i=0;i<8;i++) 
        { 
            GPIO_O_SET(1,Data4094[i]); 
            delay_1us(7); 
        GPIO_O_SET(0,1); 
        delay_1us(7); 
        GPIO_O_SET(0,0); 
        delay_1us(7); 
    } 
    GPIO_O_SET(41,0); 
    delay_1us(10); 
}    
 
void init_I2C_command(void) 
{ 
        GPIO_M_SET(0,0);    //Set I2C_CLK to IOP 
    GPIO_M_SET(1,0);    //Set I2C_DATA to IOP 
      
    WriteI2c(0x88,0x01,0xc0,1); 
    WriteI2c(0x88,0x02,0x80,1); 
    WriteI2c(0x88,0x03,0xb0,1); 
    WriteI2c(0x88,0x04,0xc8,1); 
    WriteI2c(0x88,0x05,0xd5,1); 
    WriteI2c(0x88,0x06,0x4c,1); 
    WriteI2c(0x88,0x07,0xc0,1); 
    WriteI2c(0x88,0x08,0x98,1); 
    WriteI2c(0x88,0x09,0x99,1); 
    WriteI2c(0x88,0x0a,0xf0,1); 
    WriteI2c(0x88,0x0b,0x80,1); 
    WriteI2c(0x88,0x0c,0x50,1); 
    WriteI2c(0x88,0x0d,0x9b,1); 
    WriteI2c(0x88,0x0e,0x48,1); 
    WriteI2c(0x88,0x0f,0x3c,1); 
    WriteI2c(0x88,0x10,0x80,1); 
    WriteI2c(0x88,0x11,0x05,1); 
    WriteI2c(0x88,0x12,0x92,1); 
    WriteI2c(0x88,0x13,0x8c,1); 
    WriteI2c(0x88,0x14,0x47,1); 
    WriteI2c(0x88,0x15,0x40,1); 
    WriteI2c(0x88,0x16,0x5d,1); 
    WriteI2c(0x88,0x17,0x8f,1); 
    WriteI2c(0x88,0x18,0x2d,1); 
} 
 
 
void init_I2C_panel(void) 
{ 
          //For EDOM Panasonic LCD Panel test 
    init_I2C_panel_4094(); 
         
        init_I2C_command(); 
         
        GPIO_M_SET(0,0);    //Set I2C_CLK to IOP 
    GPIO_M_SET(1,0);    //Set I2C_DATA to IOP 
    WriteI2c(0x88,0x03,0xb0,1); 
    WriteI2c(0x88,0x0d,0x9b,1); 
    WriteI2c(0x88,0x06,0x4c,1); 
     
    delay_1us(100);  
        init_I2C_panel_4094(); 
        init_I2C_panel_4094(); 
        init_I2C_panel_4094(); 
         
        GPIO_M_SET(0,0);    //Set I2C_CLK to IOP 
    GPIO_M_SET(1,0);    //Set I2C_DATA to IOP 
    WriteI2c(0x88,0x16,0x5d,1); 
}    
#endif       
 
#ifdef EASTWIN 
void init_an2526h(void) 
{ 
    if(tv_format == MODE_NTSC)  //NTSC system 
    { 
        NTSC_SET(); 
        init_an2526h_ntsc(); 
    } 
    else                        // PAL system 
    { 
        PAL_SET(); 
        init_an2526h_pal(); 
    } 
} 
 
void init_an2526h_ntsc(void) 
{ 
     
    color_drv_data[1] = color_drv_data[1] | 0x80; /* NTSC system */ 
    color_drv_data[2] = color_drv_data[2] | 0x80; /* NTSC system */ 
    //color_drv_data[1] = color_drv_data[1] | 0x91; /* NTSC system *///MAPLE 
     
    /* retrieve the color parameter setting from EEPROM */  
    ReadFromI2c(I2C_ID_MEMORY, COLOR_ADDR,&color_value,1); 
    an2526h_value_change(COLOR_ADJ, color_value); 
     
    /* retrieve the brightness parameter setting from EEPROM */  
    ReadFromI2c(I2C_ID_MEMORY, BRIGHTNESS_ADDR,&brightness_value,1); 
    an2526h_value_change(BRIGHTNESS_ADJ, brightness_value); 
 
    an2526h_send_data(); 
} 
 
void init_an2526h_pal(void) 
{ 
    color_drv_data[1] = color_drv_data[1] & 0x7F; /* PAL system */ 
    color_drv_data[2] = color_drv_data[2] | 0x80; /* PAL system */ 
    //color_drv_data[1] = color_drv_data[1] | 0x11; /* NTSC system *///MAPLE 
 
    /* retrieve the color parameter setting from EEPROM */  
    ReadFromI2c(I2C_ID_MEMORY, COLOR_ADDR,&color_value,1); 
    an2526h_value_change(COLOR_ADJ, color_value); 
     
    /* retrieve the brightness parameter setting from EEPROM */  
    ReadFromI2c(I2C_ID_MEMORY, BRIGHTNESS_ADDR,&brightness_value,1); 
    an2526h_value_change(BRIGHTNESS_ADJ, brightness_value); 
 
    an2526h_send_data(); 
} 
 
void an2526h_send_data(void) 
{ 
    unsigned char index;     
    GPIO_M_SET(0,0);    //Set I2C_CLK to IOP 
    GPIO_M_SET(1,0);    //Set I2C_DATA to IOP 
    for(index=0;index<16;index++) 
    { 
        WriteI2c(AN2526H_ADDR,data_refresh_mode|index,color_drv_data[index],1); /* Data refresh mode */ 
    } 
} 
 
void an2526h_value_change(unsigned char para,unsigned char value) 
{    
#ifdef AN2546H 
    if(para == COLOR_ADJ)                           /* color adjustment */ 
    { 
        if(value == 8)                               
            color_drv_data[2]=0x80; 
        else if(value < 8) 
            color_drv_data[2]=(0x80)-(8-value)*7; 
        else if(value > 8) 
            color_drv_data[2]=(0x80)+(value-8)*7; 
    } 
    else if(para == BRIGHTNESS_ADJ)                 /* brightness adjustment */ 
    { 
        if(value == 8) 
            color_drv_data[5]=0x38; 
        else if(value < 8) 
            color_drv_data[5]=(0x38)-(8-value)*7;  
        else if(value > 8) 
            color_drv_data[5]=(0x38)+(value-8)*7;    
    } 
#else   //AN2526H 
    if(para == COLOR_ADJ)                           /* color adjustment */ 
    { 
        if(value == 8)                               
            color_drv_data[5]=0xca; 
        else if(value < 8) 
            color_drv_data[5]=(0xca)-(8-value)*4; 
        else if(value > 8) 
            color_drv_data[5]=(0xca)+(value-8)*5; 
    } 
    else if(para == BRIGHTNESS_ADJ)                 /* brightness adjustment */ 
    { 
        if(value == 8) 
            color_drv_data[8]=0x5f; 
        else if(value < 8) 
            color_drv_data[8]=(0x5f)-(8-value)*8; 
        else if(value > 8) 
            color_drv_data[8]=(0x5f)+(value-8)*8;   
    } 
#endif 
}    
 
void load_customer_default(void) 
{ 
    unsigned char default_view_mode,default_brightness_value,default_color_value; 
    default_brightness_value = 8;   // default brightness value 
    default_color_value = 8;        // default color value 
    default_view_mode = FULL_MODE;  // default view mode value 
    WriteToI2c(I2C_ID_MEMORY,BRIGHTNESS_ADDR,&default_brightness_value,1); 
    WriteToI2c(I2C_ID_MEMORY,COLOR_ADDR,&default_color_value,1); 
    WriteToI2c(I2C_ID_MEMORY,VIEWMODE_ADDR,&default_view_mode,1); 
} 
 
void check_customer_default(void) 
{ 
    unsigned char eeprom_been_used; 
    ReadFromI2c(I2C_ID_MEMORY, BEEN_USED_ADDR,&eeprom_been_used,1); 
    if( eeprom_been_used != E2PROM_BEEN_USED) 
    { 
        eeprom_been_used = E2PROM_BEEN_USED; 
        WriteToI2c(I2C_ID_MEMORY,BEEN_USED_ADDR,&eeprom_been_used,1); 
        load_customer_default();                 
    } 
} 
 
void init_lcd_display_mode(void) 
{ 
    unsigned char view_mode;      
    ReadFromI2c(I2C_ID_MEMORY,VIEWMODE_ADDR,&view_mode,1); 
         
    if( view_mode == NORMAL_MODE)    
    { 
        //PrintOsdMsg(STR_OS_VIEW_MODE_NORMAL,REGION2,1,0); 
        LCD_VIEW_MODE_NORMAL(); 
    } 
    else 
    { 
        //PrintOsdMsg(STR_OS_VIEW_MODE_FULL,REGION2,1,0); 
        LCD_VIEW_MODE_FULL(); 
    } 
} 
#endif 
 
 
#ifdef SUPPORT_Auo_2inch_Digital_panel //add for auo 2" ccir656 panel 
 
//define Auo panel I2c GPIO pin 
#define AUO_CSB     0 //pin57 GPIO 0 
#define AUO_SCL     1 //pin58 GPIO 1 
#define AUO_SDA     2 //pin59 GPIO 1 
 
/********************************************************************/ 
/* Function:  init_auo_digital_interface()                          */   
/*                                                                  */ 
/*          Initual the I2C GPIO                                    */ 
/********************************************************************/ 
void init_auo_digital_interface(void) 
{ 
 
   regs0->sysclk_div_sel|=(1<<5);   //set data output in ccir656 clock low  
   regs0->sft_cfg4&=~(1<<0); 
   regs0->sft_cfg4&=~(1<<1);  
   regs0->sft_cfg4&=~(1<<2); 
   GPIO_M_SET(AUO_SCL,1);     //Set AUO_SCL to RISC 
   GPIO_M_SET(AUO_SDA,1);     //Set AUO_SDA to RISC 
   GPIO_M_SET(AUO_CSB,1);     //Set AUO_CSB to RISC 
    
   GPIO_E_SET(AUO_SCL,1); 
   GPIO_E_SET(AUO_SDA,1); 
   GPIO_E_SET(AUO_CSB,1);    
     
}    
 
 
void send_auo_panel_cmd(UINT16 set_comd) 
{ 
   int i;    
    
       
   GPIO_O_SET(AUO_CSB,0);     //Set AUO_CSB to L  
   delay_1us(1); 
   for(i=15;i>=0;i--) 
   { 
    GPIO_O_SET(AUO_SCL,0); 
    if((set_comd>>i)&0x01) 
    { 
    GPIO_O_SET(AUO_SDA,1); 
   
    } 
    else 
    { 
    GPIO_O_SET(AUO_SDA,0); 
     
    } 
   //   delay_1us(1); 
    GPIO_O_SET(AUO_SCL,1); 
      delay_1us(1); 
         
   }     
   GPIO_O_SET(AUO_CSB,1);     //Set AUO_CSB to H  
   
}    
 
void init_auo_digital_panel(void) 
{ 
    init_auo_digital_interface();  
    send_auo_panel_cmd(0x000f);  
    send_auo_panel_cmd(0x4003);  
    send_auo_panel_cmd(0x6007);  
    send_auo_panel_cmd(0xc006);  
     
}    
 
 
#endif 
 
 
#ifdef SUPPORT_Auo_UPS053_Digital_panel //add for auo 3.5" ccir656 panel 
//define Auo panel I2c GPIO pin 
#define AUO_CSB     0 //pin57 GPIO 0 
#define AUO_SCL     1 //pin58 GPIO 1 
#define AUO_SDA     2 //pin59 GPIO 2 
 
 
 
 
/********************************************************************/ 
/* Function:  init_auo_digital_interface()                          */   
/*                                                                  */ 
/*          Initual the I2C GPIO                                    */ 
/********************************************************************/ 
void init_auo_digital_interface(void) 
{ 
    
   regs0->sysclk_div_sel|=(1<<5);   //set data output in ccir656 clock low  
    
#ifndef PMP_KEYBOARD//olive add 2005-1-24    
   regs0->sft_cfg4&=~(1<<0); 
   regs0->sft_cfg4&=~(1<<1);  
   regs0->sft_cfg4&=~(1<<2); 
   GPIO_M_SET(AUO_SCL,1);     //Set AUO_SCL to RISC 
   GPIO_M_SET(AUO_SDA,1);     //Set AUO_SDA to RISC 
   GPIO_M_SET(AUO_CSB,1);     //Set AUO_CSB to RISC 
    
   GPIO_E_SET(AUO_SCL,1); 
   GPIO_E_SET(AUO_SDA,1); 
   GPIO_E_SET(AUO_CSB,1);    
    GPIO_O_SET(AUO_CSB,1); 
     GPIO_O_SET(AUO_SDA,1); 
     GPIO_O_SET(AUO_SCL,1); 
#endif 
    
   regs0->sft_cfg1 = regs0->sft_cfg1 & (~(1<<1)); 
     GPIO_M_SET(17,1); 
     GPIO_E_SET(17,1); 
     GPIO_O_SET(17,1);  
      
     
      
     
     
}    
 
void write_auo_i2c_page(int iDevAdd, int iSubAdd, BYTE *iSetData ,int len) 
{ 
     int i,j; 
      
     
     GPIO_O_SET(AUO_CSB,1); 
     GPIO_O_SET(AUO_SDA,1); 
     GPIO_O_SET(AUO_SCL,1); 
     
     delay_1ms(2); 
     GPIO_O_SET(AUO_SDA,0); 
     delay_1us(7); 
     GPIO_O_SET(AUO_SCL,0); 
     delay_1us(7); 
      
     
      
     for(i=7;i>=0;i--) 
     { 
          
     if((iDevAdd>>i)&0x01) 
     GPIO_O_SET(AUO_SDA,1); 
     else 
     GPIO_O_SET(AUO_SDA,0); 
      
     delay_1us(3); 
      
     GPIO_O_SET(AUO_SCL,1); 
     delay_1us(1); 
      
     GPIO_O_SET(AUO_SCL,0); 
     delay_1us(1); 
      
      
     if((iDevAdd>>i)&0x01) 
     GPIO_O_SET(AUO_SDA,0); 
      
     if(i>0) 
     delay_1us(11); 
     else 
     delay_1us(9); 
     
      
    } 
     
      
     //wait for ack 
     GPIO_O_SET(AUO_SCL,1); 
     delay_1us(6); 
      
     GPIO_O_SET(AUO_SCL,0); 
     GPIO_O_SET(AUO_SDA,1); 
     delay_1us(1); 
      
     GPIO_O_SET(AUO_SDA,0); 
     delay_1us(12); 
      
      
      
     //set sub address 
     for(i=7;i>=0;i--) 
     { 
          
     if((iSubAdd>>i)&0x01) 
     GPIO_O_SET(AUO_SDA,1); 
     else 
     GPIO_O_SET(AUO_SDA,0); 
      
     delay_1us(3); 
      
     GPIO_O_SET(AUO_SCL,1); 
     delay_1us(1); 
      
     GPIO_O_SET(AUO_SCL,0); 
     delay_1us(1); 
      
     if((iSubAdd>>i)&0x01) 
     GPIO_O_SET(AUO_SDA,0); 
      
     if(i>0) 
     delay_1us(11); 
     else 
     delay_1us(9); 
      
     
    } 
      
     //wait for ack 
     GPIO_O_SET(AUO_SCL,1); 
     delay_1us(6); 
      
     GPIO_O_SET(AUO_SCL,0); 
     GPIO_O_SET(AUO_SDA,1); 
     delay_1us(1); 
      
     GPIO_O_SET(AUO_SDA,0); 
     delay_1us(31); 
          
     for(j=0;j=0;i--) 
     { 
      
     if((*(iSetData+j)>>i)&0x01) 
     GPIO_O_SET(AUO_SDA,1); 
     else 
     GPIO_O_SET(AUO_SDA,0); 
      
     delay_1us(3); 
     
     GPIO_O_SET(AUO_SCL,1); 
     delay_1us(1); 
     
     GPIO_O_SET(AUO_SCL,0); 
     delay_1us(1); 
      
     if((*(iSetData+j)>>i)&0x01) 
     GPIO_O_SET(AUO_SDA,0); 
      
     if(i>0) 
     delay_1us(11); 
     else 
     delay_1us(9); 
    } 
     //wait for ack 
     GPIO_O_SET(AUO_SCL,1); 
     delay_1us(6); 
     GPIO_O_SET(AUO_SCL,0); 
     GPIO_O_SET(AUO_SDA,1); 
     delay_1us(1); 
     GPIO_O_SET(AUO_SDA,0); 
     if(j<=24) 
     delay_1us(34); 
     else 
     delay_1us(15); 
     
     } 
      
     GPIO_O_SET(AUO_SCL,1); 
     delay_1us(66); 
     GPIO_O_SET(AUO_SDA,1); 
      
         
}    
 
 
void init_auo_ups053_digital_panel(void) 
{ 
    int i; 
     watchdog_onoff(0); 
    init_auo_digital_interface();  
    for(i=0;i<2;i++) 
    { 
        #ifdef PMP_KEYBOARD//olive mod 2005-1-24 
        WriteToI2c(0x58,0x00,&auo_053_ntsc[0],25); 
        #else 
        write_auo_i2c_page(0x58,0x00,&auo_053_ntsc[0],25); 
        #endif 
    } 
    watchdog_onoff(1);    
}    
 
 
 
 
#endif 
 
#ifdef SUPPORT_Auo_UPS018_Digital_panel   
void init_auo_ups018_digital_panel(void) 
{ 
     int iRts,kk; 
     
    GPIO_O_SET(CUT_PANEL_POWER ,1); 
     delay_1ms(100); 
    kk=WriteToI2c(0x58,0x00,auo_018_ntsc,5);     //////////yangli add for write ups018 I2C,05/02/15 
     if(kk == 1)   /////////////////////for debug  
        printf("write UPS018 ok!\n"); 
    else 
        printf("write UPS018 error!\n"); 
    iRts=WriteToI2c(0x88,0,an2526_data_ntsc,16); /* Data refresh mode */ 
    if(iRts == 1) 
        printf("write an2526 ok!\n"); 
    else 
        printf("write an2526 error!\n"); 
}    
#endif 
 
 
 
 
#ifdef SUPPORT_VX1818_TOSHIBA_PANEL   
BYTE VX1818_ntsc_data[8]={0x5a,0x7d,0x94,0x11,0xd9,0xf8,0xd6,0x01}; 
BYTE VX1818_ntsc_Addr[8]={0x01,0xc0,0x3c,0x22,0x05,0xc1,0x3b,0x02}; 
void init_xv1818_toshiba_panel(void) 
{ 
    int i=0; 
    for(i=0,i<8,i++) 
     WriteToI2c(0xd8,VX1818_ntsc_Addr[i],&VX181_ntsc_data[i],1); 
     
}    
#endif 
 
#ifdef LOWBAT_STR_FLASH 
static BYTE flicker_count1=0; 
void lowbat_flash(void) 
{ 
	   
       if(++flicker_count1>10) flicker_count1=0; 
 
						if(flicker_count1>5) 
							{ 
							PrintOsdMsg(STR_OS_LOWBAT, 1, 1, 1);  //bonnie 041122	 
							} 
						else 
							{ 
							ClearOsdMsg(1);  //bonnie 041122 //bonnie 041122 
							} 
 
} 
#endif 
 
#ifdef SUPPORT_SHARP_TFT_RB5 
BYTE TFT_color_level/*=12*/; 
BYTE TFT_bright_level/*=12*/; 
BYTE TFT_contrast_level/*=12*/; 
#ifdef TFT_FACTORY_ADJUST_VALUE 
BYTE tft_reg_val[15]; 
#endif 
void write_A3820_tft(BYTE tft_cmd,BYTE tft_data) 
{ 
      BYTE i; 
      UINT16 data = (UINT16)tft_cmd<<8|tft_data; 
	GPIO_O_SET(GPIO_TFT_CLK,0); 
	GPIO_O_SET(GPIO_TFT_CS,1);	 
	 
	for(i=0;i<16;i++) 
		{ 
		GPIO_O_SET(GPIO_TFT_CLK,0); 
		delay_1us(10); 
		if(data&0x8000) 
		GPIO_O_SET(GPIO_TFT_DI,1); 
		else		 
		GPIO_O_SET(GPIO_TFT_DI,0); 
			delay_1us(10);				 
		GPIO_O_SET(GPIO_TFT_CLK,1); 
		delay_1us(8); 
		data<<=1; 
		} 
	 
	GPIO_O_SET(GPIO_TFT_CS,0); 
	 
	GPIO_O_SET(GPIO_TFT_CLK,0);	 
	delay_1us(150); 
} 
void write_sharp_tft(BYTE tft_cmd, BYTE tft_data) 
{ 
	BYTE i; 
	UINT16 data = (UINT16)tft_data<<8 | tft_cmd;	 
	 
	GPIO_O_SET(GPIO_TFT_CS,0);	 
	GPIO_O_SET(GPIO_TFT_CLK,0); 
	for(i=0; i<16; i++) 
	{ 
		GPIO_O_SET(GPIO_TFT_CLK,0); 
		//delay_1us(10); 
		if(data&0x0001) 
		GPIO_O_SET(GPIO_TFT_DI,1); 
		else 
		GPIO_O_SET(GPIO_TFT_DI,0); 
		//delay_1us(10); 
		GPIO_O_SET(GPIO_TFT_CLK,1); 
		//delay_1us(10); 
		data>>=1;		 
	} 
	GPIO_O_SET(GPIO_TFT_CS,0); 
	GPIO_O_SET(GPIO_TFT_CLK,1);	 
	} 
void init_sharp_tft(void) 
{	 
	GPIO_M_SET(GPIO_TFT_CS,1); 
	GPIO_M_SET(GPIO_TFT_CLK,1); 
	GPIO_M_SET(GPIO_TFT_DI,1); 
	GPIO_E_SET(GPIO_TFT_CS,1); 
	GPIO_E_SET(GPIO_TFT_CLK,1); 
	GPIO_E_SET(GPIO_TFT_DI,1); 
	GPIO_O_SET(GPIO_TFT_CS,0); 
	GPIO_O_SET(GPIO_TFT_CLK,0); 
	GPIO_O_SET(GPIO_TFT_DI,0); 
#ifndef TFT_REG_STORE_START 
	write_A3820_tft(0x04,0xf6);//0x04f2 
        
       write_A3820_tft(0x08,0x80);//0x0080 hue 
       write_A3820_tft(0x10,0x64);//0x005e y aperture 
       write_A3820_tft(0x18,tft_var.brightness/*0x00*/);//0x002c luminnace       --------------bright 
       write_A3820_tft(0x20,tft_var.color/*0x00*/);//0x0028 color 0x0028TFT_color -------------color 
       write_A3820_tft(0x28,tft_var.contrast/*0x4f*/);//0x0054 rgb contrast 0x0054 TFT_contrast  ------------contrast 
       write_A3820_tft(0x30,0x79);//0x0083 g_ch 
       write_A3820_tft(0x38,0x83);//0x0064 r_ch 
       write_A3820_tft(0x40,0x70);//0x006a b_ch 
       write_A3820_tft(0x48,0xec);//gamma1 
       write_A3820_tft(0x50,0xff);//gamma2 
       write_A3820_tft(0x58,0x64);//white peak 
       write_A3820_tft(0x60,0x99);//comac 
	   write_A3820_tft(0x68,0x3b);//daco	 
 
	 
	 
       write_A3820_tft(0x70,0x00);//0x0080 hue 
       write_A3820_tft(0x78,0x64);//0x005e y aperture 
       write_A3820_tft(0x80|0x02,0x58);//0x002c luminnace 
       write_A3820_tft(0x88|0x01,0x70);//0x0028 color 0x0028TFT_color 
       write_A3820_tft(0x90|0x01,0x6b);//0x0054 rgb contrast 0x0054 TFT_contrast 
       write_A3820_tft(0x98,0x16);//0x0064 r_ch 
       write_A3820_tft(0xa0|0x03,0x84);//0x006a b_ch 
       write_A3820_tft(0xa8,0x20);//gamma1 
       write_A3820_tft(0xb0,0x5c);//gamma2 
       write_A3820_tft(0xb8|0x03,0x91);//white peak 
       write_A3820_tft(0xc0|0x03,0x20);//comac 
	   write_A3820_tft(0xc8|0x03,0xf8);//daco	 
       write_A3820_tft(0xd0|0x01,0xc9);//comac 
 
	 
         
	   write_A3820_tft(0xd8|0x07,0x93);//horizoidal  display position 
       write_A3820_tft(0xe5,0xf8);//ctr1  01b8 
       write_A3820_tft(0xe8|0x03,0x90);//ctr2 
#else 
       ReadFromI2c(I2C_SLAVE_ADDRESS,TFT_REG_STORE_START,tft_reg_val,15); 
       write_A3820_tft(0x04,0xf6);//0x04f2 
        
       write_A3820_tft(0x08,tft_reg_val[1]);//0x0080 hue 
       write_A3820_tft(0x10,tft_reg_val[2]);//0x005e y aperture 
       write_A3820_tft(0x18,tft_var.brightness);//0x002c luminnace 
       write_A3820_tft(0x20,tft_var.color);//0x0028 color 0x0028TFT_color 
       write_A3820_tft(0x28,tft_var.contrast);//0x0054 rgb contrast 0x0054 TFT_contrast 
       write_A3820_tft(0x30,tft_reg_val[6]);//0x0083 g_ch 
       write_A3820_tft(0x38,tft_reg_val[7]);//0x0064 r_chg 
       write_A3820_tft(0x40,tft_reg_val[8]);//0x006a b_ch 
       write_A3820_tft(0x48,tft_reg_val[9]);//gamma1 
       write_A3820_tft(0x50,tft_reg_val[10]);//gamma2 
       write_A3820_tft(0x58,tft_reg_val[11]);//white peak 
       write_A3820_tft(0x60,tft_reg_val[12]);//comac 
	write_A3820_tft(0x68,tft_reg_val[13]);//daco	 
	 
       write_A3820_tft(0x70,0x00);//0x0080 hue 
       write_A3820_tft(0x78,0x64);//0x005e y aperture 
       write_A3820_tft(0x80|0x02,0x58);//0x002c luminnace 
       write_A3820_tft(0x88|0x05,0x70);//0x0028 color 0x0028TFT_color 
       write_A3820_tft(0x90|0x01,0x6b);//0x0054 rgb contrast 0x0054 TFT_contrast 
       write_A3820_tft(0x98,0x16);//0x0064 r_ch 
       write_A3820_tft(0xa0|0x03,0x84);//0x006a b_ch 
       write_A3820_tft(0xa8,0x19);//gamma1 
       write_A3820_tft(0xb0,0x55);//gamma2 
       write_A3820_tft(0xb8|0x03,0x92);//white peak 
       write_A3820_tft(0xc0|0x03,0x20);//comac 
	   write_A3820_tft(0xc8|0x03,0xf8);//daco	 
       write_A3820_tft(0xd0|0x01,0xc9);//comac 
 
	 
         
	write_A3820_tft(0xd8|0x07,tft_reg_val[14]);//horizoidal  display position 
       write_A3820_tft(0xe5,0xba/*fa*/);//ctr1  01b8 
       write_A3820_tft(0xe8|0x02,0x90);//ctr2 
#endif 
 
} 
void  set_tft_input_mode(BYTE mode) 
	{ 
	if(mode) //setup 
	 	write_sharp_tft(0x20,0x19); 
	else 
		write_sharp_tft(0x20,0x18); 
  
	} 
 
 BYTE tft_input_mod=1; 
 BYTE dvd_standby=0; 
void check_tft_input_mode() 
	{ 
       GPIO_E_SET(37, 1); 
       GPIO_O_SET(37, 1); 
 
	   GPIO_E_SET(37, 0); 
 
	  if(GPIO_I_GET(37)&&!tft_input_mod) 
	  	{ 
	  	  set_tft_input_mode(1); 
		  tft_input_mod = 1; 
		    if(!dvd_standby) dvd_standby=1; 
	  	} 
	  else  
	  	{ 
	  	 if((!GPIO_I_GET(37)) && tft_input_mod) 
		 	{ 
		 	 set_tft_input_mode(0); 
			 tft_input_mod = 0; 
			 if(!dvd_standby) dvd_standby=2; 
		 	} 
		}	 
	} 
#ifdef TFT_REG_STORE_START 
extern BYTE tft_col_mid,tft_bri_mid,tft_con_mid; 
#endif 
void set_I2C_TFT_UPSXXX(BYTE set_mode, BYTE direct,BYTE steps) 
{   
#ifdef TFT_REG_STORE_START 
  BYTE tft_step_low,tft_step_high; 
       if (tft_var.mode==TFT_COLOR) 
       	{ 
	    tft_step_low= tft_col_mid/13;	 
	    tft_step_high=(255-tft_col_mid)/14-5; 
       	} 
	else if (tft_var.mode==TFT_BRIGHTNESS) 
		{ 
	    tft_step_low= tft_bri_mid/13;	 
	    tft_step_high=(255-tft_bri_mid)/14; 
		} 
	else if (tft_var.mode==TFT_CONTRAST) 
		{ 
	    tft_step_low= tft_con_mid/13;	 
	    tft_step_high=(255-tft_con_mid)/14-7; 
		} 
 
#endif 
     switch(tft_var.mode) 
	{ 
	case TFT_COLOR: 
	   if(direct)	 
	   	{ 
	   	if(TFT_color_level<12) 
	  #ifndef TFT_REG_STORE_START 
	       tft_var.color-=3*steps; 
		else 
		tft_var.color-=13*steps;	 
	  #else 
		tft_var.color-=tft_step_low*steps; 
		else 
		tft_var.color-=tft_step_high*steps; 
	  #endif 
	   	} 
	   else 
	   	{ 
	   	if(TFT_color_level<=12) 
	#ifndef TFT_REG_STORE_START		 
              tft_var.color+=3*steps;	 
		else 
	       tft_var.color+=13*steps;	 
	#else 
		tft_var.color+=tft_step_low*steps; 
		else 
		tft_var.color+=tft_step_high*steps; 
	  #endif	 
	   	} 
	   write_A3820_tft(0x20,tft_var.color); 
	   WriteI2c(0xa0, 203, tft_var.color, 1); 
	break; 
	case TFT_BRIGHTNESS: 
	  if(direct) 
	  	{ 
	   if(TFT_bright_level<12) 
	  #ifndef TFT_REG_STORE_START	 
	       tft_var.brightness-=7*steps; 
		else 
		tft_var.brightness-=12*steps;	 
	  #else 
		tft_var.brightness-=tft_step_low*steps; 
		else 
		tft_var.brightness-=tft_step_high*steps; 
	  #endif	 
	  	} 
	   else 
	   	{ 
	   	if(TFT_bright_level<=12) 
	 #ifndef TFT_REG_STORE_START		 
              tft_var.brightness+=7*steps;	 
		else 
	       tft_var.brightness+=12*steps;	 
	 #else 
		tft_var.brightness+=tft_step_low*steps; 
		else 
		tft_var.brightness+=tft_step_high*steps; 
	  #endif		 
	   	} 
	   write_A3820_tft(0x18,tft_var.brightness); 
	   WriteI2c(0xa0, 204, tft_var.brightness, 1); 
	break; 
	case TFT_CONTRAST: 
	   if(direct)	    
	   { 
	   	if(TFT_contrast_level<12) 
	   #ifndef TFT_REG_STORE_START		 
	       tft_var.contrast-=5*steps; 
		else 
		tft_var.contrast-=13*steps; 
	  #else 
		tft_var.contrast-=tft_step_low*steps; 
		else 
		tft_var.contrast-=tft_step_high*steps; 
	  #endif		 
	   } 
	   else 
	   	{ 
	   	if(TFT_contrast_level<=12) 
	#ifndef TFT_REG_STORE_START			 
              tft_var.contrast+=5*steps;	 
		else 
	       tft_var.contrast+=13*steps; 
	#else 
		tft_var.contrast+=tft_step_low*steps; 
		else 
		tft_var.contrast+=tft_step_high*steps; 
	 #endif			 
	   	} 
	   write_A3820_tft(0x28,tft_var.contrast); 
   	   WriteI2c(0xa0, 205, tft_var.contrast, 1); 
	break; 
	case TFT_RATIO_TYPE: 
                  if (tft_var.ratio_type==TFT_4_3) 
                  	{ 
				  	tft_var.ratio_type=TFT_16_9; 
					write_A3820_tft(0xe5,0xba/*0xfa*/); 
                  	} 
		   else if (tft_var.ratio_type==TFT_16_9) 
		   	{ 
				tft_var.ratio_type=TFT_4_3; 
				write_A3820_tft(0xe5,0xb9/*0xf9*/); 
		   	} 
	break; 
	case TFT_DISP_MODE: 
                  if (tft_var.disp_mode==DISP_NORMAL) 
                  	{ 
				  	tft_var.disp_mode=DISP_UPSIDE_DOWN; 
					write_A3820_tft(0xe8|0x02,0x20); 
                  	} 
		   else if (tft_var.disp_mode==DISP_UPSIDE_DOWN) 
		   	{ 
				tft_var.disp_mode=DISP_NORMAL; 
				write_A3820_tft(0xe8|0x02,0x90);; 
		   	} 
	break; 
	default: 
		break; 
     	} 
	WriteI2c(0xa0, 199, 0x88, 1);	 
} 
 
void set_tft_to_default(void) 
{ 
   TFT_color_level=12;//12; 
   TFT_bright_level=12; 
   TFT_contrast_level=12; 
   #ifndef TFT_REG_STORE_START 
   tft_var.color=0x28;//0x32; 
  tft_var.brightness=0x5f; 
  tft_var.contrast=0x58;//0x3f; 
  #else 
   ReadFromI2c(I2C_SLAVE_ADDRESS, TFT_REG_STORE_START+4, (BYTE*)&tft_var.color, 1); 
   ReadFromI2c(I2C_SLAVE_ADDRESS, TFT_REG_STORE_START+3, (BYTE*)&tft_var.brightness, 1); 
   ReadFromI2c(I2C_SLAVE_ADDRESS, TFT_REG_STORE_START+5, (BYTE*)&tft_var.contrast, 1); 
  #endif 
   WriteI2c(0xa0, 200, 12,1); 
   WriteI2c(0xa0, 201, 12,1); 
   WriteI2c(0xa0, 202, 12,1); 
   write_A3820_tft(0x20,tft_var.color);//63); 
   WriteI2c(0xa0, 203, tft_var.color, 1);	//init colors 
   write_A3820_tft(0x18,tft_var.brightness);    
   WriteI2c(0xa0, 204, tft_var.brightness, 1);	//init bright 
   write_A3820_tft(0x28,tft_var.contrast); 
   WriteI2c(0xa0, 205, tft_var.contrast, 1);   	//init contrast 
   write_A3820_tft(0xe5,0xfa); 
   write_A3820_tft(0xe8|0x03,0x90); 
} 
#endif 
 
/* 
#ifdef PDVD_USE_KEY_SETUP_TFT 
void init_panel_value_default(void) 
{ 
	cust_scrn=0; 
	tft_var.mode=0; 
	//tft_var.brightness=BRIGHTNESS_DEFAULT; 
	//tft_var.hue=HUE_DEFAULT; 
	//tft_var.contrast=CONTRAST_DEFAULT; 
	//tft_var.color=COLOR_DEFAULT; 
	tft_var.ratio_type=RATIO_DEFAULT; 
	tft_var.disp_mode=DISP_NORMAL; 
	tft_var.av_mode=AV_OUT; 
	tft_var.volume_value=DEFAULT_VOL; 
} 
 
#endif //#ifdef PDVD_USE_KEY_SETUP_TFT 
*/ 
#ifdef SUPPORT_T100_LCD_PANEL 
void init_panel_value_default(void) 
{ 
	cust_scrn=0; 
	tft_var.mode=0; 
	tft_var.brightness=BRIGHTNESS_DEFAULT; 
	tft_var.color=COLOR_DEFAULT; 
//	tft_var.hue=HUE_DEFAULT; 
	tft_var.contrast=CONTRAST_DEFAULT; 
	tft_var.ratio_type=DISPMODE_DEFAULT; 
	tft_var.av_mode=AV_OUT;//wool 
	tft_var.dispmode=DISP_NORMAL; 
	tft_var.volume_value=DEFAULT_VOL; 
	//tft_ratio_flag=2; 
} 
 
/*  
** Function:load_e2prom_panel_setting() 
** Purpose:load panel setting from e2prom and store in the global var. 
** tjf 2004-11-05 
*/ 
//#ifdef TFT_LOADUSERSET_POWERON //tjf 2005-2-25 17:00 
void load_e2prom_panel_setting(void) 
{ 
	//GPIO_M_SET(95,0);    //Set I2C_CLK to IOP 
   // GPIO_M_SET(96,0);    //Set I2C_DATA to IOP 
     
	ReadFromI2c(I2C_ID_MEMORY,BRIGHTNESS_ADDR,&tft_var.brightness,1); 
	delay_1ms(2);//2004-12-30 11:47 
	ReadFromI2c(I2C_ID_MEMORY,COLOR_ADDR,&tft_var.color,1); 
	delay_1ms(2);//2004-12-30 11:47 
	//ReadFromI2c(I2C_ID_MEMORY,HUE_ADDR,&tft_var.hue,1); 
	//delay_1ms(2);//2004-12-30 11:48 
	ReadFromI2c(I2C_ID_MEMORY,CONTRAST_ADDR,&tft_var.contrast,1); 
	delay_1ms(2);//2004-12-30 11:48 
	//ReadFromI2c(I2C_ID_MEMORY,DISPMODE_ADDR,&tft_var.ratio_type,1); 
	delay_1ms(1);//2004-12-30 11:48 
	//tjf 2004-12-10 16:42 add for protecting system halt because the value error  
	if((tft_var.brightness>170)||(tft_var.brightness==0)) 
	{ 
	    tft_var.brightness=BRIGHTNESS_DEFAULT; 
	    WriteI2c(I2C_ID_MEMORY,BRIGHTNESS_ADDR,tft_var.brightness,1); 
	} 
	if((tft_var.color>170)||(tft_var.color==0)) 
	{ 
	    tft_var.color=COLOR_DEFAULT; 
	    WriteI2c(I2C_ID_MEMORY,COLOR_ADDR,tft_var.color,1); 
	} 
/*	if((tft_var.hue>170)||(tft_var.hue==0)) 
	{ 
	    tft_var.hue=HUE_DEFAULT; 
	    WriteI2c(I2C_ID_MEMORY,HUE_ADDR,tft_var.hue,1); 
	}    
*/ 
	if((tft_var.contrast>170)||(tft_var.contrast==0)) 
	{ 
	    tft_var.contrast=CONTRAST_DEFAULT; 
	    WriteI2c(I2C_ID_MEMORY,CONTRAST_ADDR,tft_var.contrast,1); 
	} 
update_panel_color(); 
//update_panel_hue(); 
update_panel_brightness(); 
update_panel_contrast(); 
//if(tft_var.dispmode) 
	//    tft_var.dispmode=TFT_16_9; 
	#ifdef GPIO_DBG 
	printf("============= load_e2prom_panel_setting() =============\n");	 
	printf("tft.brightness:%d\n",tft_var.brightness); 
	printf("tft.color:%d\n",tft_var.color); 
//	printf("tft.hue:%d\n",tft_var.hue); 
	printf("tft.contrast:%d\n",tft_var.contrast); 
	printf("tft.dispmode:%d\n",tft_var.dispmode); 
	#endif 
} 
//#endif 
 
void update_panel_color(void) 
{ 
	BYTE temp=0; 
	temp = (tft_var.color+0x00); 
	WriteToDDC(TW100,COLOR_REG,&temp,1); 
	#ifdef GPIO_DBG 
	printf("============= update_panel_color() =============\n"); 
	printf("tft_var.color:%02x\n",temp); 
	#endif 
} 
/* 
void update_panel_hue(void) 
{ 
	BYTE temp=0; 
	temp = (tft_var.hue+0x00); 
	//WriteToDDC(TW100+4,HUE_REG,&temp,1);//wool change 
	WriteToDDC(TW100,HUE_REG,&temp,1); 
	#ifdef GPIO_DBG 
	printf("============= update_panel_hue() =============\n"); 
	printf("tft_var.hue:%02x\n",temp); 
	#endif 
	 
} 
*/ 
void update_panel_brightness(void) 
{ 
	BYTE temp=0; 
	temp = (tft_var.brightness+0x00); 
	WriteToDDC(TW100,BRIGHTNESS_REG,&temp,1); 
	#ifdef GPIO_DBG 
	printf("============= update_panel_brightness() =============\n"); 
	printf("tft_var.brightness:%02x\n",temp); 
	#endif 
} 
 
void update_panel_contrast(void) 
{ 
	BYTE temp=0; 
	temp = (tft_var.contrast+0x00); 
	WriteToDDC(TW100,CONTRAST_REG,&temp,1); 
	#ifdef GPIO_DBG 
	printf("============= update_panel_contrast() =============\n"); 
	printf("tft_var.contrast:%02x\n",temp); 
	#endif 
} 
 
/* 
** Function:write_panel_setting() 
** Purpose:write the tft register(brightness,color,hue,contrast,display mode) 
** tjf 2004-11-05 
*/ 
void write_panel_setting(void) 
{ 
	//GPIO_M_SET(DDC_SCL,1);    //Set I2C_CLK to IOP 
   // GPIO_M_SET(DDC_SDA,1);    //Set I2C_DATA to IOP 
 
	update_panel_brightness(); 
	delay_1us(150); 
 
	update_panel_color(); 
	delay_1us(150); 
 
//	update_panel_hue(); 
//	delay_1us(150); 
 
	update_panel_contrast(); 
	delay_1us(150); 
	T100_Set_Mode(TFT_NTSC,tft_var.ratio_type,0); 
	delay_1us(150); 
 
	T100_Set_UD_LR(); 
	//init_command_cd4094b(TFT_NTSC,tft_var.dispmode); 
} 
 
/* 
** Function:store_panel_setting() 
** Purpose: 
** tjf 2004-11-05 
*/ 
void store_panel_setting(void) 
{ 
	//GPIO_M_SET(95,0);    //Set I2C_CLK to IOP 
 //  GPIO_M_SET(96,0);    //Set I2C_DATA to IOP 
     
    WriteI2c(I2C_ID_MEMORY,BRIGHTNESS_ADDR,tft_var.brightness,1); 
    WriteI2c(I2C_ID_MEMORY,COLOR_ADDR,tft_var.color,1); 
//	WriteI2c(I2C_ID_MEMORY,HUE_ADDR,tft_var.hue,1); 
	WriteI2c(I2C_ID_MEMORY,CONTRAST_ADDR,tft_var.contrast,1); 
 //  	WriteI2c(I2C_ID_MEMORY,DISPMODE_ADDR,tft_var.ratio_type,1); 
} 
 
void load_panel_value_default(void) 
{ 
	cust_scrn=0; 
	tft_var.mode=0; 
	tft_var.brightness=BRIGHTNESS_DEFAULT; 
	tft_var.color=COLOR_DEFAULT; 
//	tft_var.hue=HUE_DEFAULT; 
	tft_var.contrast=CONTRAST_DEFAULT; 
	tft_var.ratio_type=DISPMODE_DEFAULT; 
} 
void write_panel_real_value(void) 
{		WriteToDDC( 0x50, BRIGHTNESS_REG, &tft_var.brightness, 1); 
		WriteToDDC( 0x50, COLOR_REG, &tft_var.color, 1); 
	//	WriteToDDC( 0x50, HUE_REG, &tft_var.hue, 1); 
		WriteToDDC( 0x50, CONTRAST_REG, &tft_var.contrast, 1); 
		WriteI2c(I2C_SLAVE_ADDRESS, TFT_REG_STORE_START+2, tft_var.contrast, 1); 	 
		WriteI2c(I2C_SLAVE_ADDRESS, TFT_REG_STORE_START+3, tft_var.brightness, 1); 	 
//		WriteI2c(I2C_SLAVE_ADDRESS, TFT_REG_STORE_START+4, tft_var.hue, 1); 	 
		WriteI2c(I2C_SLAVE_ADDRESS, TFT_REG_STORE_START+5, tft_var.color, 1); 	 
} 
void load_panel_real_value(void) 
{	 
		ReadFromddc( 0x50, BRIGHTNESS_REG, &tft_var.brightness, 1); 
		ReadFromddc( 0x50, COLOR_REG, &tft_var.color, 1); 
//		ReadFromddc( 0x50, HUE_REG, &tft_var.hue, 1); 
		ReadFromddc( 0x50, CONTRAST_REG, &tft_var.contrast, 1); 
	if((tft_var.brightness>170)||(tft_var.brightness==0)) 
	{ 
	    tft_var.brightness=BRIGHTNESS_DEFAULT; 
	    WriteToDDC(0x50, BRIGHTNESS_REG, &tft_var.brightness, 1); 
	} 
	if((tft_var.color>170)||(tft_var.color==0)) 
	{ 
	    tft_var.color=COLOR_DEFAULT; 
	WriteToDDC( 0x50, COLOR_REG, &tft_var.color, 1); 
	} 
//	if((tft_var.hue>170)||(tft_var.hue==0)) 
//	{ 
//	    tft_var.hue=HUE_DEFAULT; 
//	WriteToDDC( 0x50, HUE_REG, &tft_var.hue, 1); 
//	}     
	if((tft_var.contrast>170)||(tft_var.contrast==0)) 
	{ 
	    tft_var.contrast=CONTRAST_DEFAULT; 
	WriteToDDC( 0x50, CONTRAST_REG, &tft_var.contrast, 1); 
	} 
 
} 
 
/* Function:reset_panel_setting() 
** Purpose: 
** tjf 2004-11-05 
*/ 
void reset_panel_setting(void) 
{ 
    #ifdef GPIO_DBG 
	printf("===reset_panel_setting()===\n"); 
	//printf("tft_var.mode:%02d\n",tft_var.mode); 
	#endif 
	//load_panel_value_default(); 
	init_panel_value_default(); 
	write_panel_setting(); 
	//store_panel_setting(); 
} 
 
/* Function:update_panel_data() 
** Purpose:write panel some register data if someone need 
** tjf 2004-11-03 
*/ 
void update_panel_data(void) 
{     
	//GPIO_M_SET(DDC_SCL,1);    //Set I2C_CLK to IOP 
  //  GPIO_M_SET(DDC_SDA,1);    //Set I2C_DATA to IOP	 
	 
	switch(tft_var.mode) 
	{ 
		case TFT_BRIGHTNESS: 
			update_panel_brightness(); 
			break; 
 
		case TFT_COLOR: 
			update_panel_color(); 
			break; 
			 
		//case TFT_HUE: 
		//	update_panel_hue(); 
		//	break; 
			 
		case TFT_CONTRAST: 
			update_panel_contrast(); 
			break;	 
 
		case TFT_RATIO_TYPE: 
			    if(tv_format==MODE_PAL)//wool change 
	      T100_Set_Mode(TFT_PAL,tft_var.ratio_type,0); 
	 else if(tv_format == MODE_NTSC) 
	      T100_Set_Mode(TFT_NTSC,tft_var.ratio_type,0);	 
			//T100_Set_Mode(TFT_NTSC,tft_var.ratio_type,0); 
			//init_command_cd4094b(TFT_NTSC,tft_var.dispmode); 
			break; 
 
		default: 
			break;		 
	} 
	//store_panel_setting(); 
} 
#endif //#ifdef PDVD_USE_KEY_SETUP_TFT 
 
 
#ifdef TFT_FACTORY_ADJUST_VALUE 
void update_tft_reg_val(void) 
{ 
#if 0 
	  if (tft_reg_address==14) 
	  write_A3820_tft((tft_reg_address+13)<<3|0x07,tft_reg_value);	 
	  else 
	  	write_A3820_tft(tft_reg_address<<3,tft_reg_value); 
#endif 
	  #ifdef TFT_REG_STORE_START 
	  WriteI2c(I2C_SLAVE_ADDRESS, TFT_REG_STORE_START+tft_reg_address, tft_reg_value, 1); 
	  #endif 
	  if (tft_reg_address==3)   
	  	{ 
	  	tft_var.brightness=tft_reg_value; 
		WriteI2c(0xa0, 204, tft_var.brightness, 1); 
  		 WriteI2c(0xa0, 201, 12,1); 
	  	} 
	  else if (tft_reg_address==4)   
	  	{ 
	  	tft_var.color=tft_reg_value; 
		WriteI2c(0xa0, 203, tft_var.color, 1); 
		WriteI2c(0xa0, 200, 12,1); 
		} 
	  else if (tft_reg_address==5)   
	  	{ 
	  	tft_var.contrast=tft_reg_value; 
		WriteI2c(0xa0, 205, tft_var.contrast, 1); 
		WriteI2c(0xa0, 202, 12,1); 
	  	} 
} 
 
#endif