summaryrefslogtreecommitdiff
path: root/driver/temp_sensor/g78x.h
blob: fdd987fcbdeb73c925e3ba711836c0b2065cb6de (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 Chromium OS Authors. All rights reserved.
 * 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 */