[v1,09/17] thermal: Add a thermal zone id accessor

Message ID 20230219143657.241542-10-daniel.lezcano@linaro.org
State New
Headers
Series Self-encapsulate the thermal zone device structure |

Commit Message

Daniel Lezcano Feb. 19, 2023, 2:36 p.m. UTC
  In order to get the thermal zone id but without directly accessing the
thermal zone device structure, add an accessor.

Use the accessor from the hwmon_scmi

No functional change intented.

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 drivers/hwmon/scmi-hwmon.c     | 2 +-
 drivers/thermal/thermal_core.c | 6 ++++++
 include/linux/thermal.h        | 2 ++
 3 files changed, 9 insertions(+), 1 deletion(-)
  

Comments

Guenter Roeck Feb. 19, 2023, 2:55 p.m. UTC | #1
On Sun, Feb 19, 2023 at 03:36:49PM +0100, Daniel Lezcano wrote:
> In order to get the thermal zone id but without directly accessing the
> thermal zone device structure, add an accessor.
> 
> Use the accessor from the hwmon_scmi
> 
> No functional change intented.
> 
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>

Acked-by: Guenter Roeck <linux@roeck-us.net>

> ---
>  drivers/hwmon/scmi-hwmon.c     | 2 +-
>  drivers/thermal/thermal_core.c | 6 ++++++
>  include/linux/thermal.h        | 2 ++
>  3 files changed, 9 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/hwmon/scmi-hwmon.c b/drivers/hwmon/scmi-hwmon.c
> index 7951b6026f48..036b56a535c1 100644
> --- a/drivers/hwmon/scmi-hwmon.c
> +++ b/drivers/hwmon/scmi-hwmon.c
> @@ -220,7 +220,7 @@ static int scmi_thermal_sensor_register(struct device *dev,
>  			sensor->name);
>  	} else {
>  		dev_dbg(dev, "Sensor '%s' attached to thermal zone ID:%d\n",
> -			sensor->name, tzd->id);
> +			sensor->name, thermal_zone_device_get_id(tzd));
>  	}
>  
>  	return 0;
> diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
> index 05e5a6bda695..e06c76b38c04 100644
> --- a/drivers/thermal/thermal_core.c
> +++ b/drivers/thermal/thermal_core.c
> @@ -1384,6 +1384,12 @@ void *thermal_zone_device_get_data(struct thermal_zone_device *tzd)
>  }
>  EXPORT_SYMBOL_GPL(thermal_zone_device_get_data);
>  
> +int thermal_zone_device_get_id(struct thermal_zone_device *tzd)
> +{
> +	return tzd->id;
> +}
> +EXPORT_SYMBOL_GPL(thermal_zone_device_get_id);
> +
>  /**
>   * thermal_zone_device_unregister - removes the registered thermal zone device
>   * @tz: the thermal zone device to remove
> diff --git a/include/linux/thermal.h b/include/linux/thermal.h
> index 724b95662da9..9e5c7f2f7b05 100644
> --- a/include/linux/thermal.h
> +++ b/include/linux/thermal.h
> @@ -367,6 +367,8 @@ thermal_zone_device_register_with_trips(const char *, struct thermal_trip *, int
>  
>  void *thermal_zone_device_get_data(struct thermal_zone_device *tzd);
>  
> +int thermal_zone_device_get_id(struct thermal_zone_device *tzd);
> +
>  int thermal_zone_bind_cooling_device(struct thermal_zone_device *, int,
>  				     struct thermal_cooling_device *,
>  				     unsigned long, unsigned long,
> -- 
> 2.34.1
>
  
kernel test robot Feb. 19, 2023, 5:15 p.m. UTC | #2
Hi Daniel,

I love your patch! Yet something to improve:

[auto build test ERROR on rafael-pm/thermal]
[also build test ERROR on next-20230217]
[cannot apply to groeck-staging/hwmon-next tegra/for-next linus/master v6.2-rc8]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Daniel-Lezcano/thermal-core-Add-a-thermal-zone-devdata-accessor/20230219-224155
base:   https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git thermal
patch link:    https://lore.kernel.org/r/20230219143657.241542-10-daniel.lezcano%40linaro.org
patch subject: [PATCH v1 09/17] thermal: Add a thermal zone id accessor
config: csky-randconfig-r005-20230219 (https://download.01.org/0day-ci/archive/20230220/202302200137.srsrI6dW-lkp@intel.com/config)
compiler: csky-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/37b2cf4cee949fd910b54e281577cb71b2df8842
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Daniel-Lezcano/thermal-core-Add-a-thermal-zone-devdata-accessor/20230219-224155
        git checkout 37b2cf4cee949fd910b54e281577cb71b2df8842
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=csky olddefconfig
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=csky SHELL=/bin/bash drivers/hwmon/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202302200137.srsrI6dW-lkp@intel.com/

All errors (new ones prefixed by >>):

   drivers/hwmon/scmi-hwmon.c: In function 'scmi_hwmon_thermal_get_temp':
   drivers/hwmon/scmi-hwmon.c:144:49: error: implicit declaration of function 'thermal_zone_device_get_data'; did you mean 'thermal_zone_device_enable'? [-Werror=implicit-function-declaration]
     144 |         struct scmi_thermal_sensor *th_sensor = thermal_zone_device_get_data(tz);
         |                                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |                                                 thermal_zone_device_enable
   drivers/hwmon/scmi-hwmon.c:144:49: warning: initialization of 'struct scmi_thermal_sensor *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
   In file included from include/linux/device.h:15,
                    from include/linux/scmi_protocol.h:12,
                    from drivers/hwmon/scmi-hwmon.c:11:
   drivers/hwmon/scmi-hwmon.c: In function 'scmi_thermal_sensor_register':
>> drivers/hwmon/scmi-hwmon.c:223:39: error: implicit declaration of function 'thermal_zone_device_get_id'; did you mean 'thermal_zone_device_enable'? [-Werror=implicit-function-declaration]
     223 |                         sensor->name, thermal_zone_device_get_id(tzd));
         |                                       ^~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/dev_printk.h:129:48: note: in definition of macro 'dev_printk'
     129 |                 _dev_printk(level, dev, fmt, ##__VA_ARGS__);            \
         |                                                ^~~~~~~~~~~
   drivers/hwmon/scmi-hwmon.c:222:17: note: in expansion of macro 'dev_dbg'
     222 |                 dev_dbg(dev, "Sensor '%s' attached to thermal zone ID:%d\n",
         |                 ^~~~~~~
   cc1: some warnings being treated as errors


vim +223 drivers/hwmon/scmi-hwmon.c

   138	
   139	static int scmi_hwmon_thermal_get_temp(struct thermal_zone_device *tz,
   140					       int *temp)
   141	{
   142		int ret;
   143		long value;
 > 144		struct scmi_thermal_sensor *th_sensor = thermal_zone_device_get_data(tz);
   145	
   146		ret = scmi_hwmon_read_scaled_value(th_sensor->ph, th_sensor->info,
   147						   &value);
   148		if (!ret)
   149			*temp = value;
   150	
   151		return ret;
   152	}
   153	
   154	static const struct thermal_zone_device_ops scmi_hwmon_thermal_ops = {
   155		.get_temp = scmi_hwmon_thermal_get_temp,
   156	};
   157	
   158	static int scmi_hwmon_add_chan_info(struct hwmon_channel_info *scmi_hwmon_chan,
   159					    struct device *dev, int num,
   160					    enum hwmon_sensor_types type, u32 config)
   161	{
   162		int i;
   163		u32 *cfg = devm_kcalloc(dev, num + 1, sizeof(*cfg), GFP_KERNEL);
   164	
   165		if (!cfg)
   166			return -ENOMEM;
   167	
   168		scmi_hwmon_chan->type = type;
   169		scmi_hwmon_chan->config = cfg;
   170		for (i = 0; i < num; i++, cfg++)
   171			*cfg = config;
   172	
   173		return 0;
   174	}
   175	
   176	static enum hwmon_sensor_types scmi_types[] = {
   177		[TEMPERATURE_C] = hwmon_temp,
   178		[VOLTAGE] = hwmon_in,
   179		[CURRENT] = hwmon_curr,
   180		[POWER] = hwmon_power,
   181		[ENERGY] = hwmon_energy,
   182	};
   183	
   184	static u32 hwmon_attributes[hwmon_max] = {
   185		[hwmon_temp] = HWMON_T_INPUT | HWMON_T_LABEL,
   186		[hwmon_in] = HWMON_I_INPUT | HWMON_I_LABEL,
   187		[hwmon_curr] = HWMON_C_INPUT | HWMON_C_LABEL,
   188		[hwmon_power] = HWMON_P_INPUT | HWMON_P_LABEL,
   189		[hwmon_energy] = HWMON_E_INPUT | HWMON_E_LABEL,
   190	};
   191	
   192	static int scmi_thermal_sensor_register(struct device *dev,
   193						const struct scmi_protocol_handle *ph,
   194						const struct scmi_sensor_info *sensor)
   195	{
   196		struct scmi_thermal_sensor *th_sensor;
   197		struct thermal_zone_device *tzd;
   198	
   199		th_sensor = devm_kzalloc(dev, sizeof(*th_sensor), GFP_KERNEL);
   200		if (!th_sensor)
   201			return -ENOMEM;
   202	
   203		th_sensor->ph = ph;
   204		th_sensor->info = sensor;
   205	
   206		/*
   207		 * Try to register a temperature sensor with the Thermal Framework:
   208		 * skip sensors not defined as part of any thermal zone (-ENODEV) but
   209		 * report any other errors related to misconfigured zones/sensors.
   210		 */
   211		tzd = devm_thermal_of_zone_register(dev, th_sensor->info->id, th_sensor,
   212						    &scmi_hwmon_thermal_ops);
   213		if (IS_ERR(tzd)) {
   214			devm_kfree(dev, th_sensor);
   215	
   216			if (PTR_ERR(tzd) != -ENODEV)
   217				return PTR_ERR(tzd);
   218	
   219			dev_dbg(dev, "Sensor '%s' not attached to any thermal zone.\n",
   220				sensor->name);
   221		} else {
   222			dev_dbg(dev, "Sensor '%s' attached to thermal zone ID:%d\n",
 > 223				sensor->name, thermal_zone_device_get_id(tzd));
   224		}
   225	
   226		return 0;
   227	}
   228
  

Patch

diff --git a/drivers/hwmon/scmi-hwmon.c b/drivers/hwmon/scmi-hwmon.c
index 7951b6026f48..036b56a535c1 100644
--- a/drivers/hwmon/scmi-hwmon.c
+++ b/drivers/hwmon/scmi-hwmon.c
@@ -220,7 +220,7 @@  static int scmi_thermal_sensor_register(struct device *dev,
 			sensor->name);
 	} else {
 		dev_dbg(dev, "Sensor '%s' attached to thermal zone ID:%d\n",
-			sensor->name, tzd->id);
+			sensor->name, thermal_zone_device_get_id(tzd));
 	}
 
 	return 0;
diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
index 05e5a6bda695..e06c76b38c04 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -1384,6 +1384,12 @@  void *thermal_zone_device_get_data(struct thermal_zone_device *tzd)
 }
 EXPORT_SYMBOL_GPL(thermal_zone_device_get_data);
 
+int thermal_zone_device_get_id(struct thermal_zone_device *tzd)
+{
+	return tzd->id;
+}
+EXPORT_SYMBOL_GPL(thermal_zone_device_get_id);
+
 /**
  * thermal_zone_device_unregister - removes the registered thermal zone device
  * @tz: the thermal zone device to remove
diff --git a/include/linux/thermal.h b/include/linux/thermal.h
index 724b95662da9..9e5c7f2f7b05 100644
--- a/include/linux/thermal.h
+++ b/include/linux/thermal.h
@@ -367,6 +367,8 @@  thermal_zone_device_register_with_trips(const char *, struct thermal_trip *, int
 
 void *thermal_zone_device_get_data(struct thermal_zone_device *tzd);
 
+int thermal_zone_device_get_id(struct thermal_zone_device *tzd);
+
 int thermal_zone_bind_cooling_device(struct thermal_zone_device *, int,
 				     struct thermal_cooling_device *,
 				     unsigned long, unsigned long,