summaryrefslogtreecommitdiff
path: root/driver/temp_sensor/g78x.h
blob: 70abc82a3f69d761ce8f8571564bc5b956cb6868 (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
/* Copyright 2016 The ChromiumOS Authors
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

/* G781/G782 temperature sensor module for Chrome EC */

#ifndef __CROS_EC_G78X_H
#define __CROS_EC_G78X_H

#if defined(CONFIG_TEMP_SENSOR_G781) && defined(CONFIG_TEMP_SENSOR_G782)
#error Cannot support both G781 and G782 together!
#endif

#define G78X_I2C_ADDR_FLAGS 0x4C

#define G78X_IDX_INTERNAL 0
#define G78X_IDX_EXTERNAL1 1
#define G78X_IDX_EXTERNAL2 2

#if defined(CONFIG_TEMP_SENSOR_G781)
/* G781 register */
#define G78X_TEMP_LOCAL 0x00
#define G78X_TEMP_REMOTE1 0x01
#define G78X_STATUS 0x02
#define G78X_CONFIGURATION_R 0x03
#define G78X_CONVERSION_RATE_R 0x04
#define G78X_LOCAL_TEMP_HIGH_LIMIT_R 0x05
#define G78X_LOCAL_TEMP_LOW_LIMIT_R 0x06
#define G78X_REMOTE1_TEMP_HIGH_LIMIT_R 0x07
#define G78X_REMOTE1_TEMP_LOW_LIMIT_R 0x08
#define G78X_CONFIGURATION_W 0x09
#define G78X_CONVERSION_RATE_W 0x0a
#define G78X_LOCAL_TEMP_HIGH_LIMIT_W 0x0b
#define G78X_LOCAL_TEMP_LOW_LIMIT_W 0x0c
#define G78X_REMOTE1_TEMP_HIGH_LIMIT_W 0x0d
#define G78X_REMOTE1_TEMP_LOW_LIMIT_W 0x0e
#define G78X_ONESHOT 0x0f
#define G78X_REMOTE1_TEMP_EXTENDED 0x10
#define G78X_REMOTE1_TEMP_OFFSET_HIGH 0x11
#define G78X_REMOTE1_TEMP_OFFSET_EXTD 0x12
#define G78X_REMOTE1_T_HIGH_LIMIT_EXTD 0x13
#define G78X_REMOTE1_T_LOW_LIMIT_EXTD 0x14
#define G78X_REMOTE1_TEMP_THERM_LIMIT 0x19
#define G78X_LOCAL_TEMP_THERM_LIMIT 0x20
#define G78X_THERM_HYSTERESIS 0x21
#define G78X_ALERT_FAULT_QUEUE_CODE 0x22
#define G78X_MANUFACTURER_ID 0xFE
#define G78X_DEVICE_ID 0xFF

/* Config register bits */
#define G78X_CONFIGURATION_STANDBY BIT(6)
#define G78X_CONFIGURATION_ALERT_MASK BIT(7)

/* Status register bits */
#define G78X_STATUS_LOCAL_TEMP_THERM_ALARM BIT(0)
#define G78X_STATUS_REMOTE1_TEMP_THERM_ALARM BIT(1)
#define G78X_STATUS_REMOTE1_TEMP_FAULT BIT(2)
#define G78X_STATUS_REMOTE1_TEMP_LOW_ALARM BIT(3)
#define G78X_STATUS_REMOTE1_TEMP_HIGH_ALARM BIT(4)
#define G78X_STATUS_LOCAL_TEMP_LOW_ALARM BIT(5)
#define G78X_STATUS_LOCAL_TEMP_HIGH_ALARM BIT(6)
#define G78X_STATUS_BUSY BIT(7)

#elif defined(CONFIG_TEMP_SENSOR_G782)
/* G782 register */
#define G78X_TEMP_LOCAL 0x00
#define G78X_TEMP_REMOTE1 0x01
#define G78X_TEMP_REMOTE2 0x02
#define G78X_STATUS 0x03
#define G78X_CONFIGURATION_R 0x04
#define G78X_CONFIGURATION_W 0x04
#define G78X_CONVERSION_RATE_R 0x05
#define G78X_CONVERSION_RATE_W 0x05
#define G78X_LOCAL_TEMP_HIGH_LIMIT_R 0x06
#define G78X_LOCAL_TEMP_HIGH_LIMIT_W 0x06
#define G78X_LOCAL_TEMP_LOW_LIMIT_R 0x07
#define G78X_LOCAL_TEMP_LOW_LIMIT_W 0x07
#define G78X_REMOTE1_TEMP_HIGH_LIMIT_R 0x08
#define G78X_REMOTE1_TEMP_HIGH_LIMIT_W 0x08
#define G78X_REMOTE1_TEMP_LOW_LIMIT_R 0x09
#define G78X_REMOTE1_TEMP_LOW_LIMIT_W 0x09
#define G78X_REMOTE2_TEMP_HIGH_LIMIT_R 0x0a
#define G78X_REMOTE2_TEMP_HIGH_LIMIT_W 0x0a
#define G78X_REMOTE2_TEMP_LOW_LIMIT_R 0x0b
#define G78X_REMOTE2_TEMP_LOW_LIMIT_W 0x0b
#define G78X_ONESHOT 0x0c
#define G78X_REMOTE1_TEMP_EXTENDED 0x0d
#define G78X_REMOTE1_TEMP_OFFSET_HIGH 0x0e
#define G78X_REMOTE1_TEMP_OFFSET_EXTD 0x0f
#define G78X_REMOTE1_T_HIGH_LIMIT_EXTD 0x10
#define G78X_REMOTE1_T_LOW_LIMIT_EXTD 0x11
#define G78X_REMOTE1_TEMP_THERM_LIMIT 0x12
#define G78X_REMOTE2_TEMP_EXTENDED 0x13
#define G78X_REMOTE2_TEMP_OFFSET_HIGH 0x14
#define G78X_REMOTE2_TEMP_OFFSET_EXTD 0x15
#define G78X_REMOTE2_T_HIGH_LIMIT_EXTD 0x16
#define G78X_REMOTE2_T_LOW_LIMIT_EXTD 0x17
#define G78X_REMOTE2_TEMP_THERM_LIMIT 0x18
#define G78X_STATUS1 0x19
#define G78X_LOCAL_TEMP_THERM_LIMIT 0x20
#define G78X_THERM_HYSTERESIS 0x21
#define G78X_ALERT_FAULT_QUEUE_CODE 0x22
#define G78X_MANUFACTURER_ID 0xFE
#define G78X_DEVICE_ID 0xFF

/* Config register bits */
#define G78X_CONFIGURATION_REMOTE2_DIS BIT(5)
#define G78X_CONFIGURATION_STANDBY BIT(6)
#define G78X_CONFIGURATION_ALERT_MASK BIT(7)

/* Status register bits */
#define G78X_STATUS_LOCAL_TEMP_LOW_ALARM BIT(0)
#define G78X_STATUS_LOCAL_TEMP_HIGH_ALARM BIT(1)
#define G78X_STATUS_LOCAL_TEMP_THERM_ALARM BIT(2)
#define G78X_STATUS_REMOTE2_TEMP_THERM_ALARM BIT(3)
#define G78X_STATUS_REMOTE1_TEMP_THERM_ALARM BIT(4)
#define G78X_STATUS_REMOTE2_TEMP_FAULT BIT(5)
#define G78X_STATUS_REMOTE1_TEMP_FAULT BIT(6)
#define G78X_STATUS_BUSY BIT(7)

/* Status1 register bits */
#define G78X_STATUS_REMOTE2_TEMP_LOW_ALARM BIT(4)
#define G78X_STATUS_REMOTE2_TEMP_HIGH_ALARM BIT(5)
#define G78X_STATUS_REMOTE1_TEMP_LOW_ALARM BIT(6)
#define G78X_STATUS_REMOTE1_TEMP_HIGH_ALARM BIT(7)
#endif

/**
 * Get the last polled value of a sensor.
 *
 * @param idx		Index to read. Idx indicates whether to read die
 *			temperature or external temperature.
 * @param temp_ptr	Destination for temperature in K.
 *
 * @return EC_SUCCESS if successful, non-zero if error.
 */
int g78x_get_val(int idx, int *temp_ptr);

#endif /* __CROS_EC_G78X_H */