| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- From 8c9c4ed500e92c10dc4965dcd00692b3102a328a Mon Sep 17 00:00:00 2001
- From: Sascha Hauer <[email protected]>
- Date: Wed, 13 May 2015 10:52:37 +0200
- Subject: [PATCH 18/76] thermal: of: always set sensor related callbacks
- Now that the thermal core treats -ENOSYS like the callbacks were
- not present at all we no longer have to overwrite the ops during
- runtime but instead can always set them and return -ENOSYS if no
- sensor is registered.
- Signed-off-by: Sascha Hauer <[email protected]>
- ---
- drivers/thermal/of-thermal.c | 33 +++++++++++++--------------------
- 1 file changed, 13 insertions(+), 20 deletions(-)
- --- a/drivers/thermal/of-thermal.c
- +++ b/drivers/thermal/of-thermal.c
- @@ -91,7 +91,7 @@ static int of_thermal_get_temp(struct th
- {
- struct __thermal_zone *data = tz->devdata;
-
- - if (!data->ops->get_temp)
- + if (!data->ops)
- return -EINVAL;
-
- return data->ops->get_temp(data->sensor_data, temp);
- @@ -178,7 +178,7 @@ static int of_thermal_set_emul_temp(stru
- struct __thermal_zone *data = tz->devdata;
-
- if (!data->ops || !data->ops->set_emul_temp)
- - return -EINVAL;
- + return -ENOSYS;
-
- return data->ops->set_emul_temp(data->sensor_data, temp);
- }
- @@ -189,8 +189,8 @@ static int of_thermal_get_trend(struct t
- struct __thermal_zone *data = tz->devdata;
- int r;
-
- - if (!data->ops->get_trend)
- - return -EINVAL;
- + if (!data->ops || !data->ops->get_trend)
- + return -ENOSYS;
-
- r = data->ops->get_trend(data->sensor_data, trip, trend);
- if (r)
- @@ -366,6 +366,10 @@ static int of_thermal_get_crit_temp(stru
- }
-
- static struct thermal_zone_device_ops of_thermal_ops = {
- + .get_temp = of_thermal_get_temp,
- + .get_trend = of_thermal_get_trend,
- + .set_emul_temp = of_thermal_set_emul_temp,
- +
- .get_mode = of_thermal_get_mode,
- .set_mode = of_thermal_set_mode,
-
- @@ -399,13 +403,13 @@ thermal_zone_of_add_sensor(struct device
- if (!ops)
- return ERR_PTR(-EINVAL);
-
- + if (!ops->get_temp)
- + return ERR_PTR(-EINVAL);
- +
- mutex_lock(&tzd->lock);
- tz->ops = ops;
- tz->sensor_data = data;
-
- - tzd->ops->get_temp = of_thermal_get_temp;
- - tzd->ops->get_trend = of_thermal_get_trend;
- - tzd->ops->set_emul_temp = of_thermal_set_emul_temp;
- mutex_unlock(&tzd->lock);
-
- return tzd;
- @@ -535,9 +539,6 @@ void thermal_zone_of_sensor_unregister(s
- return;
-
- mutex_lock(&tzd->lock);
- - tzd->ops->get_temp = NULL;
- - tzd->ops->get_trend = NULL;
- - tzd->ops->set_emul_temp = NULL;
-
- tz->ops = NULL;
- tz->sensor_data = NULL;
- @@ -845,7 +846,6 @@ int __init of_parse_thermal_zones(void)
- {
- struct device_node *np, *child;
- struct __thermal_zone *tz;
- - struct thermal_zone_device_ops *ops;
-
- np = of_find_node_by_name(NULL, "thermal-zones");
- if (!np) {
- @@ -869,29 +869,22 @@ int __init of_parse_thermal_zones(void)
- continue;
- }
-
- - ops = kmemdup(&of_thermal_ops, sizeof(*ops), GFP_KERNEL);
- - if (!ops)
- - goto exit_free;
- -
- tzp = kzalloc(sizeof(*tzp), GFP_KERNEL);
- - if (!tzp) {
- - kfree(ops);
- + if (!tzp)
- goto exit_free;
- - }
-
- /* No hwmon because there might be hwmon drivers registering */
- tzp->no_hwmon = true;
-
- zone = thermal_zone_device_register(child->name, tz->ntrips,
- 0, tz,
- - ops, tzp,
- + &of_thermal_ops, tzp,
- tz->passive_delay,
- tz->polling_delay);
- if (IS_ERR(zone)) {
- pr_err("Failed to build %s zone %ld\n", child->name,
- PTR_ERR(zone));
- kfree(tzp);
- - kfree(ops);
- of_thermal_free_zone(tz);
- /* attempting to build remaining zones still */
- }
|