Commit 829f4166 authored by Lukasz Luba's avatar Lukasz Luba Committed by Daniel Lezcano

drivers/thermal/devfreq_cooling: Extend the devfreq_cooling_device with ops

Remove unneeded global variable devfreq_cooling_ops which is used only
as a copy pattern. Instead, extend the struct devfreq_cooling_device with
the needed ops structure. This also simplifies the allocation/free code
during the setup/cleanup.
Signed-off-by: default avatarLukasz Luba <lukasz.luba@arm.com>
Link: https://lore.kernel.org/r/20220613124327.30766-5-lukasz.luba@arm.comSigned-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
parent 9784d2fb
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
* struct devfreq_cooling_device - Devfreq cooling device * struct devfreq_cooling_device - Devfreq cooling device
* devfreq_cooling_device registered. * devfreq_cooling_device registered.
* @cdev: Pointer to associated thermal cooling device. * @cdev: Pointer to associated thermal cooling device.
* @cooling_ops: devfreq callbacks to thermal cooling device ops
* @devfreq: Pointer to associated devfreq device. * @devfreq: Pointer to associated devfreq device.
* @cooling_state: Current cooling state. * @cooling_state: Current cooling state.
* @freq_table: Pointer to a table with the frequencies sorted in descending * @freq_table: Pointer to a table with the frequencies sorted in descending
...@@ -48,6 +49,7 @@ ...@@ -48,6 +49,7 @@
*/ */
struct devfreq_cooling_device { struct devfreq_cooling_device {
struct thermal_cooling_device *cdev; struct thermal_cooling_device *cdev;
struct thermal_cooling_device_ops cooling_ops;
struct devfreq *devfreq; struct devfreq *devfreq;
unsigned long cooling_state; unsigned long cooling_state;
u32 *freq_table; u32 *freq_table;
...@@ -290,12 +292,6 @@ static int devfreq_cooling_power2state(struct thermal_cooling_device *cdev, ...@@ -290,12 +292,6 @@ static int devfreq_cooling_power2state(struct thermal_cooling_device *cdev,
return 0; return 0;
} }
static struct thermal_cooling_device_ops devfreq_cooling_ops = {
.get_max_state = devfreq_cooling_get_max_state,
.get_cur_state = devfreq_cooling_get_cur_state,
.set_cur_state = devfreq_cooling_set_cur_state,
};
/** /**
* devfreq_cooling_gen_tables() - Generate frequency table. * devfreq_cooling_gen_tables() - Generate frequency table.
* @dfc: Pointer to devfreq cooling device. * @dfc: Pointer to devfreq cooling device.
...@@ -363,18 +359,18 @@ of_devfreq_cooling_register_power(struct device_node *np, struct devfreq *df, ...@@ -363,18 +359,18 @@ of_devfreq_cooling_register_power(struct device_node *np, struct devfreq *df,
char *name; char *name;
int err, num_opps; int err, num_opps;
ops = kmemdup(&devfreq_cooling_ops, sizeof(*ops), GFP_KERNEL);
if (!ops)
return ERR_PTR(-ENOMEM);
dfc = kzalloc(sizeof(*dfc), GFP_KERNEL); dfc = kzalloc(sizeof(*dfc), GFP_KERNEL);
if (!dfc) { if (!dfc)
err = -ENOMEM; return ERR_PTR(-ENOMEM);
goto free_ops;
}
dfc->devfreq = df; dfc->devfreq = df;
ops = &dfc->cooling_ops;
ops->get_max_state = devfreq_cooling_get_max_state;
ops->get_cur_state = devfreq_cooling_get_cur_state;
ops->set_cur_state = devfreq_cooling_set_cur_state;
em = em_pd_get(dev); em = em_pd_get(dev);
if (em && !em_is_artificial(em)) { if (em && !em_is_artificial(em)) {
dfc->em_pd = em; dfc->em_pd = em;
...@@ -437,8 +433,6 @@ of_devfreq_cooling_register_power(struct device_node *np, struct devfreq *df, ...@@ -437,8 +433,6 @@ of_devfreq_cooling_register_power(struct device_node *np, struct devfreq *df,
kfree(dfc->freq_table); kfree(dfc->freq_table);
free_dfc: free_dfc:
kfree(dfc); kfree(dfc);
free_ops:
kfree(ops);
return ERR_PTR(err); return ERR_PTR(err);
} }
...@@ -520,13 +514,11 @@ EXPORT_SYMBOL_GPL(devfreq_cooling_em_register); ...@@ -520,13 +514,11 @@ EXPORT_SYMBOL_GPL(devfreq_cooling_em_register);
void devfreq_cooling_unregister(struct thermal_cooling_device *cdev) void devfreq_cooling_unregister(struct thermal_cooling_device *cdev)
{ {
struct devfreq_cooling_device *dfc; struct devfreq_cooling_device *dfc;
const struct thermal_cooling_device_ops *ops;
struct device *dev; struct device *dev;
if (IS_ERR_OR_NULL(cdev)) if (IS_ERR_OR_NULL(cdev))
return; return;
ops = cdev->ops;
dfc = cdev->devdata; dfc = cdev->devdata;
dev = dfc->devfreq->dev.parent; dev = dfc->devfreq->dev.parent;
...@@ -537,6 +529,5 @@ void devfreq_cooling_unregister(struct thermal_cooling_device *cdev) ...@@ -537,6 +529,5 @@ void devfreq_cooling_unregister(struct thermal_cooling_device *cdev)
kfree(dfc->freq_table); kfree(dfc->freq_table);
kfree(dfc); kfree(dfc);
kfree(ops);
} }
EXPORT_SYMBOL_GPL(devfreq_cooling_unregister); EXPORT_SYMBOL_GPL(devfreq_cooling_unregister);
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