summaryrefslogtreecommitdiff
path: root/src/ec/quanta/ene_kb3940q/ec.h
blob: b04809e0f7e8f73f745adadf848ad9841441c3ea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
/*
 * This file is part of the coreboot project.
 *
 * Copyright (C) 2012 The Chromium OS Authors. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; version 2 of the License.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

/*
 * EC communication interface for QUANTA EnE KB3940Q Embedded Controller.
 */

#ifndef _EC_QUANTA_ENE_KB3940Q_EC_H
#define _EC_QUANTA_ENE_KB3940Q_EC_H

#define EC_IO 0x380 /* Mainboard specific. Could be Kconfig option */
#define EC_IO_HIGH EC_IO + 1
#define EC_IO_LOW  EC_IO + 2
#define EC_IO_DATA EC_IO + 3



// 60h/64h Command Interface
#define KBD_DATA	0x60
#define KBD_COMMAND	0x64
#define KBD_STATUS	0x64
#define   KBD_IBF	(1 << 1) // 1: input buffer full (data ready for ec)
#define   KBD_OBF	(1 << 0) // 1: output buffer full (data ready for host)

// 62h/66h Command Interface
#define EC_DATA	0x62
#define EC_COMMAND	0x66
#define EC_SC	0x66

/* Wait 400ms for keyboard controller answers */
#define KBC_TIMEOUT_IN_MS 400

u8 ec_kbc_read_ob(void);
void ec_kbc_write_cmd(u8 cmd);
void ec_kbc_write_ib(u8 data);
u8 ec_read_ob(void);
void ec_write_cmd(u8 cmd);
void ec_write_ib(u8 data);

u8 ec_mem_read(u8 addr);
void ec_mem_write(u8 addr, u8 data);

/*****************************************************************************
 * EC Internal memory
 */

#define EC_BAT_DCAP_LO			0x40
#define EC_BAT_DCAP_HI			0x41
#define EC_BAT_DVOLT_LO			0x42
#define EC_BAT_DVOLT_HI			0x43
#define EC_BAT_FULL_CAP_LO		0x44
#define EC_BAT_FULL_CAP_HI		0x45
#define EC_BAT_RATE_LO			0x46
#define EC_BAT_RATE_HI			0x47
#define EC_BAT_RMC_LO			0x48
#define EC_BAT_RMC_HI			0x49
#define EC_BAT_VOLT_LO			0x4A
#define EC_BAT_VOLT_HI			0x4B
#define EC_BAT_CHRG_CURT_LO		0x4C
#define EC_BAT_CHRG_CURT_HI		0x4D
#define EC_BAT_CHRG_VOLT_LO		0x4E
#define EC_BAT_CHRG_VOLT_HI		0x4F
#define EC_BAT_TEMP_LO			0x50
#define EC_BAT_TEMP_HI			0x51
#define EC_BAT_SN_LO			0x52
#define EC_BAT_SN_HI			0x53
#define EC_BAT_RSOC_LO			0x54
#define EC_BAT_RSOC_HI			0x55
#define EC_BAT_STATUS_LO		0x56
#define EC_BAT_STATUS_HI		0x57
#define EC_BAT_CYCLE_COUNT_LO	0x58
#define EC_BAT_CYCLE_COUNT_HI	0x59
#define EC_BAT_MFG_DATE_LO		0x5A
#define EC_BAT_MFG_DATE_HI		0x5B
#define EC_BAT_CHEMISTRY0		0x60
#define EC_BAT_CHEMISTRY1		0x61
#define EC_BAT_CHEMISTRY2		0x62
#define EC_BAT_CHEMISTRY3		0x63
#define EC_BAT_DEVICE_NAME0		0x64
#define EC_BAT_DEVICE_NAME1		0x65
#define EC_BAT_DEVICE_NAME2		0x66
#define EC_BAT_DEVICE_NAME3		0x67
#define EC_BAT_DEVICE_NAME4		0x68
#define EC_BAT_DEVICE_NAME5		0x69
#define EC_BAT_DEVICE_NAME6		0x6A

#define EC_POWER_FLAG			0x70
#define   EC_PF_ADAPTER_IN		(1 << 0)
#define   EC_PF_ADAPTER_PIN		(1 << 1)
#define   EC_PF_BATT_IN			(1 << 2)
#define   EC_PF_BATT_DESTROY	(1 << 3)
#define   EC_PF_ACPI_MODE		(1 << 4)
#define   EC_PF_X86_BIOS		(1 << 6)
#define   EC_PF_COREBOOT		0
#define   EC_PF_PASSIVE_THERM	(1 << 7)

#define EC_CHARGER_STATUS		0x71
#define   EC_CHS_BAT_DISCHARGING	(1 << 0)
#define   EC_CHS_BAT_CHARGING		(1 << 1)
#define   EC_CHS_BAT_CRITICAL		(1 << 2)

#define EC_HW_GPI_STATUS			0x72
#define   EC_GPI_LID_STAT_BIT		0
#define   EC_GPI_RECOVERY_MODE_BIT	1
#define   EC_GPI_LID_OPEN			(1 << EC_GPI_LID_STAT_BIT)
#define   EC_GPI_RECOVERY_STATUS	(1 << EC_GPI_RECOVERY_MODE_BIT)

#define EC_GPIO_STATUS				0x73
#define   EC_GPIO_TP_LED_ENABLE		(1 << 0)
#define   EC_GPIO_TP_LED_STATUS		(1 << 1)

#define EC_CPU_TMP					0x78
#define EC_GPU_TMP					0x79
#define EC_LOCAL_TMP1				0x7A
#define EC_LOCAL_TMP2				0x7B
#define EC_FAN_TACH_LO				0x7C
#define EC_FAN_TACH_HI				0x7D
#define EC_FAN_DBG_RPM_LO			0x7E
#define EC_FAN_DBG_RPM_HI			0x7F

#define EC_KBID_REG			0x80
#define   EC_KBD_EN			0
#define   EC_KBD_JP			(1 << 1)
#define EC_CURR_PS			0x81
#define EC_MAX_PS			0x82

#define EC_EC_PSW			0x83
#define   EC_PSW_IKB		(1 << 0)
#define   EC_PSW_TP			(1 << 1)
#define   EC_PSW_LAN		(1 << 3)
#define   EC_PSW_RTC		(1 << 4)
#define   EC_PSW_USB		(1 << 5)

#define EC_WAKE_EVEN_TID	0x84
#define   EC_WID_IKB		(1 << 0)
#define   EC_WID_TP			(1 << 1)
#define   EC_WID_LID		(1 << 2)
#define   EC_WID_PWRSW		(1 << 7)

#define EC_CODE_STATE				0x85
#define   EC_COS_INITIAL_STAGE		0xBB
#define   EC_COS_EC_RO				0xC0
#define   EC_COS_EC_RW				0xC1

#define EC_FW_REASON_ID				0x86
#define   EC_FWR_NOT_RO				0x00
#define   EC_FWR_GPI_ASSERTED		0x01
#define   EC_FWR_HOTKEY_PRESSED		0x02
#define   EC_FWR_FIRMWARE_CORRUPT	0x03

#define EC_SHUTDOWN_REASON		0xB9
#define EC_FW_VER0			0xBA
#define EC_FW_VER1			0xBB
#define EC_FW_VER2			0xBC
#define EC_FW_VER3			0xBD
#define EC_FW_VER4			0xBE
#define EC_FW_VER5			0xBF
#define EC_SMBPTCL			0xC0
#define EC_SMBSTA			0xC1
#define EC_SMBADDR			0xC2
#define EC_SMBCMD			0xC3
#define EC_SMBDATA			0xC4
#define EC_SMBBCNT			0xE4

/*****************************************************************************
 * SMI / SCI event status
 */
#define Q_EVENT_LID_STATUS			0x06
#define Q_EVENT_WIFI_BUTTON			0x06
#define Q_EVENT_THERM_EVENT			0x08
#define Q_EVENT_PSTATE_DOWN			0x0E
#define Q_EVENT_PSTATE_UP			0x0F
#define Q_EVENT_AC_PLUGGED			0x10
#define Q_EVENT_AC_UNPLUGGED		0x11
#define Q_EVENT_BATTERY_PLUGGED		0x12
#define Q_EVENT_BATTERY_UNPLUGGED	0x13
#define Q_EVENT_BATTERY_STATUS		0x14

/*****************************************************************************
 * EC Commands
 */
#define EC_CMD_ENABLE_ACPI_MODE		0x71
#define EC_CMD_DISABLE_ACPI_MODE	0x72
#define EC_CMD_DISABLE_SMBUS_EVENT	0x73
#define EC_CMD_ENABLE_SMBUS_EVENT	0x74
#define EC_CMD_SYSTEM_RESET			0x78
#define EC_CMD_SYSTEM_SHUTDOWN		0x79
#define EC_CMD_RESET_FOR_FW_UPDATE	0x7D
#define EC_CMD_IDLE_FOR SPI_UPDATE	0x7E
#define EC_CMD_READ_RAM				0x80
#define EC_CMD_WRITE_RAM			0x81
#define EC_CMD_BURST_ENABLE			0x82
#define EC_CMD_BURST_DISABLE		0x83
#define EC_CMD_QUERY_EVENT			0x84


#endif /* _EC_QUANTA_ENE_KB3940Q_EC_H */