Support thermal zone so that we can just rely on dts to describe a
thermal zone and do the cooling operations.
You can define a comptible string "drivetemp,hdd-sensors" to enable
this, such as
sata_port0: sata-port@0 {
compatible = "drivetemp,hdd-sensors";
#thermal-sensor-cells = <0>;
}
Then define a thermal with this sensor to get it work.
hdd_thermal: hdd-thermal {
thermal-sensors = <&sata_port0>;
}
In most of the SoC systems, using dts to handle cooling is common.
This can eliminate the usage of user space application to check
the value exported in hwmon and then through sysfs to cooling.
Signed-off-by: phinex <phinex@xxxxxxxxxxx>
---
.../bindings/hwmon/drivetemp,hdd-sensors.yaml | 35 ++++++
drivers/hwmon/drivetemp.c | 102 +++++++++++++++++-
2 files changed, 133 insertions(+), 4 deletions(-)
create mode 100644 Documentation/devicetree/bindings/hwmon/drivetemp,hdd-sensors.yaml
diff --git a/Documentation/devicetree/bindings/hwmon/drivetemp,hdd-sensors.yaml b/Documentation/devicetree/bindings/hwmon/drivetemp,hdd-sensors.yaml
new file mode 100644
index 000000000000..939d7a923e94
--- /dev/null
+++ b/Documentation/devicetree/bindings/hwmon/drivetemp,hdd-sensors.yaml
@@ -0,0 +1,35 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/hwmon/drivetemp,hdd-sensors.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Drivetemp Temperature Monitor
+
+maintainers:
+ - Phinex <phinex@xxxxxxxxxxx>
+
+description: |
+ Drivetemp Temperature Monitor that support a single thermal zone
+ This single thermal zone can support multiple hard drives,
+ it uses maximal temperature of these hard drivers as its temp value.
+
+properties:
+ compatible:
+ enum:
+ - drivetemp,hdd-sensors
+
+ '#thermal-sensor-cells':
+ const: 0
+
+required:
+ - compatible
+
+additionalProperties: false
+
+examples:
+ - |
+ sata_port0: sata-port@0 {
+ ompatible = "drivetemp,hdd-sensors";
+ #thermal-sensor-cells = <0>;
+ };
diff --git a/drivers/hwmon/drivetemp.c b/drivers/hwmon/drivetemp.c
index 1eb37106a220..9a60315d732c 100644
--- a/drivers/hwmon/drivetemp.c
+++ b/drivers/hwmon/drivetemp.c
@@ -107,6 +107,14 @@
#include <scsi/scsi_device.h>
#include <scsi/scsi_driver.h>
#include <scsi/scsi_proto.h>
+#include <linux/of.h>
+#include <linux/platform_device.h>
+#include <linux/thermal.h>
+#include <linux/libata.h>
+
+/*A single thermal_zone for all HDD sensors */
+static struct thermal_zone_device *tz;