linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Daniel Lezcano <daniel.lezcano@linaro.org>
To: andrew.smirnov@gmail.com
Cc: linux-pm@vger.kernel.org, Zhang Rui <rui.zhang@intel.com>,
	Eduardo Valentin <edubezval@gmail.com>,
	linux-kernel@vger.kernel.org (open list)
Subject: [PATCH RFC 1/2] thermal/drivers/of: Add a get_temp_id callback function
Date: Thu,  4 Apr 2019 10:06:46 +0200	[thread overview]
Message-ID: <20190404080647.8173-1-daniel.lezcano@linaro.org> (raw)
In-Reply-To: <00a5711b-5120-9e77-91a0-e0cbab456d92@linaro.org>

Currently when we register a sensor, we specify the sensor id and a data
pointer to be passed when the get_temp function is called. However the
sensor_id is not passed to the get_temp callback forcing the driver to
do extra allocation and adding back pointer to find out from the sensor
information the driver data and then back to the sensor id.

Add a new callback get_temp_id() which will be called if set. It will
call the get_temp_id() with the sensor id.

That will be more consistent with the registering function.

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 drivers/thermal/of-thermal.c | 19 +++++++++++++------
 include/linux/thermal.h      |  1 +
 2 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/drivers/thermal/of-thermal.c b/drivers/thermal/of-thermal.c
index 2df059cc07e2..787d1cbe13f3 100644
--- a/drivers/thermal/of-thermal.c
+++ b/drivers/thermal/of-thermal.c
@@ -78,6 +78,8 @@ struct __thermal_zone {
 
 	/* sensor interface */
 	void *sensor_data;
+	int sensor_id;
+
 	const struct thermal_zone_of_device_ops *ops;
 };
 
@@ -88,10 +90,14 @@ static int of_thermal_get_temp(struct thermal_zone_device *tz,
 {
 	struct __thermal_zone *data = tz->devdata;
 
-	if (!data->ops->get_temp)
-		return -EINVAL;
+	if (data->ops->get_temp)
+		return data->ops->get_temp(data->sensor_data, temp);
 
-	return data->ops->get_temp(data->sensor_data, temp);
+	if (data->ops->get_temp_id)
+		return data->ops->get_temp_id(data->sensor_id,
+					      data->sensor_data, temp);
+
+	return -EINVAL;
 }
 
 static int of_thermal_set_trips(struct thermal_zone_device *tz,
@@ -407,8 +413,8 @@ static struct thermal_zone_device_ops of_thermal_ops = {
 /***   sensor API   ***/
 
 static struct thermal_zone_device *
-thermal_zone_of_add_sensor(struct device_node *zone,
-			   struct device_node *sensor, void *data,
+thermal_zone_of_add_sensor(struct device_node *zone, struct device_node *sensor,
+			   int sensor_id, void *data,
 			   const struct thermal_zone_of_device_ops *ops)
 {
 	struct thermal_zone_device *tzd;
@@ -426,6 +432,7 @@ thermal_zone_of_add_sensor(struct device_node *zone,
 	mutex_lock(&tzd->lock);
 	tz->ops = ops;
 	tz->sensor_data = data;
+	tz->sensor_id = sensor_id;
 
 	tzd->ops->get_temp = of_thermal_get_temp;
 	tzd->ops->get_trend = of_thermal_get_trend;
@@ -516,7 +523,7 @@ thermal_zone_of_sensor_register(struct device *dev, int sensor_id, void *data,
 		}
 
 		if (sensor_specs.np == sensor_np && id == sensor_id) {
-			tzd = thermal_zone_of_add_sensor(child, sensor_np,
+			tzd = thermal_zone_of_add_sensor(child, sensor_np, sensor_id,
 							 data, ops);
 			if (!IS_ERR(tzd))
 				tzd->ops->set_mode(tzd, THERMAL_DEVICE_ENABLED);
diff --git a/include/linux/thermal.h b/include/linux/thermal.h
index 5f4705f46c2f..2762d7e6dd86 100644
--- a/include/linux/thermal.h
+++ b/include/linux/thermal.h
@@ -351,6 +351,7 @@ struct thermal_genl_event {
  *		   hardware.
  */
 struct thermal_zone_of_device_ops {
+	int (*get_temp_id)(int, void *, int *);
 	int (*get_temp)(void *, int *);
 	int (*get_trend)(void *, int, enum thermal_trend *);
 	int (*set_trips)(void *, int, int);
-- 
2.17.1


  reply	other threads:[~2019-04-04  8:07 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-01  4:14 [PATCH v3 00/13] QorIQ TMU multi-sensor and HWMON support Andrey Smirnov
2019-04-01  4:14 ` [PATCH v3 01/13] thermal: qoriq: Remove unnecessary DT node is NULL check Andrey Smirnov
2019-04-04  3:21   ` Daniel Lezcano
2019-04-05 17:51     ` Andrey Smirnov
2019-04-11 16:52       ` Daniel Lezcano
2019-04-01  4:14 ` [PATCH v3 02/13] thermal: qoriq: Add local struct device pointer Andrey Smirnov
2019-04-04  3:11   ` Daniel Lezcano
2019-04-01  4:14 ` [PATCH v3 03/13] thermal: qoriq: Don't store struct thermal_zone_device reference Andrey Smirnov
2019-04-04  3:23   ` Daniel Lezcano
2019-04-01  4:14 ` [PATCH v3 04/13] thermal: qoriq: Add local struct qoriq_sensor pointer Andrey Smirnov
2019-04-04  3:28   ` Daniel Lezcano
2019-04-05 17:57     ` Andrey Smirnov
2019-04-01  4:14 ` [PATCH v3 05/13] thermal: qoriq: Embed per-sensor data into struct qoriq_tmu_data Andrey Smirnov
2019-04-04  7:57   ` Daniel Lezcano
2019-04-04  8:06     ` Daniel Lezcano [this message]
2019-04-04  8:06       ` [PATCH RFC 2/2] thermal/drivers/qoriq: Use the get_temp_id() Daniel Lezcano
2019-04-13  8:18       ` [PATCH RFC 1/2] thermal/drivers/of: Add a get_temp_id callback function Andrey Smirnov
2019-04-13  8:28         ` Daniel Lezcano
2019-04-05 18:00     ` [PATCH v3 05/13] thermal: qoriq: Embed per-sensor data into struct qoriq_tmu_data Andrey Smirnov
2019-04-11 16:54       ` Daniel Lezcano
2019-04-01  4:14 ` [PATCH v3 06/13] thermal: qoriq: Pass data to qoriq_tmu_register_tmu_zone() directly Andrey Smirnov
2019-04-04  8:09   ` Daniel Lezcano
2019-04-01  4:14 ` [PATCH v3 07/13] thermal: qoriq: Pass data to qoriq_tmu_calibration() directly Andrey Smirnov
2019-04-04  8:11   ` Daniel Lezcano
2019-04-05 18:04     ` Andrey Smirnov
2019-04-01  4:14 ` [PATCH v3 08/13] thermal: qoriq: Convert driver to use devm_ioremap() Andrey Smirnov
2019-04-04  8:23   ` Daniel Lezcano
2019-04-05 18:14     ` Andrey Smirnov
2019-04-01  4:14 ` [PATCH v3 09/13] thermal: qoriq: Convert driver to use regmap API Andrey Smirnov
2019-04-04  8:47   ` Daniel Lezcano
2019-04-05 18:24     ` Andrey Smirnov
2019-04-11 13:00       ` Daniel Lezcano
2019-04-01  4:14 ` [PATCH v3 10/13] thermal: qoriq: Enable all sensors before registering them Andrey Smirnov
2019-04-04  9:08   ` Daniel Lezcano
2019-04-01  4:14 ` [PATCH v3 11/13] thermal: qoriq: Do not report invalid temperature reading Andrey Smirnov
2019-04-04  9:05   ` Daniel Lezcano
2019-04-05 18:30     ` Andrey Smirnov
2019-04-01  4:14 ` [PATCH v3 12/13] thermal_hwmon: Add devres wrapper for thermal_add_hwmon_sysfs() Andrey Smirnov
2019-04-04  9:10   ` Daniel Lezcano
2019-04-01  4:14 ` [PATCH v3 13/13] thermal: qoriq: Add hwmon support Andrey Smirnov
2019-04-04  9:11   ` Daniel Lezcano
2019-04-05 18:38     ` Andrey Smirnov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190404080647.8173-1-daniel.lezcano@linaro.org \
    --to=daniel.lezcano@linaro.org \
    --cc=andrew.smirnov@gmail.com \
    --cc=edubezval@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=rui.zhang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).