GPIO WDT BKL Programming
Embedded Controller
5. Embedded Controller – EC Access
The relevant control information are as following.
#EC_CMD_PORT
#EC_DATA_PORT
#EC_DELAY
#EC_STAT_OBF
#EC_STAT_IBF
5.1
WaitPortStatus (char BITS, bool ONOFF)
int time=0, tick= EC_DELAY;
bool state;
for (time = 0; time < EC_DELAY*100; time += tick)
{
udelay (
char data= Inportb (EC_CMD_PORT);
state = ((data & BITS) !=0 );
if (state == ONOFF) {
}
}
5.2
EC_ReadByte (char OFFSET)
Read the value from OFFSET of EC RAM.
WaitPortStatus (EC_STAT_IBF, false);
Outportb (EC_CMD_PORT, 0x80);
WaitPortStatus (EC_STAT_IBF, false);
Outportb (EC_DATA_PORT, OFFSET);
WaitPortStatus (EC_STAT_OBF, true);
EC_DATA = Inportb (EC_DATA_PORT);
5.3
EC_WriteByte (char OFFSET, char DATA)
Write DATA to OFFSET of EC RAM.
WaitPortStatus (EC_STAT_IBF, false);
Outportb (EC_CMD_PORT, 0x81);
WaitPortStatus (EC_STAT_IBF, false);
Outportb (EC_DATA_PORT, OFFSET);
WaitPortStatus (EC_STAT_IBF, false);
Outportb (EC_DATA_PORT, DATA);
WaitPortStatus (EC_STAT_IBF, false);
A-8
0x66
0x62
100
0x1
0x2
);
EC_DELAY
break;
// EC command port
// EC data port
// bit 0: OBF
// bit 1: IBF
// *100 is the loop count to avoid infinite wait
// Delay 100us to let data ready
// Check EC status of desired bits
// Wait IBF = 0
// 0x80: EC read command
// Wait IBF = 0
// Write OFFSET to EC_DATA_PORT
// Wait OBF = 1
// Get value from EC_DATA_PORT
// Wait IBF = 0
// 0x81: EC write command
// Wait IBF = 0
// Write OFFSET to EC_DATA_PORT
// Wait IBF = 0
// Write DATA to EC_DATA_PORT
// Wait IBF = 0