Commit 0d2d586a authored by Daniel Lezcano's avatar Daniel Lezcano Committed by Daniel Lezcano

thermal/intel/int340x: Replace parameter to simplify

In the process of replacing the get_trip_* ops by the generic trip
points, the current code has an 'override' property to add another
indirection to a different ops.

Rework this approach to prevent this indirection and make the code
ready for the generic trip points conversion.

Actually the get_temp() is different regarding the platform, so it is
pointless to add a new set of ops but just create dynamically the ops
at init time.
Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
Reviewed-by: default avatarSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Link: https://lore.kernel.org/r/20221003092602.1323944-29-daniel.lezcano@linaro.org
parent 9ddcb809
...@@ -18,9 +18,6 @@ static int int340x_thermal_get_zone_temp(struct thermal_zone_device *zone, ...@@ -18,9 +18,6 @@ static int int340x_thermal_get_zone_temp(struct thermal_zone_device *zone,
unsigned long long tmp; unsigned long long tmp;
acpi_status status; acpi_status status;
if (d->override_ops && d->override_ops->get_temp)
return d->override_ops->get_temp(zone, temp);
status = acpi_evaluate_integer(d->adev->handle, "_TMP", NULL, &tmp); status = acpi_evaluate_integer(d->adev->handle, "_TMP", NULL, &tmp);
if (ACPI_FAILURE(status)) if (ACPI_FAILURE(status))
return -EIO; return -EIO;
...@@ -46,9 +43,6 @@ static int int340x_thermal_get_trip_temp(struct thermal_zone_device *zone, ...@@ -46,9 +43,6 @@ static int int340x_thermal_get_trip_temp(struct thermal_zone_device *zone,
struct int34x_thermal_zone *d = zone->devdata; struct int34x_thermal_zone *d = zone->devdata;
int i; int i;
if (d->override_ops && d->override_ops->get_trip_temp)
return d->override_ops->get_trip_temp(zone, trip, temp);
if (trip < d->aux_trip_nr) if (trip < d->aux_trip_nr)
*temp = d->aux_trips[trip]; *temp = d->aux_trips[trip];
else if (trip == d->crt_trip_id) else if (trip == d->crt_trip_id)
...@@ -79,9 +73,6 @@ static int int340x_thermal_get_trip_type(struct thermal_zone_device *zone, ...@@ -79,9 +73,6 @@ static int int340x_thermal_get_trip_type(struct thermal_zone_device *zone,
struct int34x_thermal_zone *d = zone->devdata; struct int34x_thermal_zone *d = zone->devdata;
int i; int i;
if (d->override_ops && d->override_ops->get_trip_type)
return d->override_ops->get_trip_type(zone, trip, type);
if (trip < d->aux_trip_nr) if (trip < d->aux_trip_nr)
*type = THERMAL_TRIP_PASSIVE; *type = THERMAL_TRIP_PASSIVE;
else if (trip == d->crt_trip_id) else if (trip == d->crt_trip_id)
...@@ -112,9 +103,6 @@ static int int340x_thermal_set_trip_temp(struct thermal_zone_device *zone, ...@@ -112,9 +103,6 @@ static int int340x_thermal_set_trip_temp(struct thermal_zone_device *zone,
acpi_status status; acpi_status status;
char name[10]; char name[10];
if (d->override_ops && d->override_ops->set_trip_temp)
return d->override_ops->set_trip_temp(zone, trip, temp);
snprintf(name, sizeof(name), "PAT%d", trip); snprintf(name, sizeof(name), "PAT%d", trip);
status = acpi_execute_simple_method(d->adev->handle, name, status = acpi_execute_simple_method(d->adev->handle, name,
millicelsius_to_deci_kelvin(temp)); millicelsius_to_deci_kelvin(temp));
...@@ -134,9 +122,6 @@ static int int340x_thermal_get_trip_hyst(struct thermal_zone_device *zone, ...@@ -134,9 +122,6 @@ static int int340x_thermal_get_trip_hyst(struct thermal_zone_device *zone,
acpi_status status; acpi_status status;
unsigned long long hyst; unsigned long long hyst;
if (d->override_ops && d->override_ops->get_trip_hyst)
return d->override_ops->get_trip_hyst(zone, trip, temp);
status = acpi_evaluate_integer(d->adev->handle, "GTSH", NULL, &hyst); status = acpi_evaluate_integer(d->adev->handle, "GTSH", NULL, &hyst);
if (ACPI_FAILURE(status)) if (ACPI_FAILURE(status))
*temp = 0; *temp = 0;
...@@ -217,7 +202,7 @@ static struct thermal_zone_params int340x_thermal_params = { ...@@ -217,7 +202,7 @@ static struct thermal_zone_params int340x_thermal_params = {
}; };
struct int34x_thermal_zone *int340x_thermal_zone_add(struct acpi_device *adev, struct int34x_thermal_zone *int340x_thermal_zone_add(struct acpi_device *adev,
struct thermal_zone_device_ops *override_ops) int (*get_temp) (struct thermal_zone_device *, int *))
{ {
struct int34x_thermal_zone *int34x_thermal_zone; struct int34x_thermal_zone *int34x_thermal_zone;
acpi_status status; acpi_status status;
...@@ -231,7 +216,16 @@ struct int34x_thermal_zone *int340x_thermal_zone_add(struct acpi_device *adev, ...@@ -231,7 +216,16 @@ struct int34x_thermal_zone *int340x_thermal_zone_add(struct acpi_device *adev,
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
int34x_thermal_zone->adev = adev; int34x_thermal_zone->adev = adev;
int34x_thermal_zone->override_ops = override_ops;
int34x_thermal_zone->ops = kmemdup(&int340x_thermal_zone_ops,
sizeof(int340x_thermal_zone_ops), GFP_KERNEL);
if (!int34x_thermal_zone->ops) {
ret = -ENOMEM;
goto err_ops_alloc;
}
if (get_temp)
int34x_thermal_zone->ops->get_temp = get_temp;
status = acpi_evaluate_integer(adev->handle, "PATC", NULL, &trip_cnt); status = acpi_evaluate_integer(adev->handle, "PATC", NULL, &trip_cnt);
if (ACPI_FAILURE(status)) if (ACPI_FAILURE(status))
...@@ -262,7 +256,7 @@ struct int34x_thermal_zone *int340x_thermal_zone_add(struct acpi_device *adev, ...@@ -262,7 +256,7 @@ struct int34x_thermal_zone *int340x_thermal_zone_add(struct acpi_device *adev,
acpi_device_bid(adev), acpi_device_bid(adev),
trip_cnt, trip_cnt,
trip_mask, int34x_thermal_zone, trip_mask, int34x_thermal_zone,
&int340x_thermal_zone_ops, int34x_thermal_zone->ops,
&int340x_thermal_params, &int340x_thermal_params,
0, 0); 0, 0);
if (IS_ERR(int34x_thermal_zone->zone)) { if (IS_ERR(int34x_thermal_zone->zone)) {
...@@ -281,6 +275,8 @@ struct int34x_thermal_zone *int340x_thermal_zone_add(struct acpi_device *adev, ...@@ -281,6 +275,8 @@ struct int34x_thermal_zone *int340x_thermal_zone_add(struct acpi_device *adev,
acpi_lpat_free_conversion_table(int34x_thermal_zone->lpat_table); acpi_lpat_free_conversion_table(int34x_thermal_zone->lpat_table);
kfree(int34x_thermal_zone->aux_trips); kfree(int34x_thermal_zone->aux_trips);
err_trip_alloc: err_trip_alloc:
kfree(int34x_thermal_zone->ops);
err_ops_alloc:
kfree(int34x_thermal_zone); kfree(int34x_thermal_zone);
return ERR_PTR(ret); return ERR_PTR(ret);
} }
...@@ -292,6 +288,7 @@ void int340x_thermal_zone_remove(struct int34x_thermal_zone ...@@ -292,6 +288,7 @@ void int340x_thermal_zone_remove(struct int34x_thermal_zone
thermal_zone_device_unregister(int34x_thermal_zone->zone); thermal_zone_device_unregister(int34x_thermal_zone->zone);
acpi_lpat_free_conversion_table(int34x_thermal_zone->lpat_table); acpi_lpat_free_conversion_table(int34x_thermal_zone->lpat_table);
kfree(int34x_thermal_zone->aux_trips); kfree(int34x_thermal_zone->aux_trips);
kfree(int34x_thermal_zone->ops);
kfree(int34x_thermal_zone); kfree(int34x_thermal_zone);
} }
EXPORT_SYMBOL_GPL(int340x_thermal_zone_remove); EXPORT_SYMBOL_GPL(int340x_thermal_zone_remove);
......
...@@ -29,13 +29,13 @@ struct int34x_thermal_zone { ...@@ -29,13 +29,13 @@ struct int34x_thermal_zone {
int hot_temp; int hot_temp;
int hot_trip_id; int hot_trip_id;
struct thermal_zone_device *zone; struct thermal_zone_device *zone;
struct thermal_zone_device_ops *override_ops; struct thermal_zone_device_ops *ops;
void *priv_data; void *priv_data;
struct acpi_lpat_conversion_table *lpat_table; struct acpi_lpat_conversion_table *lpat_table;
}; };
struct int34x_thermal_zone *int340x_thermal_zone_add(struct acpi_device *, struct int34x_thermal_zone *int340x_thermal_zone_add(struct acpi_device *,
struct thermal_zone_device_ops *override_ops); int (*get_temp) (struct thermal_zone_device *, int *));
void int340x_thermal_zone_remove(struct int34x_thermal_zone *); void int340x_thermal_zone_remove(struct int34x_thermal_zone *);
int int340x_thermal_read_trips(struct int34x_thermal_zone *int34x_zone); int int340x_thermal_read_trips(struct int34x_thermal_zone *int34x_zone);
......
...@@ -207,10 +207,6 @@ static int proc_thermal_get_zone_temp(struct thermal_zone_device *zone, ...@@ -207,10 +207,6 @@ static int proc_thermal_get_zone_temp(struct thermal_zone_device *zone,
return ret; return ret;
} }
static struct thermal_zone_device_ops proc_thermal_local_ops = {
.get_temp = proc_thermal_get_zone_temp,
};
static int proc_thermal_read_ppcc(struct proc_thermal_device *proc_priv) static int proc_thermal_read_ppcc(struct proc_thermal_device *proc_priv)
{ {
int i; int i;
...@@ -285,7 +281,7 @@ int proc_thermal_add(struct device *dev, struct proc_thermal_device *proc_priv) ...@@ -285,7 +281,7 @@ int proc_thermal_add(struct device *dev, struct proc_thermal_device *proc_priv)
struct acpi_device *adev; struct acpi_device *adev;
acpi_status status; acpi_status status;
unsigned long long tmp; unsigned long long tmp;
struct thermal_zone_device_ops *ops = NULL; int (*get_temp) (struct thermal_zone_device *, int *) = NULL;
int ret; int ret;
adev = ACPI_COMPANION(dev); adev = ACPI_COMPANION(dev);
...@@ -304,10 +300,10 @@ int proc_thermal_add(struct device *dev, struct proc_thermal_device *proc_priv) ...@@ -304,10 +300,10 @@ int proc_thermal_add(struct device *dev, struct proc_thermal_device *proc_priv)
/* there is no _TMP method, add local method */ /* there is no _TMP method, add local method */
stored_tjmax = get_tjmax(); stored_tjmax = get_tjmax();
if (stored_tjmax > 0) if (stored_tjmax > 0)
ops = &proc_thermal_local_ops; get_temp = proc_thermal_get_zone_temp;
} }
proc_priv->int340x_zone = int340x_thermal_zone_add(adev, ops); proc_priv->int340x_zone = int340x_thermal_zone_add(adev, get_temp);
if (IS_ERR(proc_priv->int340x_zone)) { if (IS_ERR(proc_priv->int340x_zone)) {
return PTR_ERR(proc_priv->int340x_zone); return PTR_ERR(proc_priv->int340x_zone);
} else } else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment