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

📄 ;

📁 Embeded bootloader (rrload by ridgerun) for TI linux based platform v5.36
💻
字号:
/***************************************************************************//* 																		   *//*			         	pmu.c 											   *//*     Description : Power by PMU(PCF50606 Phillips)                       *//*     Author : rha34(moonjik.lee@reigncom.com)                            *//*     Date : 2004. 3. 22                                                  *//*     Version : 0.1												       *//* 																		   *//***************************************************************************/#include "pmpConfig.h"#include "i2c.h"#include "util.h"#include "pmu.h"#include "dm270-registers.h"//=========== Definitions ==================#define PMU_DEV_ADDR 0x10#define I2C_SCL_GIO	 31#define I2C_SDA_GIO	 32#define MAIN_POWER_KEY		0x100	#define REMOCON_POWER_KEY	 0x100#define MAIN_POWER_BIT	0x1#define REMOCON_POWER_BIT	0x2;#define EEPROM_ADDR	0xa8#define EEPROM_DATA_SUBADDR	27#define REG *(unsigned short *)#define KEEPACT_GIO		(1 << 13)// For debugging messages//#define DEBUG//=========  Variables  ====================//========  Functions  =====================unsigned char power_on_check(void){	unsigned char ret = 0;	unsigned char flag;	unsigned short temp;	//main power key direction Input	temp = REG GIO_DIR0;	temp |= MAIN_POWER_KEY;	REG GIO_DIR0 = temp;	//remocon power key direction Input	temp = REG GIO_DIR1;	temp |= (REMOCON_POWER_KEY>>16);	REG GIO_DIR1 = temp;	//check whether one of these keys are pressed....	temp = REG GIO_BITSET0;	if(temp & MAIN_POWER_KEY){//		util_printf("main key pressed..\n");		ret |= MAIN_POWER_BIT; //Power on by main key	}	temp = REG GIO_BITSET1;	if(temp & REMOCON_POWER_KEY){//		util_printf("remocon key pressed..\n");		ret |= REMOCON_POWER_BIT; //Power on by remocon key	}//	if(ret){		I2C_init(I2C_SCL_GIO, I2C_SDA_GIO);		I2C_writeReg(EEPROM_ADDR,EEPROM_DATA_SUBADDR,ret, &flag);//	}			return(ret);}unsigned char pmu_write_reg(unsigned char subaddr, unsigned char data){	unsigned char flag;	I2C_writeReg(PMU_DEV_ADDR,subaddr,data, &flag);	return(flag);}unsigned char pmu_read_reg(unsigned char subaddr, unsigned char *value){	unsigned char flag;	*value = I2C_readReg(PMU_DEV_ADDR, subaddr, &flag);	return(flag);}void quit_discharge(void){	I2C_init(I2C_SCL_GIO, I2C_SDA_GIO);	pmu_write_reg(GPOC5,0x7); //quick discharge current...}void pmu_BootInit(void){	unsigned char flag;	unsigned char temp;//	I2C_init(I2C_SCL_GIO, I2C_SDA_GIO);//	pmu_write_reg(GPOC5,0x7); //quick discharge current...	flag = pmu_write_reg(DCDC1,0xf8);  //DCDC1 1.5V set.#if defined(DEBUG)	if(!flag)		util_printf("PMU DCDC1 1.5V set..\n");	else		util_printf("i2c failed\n");#endif	flag = pmu_write_reg(GPOC3,0x7); //GPO3 constant low --> FET open#if defined(DEBUG)	if(!flag)		util_printf("GPO3 low...\n");	else		util_printf("i2c failed\n");#endif	flag = pmu_write_reg(D1REGC1, 0x6); //D1REGC1阑 power off#if defined(DEBUG)	if(!flag)		util_printf("D1REGC1 set...\n");	else		util_printf("i2c failed\n");#endif 	flag = pmu_write_reg(DCUDC1, 0xe3); //DCUDDC1俊 1.8V set#if defined(DEBUG)	if(!flag)		util_printf("DCUDDC1 1.8v set...\n");	else		util_printf("i2c failed\n");#endif 	flag = pmu_write_reg(GPOC4, 0x7); //GPOC4甫 low active --> FFT open#if defined(DEBUG)	if(!flag)		util_printf("GPOC4 low active.\n");	else		util_printf("i2c failed\n");#endif 	//========== Added 04.04.13 ===================/*	flag = pmu_write_reg(LPREGC1,0x2f); //LPVDD 2.4V, ECO mode. 	flag = pmu_write_reg(ADCC2, 0x83); //BATVOLT, subtractor	flag = pmu_read_reg(ADCS1, &temp); //read battery volt#if defined(DEBUG)	util_printf("Battry : %d\n",temp);#endif    //====  Modified 04.04.14 ======================//	if(temp < 67){ // If battery voltage is below 3.6V	if(temp < 78){ // If battery voltage is below 3.6V		util_printf("LOW BATTERY...!!\n");		util_printf("GO TO STANDBY MODE...!!\n");		pmu_goStandBy(); //go to stand by mode.	}*/	//=============================================	//=================  Added 04.07.02  ======================#if defined (PMP100_PP0)	flag = pmu_write_reg(GPOC1, 0x77); //USB_RST 'H', HOST_PW_EN 'H'#if defined(DEBUG)	if(!flag)		util_printf("1st USB power set.\n");	else		util_printf("i2c failed\n");#endif#elif defined (PMP100_MP0)	flag = pmu_write_reg(GPOC1,0x00); //SP_SHDN 'L', USB_CHG_EN 'L'#if defined(DEBUG)	if(!flag)		util_printf("1st USB power set.\n");	else		util_printf("i2c failed\n");#endif#endif	flag = pmu_write_reg(GPOC2,0x07); //LCD_PW_B 'Z'#if defined(DEBUG)	if(!flag)		util_printf("1st USB power set.\n");	else		util_printf("i2c failed\n");#endif	//=====  Added 04.03.26 for USB  ===============	flag = pmu_write_reg(D2REGC1, 0xf8); //USB device power#if defined(DEBUG)	if(!flag)		util_printf("1st USB power set.\n");	else		util_printf("i2c failed\n");#endif 	flag = pmu_write_reg(D3REGC1, 0xf0); //USB device power#if defined(DEBUG)	if(!flag)		util_printf("2nd USB power set.\n");	else		util_printf("i2c failed\n");#endif	//==========  End of 04.03.26  ==================== 	//==========  Added 04.05.12 for ES2  ===============	flag = pmu_write_reg(BBCC, 0x1f); 	// back up battery chargin enable STDBY,ACTIVE.										// 400uA, 3.0V#if defined(DEBUG)	if(!flag)		util_printf("BBCC configured.\n");	else		util_printf("BBCC configure failed\n");#endif	flag = pmu_write_reg(MBCC1, 0x1c); 	// charge mode idle#if defined(DEBUG)	if(!flag)		util_printf("MBCC1 configured.\n");	else		util_printf("MBCC configure failed\n");#endif	flag = pmu_write_reg(LPREGC2, 0x0);	//LPREG1 off.#if defined(DEBUG)	if(!flag)		util_printf("LPREGC2 confgigured.\n");	else		util_printf("LPREG2 failed\n");#endif		// ============  Removed 04.04.30  =================	// Get rid of LED output in ES2 it should be Hi-Z/*	flag = pmu_write_reg(GPOC1,0x77); //GPO0 'H' in active, GPO1 'H' in active.#if defined(DEBUG)	if(!flag)		util_printf("GPO0 confgigured.\n");	else		util_printf("GPO0 failed\n");#endif	flag = pmu_write_reg(GPOC2,0x07); //GPOOD0 'L' in active, 'Hi-Z' in standby.#if defined(DEBUG)	if(!flag)		util_printf("GPOOD0 confgigured.\n");	else		util_printf("GPOOD0 failed\n");#endif*//*	flag = pmu_write_reg(LEDC1,0x80); //LED1 pattern setting#if defined(DEBUG)	if(!flag)		util_printf("LED1 pattern .\n");	else		util_printf("i2c failed\n");#endif	flag = pmu_write_reg(GPOC2,0x1); //GPOC2俊 LED1 ouput enable#if defined(DEBUG)	if(!flag)		util_printf("LED1 output ...\n");	else		util_printf("i2c failed\n");#endif */	//==========  Added 04.03.27  ===============//	pmu_write_reg(INT1M,0x48,&flag); //Mask the SECOND interrupt.	//Modified By Lee 04.03.30 for mask ON KEYF interrupt	flag = pmu_write_reg(INT1M,0x4a); //Mask the SECOND interrupt.#if defined(DEBUG)	if(!flag)		util_printf("INT1M mask .\n");	else		util_printf("i2c failed\n");#endif #if defined(NOT_WAKEUP_BY_CHARGER)	//===========  Added 04.03.30  ==============	flag = pmu_write_reg(INT2M,0xff); //Mask the all interrupts by charger.#if defined(DEBUG)	if(!flag)		util_printf("INT2M mask .\n");	else		util_printf("i2c failed\n");#endif 	//Modified 04.05.12 for ES2	flag = pmu_write_reg(INT3M,0x08); //	flag = pmu_write_reg(INT3M,0x0e); //Mask the all about accessory & touch screen interrupt.#if defined(DEBUG)	if(!flag)		util_printf("INT3M mask .\n");	else		util_printf("i2c failed\n");#endif 	//Modified 04.05.12 for ES2	flag = pmu_write_reg(OOCC1,0x0); //Mask the all wake up by something.//	flag = pmu_write_reg(OOCC1,0x44); //Mask the wake up by charger interrupt.#if defined(DEBUG)	if(!flag)		util_printf("wakeup setting.\n");	else		util_printf("i2c failed\n");#endif#endif 	//Added at 04.07.06...	flag = pmu_write_reg(0x19, 0xFE);	//Added at 2004.07.14...	flag = pmu_write_reg(0x22, 0x02);	flag = pmu_write_reg(0x1D, 0x02);		return;}unsigned char read_irqPort(void){	volatile unsigned char key_val;	volatile unsigned short port;	#if defined(PMP100_EVM)		REG DIR0 |= (1 << 6);	#else		REG DIR0 |= (1 << 5);	#endif		port = REG BITSET0;		#if defined(PMP100_EVM)		key_val = port & (1 << 6);	#else		key_val = port & (1 << 5);	#endif	return(key_val);}unsigned char pmu_OnkeyCheck(void){	unsigned char flag,key_val;	unsigned char temp;		flag = pmu_read_reg(INT1,&key_val); //button ON KEY check.	#if defined(DEBUG)		util_printf("%x\n",key_val);	#endif		flag = pmu_read_reg(INT2,&temp);	#if defined(DEBUG)		util_printf("%x\n",temp);	#endif		flag = pmu_read_reg(INT3,&temp);	#if defined(DEBUG)		util_printf("%x\n",temp);	#endif	//Modified at 04.04.23..//		if(key_val & 0x3)		if((key_val & 0x3)||(key_val == 0x40))			return(0);		else			return(1);}unsigned char detect_interrupt(void){	unsigned char flag;	unsigned char key_val;	if(!read_irqPort()){		flag = pmu_read_reg(INT1,&key_val); //Read INT1 Register.		if((key_val & 0x3)){		#if defined(DEBUG)			util_printf("ONKEY DETECTED\n");		#endif			return ONKEY_DETECT;		}		if(key_val & 0x4){		#if defined(DEBUG)			util_printf("ONKEY1S DETECTED\n");		#endif			return ONKEY1S_DETECT;		}		if(key_val & 0x10){		#if defined(DEBUG)			util_printf("EXTONF DETECTED\n");		#endif			return EXTONF_DETECT;		} 		if(key_val & 0x80){		#if defined(DEBUG)			util_printf("ALARM DETECTED\n");		#endif			return ALARM_DETECT;		}	}	if(!read_irqPort()){		flag = pmu_read_reg(INT2,&key_val);		if(key_val & 0x1){		#if defined(DEBUG)			util_printf("CHGINS DETECTED\n");		#endif			return(CHGINS_DETECT);		}		if(key_val & 0x2){		#if defined(DEBUG)			util_printf("CHGRM DETECTED\n");		#endif			return(CHGRM_DETECT);		}	}	if(!read_irqPort()){		flag = pmu_read_reg(INT3, &key_val);		if(key_val & 0x1){		#if defined(DEBUG)			util_printf("ADCREADY DETECTED\n");		#endif			return(ADCREADY_DETECT);		}	}	return(0);		}void waitOnKey(void){	unsigned char key_val;  unsigned char ch = 0;	while(1){		if(!read_irqPort()){			key_val = detect_interrupt();			util_printf("check  %x\n",key_val);			if(key_val == ONKEY_DETECT){				pmu_OnkeyCheck();				break;			}		}	      	ch = io_getc(100); // look for a key for x msec.      	if (ch > 0) break;	}}void pmu_goStandBy(void){	unsigned char key_val,flag;	flag = pmu_read_reg(OOCC1,&key_val);	key_val |= 0x01;	pmu_write_reg(OOCC1,key_val); //go standBy }void pmu_goFinalize(void){	pmu_write_reg(GPOC4, 0x00);	pmu_write_reg(D1REGC1, 0xE6);	pmu_write_reg(GPOC3, 0x00);	return;}

⌨️ 快捷键说明

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