aboutsummaryrefslogtreecommitdiffstats
path: root/src/osmo-bts-litecell15/misc/lc15bts_temp.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/osmo-bts-litecell15/misc/lc15bts_temp.c')
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_temp.c64
1 files changed, 53 insertions, 11 deletions
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_temp.c b/src/osmo-bts-litecell15/misc/lc15bts_temp.c
index aa358547..fa6300e7 100644
--- a/src/osmo-bts-litecell15/misc/lc15bts_temp.c
+++ b/src/osmo-bts-litecell15/misc/lc15bts_temp.c
@@ -31,27 +31,43 @@
static const char *temp_devs[_NUM_TEMP_SENSORS] = {
- [LC15BTS_TEMP_SUPPLY] = "/var/lc15/temp/pa-supply/temp",
- [LC15BTS_TEMP_SOC] = "/var/lc15/temp/cpu/temp",
- [LC15BTS_TEMP_FPGA] = "/var/lc15/temp/fpga/temp",
- [LC15BTS_TEMP_LOGRF] = "/var/lc15/temp/logrf/temp",
- [LC15BTS_TEMP_OCXO] = "/var/lc15/temp/ocxo/temp",
- [LC15BTS_TEMP_TX0] = "/var/lc15/temp/tx0/temp",
- [LC15BTS_TEMP_TX1] = "/var/lc15/temp/tx1/temp",
- [LC15BTS_TEMP_PA0] = "/var/lc15/temp/pa0/temp",
- [LC15BTS_TEMP_PA1] = "/var/lc15/temp/pa1/temp",
+ [LC15BTS_TEMP_SUPPLY] = "/sys/bus/i2c/devices/2-004d/hwmon/hwmon5/temp1_",
+ [LC15BTS_TEMP_SOC] = "/sys/class/hwmon/hwmon1/temp1_",
+ [LC15BTS_TEMP_FPGA] = "/sys/devices/0.iio_hwmon/temp1_",
+ [LC15BTS_TEMP_MEMORY] = "/sys/bus/i2c/devices/2-004c/hwmon/hwmon4/temp1_",
+ [LC15BTS_TEMP_TX1] = "/sys/devices/0.ncp15xh103_tx1/temp1_",
+ [LC15BTS_TEMP_TX2] = "/sys/devices/0.ncp15xh103_tx2/temp1_",
+ [LC15BTS_TEMP_PA1] = "/sys/bus/i2c/devices/2-004d/hwmon/hwmon5/temp2_",
+ [LC15BTS_TEMP_PA2] = "/sys/bus/i2c/devices/2-004c/hwmon/hwmon4/temp2_",
};
-int lc15bts_temp_get(enum lc15bts_temp_sensor sensor)
+static const int temp_has_fault[_NUM_TEMP_SENSORS] = {
+ [LC15BTS_TEMP_PA1] = 1,
+ [LC15BTS_TEMP_PA2] = 1,
+};
+
+static const char *temp_type_str[_NUM_TEMP_TYPES] = {
+ [LC15BTS_TEMP_INPUT] = "input",
+ [LC15BTS_TEMP_LOWEST] = "lowest",
+ [LC15BTS_TEMP_HIGHEST] = "highest",
+ [LC15BTS_TEMP_FAULT] = "fault",
+};
+
+int lc15bts_temp_get(enum lc15bts_temp_sensor sensor,
+ enum lc15bts_temp_type type)
{
char buf[PATH_MAX];
char tempstr[8];
+ char faultstr[8];
int fd, rc;
if (sensor < 0 || sensor >= _NUM_TEMP_SENSORS)
return -EINVAL;
- snprintf(buf, sizeof(buf)-1, "%s", temp_devs[sensor]);
+ if (type >= ARRAY_SIZE(temp_type_str))
+ return -EINVAL;
+
+ snprintf(buf, sizeof(buf)-1, "%s%s", temp_devs[sensor], temp_type_str[type]);
buf[sizeof(buf)-1] = '\0';
fd = open(buf, O_RDONLY);
@@ -70,6 +86,32 @@ int lc15bts_temp_get(enum lc15bts_temp_sensor sensor)
}
close(fd);
+ // Check fault
+ if (type == LC15BTS_TEMP_FAULT || !temp_has_fault[sensor])
+ return atoi(tempstr);
+
+ snprintf(buf, sizeof(buf)-1, "%s%s", temp_devs[sensor], temp_type_str[LC15BTS_TEMP_FAULT]);
+ buf[sizeof(buf)-1] = '\0';
+
+ fd = open(buf, O_RDONLY);
+ if (fd < 0)
+ return fd;
+
+ rc = read(fd, faultstr, sizeof(faultstr));
+ tempstr[sizeof(faultstr)-1] = '\0';
+ if (rc < 0) {
+ close(fd);
+ return rc;
+ }
+ if (rc == 0) {
+ close(fd);
+ return -EIO;
+ }
+ close(fd);
+
+ if (atoi(faultstr))
+ return -EIO;
+
return atoi(tempstr);
}