Message ID | 20230219143657.241542-10-daniel.lezcano@linaro.org (mailing list archive) |
---|---|
State | Handled Elsewhere |
Headers | show |
Series | Self-encapsulate the thermal zone device structure | expand |
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 >
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
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,
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(-)