⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sleep.c

📁 Sunplus 8202S source code.
💻 C
字号:
//
// FILE
// sleep.c
//
// DESCRIPTION
// provide sleep functionality
//
//terry,2004/9/21 10:16PM , add risc can work when standby mode
//

#include "config.h"
#include "global.h"
#include "regmap.h"

#include "pu8560.h"

#include "cpu.h"
#include "func.h"

#include "gpio.h"
#include "hwif.h"
#include "tvif.h"
#ifdef PMP_MCU810
#include "vfd.h"
#endif

#ifdef TP6317_PANNEL   //yaowh add 04-10-25
  extern BYTE TP6317_Power ;
#endif

#ifdef RISC_ALIVE_STANDBY  // 2004/10/01 yltseng
#include "iop.h"
#include "uartsup.h"
#include "ircode.h"
#endif

//#include "auddac.h"

//#include "ircode.h"    /* alan 02-05-21 added for IRC_POWER */

#ifndef	DVDRELEASE
#include "sio.h"
#include "emuio.h"
#endif


#ifdef DVD_SERVO_REAL_TURN_OFF//nono rename 4-12-30 11:18//NO_DVD_SERVO //ycwen 2004/08/10
extern void servo_turn_off(void);
#endif


#define SAFE_AUTO_POWEROFF//nono set it. 4-7-22 23:46 Because servo need longer time to finish when trayout.

#define	ROM_ISA_ENABLE	(1<<15)
#define	HW_RESET_GLOBAL		(1<<0)		// 1-shot global reset
#define	HW_RESET_AGDC_MMU	(1<<1)		// will/may hang up system
#define	HW_RESET_STC		(1<<2)
#define	HW_RESET_IOP		(1<<3)
#define	HW_RESET_HOST		(1<<4)		// ATAPI/UDE/CSS/CDDSP
#define	HW_RESET_AUD		(1<<5)		// DSP/DSP3IF/DVDAUD
#define	HW_RESET_VDEC		(1<<6)		// VLD/INVQ/IDCT/MC/OGT(?)
#define	HW_RESET_DISPLAY	(1<<7)		// VPP/OSD
#define	HW_RESET_SIO0		(1<<8)
#define	HW_RESET_UART0		(1<<9)
#define	HW_RESET_UART1		(1<<10)


#ifdef SCART_TV
    #define SET_SCART_RGB(d)	((d) ? (regs0->gpio_out[39 / 16] |= (0x1 << (39 % 16))) : (regs0->gpio_out[39 / 16] &= ~(0x1 << (39 % 16))))
    #define SET_SCART_SW(d)		((d) ? (regs0->gpio_out[38 / 16] |= (0x1 << (38 % 16))) : (regs0->gpio_out[38 / 16] &= ~(0x1 << (38 % 16))))
    #define SET_SCART_TV(d)		((d) ? (regs0->gpio_out[37 / 16] |= (0x1 << (37 % 16))) : (regs0->gpio_out[37 / 16] &= ~(0x1 << (37 % 16))))
#elif defined(KSD_SCART_TV)

    #define SET_SCART_RGB(d)	((d) ? (regs0->gpio_out[57 / 16] |= (0x1 << (57 % 16))) : (regs0->gpio_out[57 / 16] &= ~(0x1 << (57 % 16))))
    //#define SET_SCART_SW(d)		((d) ? (regs0->gpio_out[18 / 16] |= (0x1 << (18 % 16))) : (regs0->gpio_out[18 / 16] &= ~(0x1 << (18 % 16))))
#elif defined(SCART_TV_2)    //wanghaoying 2003-8-13 15:11 added 
    #define SET_SCART_RGB(d)	((d) ? (regs0->gpio_out[57 / 16] |= (0x1 << (57 % 16))) : (regs0->gpio_out[57 / 16] &= ~(0x1 << (57 % 16))))
    #define SET_SCART_SW(d)		((d) ? (regs0->gpio_out[18 / 16] |= (0x1 << (18 % 16))) : (regs0->gpio_out[18 / 16] &= ~(0x1 << (18 % 16))))
    #ifdef NIN_SCART_TV    //fangang added 4-2-11 17:02
           #define SET_SCART_TV(d)		((d) ? (regs0->gpio_out[2 / 16] |= (0x1 << (2 % 16))) : (regs0->gpio_out[2 / 16] &= ~(0x1 << (2 % 16))))
    #endif
    #ifdef YILI_SCART_TV  //hq add, use 31 pin control  TV-AV switch, 4-2-17 9:40 
           #define SET_SCART_TV(d)		((d) ? (regs0->gpio_out[4 / 16] |= (0x1 << (4 % 16))) : (regs0->gpio_out[4 / 16] &= ~(0x1 << (4 % 16))))
    #endif    
#elif defined(SCART_TV_3)   //wanghaoying 2003-9-12 11:28 added
    #define SET_SCART_RGB(d)    ((d) ? (regs0->gpio_out[57 / 16] |= (0x1 << (57 % 16))) : (regs0->gpio_out[57 / 16] &= ~(0x1 << (57 % 16))))
    #define SET_SCART_SW(d)		((d) ? (regs0->gpio_out[18 / 16] |= (0x1 << (18 % 16))) : (regs0->gpio_out[18 / 16] &= ~(0x1 << (18 % 16))))
    #define SET_SCART_SW1(d)	((d) ? (regs0->gpio_out[14 / 16] |= (0x1 << (14 % 16))) : (regs0->gpio_out[14 / 16] &= ~(0x1 << (14 % 16))))
#elif defined(SCART_TV_4)   //nono 2003-9-26 1:44 for himage HJ-018

    #define SET_SCART_RGB(d)    ((d) ? (regs0->gpio_out[3 / 16] |= (0x1 << (3 % 16))) : (regs0->gpio_out[3 / 16] &= ~(0x1 << (3 % 16))))

	    #ifdef HJ_021_SCART
	    #define SET_SCART_SW1(d)		((d) ? (regs0->gpio_out[4 / 16] |= (0x1 << (4 % 16))) : (regs0->gpio_out[4 / 16] &= ~(0x1 << (4 % 16))))
	    #define SET_SCART_SW(d)	((d) ? (regs0->gpio_out[2 / 16] |= (0x1 << (2 % 16))) : (regs0->gpio_out[2 / 16] &= ~(0x1 << (2 % 16))))
	    #else//#ifdef HJ_021_SCART
    #define SET_SCART_SW(d)		((d) ? (regs0->gpio_out[4 / 16] |= (0x1 << (4 % 16))) : (regs0->gpio_out[4 / 16] &= ~(0x1 << (4 % 16))))
    #define SET_SCART_SW1(d)	((d) ? (regs0->gpio_out[2 / 16] |= (0x1 << (2 % 16))) : (regs0->gpio_out[2 / 16] &= ~(0x1 << (2 % 16))))
	    #endif//#ifdef HJ_021_SCART

#elif defined(SCART_TV_5)//wangfeng 2003-12-2 11:43 for himage HJ-023
    #define SET_SCART_RGB(d)    ((d) ? (regs0->gpio_out[63 / 16] |= (0x1 << (63 % 16))) : (regs0->gpio_out[63 / 16] &= ~(0x1 << (63 % 16))))
    #define SET_SCART_SW(d)		((d) ? (regs0->gpio_out[62 / 16] |= (0x1 << (62 % 16))) : (regs0->gpio_out[62 / 16] &= ~(0x1 << (62 % 16))))	
    #define SET_SCART_SW1(d)	//((d) ? (regs0->gpio_out[2 / 16] |= (0x1 << (2 % 16))) : (regs0->gpio_out[2 / 16] &= ~(0x1 << (2 % 16))))
#endif

extern int atapi_standby_mode(void);
extern void run_close_tray(UINT8);
extern int atapi_p_mechanism_status(void);
extern void ircmd_trayin(void);
extern void reset_iop();
extern int standby_cnt;
extern const BYTE vfd_keycode[40];
#if 0 //terry,2004/7/23 10:23PM, it's seem no use.
void __system_stop(void)
{
	//init_vfd_clear();
	run_close_tray(1);              // loader

#if !defined(SUPPORT_TUNER_MV114) && !defined(SUPPORT_TUNER_ALPS) //xyy 2003-9-22 10:50
	regs0->reset = 
		HW_RESET_HOST |             // atapi
		HW_RESET_AUD |              // audio DSP
		HW_RESET_VDEC |             // video decoder
		HW_RESET_SIO0 |
		//HW_RESET_DISPLAY |          // video 
		HW_RESET_UART0;
		//HW_RESET_UART1             // debug port
#endif
}
#endif

static inline void system_tuner_sleep(void)
{
    tv_sleep();
#if 0
    regs0->rom_config	= (1 << 15)   // rom run slow
                        | (15 << 0)
                        | (15 << 4)
                        | (15 << 8);
#endif    
    delay_srv_10ms(10);

    cpu_intr_disable();	
    regs0->intr_mask = 0;
    regs0->intr_flag = -1;    
}

static inline void disable_tv(void)
{
    // disable tv-encoder
    tv_sleep();
#ifdef  YILI_SCART_TV  //hq added, use 31 pin control  TV-AV switch, 4-2-11 16:59
    SET_SCART_TV(1);
#endif   
#ifdef  NIN_SCART_TV  //fangang added 4-2-11 16:59
    SET_SCART_TV(1);
#endif

#ifdef SUPPORT_SCART_TV//SPHE8202//nono 4-3-27 21:35
    SET_SCART_GPIO_SFT_CFG_CTRL();
    SET_SCART_TO_TV();
#endif//SPHE8202
}

static inline void close_tray_func(void)
{
#ifdef GBM_DVD
    run_close_tray(0); // gerry for gbm use old servo code,if we update servo,maybe we need not this. 2004-2-7 15:42
#elif !defined(TOP_DOOR_FOR_NGAILIK)     //hq add for ngailik, in order to wake up the system after power off-on quickly switch. 2004-3-3 17:38
#ifdef SAFE_AUTO_POWEROFF//nono 20040327
    if (atapi_p_mechanism_status()==0/*ATAPI_DOOR_OPEN*/)
      ircmd_trayin();//nono 2004-3-27 16:27 for auto_poweroff.
    else
      run_close_tray(1); // Robert 2003/12/16        
#else//SAFE_AUTO_POWEROFF
    run_close_tray(1); // Robert 2003/12/16
#endif//SAFE_AUTO_POWEROFF
#endif    
}

static inline void led_light(void)
{
#ifdef USE_VFD_LED_AS_IO //xyy add for Oritron
	write_vfd_led(0x01);
#endif
	
#ifdef KENLOON_PANEL3
    write_vfd_led(0xff);  //wangap add 2004/6/29
#endif
#ifdef USE_VFD_LED_POWER
#ifdef USE_VFD_LED_POWER_LOW
    write_vfd_led(0);
#else
    #ifdef  PROVIEW_DV_509	
        write_vfd_led(0x8);
    #elif defined(VTREK_DVD)
        write_vfd_led(0x7);
    #else    
        write_vfd_led(0xf);
    #endif 
#endif 
#endif

#ifdef KSD_SCART_TV
	GPIO_O_SET(18,1);
#endif

#ifdef USE_CD_SENSE_PIN_AS_LED_GPIO			//gerry,2004-2-10 18:33
	GPIO_O_SET(4,1);
#endif//USE_CD_SENSE_PIN_AS_LED_GPIO    

#ifdef NINTAUS_612      //linrc add for nintaus 2004-7-6 13:57 when standby,the LED must light
    GPIO_O_SET(4,1);
    GPIO_O_SET(3,0);
#endif

#if defined(USE_VFDPORT_TO_KEYLIGHT_GBM)
	regs0->gpio_master[56 / 16] |= (0x1 << (56 % 16));//pin156
    regs0->gpio_oe[56 / 16] |= (0x7 << (56 % 16));
    regs0->gpio_out[56 / 16] |= (0x7 << (56 % 16));      
#elif defined(GPIO14_STANDBY_LED)    //hq, 2004-3-20 15:52
    GPIO_O_SET(14,1);//turn on the Standby LED.
#elif defined(USE_VFDPORT_TO_KEYLIGHT_MINTON)
	GPIO_O_SET(14,0);//off

	regs0->gpio_oe[54 / 16] |= (0x7 << (54 % 16));//nono 2003-9-1 23:50
	GPIO_O_SET(54,1);//off
	GPIO_O_SET(55,1);//off
	GPIO_O_SET(56,1);//off         
#elif defined(USE_VFD_GAME_PORT_TO_KEYBOARD_HJ_2290)

	GPIO_O_SET(54,1);//off
	GPIO_O_SET(55,1);//off
	GPIO_O_SET(56,1);//off
#elif defined(USE_VFD_GAME_PORT_TO_KEYBOARD_HJ_DP313)
	GPIO_O_SET(3,1);
	GPIO_O_SET(62,1);
	GPIO_O_SET(63,1);          
#endif

#ifdef GBM_SET_VFD_PIN_LOW_WHEN_STANDBY		//set vfd pin low when standby for GBM TOP_DOOR_LOADER,gerry,2004/2/11 08:48

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -