summaryrefslogtreecommitdiff
path: root/src/ec/lenovo/h8/h8.h
blob: c5092c3a2922a2b3b3caecc60d72f5cfadf3d467 (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
/* SPDX-License-Identifier: GPL-2.0-only */

#ifndef EC_LENOVO_H8_H
#define EC_LENOVO_H8_H

#include <stdint.h>
#include <device/device.h>

enum usb_always_on {
	UAO_OFF = 0,
	UAO_AC_AND_BATTERY = 1,
	UAO_AC_ONLY = 2
};

void h8_trackpoint_enable(int on);
void h8_wlan_enable(int on);
void h8_set_audio_mute(int on);
void h8_usb_always_on_enable(enum usb_always_on on);
void h8_usb_power_enable(int on);
void h8_enable_event(int event);
void h8_disable_event(int event);
int h8_ultrabay_device_present(void);
u8 h8_build_id_and_function_spec_version(char *buf, u8 buf_len);
void h8_usb_always_on(void);

int h8_get_fn_key(void);
int h8_get_sense_ready(void);

void h8_bluetooth_enable(int on);
bool h8_bluetooth_nv_enable(void);
bool h8_has_bdc(const struct device *dev);

void h8_wwan_enable(int on);
bool h8_wwan_nv_enable(void);
bool h8_has_wwan(const struct device *dev);

void h8_ssdt_generator(const struct device *dev);
/*
 * boards needing specific h8-related inits could override it
 */
void h8_mb_init(void);


/* EC registers */
#define H8_CONFIG0 0x00
#define H8_CONFIG0_EVENTS_ENABLE	0x02
#define H8_CONFIG0_HOTKEY_ENABLE	0x04
#define H8_CONFIG0_SMM_H8_ENABLE	0x20
#define H8_CONFIG0_TC_ENABLE		0x80

#define H8_CONFIG1 0x01
#define H8_CONFIG1_BKLT_LID		0x01
#define H8_CONFIG1_UBAY_PWR		0x20

#define H8_CONFIG2 0x02
#define H8_CONFIG2_USB_DOCK			0x01
#define H8_CONFIG2_DOCK_SPEAKER_MUTE		0x02
#define H8_CONFIG2_DOCK_SPEAKER_MUTE_POL	0x04

#define H8_CONFIG3 0x03

#define H8_SOUND_ENABLE0		0x04
#define H8_SOUND_ENABLE1		0x05
#define H8_SOUND_REG			0x06
#define H8_SOUND_REPEAT			0x07

#define H8_TRACKPOINT_CTRL		0x0B
#define H8_TRACKPOINT_AUTO		0x01
#define H8_TRACKPOINT_OFF		0x02
#define H8_TRACKPOINT_ON		0x03

#define H8_LED_CONTROL		0x0c
#define H8_LED_CONTROL_OFF		0x00
#define H8_LED_CONTROL_ON		0x80
#define H8_LED_CONTROL_PULSE		0xa0	/* Some models, power LED only*/
#define H8_LED_CONTROL_BLINK		0xc0

#define H8_LED_CONTROL_POWER_LED	0x00
#define H8_LED_CONTROL_BAT0_LED	0x01
#define H8_LED_CONTROL_BAT1_LED	0x02
#define H8_LED_CONTROL_UBAY_LED	0x04
#define H8_LED_CONTROL_SUSPEND_LED	0x07
#define H8_LED_CONTROL_DOCK_LED1	0x08
#define H8_LED_CONTROL_DOCK_LED2	0x09
#define H8_LED_CONTROL_ACDC_LED		0x0c
#define H8_LED_CONTROL_MUTE_LED		0x0e

#define H8_USB_ALWAYS_ON		0x0d
#define H8_USB_ALWAYS_ON_ENABLE		0x01
#define H8_USB_ALWAYS_ON_AC_ONLY	0x0c

#define H8_FAN_CONTROL			0x2f
#define H8_FAN_CONTROL_AUTO		0x80

#define H8_VOLUME_CONTROL		0x30
#define H8_VOLUME_CONTROL_MUTE		0x40
/* Embedded controller events */
#define H8_EVENT_FN_F1	0x10
#define H8_EVENT_FN_F2	0x11
#define H8_EVENT_FN_F3	0x12
#define H8_EVENT_FN_F4	0x13
#define H8_EVENT_FN_HOME	0x14
#define H8_EVENT_FN_END	0x15
#define H8_EVENT_FN_F7	0x16
#define H8_EVENT_FN_F8	0x17
#define H8_EVENT_FN_F9	0x18
#define H8_EVENT_FN_THINKVANTAGE	0x19
#define H8_EVENT_FN_F11	0x1a
#define H8_EVENT_FN_F12	0x1b
#define H8_EVENT_FN_1		0x1c
#define H8_EVENT_FN_2		0x1d
#define H8_EVENT_FN_PGUP	0x1f

#define H8_EVENT_AC_ON	0x26
#define H8_EVENT_AC_OFF	0x27

#define H8_EVENT_PWRSW_PRESS	0x28
#define H8_EVENT_PWRSW_RELEASE 0x29

#define H8_EVENT_LIDSW_CLOSE	0x2a
#define H8_EVENT_LIDSW_PUSH	0x2b

#define H8_EVENT_UBAY_UNLOCK	0x2c
#define H8_EVENT_UBAY_LOCK	0x2d

#define H8_EVENT_KEYPRESS	0x33

#define H8_EVENT_FN_PRESS	0x39

#define H8_STATUS0		0x46
#define H8_STATUS0_FN_KEY_DOWN	0x01
#define H8_STATUS1		0x47
#define H8_STATUS2		0x48
#define H8_STATUS3		0x49

#define H8_EVENT_BAT0		0x4a
#define H8_EVENT_BAT0_STATE	0x4b

#define H8_EVENT_BAT1		0x4c
#define H8_EVENT_BAT1_STATE	0x4d

#define H8_EVENT_FN_F5 0x64
#define H8_EVENT_FN_F6 0x65

#endif /* EC_LENOVO_H8_H */