[04/13] hwmon: convert scpi-hwmon to use devm_thermal_zone_of_sensor_register
diff mbox

Message ID 1457559336-17652-5-git-send-email-edubezval@gmail.com
State Accepted
Delegated to: Eduardo Valentin
Headers show

Commit Message

Eduardo Valentin March 9, 2016, 9:35 p.m. UTC
This changes the driver to use the devm_ version
of thermal_zone_of_sensor_register and cleans
up the  local points and unregister calls.

Cc: Jean Delvare <jdelvare@suse.com>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: lm-sensors@lm-sensors.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Eduardo Valentin <edubezval@gmail.com>
---
 drivers/hwmon/scpi-hwmon.c | 41 ++++++++---------------------------------
 1 file changed, 8 insertions(+), 33 deletions(-)

Comments

Guenter Roeck March 10, 2016, 2:29 a.m. UTC | #1
On 03/09/2016 01:35 PM, Eduardo Valentin wrote:
> This changes the driver to use the devm_ version
> of thermal_zone_of_sensor_register and cleans
> up the  local points and unregister calls.
>
> Cc: Jean Delvare <jdelvare@suse.com>
> Cc: Guenter Roeck <linux@roeck-us.net>
> Cc: lm-sensors@lm-sensors.org
> Cc: linux-kernel@vger.kernel.org
> Signed-off-by: Eduardo Valentin <edubezval@gmail.com>
> ---
>   drivers/hwmon/scpi-hwmon.c | 41 ++++++++---------------------------------
>   1 file changed, 8 insertions(+), 33 deletions(-)
>
> diff --git a/drivers/hwmon/scpi-hwmon.c b/drivers/hwmon/scpi-hwmon.c
> index 7e20567..2309e47 100644
> --- a/drivers/hwmon/scpi-hwmon.c
> +++ b/drivers/hwmon/scpi-hwmon.c
> @@ -31,10 +31,8 @@ struct sensor_data {
>   };
>
>   struct scpi_thermal_zone {
> -	struct list_head list;
>   	int sensor_id;
>   	struct scpi_sensors *scpi_sensors;
> -	struct thermal_zone_device *tzd;
>   };
>
>   struct scpi_sensors {
> @@ -92,20 +90,6 @@ scpi_show_label(struct device *dev, struct device_attribute *attr, char *buf)
>   	return sprintf(buf, "%s\n", sensor->info.name);
>   }
>
> -static void
> -unregister_thermal_zones(struct platform_device *pdev,
> -			 struct scpi_sensors *scpi_sensors)
> -{
> -	struct list_head *pos;
> -
> -	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(&pdev->dev, zone->tzd);
> -	}
> -}
> -
>   static struct thermal_zone_of_device_ops scpi_sensor_ops = {
>   	.get_temp = scpi_read_temp,
>   };
> @@ -224,6 +208,7 @@ static int scpi_hwmon_probe(struct platform_device *pdev)
>   	INIT_LIST_HEAD(&scpi_sensors->thermal_zones);
>   	for (i = 0; i < nr_sensors; i++) {
>   		struct sensor_data *sensor = &scpi_sensors->data[i];
> +		struct thermal_zone_device *z;
>   		struct scpi_thermal_zone *zone;
>
>   		if (sensor->info.class != TEMPERATURE)
> @@ -232,42 +217,33 @@ static int scpi_hwmon_probe(struct platform_device *pdev)
>   		zone = devm_kzalloc(dev, sizeof(*zone), GFP_KERNEL);
>   		if (!zone) {
>   			ret = -ENOMEM;
> -			goto unregister_tzd;
> +			goto mfail;

			return -ENOMEM;

... and drop the unnecessary label.

Thanks,
Guenter

>   		}
>
>   		zone->sensor_id = i;
>   		zone->scpi_sensors = scpi_sensors;
> -		zone->tzd = thermal_zone_of_sensor_register(dev,
> -				sensor->info.sensor_id, zone, &scpi_sensor_ops);
> +		z = devm_thermal_zone_of_sensor_register(dev,
> +							 sensor->info.sensor_id,
> +							 zone,
> +							 &scpi_sensor_ops);
>   		/*
>   		 * The call to thermal_zone_of_sensor_register returns
>   		 * an error for sensors that are not associated with
>   		 * any thermal zones or if the thermal subsystem is
>   		 * not configured.
>   		 */
> -		if (IS_ERR(zone->tzd)) {
> +		if (IS_ERR(z)) {
>   			devm_kfree(dev, zone);
>   			continue;
>   		}
> -		list_add(&zone->list, &scpi_sensors->thermal_zones);
>   	}
>
>   	return 0;
>
> -unregister_tzd:
> -	unregister_thermal_zones(pdev, scpi_sensors);
> +mfail:
>   	return ret;
>   }
>
> -static int scpi_hwmon_remove(struct platform_device *pdev)
> -{
> -	struct scpi_sensors *scpi_sensors = platform_get_drvdata(pdev);
> -
> -	unregister_thermal_zones(pdev, scpi_sensors);
> -
> -	return 0;
> -}
> -
>   static const struct of_device_id scpi_of_match[] = {
>   	{.compatible = "arm,scpi-sensors"},
>   	{},
> @@ -280,7 +256,6 @@ static struct platform_driver scpi_hwmon_platdrv = {
>   		.of_match_table = scpi_of_match,
>   	},
>   	.probe		= scpi_hwmon_probe,
> -	.remove		= scpi_hwmon_remove,
>   };
>   module_platform_driver(scpi_hwmon_platdrv);
>
>

--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Eduardo Valentin March 14, 2016, 7:49 p.m. UTC | #2
On Wed, Mar 09, 2016 at 06:29:17PM -0800, Guenter Roeck wrote:
> On 03/09/2016 01:35 PM, Eduardo Valentin wrote:
> >This changes the driver to use the devm_ version
> >of thermal_zone_of_sensor_register and cleans
> >up the  local points and unregister calls.
> >
> >Cc: Jean Delvare <jdelvare@suse.com>
> >Cc: Guenter Roeck <linux@roeck-us.net>
> >Cc: lm-sensors@lm-sensors.org
> >Cc: linux-kernel@vger.kernel.org
> >Signed-off-by: Eduardo Valentin <edubezval@gmail.com>
> >---
> >  drivers/hwmon/scpi-hwmon.c | 41 ++++++++---------------------------------
> >  1 file changed, 8 insertions(+), 33 deletions(-)
> >
> >diff --git a/drivers/hwmon/scpi-hwmon.c b/drivers/hwmon/scpi-hwmon.c
> >index 7e20567..2309e47 100644
> >--- a/drivers/hwmon/scpi-hwmon.c
> >+++ b/drivers/hwmon/scpi-hwmon.c
> >@@ -31,10 +31,8 @@ struct sensor_data {
> >  };
> >
> >  struct scpi_thermal_zone {
> >-	struct list_head list;
> >  	int sensor_id;
> >  	struct scpi_sensors *scpi_sensors;
> >-	struct thermal_zone_device *tzd;
> >  };
> >
> >  struct scpi_sensors {
> >@@ -92,20 +90,6 @@ scpi_show_label(struct device *dev, struct device_attribute *attr, char *buf)
> >  	return sprintf(buf, "%s\n", sensor->info.name);
> >  }
> >
> >-static void
> >-unregister_thermal_zones(struct platform_device *pdev,
> >-			 struct scpi_sensors *scpi_sensors)
> >-{
> >-	struct list_head *pos;
> >-
> >-	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(&pdev->dev, zone->tzd);
> >-	}
> >-}
> >-
> >  static struct thermal_zone_of_device_ops scpi_sensor_ops = {
> >  	.get_temp = scpi_read_temp,
> >  };
> >@@ -224,6 +208,7 @@ static int scpi_hwmon_probe(struct platform_device *pdev)
> >  	INIT_LIST_HEAD(&scpi_sensors->thermal_zones);
> >  	for (i = 0; i < nr_sensors; i++) {
> >  		struct sensor_data *sensor = &scpi_sensors->data[i];
> >+		struct thermal_zone_device *z;
> >  		struct scpi_thermal_zone *zone;
> >
> >  		if (sensor->info.class != TEMPERATURE)
> >@@ -232,42 +217,33 @@ static int scpi_hwmon_probe(struct platform_device *pdev)
> >  		zone = devm_kzalloc(dev, sizeof(*zone), GFP_KERNEL);
> >  		if (!zone) {
> >  			ret = -ENOMEM;
> >-			goto unregister_tzd;
> >+			goto mfail;
> 
> 			return -ENOMEM;
> 
> ... and drop the unnecessary label.

True. I will change as requested.

Thanks

Patch
diff mbox

diff --git a/drivers/hwmon/scpi-hwmon.c b/drivers/hwmon/scpi-hwmon.c
index 7e20567..2309e47 100644
--- a/drivers/hwmon/scpi-hwmon.c
+++ b/drivers/hwmon/scpi-hwmon.c
@@ -31,10 +31,8 @@  struct sensor_data {
 };
 
 struct scpi_thermal_zone {
-	struct list_head list;
 	int sensor_id;
 	struct scpi_sensors *scpi_sensors;
-	struct thermal_zone_device *tzd;
 };
 
 struct scpi_sensors {
@@ -92,20 +90,6 @@  scpi_show_label(struct device *dev, struct device_attribute *attr, char *buf)
 	return sprintf(buf, "%s\n", sensor->info.name);
 }
 
-static void
-unregister_thermal_zones(struct platform_device *pdev,
-			 struct scpi_sensors *scpi_sensors)
-{
-	struct list_head *pos;
-
-	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(&pdev->dev, zone->tzd);
-	}
-}
-
 static struct thermal_zone_of_device_ops scpi_sensor_ops = {
 	.get_temp = scpi_read_temp,
 };
@@ -224,6 +208,7 @@  static int scpi_hwmon_probe(struct platform_device *pdev)
 	INIT_LIST_HEAD(&scpi_sensors->thermal_zones);
 	for (i = 0; i < nr_sensors; i++) {
 		struct sensor_data *sensor = &scpi_sensors->data[i];
+		struct thermal_zone_device *z;
 		struct scpi_thermal_zone *zone;
 
 		if (sensor->info.class != TEMPERATURE)
@@ -232,42 +217,33 @@  static int scpi_hwmon_probe(struct platform_device *pdev)
 		zone = devm_kzalloc(dev, sizeof(*zone), GFP_KERNEL);
 		if (!zone) {
 			ret = -ENOMEM;
-			goto unregister_tzd;
+			goto mfail;
 		}
 
 		zone->sensor_id = i;
 		zone->scpi_sensors = scpi_sensors;
-		zone->tzd = thermal_zone_of_sensor_register(dev,
-				sensor->info.sensor_id, zone, &scpi_sensor_ops);
+		z = devm_thermal_zone_of_sensor_register(dev,
+							 sensor->info.sensor_id,
+							 zone,
+							 &scpi_sensor_ops);
 		/*
 		 * The call to thermal_zone_of_sensor_register returns
 		 * an error for sensors that are not associated with
 		 * any thermal zones or if the thermal subsystem is
 		 * not configured.
 		 */
-		if (IS_ERR(zone->tzd)) {
+		if (IS_ERR(z)) {
 			devm_kfree(dev, zone);
 			continue;
 		}
-		list_add(&zone->list, &scpi_sensors->thermal_zones);
 	}
 
 	return 0;
 
-unregister_tzd:
-	unregister_thermal_zones(pdev, scpi_sensors);
+mfail:
 	return ret;
 }
 
-static int scpi_hwmon_remove(struct platform_device *pdev)
-{
-	struct scpi_sensors *scpi_sensors = platform_get_drvdata(pdev);
-
-	unregister_thermal_zones(pdev, scpi_sensors);
-
-	return 0;
-}
-
 static const struct of_device_id scpi_of_match[] = {
 	{.compatible = "arm,scpi-sensors"},
 	{},
@@ -280,7 +256,6 @@  static struct platform_driver scpi_hwmon_platdrv = {
 		.of_match_table = scpi_of_match,
 	},
 	.probe		= scpi_hwmon_probe,
-	.remove		= scpi_hwmon_remove,
 };
 module_platform_driver(scpi_hwmon_platdrv);