Skip to content

Commit 229e87a

Browse files
committed
sbtsi: Add support to get the SBTSI maximum HBM temperature
Add a new channel to support SBTSIx50 and SBTSIx54 for reporting maximum HBM temperature.
1 parent 3c522d7 commit 229e87a

File tree

1 file changed

+22
-7
lines changed

1 file changed

+22
-7
lines changed

apml_sbtsi.c

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
#define SBTSI_REG_TEMP_DEC 0x10 /* RW */
4040
#define SBTSI_REG_TEMP_HIGH_DEC 0x13 /* RW */
4141
#define SBTSI_REG_TEMP_LOW_DEC 0x14 /* RW */
42+
#define SBTSI_REG_MAX_HBM_INT 0x50 /* RO */
43+
#define SBTSI_REG_MAX_HBM_DEC 0x54 /* RO */
4244

4345
#define SBTSI_CONFIG_READ_ORDER_SHIFT 5
4446

@@ -67,6 +69,12 @@ struct apml_sbtsi_device {
6769
u8 dev_static_addr;
6870
} __packed;
6971

72+
enum sbtsi_channels {
73+
CPU_CHANNEL,
74+
HBM_CHANNEL,
75+
SBTSI_NUM_CHANNELS
76+
};
77+
7078
/*
7179
* From SB-TSI spec: CPU temperature readings and limit registers encode the
7280
* temperature in increments of 0.125 from 0 to 255.875. The "high byte"
@@ -118,12 +126,18 @@ static int sbtsi_read(struct device *dev, enum hwmon_sensor_types type,
118126
return ret;
119127

120128
mutex_lock(&tsi_dev->lock);
121-
if (cfg & BIT(SBTSI_CONFIG_READ_ORDER_SHIFT)) {
122-
ret = regmap_read(tsi_dev->regmap, SBTSI_REG_TEMP_DEC, &temp_dec);
123-
ret = regmap_read(tsi_dev->regmap, SBTSI_REG_TEMP_INT, &temp_int);
124-
} else {
125-
ret = regmap_read(tsi_dev->regmap, SBTSI_REG_TEMP_INT, &temp_int);
126-
ret = regmap_read(tsi_dev->regmap, SBTSI_REG_TEMP_DEC, &temp_dec);
129+
if (channel == HBM_CHANNEL) {
130+
ret = regmap_read(tsi_dev->regmap, SBTSI_REG_MAX_HBM_INT, &temp_int);
131+
ret = regmap_read(tsi_dev->regmap, SBTSI_REG_MAX_HBM_DEC, &temp_dec);
132+
}
133+
else {
134+
if (cfg & BIT(SBTSI_CONFIG_READ_ORDER_SHIFT)) {
135+
ret = regmap_read(tsi_dev->regmap, SBTSI_REG_TEMP_DEC, &temp_dec);
136+
ret = regmap_read(tsi_dev->regmap, SBTSI_REG_TEMP_INT, &temp_int);
137+
} else {
138+
ret = regmap_read(tsi_dev->regmap, SBTSI_REG_TEMP_INT, &temp_int);
139+
ret = regmap_read(tsi_dev->regmap, SBTSI_REG_TEMP_DEC, &temp_dec);
140+
}
127141
}
128142
mutex_unlock(&tsi_dev->lock);
129143
break;
@@ -208,7 +222,8 @@ static umode_t sbtsi_is_visible(const void *data,
208222

209223
static const struct hwmon_channel_info *sbtsi_info[] = {
210224
HWMON_CHANNEL_INFO(chip, HWMON_C_REGISTER_TZ),
211-
HWMON_CHANNEL_INFO(temp, HWMON_T_INPUT | HWMON_T_MIN | HWMON_T_MAX),
225+
HWMON_CHANNEL_INFO(temp, HWMON_T_INPUT | HWMON_T_MIN | HWMON_T_MAX,
226+
HWMON_T_INPUT),
212227
NULL
213228
};
214229

0 commit comments

Comments
 (0)