iop.c
上传用户:poi891205
上传日期:2013-07-15
资源大小:9745k
文件大小:65k
源码类别:

DVD

开发平台:

C/C++

  1. /**************************************************************************
  2.  *                                                                        *
  3.  *         Copyright (c) 2002 by Sunplus Technology Co., Ltd.             *
  4.  *                                                                        *
  5.  *  This software is copyrighted by and is the property of Sunplus        *
  6.  *  Technology Co., Ltd. All rights are reserved by Sunplus Technology    *
  7.  *  Co., Ltd. This software may only be used in accordance with the       *
  8.  *  corresponding license agreement. Any unauthorized use, duplication,   *
  9.  *  distribution, or disclosure of this software is expressly forbidden.  *
  10.  *                                                                        *
  11.  *  This Copyright notice MUST not be removed or modified without prior   *
  12.  *  written consent of Sunplus Technology Co., Ltd.                       *
  13.  *                                                                        *
  14.  *  Sunplus Technology Co., Ltd. reserves the right to modify this        *
  15.  *  software without notice.                                              *
  16.  *                                                                        *
  17.  *  Sunplus Technology Co., Ltd.                                          *
  18.  *  19, Innovation First Road, Science-Based Industrial Park,             *
  19.  *  Hsin-Chu, Taiwan, R.O.C.                                              *
  20.  **************************************************************************/
  21. /*--------------------------------------------------------------------------
  22. |  File Name   : iop.c
  23. |
  24. |  Description : This file main contains three parts.
  25. |                1. Include 8200 and 8202 iop normal play inc.
  26. |                2. Include iop normal and standby reset function.
  27. |                3. Include I2C(24C02) read and write function.
  28. |
  29. |  Version    :  0.1  
  30. |  Rev Date         Author(s)      Status & Comments
  31. |---------------------------------------------------------------------------------
  32. |       2004/12/20        Lijd           Updating
  33. |--------------------------------------------------------------------------------*/
  34. #include "config.h"
  35. #include "regmap.h"
  36. #include "global.h"
  37. #include "dma.h"
  38. #include "gpio.h"
  39. #include "iop.h"
  40. #include "iophw.h"
  41. #include "user_init.h"
  42. #include "ircode.h"
  43. #include "stdlib.h"
  44. #include "lbc.h"
  45. #if defined(SUPPORT_CARD_STORAGE) && defined(CARD_HOT_PLUG)
  46. #include "cardfs.h"
  47. #endif
  48. #ifdef SUPPORT_RDS_FUNCTION//xyy 2003-12-4 16:05
  49. #include "radio_rds.h"
  50. #endif
  51. #ifndef DVDRELEASE
  52. //#define IOP_DEBUG_INFO        1
  53. #endif
  54. #ifdef  IOP_DEBUG_INFO
  55. #include "sio.h"
  56. #include "emuio.h"
  57. #endif
  58. #if defined(DVI_I2C_SET)&&defined(SPHE8202)//Modifed by ChenZhao on 2004-9-21 15:59  
  59. #define K_loopMax 100//chenzhao on 2004-12-14 17:2  
  60. //#include "c_i2c.c"
  61. #endif//defined(DVI_I2C_SET)&&defined(SPHE8202)
  62. #define IOP_RDY_WAIT        4000000
  63. #if defined(TEAC_PORTABLE_DVD)//TEAC 
  64.    #ifdef MP_BOARD_216_PIN_NON_SHARE     
  65. #include "ioprom_spi_teac_8202_216.inc"//TEAC
  66.    #else     
  67.         #include "ioprom_spi_teac_8202.inc"//TEAC
  68.    #endif
  69. #elif defined(SUPPORT_SPI_QSI)
  70.         #include "ioprom_spi_qsi.inc"
  71. #else  //support spi qsi
  72. #ifdef OLD_I2C_DEFINE // with IR_NEC
  73.     #include "ioprom22_oldi2c.inc"
  74. #elif defined (SPHE8202)
  75.     
  76. #ifdef MP_BOARD_256_PIN_NON_SHARE
  77.     #ifdef SDRAM_BUS_32BITS
  78.                 #ifdef HJ_8202_5401    //fengjl add for himage 8202 ad7312 driver 2004-07-01 13:22
  79.                 #include "ioprom22_v_256_ns_ad7312_key01_688.inc"
  80.                 #elif defined(HJ_8202_8408)     
  81.                 #include "ioprom22_256_ns_ad7312_key08_688.inc"
  82.                 #elif defined(IR_GBM_PHILIPS)||defined(IR_PHILIPS)//gbm yth add,2004-7-28 14:11
  83.                     #include "ioprom22_8202_256pin_ns_32bit_philips.inc"      
  84.                 #elif defined(IR_M3004) //LIJD 2004-12-27 14:27 
  85.                 #include "ioprom22_v_8202_256pin_ns_32bit_16312_game_m3004_5b8.inc" 
  86.                 #elif defined(IR_KONKA) 
  87.                 #include "ioprom22_v_8202_256pin_ns_32bit_16312_game_konka_5b8.inc"//LIJD 2005-2-4 13:23      
  88.              #else
  89. #include "ioprom22_8202_256pin_ns_32bit_game_588.inc"
  90.           #endif
  91.     #else//#ifdef SDRAM_BUS_32BITS
  92. #ifdef EASTECH_DVD
  93.             #ifdef EASTECH_DVD_TOP_DOOR_LOADER
  94. #include "ioprom22_8202_256pin_ns_16bit_eastech_2030.inc"
  95. #else
  96.                 #include "ioprom22_8202_256pin_ns_16bit_eastech_30H0.inc"
  97.             #endif
  98.         #elif defined(SDRAM_128Mx1)//#ifdef EASTECH_DVD //mimitsai add 2004-12-07
  99.     #include "ioprom22_8202_256pin_ns_16bit_midi_sy_m5.inc"
  100.         #elif defined(IR_GBM_PHILIPS)//gbm yth add,2004-7-28 14:11
  101.             #include "ioprom22_8202_256pin_ns_16bit_philips.inc"
  102.         #elif defined(SUPPORT_IR_GAME)
  103.             #include "ioprom22_8202_256pin_ns_16bit_nogame.inc"
  104.         #elif defined(TTE_HOST_DVD)
  105.             #include "ioprom22_8202_256pin_ns_16bit_pca9564.inc"
  106.        #elif defined(PMP_DVD)   
  107.           #include  "ioprom22_8202PMP_256_ns_16bit_MCU810_new_I2C.inc"  
  108.           // #include "ioprom22_8202PMP_256_ns_16bit_MCU810.inc"         
  109.         #elif defined(IR_M3004)  
  110.             #include "ioprom22_v_256pin_ns_16bit_m3004_121.5_5b8.inc"         
  111. #else//#ifdef EASTECH_DVD
  112. //#include "ioprom22_8202_256pin_ns_16bit.inc"
  113. #include "ioprom22_8202_256pin_ns_16bit_game_16312_588.inc" //2004-6-23 14:05 lijd
  114. #endif//#ifdef EASTECH_DVD
  115.     #endif//#ifdef SDRAM_BUS_32BITS
  116. #elif defined(MP_BOARD_216_PIN_NON_SHARE)//kenny 2004/7/14
  117. #ifdef IC_8202E_216_PIN_NON_SHARE_CD_DVD_MP_BOARD
  118. #include "ioprom22_8202E_216pin_ns_16bit_game.inc"
  119.     #elif defined(IR_KONKA)//LIJD 2005-2-4 13:38
  120.         #include "ioprom22_v_8202S_16bit_konka_16312_5b8.inc"
  121. #else
  122. #include "ioprom22_8202_216pin_ns_16bit_game.inc"
  123. #endif
  124. #elif defined(MP_BOARD_256_PIN_SHARE)
  125.         #include "ioprom22_8202_256pin.inc"
  126.     #else//MP_BOARD_256_PIN_NON_SHARE
  127.     #include "ioprom22_8202.inc"
  128.     #endif//MP_BOARD_256_PIN_NON_SHARE
  129. #elif defined (SPHE1000)
  130.     #include "ioprom22_1000.inc"
  131. #else
  132. #ifdef IR_NEC
  133. #ifdef USE_C_IOP//2004-3-15 11:45 lijd
  134. #if (VFD_DRIVER==NEC16312)
  135. #include "../cc65/iopc_inc/iopc_16312.inc"
  136. #endif
  137. #else//USE_C_IOP
  138. #if (VFD_DRIVER==NEC16312)
  139.     #ifdef MICO_DVD
  140.         #include "ioprom22_v_mico.inc"
  141.     #elif defined(F94_5)
  142.         #include "ioprom22_v_945.inc"
  143.     #elif defined(GAME_D0_D1_EXCHANGE)
  144.         #include "ioprom22_v_new_2.inc"  //gerry.2003-12-1 9:41
  145.     #elif defined(GBM_PORTABLE_DVD)
  146.         #include "ioprom_portable.inc"
  147.     #elif defined(SUPPORT_I2C_LCD_Panel)
  148.         #include "ioprom_portable_slowI2C.inc"
  149.     #elif defined(SUPPORT_RECEIVER) //huziqin 2004-2-26
  150.         #include "ioprom_receiver.inc"
  151.         //#include "ioprom_gbm_receiver_588.inc" //huziqin 2004-4-29.key scan not work.I will handle it later
  152.     #elif defined(BBK_DSS_555_PANNEL)    //fengjl add 4-1-13 13:12
  153.     #include "ioprom22_v_16312_sw.inc"
  154.     //#include "ioprom22_v_16312_pt6961_sm1623.inc"  //ljd 03/9/19
  155.     #elif defined(PANDA_DVD_16) //gerry,2004-3-16 13:31
  156.         #include "ioprom22_v_16312_sw.inc"//for read nec16312 sw  2004-2-13 12:36 LIJD
  157.     #elif defined (SUPPORT_SPI)
  158.         #include "ioprom_spi.inc"
  159.     #elif defined(HUAJIA_DVD)
  160. //               #include "ioprom22_v_16312_huajia_5a8.inc"
  161.                #include "ioprom22_v_16312_huajia_5b8.inc"
  162.     #else //default
  163.          #include "ioprom22_v_16312_game_5b8_rsr.inc"   //for process 8200-1 sometimes risc death when first time 2004-7-28 16:47 lijd
  164.          //#include "ioprom22_v_16312_sw_game_5b8.inc" //for 16312+game+switch 2004-6-25 11:12                
  165.          //#include "ioprom22_v_16312_SW_5B8.inc"  //only for 16312+ read switch  not have game function
  166.     #endif
  167. #elif (VFD_DRIVER == AD7312)
  168.     #include "ioprom22_v_ad7312_658.inc"
  169. #elif (VFD_DRIVER==HT1621)
  170.     #include "ioprom22_v_ht1621.inc" //used  for 121.5 MHZ
  171.     // #include "ioprom22_v_HT1621_94_5.inc" //used  for 94.5 MHZ
  172. #elif (VFD_DRIVER==SPL10)
  173.     #include "ioprom22_v_spl10.inc"
  174. #elif (VFD_DRIVER==HC164)
  175.     #include "ioprom22_v_hc164.inc"
  176. #elif (VFD_DRIVER==GT1128)
  177.     #include "ioprom22_v_gt1128_game_5d8.inc"
  178. #elif (VFD_DRIVER==PT6554)
  179.     #include "ioprom22_v_pt6554.inc"
  180. #endif
  181. #endif//USE_C_IOP
  182. #elif defined(IR_PHILIPS)
  183.     #include "ioprom22_v_p.inc" //new iop for philip IR
  184. #elif defined(IR_THOMSON)
  185.     #include "ioprom22_v_thomson_16312_588.inc"
  186. #elif defined(IR_M50560)
  187.     #include "ioprom22_v_m50560_16312_588.inc"
  188. #elif defined(IR_AS1213)
  189.     #include "ioprom22_v_as1213_8200_16312_sw_game_5b8.inc"
  190. #else
  191.     #include "ioprom22_v_16312_pt6961_sm1623.inc"   //2004-2-8 16:38 LIJD
  192. #endif
  193. #endif
  194. #endif //for spi qsi
  195. #define IOP_RESET() (regs0->iop_control = IOPHW_RESET)
  196. #define IOP_GO()    (regs0->iop_control = 0)
  197. #ifdef SOFT_UART_OUT 
  198.     int PutSoftUartChar(BYTE *,int);
  199.     int GetSoftUartChar(BYTE *,int);    
  200.     BYTE bResetIop=0;       
  201. #endif  
  202. BYTE bSleepFlag = 0; // keep standby mode flag
  203. extern const BYTE ir_mapcode[256];
  204. extern const BYTE vfd_keycode[40];
  205. extern void LoadModual(UINT16);
  206. /**************************************************************************
  207.  *  Function Name: void reset_iop(void)                                   *
  208.  *  Purposes:                                                             *
  209.  *              Reset iop for normal / standby mode.                      *
  210.  *  Descriptions:                                                         *
  211.  *              This function contains three parts                        *   
  212.  *              1.   reset iop                                            *
  213.  *              2.   Set I2C,VFD,IR,GAME GPIOS for iop use.               *
  214.  *                   if system is coming into standby mode. then pass     *
  215.  *                   the IR or VFD power key value and flag to reset code.*
  216.  *              3.   LoadModual(MODUAL_IOP_RESET) /LoadModual(MODUAL_IOP) *
  217.  *  Arguments:                                                            *
  218.  *              (None)                                                    *
  219.  *  Returns:                                                              *
  220.  *              (None)                                                    *
  221.  *  See also:                                                             *
  222.  *              (None)                                                    *
  223.  **************************************************************************/
  224. void reset_iop(void)
  225. {
  226.     int     i;
  227.     //int       len;
  228.     //UINT32    *p, *q;
  229. #ifdef PORTABLE_DVD//nono add 2005-2-18 16:44
  230. #ifdef MP_BOARD_216_PIN_NON_SHARE//TEAC
  231. //use ioprom_spi_teac_8202_216.inc
  232.     GPIO_M_SET(9, 0);//TEAC 8202 216 pin
  233.     GPIO_M_SET(10, 0);//TEAC 8202 216 pin
  234.     GPIO_M_SET(16, 0);//TEAC 8202 216 pin
  235. #else
  236. //use ioprom_spi_teac_8202.inc
  237.     GPIO_M_SET(21, 0);//TEAC 8202 256 pin
  238.     GPIO_M_SET(22, 0);//TEAC 8202 256 pin
  239.     GPIO_M_SET(23, 0);//TEAC 8202 256 pin
  240. #endif
  241. #endif//#ifdef PORTABLE_DVD
  242.     
  243.     // reset iop
  244.     IOP_RESET();
  245.     #ifdef PMP_MCU810
  246.      // gpio 21, 22, 23 for VFD
  247.         GPIO_M_SET(21, 0);
  248.         GPIO_M_SET(22, 0);
  249.         GPIO_M_SET(23, 0);
  250.     #endif
  251.     // setup IOP interface / GPIO
  252. #ifdef OLD_I2C_DEFINE
  253.     // select GPIO 35,36 for I2C
  254.     regs0->gpio_master[35 / 16] &= ~(0x3 << (35 % 16));
  255. #else
  256.     #ifdef SPHE8202
  257.         #if defined(MP_BOARD_256_PIN_NON_SHARE)||defined(MP_BOARD_256_PIN_SHARE)//NONO 4-3-23 22:19
  258. #if defined(SDRAM_BUS_32BITS)||defined(SDRAM_128Mx1) //mimitsai add 2004-12-07
  259.                                 // gpio 48(pin173), 49(pin174) for I2C
  260.                                 regs0->sft_cfg0 &= ~(0x1 << 7);//GPIO48
  261.                                 regs0->sft_cfg1 &= ~(0x1 << 5);//GPIO49 
  262.                                 GPIO_M_SET(48, 0);
  263.                                 GPIO_M_SET(49, 0);
  264.             #elif defined(PMP_I2C_NEW)    //////////////YANGLI ADD FOR PMP 20021229
  265.                  regs0->sft_cfg4 &= ~(0x1 << 5);//I2C DATA PIN62   
  266.                  GPIO_M_SET(5, 0);//I2C DATA PIN62
  267.                  GPIO_M_SET(6, 0);//I2C CLK  PIN63                   
  268. #else
  269. //gpio 95(pin228), 96(pin229) for I2C
  270. GPIO_M_SET(95, 0);
  271. GPIO_M_SET(96, 0);
  272. #endif
  273. #elif defined(MP_BOARD_216_PIN_NON_SHARE) //kenny 2004/7/14
  274. // gpio 17(pin67), 18(pin68) for I2C
  275. regs0->sft_cfg1 &= ~(0x1 << 2);//GPIO17
  276.                 regs0->sft_cfg1 &= ~(0x1 << 1);//GPIO18
  277. GPIO_M_SET(17, 0);
  278. GPIO_M_SET(18, 0);
  279.         #else//MP_BOARD_256_PIN_NON_SHARE
  280.                         // gpio 17, 18 for I2C
  281.                         GPIO_M_SET(17, 0);
  282.                         GPIO_M_SET(18, 0);
  283.         #endif//MP_BOARD_256_PIN_NON_SHARE
  284.     #elif defined(SPHE1000)
  285.     // select GPIO44,45 for I2C
  286.     GPIO_M_SET(44,0);
  287.     GPIO_M_SET(45,0);
  288.     #else
  289.     // select GPIO 0,1 for I2C
  290.     regs0->gpio_master[0 / 16] &= ~(0x3 << (0 % 16));
  291.     #endif
  292. #endif
  293. #ifdef SUPPORT_SPI
  294.     regs0->gpio_master[SPI_DATAIN / 16] &= ~(0x1 << (SPI_DATAIN % 16)); //SPI IN
  295.     regs0->gpio_master[SPI_CLK / 16] &= ~(0x1 << (SPI_CLK % 16)); // SPI CLK
  296.     regs0->gpio_master[SPI_DATAOUT / 16] &= ~(0x1 << (SPI_DATAOUT % 16)); // SPI OUT
  297.     //regs0->gpio_master[49 / 16] |= (0x1 << (49 % 16)); //50 SPI IN
  298.     //regs0->gpio_master[51 / 16] |= (0x1 << (51 % 16)); //51 SPI CLK
  299.     //regs0->gpio_master[52 / 16] |= (0x1 << (52 % 16)); //52 SPI OUT
  300. //while(1)
  301. //{
  302. //  GPIO_E_SET(49, 1);
  303. //  GPIO_O_SET(49, 0);
  304.     //GPIO_O_SET(49, 1);
  305. //  GPIO_E_SET(49, 0);
  306. //  delay_1ms(100);
  307. //}
  308.     //GPIO_E_SET(51, 1);
  309.     //GPIO_O_SET(51, 1);
  310.     
  311.     //GPIO_E_SET(52, 1);
  312.     //GPIO_O_SET(52, 1);
  313. #endif
  314. //  set GPIO97(GAME_D1) for PS/2 mouse DATA and GPIO98(GAME_D0) for PS/2 mouse CLK
  315. #if defined(SUPPORT_PS2) && !defined(SUPPORT_GAMEPAD_MOUSE)
  316. GPIO_M_SET(97, 0);
  317. GPIO_M_SET(98, 0);
  318. #endif
  319.     // select GPIO 40,41,42,43 for game pad
  320. #if defined(SUPPORT_NESGAME)||defined(SUPPORT_SPG_GAME) || defined(SUPPORT_GAMEPAD_MOUSE)
  321. #ifndef SUPPORT_IR_GAME
  322. #ifdef SPHE8202
  323. #if defined(MP_BOARD_256_PIN_NON_SHARE)
  324. #if defined(SDRAM_BUS_32BITS)||defined(SDRAM_128Mx1) //mimitsai add 2004-12-07
  325. regs0->gpio_master[98 / 16] &= ~(0x1 << (98 % 16)); //D0  gpio 98 PIN 231
  326. regs0->gpio_master[97 / 16] &= ~(0x1 << (97 % 16)); //D1  gpio 97 PIN 230
  327. regs0->gpio_master[99 / 16] &= ~(0x1 << (99 % 16)); //CLK   gpio 99 PIN 232
  328. regs0->gpio_master[96 / 16] &= ~(0x1 << (96 % 16)); //LATCH gpio 96 PIN 229
  329. #else
  330. regs0->gpio_master[98 / 16] &= ~(0x1 << (98 % 16)); //D0  gpio 98 PIN 231
  331. regs0->gpio_master[97 / 16] &= ~(0x1 << (97 % 16)); //D1  gpio 97 PIN 230
  332. regs0->gpio_master[99 / 16] &= ~(0x1 << (99 % 16)); //CLK   gpio 99 PIN 232
  333. regs0->gpio_master[100 / 16] &= ~(0x1 << (100 % 16)); //LATCH gpio 100 PIN 233
  334. #endif
  335. #elif defined(MP_BOARD_216_PIN_NON_SHARE) //rbhung for 8202S/D 216pin 2005-01-13
  336. #ifdef IC_8202E_216_PIN_NON_SHARE_CD_DVD_MP_BOARD
  337. regs0->gpio_master[15 / 16] &= ~(0x1 << (15 % 16)); //D0  gpio 15 PIN 65
  338. regs0->gpio_master[16 / 16] &= ~(0x1 << (16 % 16)); //D1  gpio 16 PIN 66
  339. regs0->gpio_master[11 / 16] &= ~(0x1 << (11 % 16)); //CLK   gpio 11 PIN 59
  340. regs0->gpio_master[10 / 16] &= ~(0x1 << (10 % 16)); //LATCH gpio 10 PIN 58
  341. #else
  342. regs0->gpio_master[13 / 16] &= ~(0x1 << (13 % 16)); //D0  gpio 13 PIN 62
  343. regs0->gpio_master[14 / 16] &= ~(0x1 << (14 % 16)); //D1  gpio 14 PIN 63
  344. regs0->gpio_master[11 / 16] &= ~(0x1 << (11 % 16)); //CLK   gpio 11 PIN 59
  345. regs0->gpio_master[12 / 16] &= ~(0x1 << (12 % 16)); //LATCH gpio 12 PIN 61
  346. #endif
  347. #else
  348. regs0->gpio_master[87 / 16] &= ~(0x1 << (87 % 16)); //D0  gpio 87 PIN 181
  349. regs0->gpio_master[86 / 16] &= ~(0x1 << (86 % 16)); //D1  gpio 86 PIN 180
  350. regs0->gpio_master[88 / 16] &= ~(0x1 << (88 % 16)); //CLK   gpio 88 PIN 183
  351. regs0->gpio_master[89 / 16] &= ~(0x1 << (89 % 16)); //LATCH gpio 89 PIN 184
  352. #endif
  353. #else
  354. #ifdef GBM_PORTABLE_DVD
  355.     regs0->gpio_master[45 / 16] &= ~(0x1 << (45 % 16)); //D0  gpio 45 PIN 140
  356.     regs0->gpio_master[17 / 16] &= ~(0x1 << (17 % 16)); //D1  gpio 17 PIN 141
  357.     regs0->gpio_master[54 / 16] &= ~(0x1 << (54 % 16)); // CLK   gpio 54 PIN 154
  358.     regs0->gpio_master[55 / 16] &= ~(0x1 << (55 % 16)); // LATCH gpio 55 PIN 155
  359. #else
  360.     #ifndef SDRAM_16Mb_Mode
  361.     regs0->sft_cfg1 &= ~(0x1 << 3); // CS4 as GPIO3
  362.     regs0->gpio_master[2 / 16] &= ~(0x1 << (2 % 16)); //D0  gpio 2 PIN 28
  363.     regs0->gpio_master[3 / 16] &= ~(0x1 << (3 % 16)); //D1 gpio 3 PIN 29
  364.         
  365.     regs0->gpio_master[4 / 16] &= ~(0x1 << (4 % 16)); // clk  gpio 4 PIN 31
  366.     regs0->gpio_master[35 / 16] &= ~(0x1 << (35 % 16)); // latch  gpio 35PIN 70
  367.     #else
  368.     // select GPIO 40,41,42,43 for game pad
  369.     regs0->sft_cfg0 &= ~(0xff << 7);
  370.     regs0->gpio_master[40 / 16] &= ~(0xf << (40 % 16));
  371.     #endif
  372. #endif
  373. #endif //SPHE8202
  374. #endif  //SUPPORT_IR_GAME
  375. #endif //SUPPORT_NESGAME
  376. #ifdef SPHE8202
  377.     // gpio 20 as IR
  378.     GPIO_M_SET(20, 0);
  379. #elif defined(SPHE1000)
  380.     // gpio 26 as IR
  381.     GPIO_M_SET(26, 0);
  382. #else
  383.     // GPIO 53 as IR, GPIO 54,55,56 as VFD
  384.     regs0->gpio_master[53 / 16] &= ~(0x1 << (53 % 16));
  385. #endif
  386. #ifdef SUPPORT_VFD
  387.     #ifdef SPHE8202
  388.         // gpio 21, 22, 23 for VFD
  389.         GPIO_M_SET(21, 0);
  390.         GPIO_M_SET(22, 0);
  391.         GPIO_M_SET(23, 0);
  392. #elif defined(SPHE1000)
  393. // GPIO 26 as IR, GPIO 27,28,29 as VFD
  394.         GPIO_M_SET(27, 0);
  395. GPIO_M_SET(28, 0);
  396. GPIO_M_SET(29, 0);
  397.     #else
  398.         // GPIO 53 as IR, GPIO 54,55,56 as VFD
  399.         regs0->gpio_master[54 / 16] &= ~(0x7 << (54 % 16));
  400.     #endif
  401. #endif
  402.     #ifdef TTE_HOST_DVD      //for TTE PCA964  LIJD 2004-11-11 20:02       
  403.         regs0->sft_cfg0 &= ~(0x1 << 7);//GPIO48   
  404.         regs0->sft_cfg1 &= ~(0x1 << 5);//GPIO49    
  405.         GPIO_M_SET(32, 0);
  406.         GPIO_M_SET(33, 0);
  407.         GPIO_M_SET(35, 0); 
  408.         GPIO_M_SET(36, 0);
  409.         GPIO_M_SET(37, 0);        
  410.         GPIO_M_SET(40, 0);
  411.         GPIO_M_SET(41, 0);
  412.         GPIO_M_SET(42, 0);
  413.         GPIO_M_SET(43, 0);
  414.         GPIO_M_SET(44, 0);
  415.         GPIO_M_SET(45, 0);
  416.         GPIO_M_SET(46, 0);
  417.         GPIO_M_SET(47, 0);   
  418.         GPIO_M_SET(48, 0);         
  419.         GPIO_M_SET(49, 0);
  420.     #endif
  421.     // reset IOP/RISC interface
  422.     for (i = 0; i < 7; i++) regs0->iop_data[i] = 0;
  423. // below registers' value are used only for first time gotten by IOP
  424. // regs0->iop_data[1]: in standby mode or not (1:Y, 0:N)
  425. // regs0->iop_data[2]: store IR power key value
  426. // regs0->iop_data[3]: store VFD power key value
  427. // regs0->iop_data[4]: IR power key exist or not
  428. // regs0->iop_data[5]: VFD power key exist or not
  429. //
  430.     if (bSleepFlag)
  431.     {
  432.         BYTE nIndex, bVFD_MASK, nIndex2 = 0;
  433.         regs0->iop_data[1] = 1;
  434. #if defined(DP2030_SCAN_KEY)//eastech2030
  435.     GPIO_M_SET(23,0);
  436.     GPIO_M_SET(100,0);
  437. #elif defined(DP30H0_KEY_SCAN)//eastech2030
  438. regs0->sft_cfg1 &= ~(0x1 << 5); 
  439.     GPIO_M_SET(94,0);
  440.     GPIO_M_SET(97,0);
  441. #endif
  442. #ifdef USE_VFDPORT_TO_KEYLIGHT_GBM
  443.         regs0->gpio_master[54 / 16] &= ~(0x7 << (54 % 16));//NONO 2003-8-3 15:34
  444. #endif//USE_VFDPORT_TO_KEYLIGHT_GBM
  445. #ifdef VTREK_MINI_DVD      //linrc add for vtreck mini dvd 2004-3-27 16:50
  446.     regs0->gpio_master[54 / 16] &= ~(0x7 << (54 % 16));//linrc 2003-8-3 15:34
  447.     GPIO_M_SET(55,0);
  448. #endif //endif VTREK_MINI_DVD
  449. #ifdef USE_PIN31_CONTROL_POWER_LED
  450.         regs0->gpio_master[4 / 16] &= ~(0x1 << (4 % 16));//gerry,2004/2/11 05:32