aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/loongson/lemote-2f/ec_kb3310b.h
blob: 1595a21b315bb50239e11ece02411c0a623bee6f (plain) (blame)
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
/*
 * KB3310B Embedded Controller
 *
 *  Copyright (C) 2008 Lemote Inc.
 *  Author: liujl <liujl@lemote.com>, 2008-03-14
 *
 * 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; either version 2 of the License, or
 * (at your option) any later version.
 */

#ifndef _EC_KB3310B_H
#define _EC_KB3310B_H

extern unsigned char ec_read(unsigned short addr);
extern void ec_write(unsigned short addr, unsigned char val);
extern int ec_query_seq(unsigned char cmd);
extern int ec_query_event_num(void);
extern int ec_get_event_num(void);

typedef int (*sci_handler) (int status);
extern sci_handler yeeloong_report_lid_status;

#define SCI_IRQ_NUM 0x0A

/*
 * The following registers are determined by the EC index configuration.
 * 1, fill the PORT_HIGH as EC register high part.
 * 2, fill the PORT_LOW as EC register low part.
 * 3, fill the PORT_DATA as EC register write data or get the data from it.
 */
#define	EC_IO_PORT_HIGH	0x0381
#define	EC_IO_PORT_LOW	0x0382
#define	EC_IO_PORT_DATA	0x0383

/*
 * EC delay time is 500us for register and status access
 */
#define	EC_REG_DELAY	500	/* unit : us */
#define	EC_CMD_TIMEOUT	0x1000

/*
 * EC access port for SCI communication
 */
#define	EC_CMD_PORT		0x66
#define	EC_STS_PORT		0x66
#define	EC_DAT_PORT		0x62
#define	CMD_INIT_IDLE_MODE	0xdd
#define	CMD_EXIT_IDLE_MODE	0xdf
#define	CMD_INIT_RESET_MODE	0xd8
#define	CMD_REBOOT_SYSTEM	0x8c
#define	CMD_GET_EVENT_NUM	0x84
#define	CMD_PROGRAM_PIECE	0xda

/* temperature & fan registers */
#define	REG_TEMPERATURE_VALUE	0xF458
#define	REG_FAN_AUTO_MAN_SWITCH 0xF459
#define	BIT_FAN_AUTO		0
#define	BIT_FAN_MANUAL		1
#define	REG_FAN_CONTROL		0xF4D2
#define	BIT_FAN_CONTROL_ON	(1 << 0)
#define	BIT_FAN_CONTROL_OFF	(0 << 0)
#define	REG_FAN_STATUS		0xF4DA
#define	BIT_FAN_STATUS_ON	(1 << 0)
#define	BIT_FAN_STATUS_OFF	(0 << 0)
#define	REG_FAN_SPEED_HIGH	0xFE22
#define	REG_FAN_SPEED_LOW	0xFE23
#define	REG_FAN_SPEED_LEVEL	0xF4CC
/* fan speed divider */
#define	FAN_SPEED_DIVIDER	480000	/* (60*1000*1000/62.5/2)*/

/* battery registers */
#define	REG_BAT_DESIGN_CAP_HIGH		0xF77D
#define	REG_BAT_DESIGN_CAP_LOW		0xF77E
#define	REG_BAT_FULLCHG_CAP_HIGH	0xF780
#define	REG_BAT_FULLCHG_CAP_LOW		0xF781
#define	REG_BAT_DESIGN_VOL_HIGH		0xF782
#define	REG_BAT_DESIGN_VOL_LOW		0xF783
#define	REG_BAT_CURRENT_HIGH		0xF784
#define	REG_BAT_CURRENT_LOW		0xF785
#define	REG_BAT_VOLTAGE_HIGH		0xF786
#define	REG_BAT_VOLTAGE_LOW		0xF787
#define	REG_BAT_TEMPERATURE_HIGH	0xF788
#define	REG_BAT_TEMPERATURE_LOW		0xF789
#define	REG_BAT_RELATIVE_CAP_HIGH	0xF492
#define	REG_BAT_RELATIVE_CAP_LOW	0xF493
#define	REG_BAT_VENDOR			0xF4C4
#define	FLAG_BAT_VENDOR_SANYO		0x01
#define	FLAG_BAT_VENDOR_SIMPLO		0x02
#define	REG_BAT_CELL_COUNT		0xF4C6
#define	FLAG_BAT_CELL_3S1P		0x03
#define	FLAG_BAT_CELL_3S2P		0x06
#define	REG_BAT_CHARGE			0xF4A2
#define	FLAG_BAT_CHARGE_DISCHARGE	0x01
#define	FLAG_BAT_CHARGE_CHARGE		0x02
#define	FLAG_BAT_CHARGE_ACPOWER		0x00
#define	REG_BAT_STATUS			0xF4B0
#define	BIT_BAT_STATUS_LOW		(1 << 5)
#define	BIT_BAT_STATUS_DESTROY		(1 << 2)
#define	BIT_BAT_STATUS_FULL		(1 << 1)
#define	BIT_BAT_STATUS_IN		(1 << 0)
#define	REG_BAT_CHARGE_STATUS		0xF4B1
#define	BIT_BAT_CHARGE_STATUS_OVERTEMP	(1 << 2)
#define	BIT_BAT_CHARGE_STATUS_PRECHG	(1 << 1)
#define	REG_BAT_STATE			0xF482
#define	BIT_BAT_STATE_CHARGING		(1 << 1)
#define	BIT_BAT_STATE_DISCHARGING	(1 << 0)
#define	REG_BAT_POWER			0xF440
#define	BIT_BAT_POWER_S3		(1 << 2)
#define	BIT_BAT_POWER_ON		(1 << 1)
#define	BIT_BAT_POWER_ACIN		(1 << 0)

/* other registers */
/* Audio: rd/wr */
#define	REG_AUDIO_VOLUME	0xF46C
#define	REG_AUDIO_MUTE		0xF4E7
#define	REG_AUDIO_BEEP		0xF4D0
/* USB port power or not: rd/wr */
#define	REG_USB0_FLAG		0xF461
#define	REG_USB1_FLAG		0xF462
#define	REG_USB2_FLAG		0xF463
#define	BIT_USB_FLAG_ON		1
#define	BIT_USB_FLAG_OFF	0
/* LID */
#define	REG_LID_DETECT		0xF4BD
#define	BIT_LID_DETECT_ON	1
#define	BIT_LID_DETECT_OFF	0
/* CRT */
#define	REG_CRT_DETECT		0xF4AD
#define	BIT_CRT_DETECT_PLUG	1
#define	BIT_CRT_DETECT_UNPLUG	0
/* LCD backlight brightness adjust: 9 levels */
#define	REG_DISPLAY_BRIGHTNESS	0xF4F5
/* Black screen Status */
#define	BIT_DISPLAY_LCD_ON	1
#define	BIT_DISPLAY_LCD_OFF	0
/* LCD backlight control: off/restore */
#define	REG_BACKLIGHT_CTRL	0xF7BD
#define	BIT_BACKLIGHT_ON	1
#define	BIT_BACKLIGHT_OFF	0
/* Reset the machine auto-clear: rd/wr */
#define	REG_RESET		0xF4EC
#define	BIT_RESET_ON		1
/* Light the led: rd/wr */
#define	REG_LED			0xF4C8
#define	BIT_LED_RED_POWER	(1 << 0)
#define	BIT_LED_ORANGE_POWER	(1 << 1)
#define	BIT_LED_GREEN_CHARGE	(1 << 2)
#define	BIT_LED_RED_CHARGE	(1 << 3)
#define	BIT_LED_NUMLOCK		(1 << 4)
/* Test led mode, all led on/off */
#define	REG_LED_TEST		0xF4C2
#define	BIT_LED_TEST_IN		1
#define	BIT_LED_TEST_OUT	0
/* Camera on/off */
#define	REG_CAMERA_STATUS	0xF46A
#define	BIT_CAMERA_STATUS_ON	1
#define	BIT_CAMERA_STATUS_OFF	0
#define	REG_CAMERA_CONTROL	0xF7B7
#define	BIT_CAMERA_CONTROL_OFF	0
#define	BIT_CAMERA_CONTROL_ON	1
/* Wlan Status */
#define	REG_WLAN		0xF4FA
#define	BIT_WLAN_ON		1
#define	BIT_WLAN_OFF		0
#define	REG_DISPLAY_LCD		0xF79F

/* SCI Event Number from EC */
enum {
	EVENT_LID = 0x23,	/*  LID open/close */
	EVENT_DISPLAY_TOGGLE,	/*  Fn+F3 for display switch */
	EVENT_SLEEP,		/*  Fn+F1 for entering sleep mode */
	EVENT_OVERTEMP,		/*  Over-temperature happened */
	EVENT_CRT_DETECT,	/*  CRT is connected */
	EVENT_CAMERA,		/*  Camera on/off */
	EVENT_USB_OC2,		/*  USB2 Over Current occurred */
	EVENT_USB_OC0,		/*  USB0 Over Current occurred */
	EVENT_BLACK_SCREEN,	/*  Turn on/off backlight */
	EVENT_AUDIO_MUTE,	/*  Mute on/off */
	EVENT_DISPLAY_BRIGHTNESS,/* LCD backlight brightness adjust */
	EVENT_AC_BAT,		/*  AC & Battery relative issue */
	EVENT_AUDIO_VOLUME,	/*  Volume adjust */
	EVENT_WLAN,		/*  Wlan on/off */
	EVENT_END
};

#endif /* !_EC_KB3310B_H */