Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1189975
| From | Punit Agrawal <punit.agrawal@arm.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH 7/9] hwmon: Support registration of thermal zones for SCP temperature sensors |
| Date | 2015-07-22 16:10 +0200 |
| Message-ID | <pP2SC-Cp-25@gated-at.bofh.it> (permalink) |
| References | <pP2SB-Cp-3@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
Add support to create thermal zones based on the temperature sensors
provided by the SCP. The thermal zones can be defined using the
thermal DT bindings and should refer to the SCP sensor id to select
the sensor.
Signed-off-by: Punit Agrawal <punit.agrawal@arm.com>
Cc: Jean Delvare <jdelvare@suse.de>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: Eduardo Valentin <edubezval@gmail.com>
---
drivers/hwmon/scpi-hwmon.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 53 insertions(+)
diff --git a/drivers/hwmon/scpi-hwmon.c b/drivers/hwmon/scpi-hwmon.c
index dd0a6f1..1e52ced 100644
--- a/drivers/hwmon/scpi-hwmon.c
+++ b/drivers/hwmon/scpi-hwmon.c
@@ -22,6 +22,7 @@
#include <linux/scpi_protocol.h>
#include <linux/slab.h>
#include <linux/sysfs.h>
+#include <linux/thermal.h>
static struct scpi_ops *scpi_ops;
@@ -33,12 +34,18 @@ struct sensor_dev {
char label[20];
};
+struct scpi_thermal_zone {
+ struct list_head list;
+ struct thermal_zone_device *tzd;
+};
+
struct scpi_sensors {
int num_volt;
int num_temp;
int num_current;
int num_power;
struct sensor_dev *device;
+ struct list_head thermal_zones;
struct device *hwdev;
};
struct scpi_sensors scpi_sensors;
@@ -54,6 +61,20 @@ static int scpi_read_sensor(struct sensor_dev *sensor, u32 *value)
return 0;
}
+static int scpi_read_temp(void *dev, long *temp)
+{
+ struct sensor_dev *sensor = dev;
+ u32 value;
+ int ret;
+
+ ret = scpi_read_sensor(sensor, &value);
+ if (ret)
+ return ret;
+
+ *temp = value;
+ return 0;
+}
+
/* hwmon callback functions */
static ssize_t
scpi_hwmon_show_sensor(struct device *dev,
@@ -90,6 +111,10 @@ struct attribute *scpi_attrs[24] = { 0 };
struct attribute_group scpi_group;
const struct attribute_group *scpi_groups[2] = { 0 };
+struct thermal_zone_of_device_ops scpi_sensor_ops = {
+ .get_temp = scpi_read_temp,
+};
+
static int scpi_hwmon_probe(struct platform_device *pdev)
{
u16 sensors, i;
@@ -108,9 +133,12 @@ static int scpi_hwmon_probe(struct platform_device *pdev)
if (!scpi_sensors.device)
return -ENOMEM;
+ INIT_LIST_HEAD(&scpi_sensors.thermal_zones);
+
dev_info(&pdev->dev, "Found %d sensors\n", sensors);
for (i = 0; i < sensors; i++) {
struct sensor_dev *dev = &scpi_sensors.device[i];
+ struct scpi_thermal_zone *zone;
ret = scpi_ops->sensor_get_info(i, &dev->info);
if (ret) {
@@ -130,6 +158,20 @@ static int scpi_hwmon_probe(struct platform_device *pdev)
snprintf(dev->label, 20,
"temp%d_label", scpi_sensors.num_temp);
scpi_sensors.num_temp++;
+
+ zone = devm_kmalloc(&pdev->dev, sizeof(*zone),
+ GFP_KERNEL);
+ if (!zone)
+ return -ENOMEM;
+
+ zone->tzd = thermal_zone_of_sensor_register(&pdev->dev,
+ i, dev, &scpi_sensor_ops);
+ if (!IS_ERR(zone->tzd))
+ list_add(&zone->list,
+ &scpi_sensors.thermal_zones);
+ else
+ devm_kfree(&pdev->dev, zone);
+
break;
case VOLTAGE:
snprintf(dev->input, 20,
@@ -187,7 +229,18 @@ static int scpi_hwmon_probe(struct platform_device *pdev)
static int scpi_hwmon_remove(struct platform_device *pdev)
{
+ struct list_head *pos;
+
scpi_ops = NULL;
+
+ list_for_each(pos, &scpi_sensors.thermal_zones) {
+ struct scpi_thermal_zone *zone;
+
+ zone = list_entry(pos, struct scpi_thermal_zone, list);
+ thermal_zone_of_sensor_unregister(scpi_sensors.hwdev,
+ zone->tzd);
+ }
+
return 0;
}
--
2.1.4
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH 0/9] Platform support for thermal management on Junoe Punit Agrawal <punit.agrawal@arm.com> - 2015-07-22 16:10 +0200
[PATCH 4/9] Documentation: add DT bindings for ARM SCPI sensors Punit Agrawal <punit.agrawal@arm.com> - 2015-07-22 16:10 +0200
[PATCH 9/9] arm64: dts: Create SoC thermal zone for Juno Punit Agrawal <punit.agrawal@arm.com> - 2015-07-22 16:10 +0200
[PATCH 2/9] cpufreq-dt: Supply power coefficient when registering cooling devices Punit Agrawal <punit.agrawal@arm.com> - 2015-07-22 16:10 +0200
[PATCH 8/9] arm64: dts: Add sensor node to Juno dt Punit Agrawal <punit.agrawal@arm.com> - 2015-07-22 16:10 +0200
[PATCH 7/9] hwmon: Support registration of thermal zones for SCP temperature sensors Punit Agrawal <punit.agrawal@arm.com> - 2015-07-22 16:10 +0200
Re: [PATCH 7/9] hwmon: Support registration of thermal zones for SCP temperature sensors Guenter Roeck <linux@roeck-us.net> - 2015-07-22 18:00 +0200
Re: [PATCH 7/9] hwmon: Support registration of thermal zones for SCP temperature sensors Punit Agrawal <punit.agrawal@arm.com> - 2015-07-24 16:20 +0200
[PATCH 6/9] hwmon: Support sensors exported via ARM SCP interface Punit Agrawal <punit.agrawal@arm.com> - 2015-07-22 16:10 +0200
Re: [PATCH 6/9] hwmon: Support sensors exported via ARM SCP interface Guenter Roeck <linux@roeck-us.net> - 2015-07-22 17:40 +0200
Re: [PATCH 6/9] hwmon: Support sensors exported via ARM SCP interface Punit Agrawal <punit.agrawal@arm.com> - 2015-07-24 16:10 +0200
[PATCH 5/9] firmware: arm_scpi: Extend to support sensors Punit Agrawal <punit.agrawal@arm.com> - 2015-07-22 16:10 +0200
[PATCH 1/9] devicetree: bindings: Add optional dynamic-power-coefficient property Punit Agrawal <punit.agrawal@arm.com> - 2015-07-22 16:10 +0200
[PATCH 3/9] cpufreq: arm_big_little: Add support to register a cpufreq cooling device Punit Agrawal <punit.agrawal@arm.com> - 2015-07-22 16:10 +0200
Re: [PATCH 0/9] Platform support for thermal management on Junoe Punit Agrawal <punit.agrawal@arm.com> - 2015-07-24 16:20 +0200
Re: [PATCH 0/9] Platform support for thermal management on Junoe Viresh Kumar <viresh.kumar@linaro.org> - 2015-07-25 03:30 +0200
csiph-web