7862977985
as the acpi thermal_zone driver (bz 437637)
115 lines
3.5 KiB
Diff
115 lines
3.5 KiB
Diff
Index: lib/sensors.h
|
|
===================================================================
|
|
--- lib/sensors.h (revision 5145)
|
|
+++ lib/sensors.h (working copy)
|
|
@@ -30,7 +30,7 @@
|
|
when the API + ABI breaks), the third digit is incremented to track small
|
|
API additions like new flags / enum values. The second digit is for tracking
|
|
larger additions like new methods. */
|
|
-#define SENSORS_API_VERSION 0x400
|
|
+#define SENSORS_API_VERSION 0x401
|
|
|
|
#define SENSORS_CHIP_NAME_PREFIX_ANY NULL
|
|
#define SENSORS_CHIP_NAME_ADDR_ANY -1
|
|
@@ -40,6 +40,7 @@
|
|
#define SENSORS_BUS_TYPE_ISA 1
|
|
#define SENSORS_BUS_TYPE_PCI 2
|
|
#define SENSORS_BUS_TYPE_SPI 3
|
|
+#define SENSORS_BUS_TYPE_VIRT 4
|
|
#define SENSORS_BUS_NR_ANY (-1)
|
|
#define SENSORS_BUS_NR_IGNORE (-2)
|
|
|
|
Index: lib/access.c
|
|
===================================================================
|
|
--- lib/access.c (revision 5145)
|
|
+++ lib/access.c (working copy)
|
|
@@ -344,6 +344,8 @@
|
|
so we don't have any custom string to return. */
|
|
case SENSORS_BUS_TYPE_SPI:
|
|
return "SPI adapter";
|
|
+ case SENSORS_BUS_TYPE_VIRT:
|
|
+ return "Virtual device";
|
|
}
|
|
|
|
/* bus types with several instances */
|
|
Index: lib/sysfs.c
|
|
===================================================================
|
|
--- lib/sysfs.c (revision 5145)
|
|
+++ lib/sysfs.c (working copy)
|
|
@@ -475,6 +475,14 @@
|
|
if (!entry.chip.path)
|
|
sensors_fatal_error(__func__, "Out of memory");
|
|
|
|
+ if (dev_path == NULL) {
|
|
+ /* Virtual device */
|
|
+ entry.chip.addr = 0;
|
|
+ entry.chip.bus.type = SENSORS_BUS_TYPE_VIRT;
|
|
+ entry.chip.bus.nr = 0;
|
|
+ goto done;
|
|
+ }
|
|
+
|
|
/* Find bus type */
|
|
snprintf(linkpath, NAME_MAX, "%s/subsystem", dev_path);
|
|
sub_len = readlink(linkpath, subsys_path, NAME_MAX - 1);
|
|
@@ -543,6 +551,7 @@
|
|
goto exit_free;
|
|
}
|
|
|
|
+done:
|
|
if (sensors_read_dynamic_chip(&entry, hwmon_path) < 0)
|
|
goto exit_free;
|
|
if (!entry.subfeature) { /* No subfeature, discard chip */
|
|
@@ -591,16 +600,20 @@
|
|
|
|
snprintf(linkpath, NAME_MAX, "%s/device", path);
|
|
dev_len = readlink(linkpath, device, NAME_MAX - 1);
|
|
- if (dev_len < 0)
|
|
- return -SENSORS_ERR_KERNEL;
|
|
- device[dev_len] = '\0';
|
|
- device_p = strrchr(device, '/') + 1;
|
|
+ if (dev_len < 0) {
|
|
+ /* No device link? Treat as virtual */
|
|
+ err = sensors_read_one_sysfs_chip(NULL, NULL, path);
|
|
+ } else {
|
|
+ device[dev_len] = '\0';
|
|
+ device_p = strrchr(device, '/') + 1;
|
|
|
|
- /* The attributes we want might be those of the hwmon class device,
|
|
- or those of the device itself. */
|
|
- err = sensors_read_one_sysfs_chip(linkpath, device_p, path);
|
|
- if (err == 0)
|
|
- err = sensors_read_one_sysfs_chip(linkpath, device_p, linkpath);
|
|
+ /* The attributes we want might be those of the hwmon class
|
|
+ device, or those of the device itself. */
|
|
+ err = sensors_read_one_sysfs_chip(linkpath, device_p, path);
|
|
+ if (err == 0)
|
|
+ err = sensors_read_one_sysfs_chip(linkpath, device_p,
|
|
+ linkpath);
|
|
+ }
|
|
if (err < 0)
|
|
return err;
|
|
return 0;
|
|
Index: lib/data.c
|
|
===================================================================
|
|
--- lib/data.c (revision 5145)
|
|
+++ lib/data.c (working copy)
|
|
@@ -108,6 +108,8 @@
|
|
res->bus.type = SENSORS_BUS_TYPE_PCI;
|
|
else if (!strncmp(name, "spi", dash - name))
|
|
res->bus.type = SENSORS_BUS_TYPE_SPI;
|
|
+ else if (!strncmp(name, "virtual", dash - name))
|
|
+ res->bus.type = SENSORS_BUS_TYPE_VIRT;
|
|
else
|
|
goto ERROR;
|
|
name = dash + 1;
|
|
@@ -168,6 +170,9 @@
|
|
case SENSORS_BUS_TYPE_SPI:
|
|
return snprintf(str, size, "%s-spi-%hd-%x", chip->prefix,
|
|
chip->bus.nr, chip->addr);
|
|
+ case SENSORS_BUS_TYPE_VIRT:
|
|
+ return snprintf(str, size, "%s-virtual-%x", chip->prefix,
|
|
+ chip->addr);
|
|
}
|
|
|
|
return -SENSORS_ERR_CHIP_NAME;
|