hwmon: (pwm-fan) Make use of device properties

Convert the module to be property provider agnostic and allow
it to be used on non-OF platforms.

Add mod_devicetable.h include.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Link: https://lore.kernel.org/r/20240404191323.3547465-3-andriy.shevchenko@linux.intel.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
Andy Shevchenko 2024-04-04 22:11:39 +03:00 committed by Guenter Roeck
parent 9c871df02a
commit dfd977d85b
2 changed files with 11 additions and 12 deletions

View File

@ -1785,7 +1785,7 @@ config SENSORS_PT5161L
config SENSORS_PWM_FAN config SENSORS_PWM_FAN
tristate "PWM fan" tristate "PWM fan"
depends on (PWM && OF) || COMPILE_TEST depends on PWM || COMPILE_TEST
depends on THERMAL || THERMAL=n depends on THERMAL || THERMAL=n
help help
If you say yes here you get support for fans connected to PWM lines. If you say yes here you get support for fans connected to PWM lines.

View File

@ -9,10 +9,11 @@
#include <linux/hwmon.h> #include <linux/hwmon.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/mod_devicetable.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/mutex.h> #include <linux/mutex.h>
#include <linux/of.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/property.h>
#include <linux/pwm.h> #include <linux/pwm.h>
#include <linux/regulator/consumer.h> #include <linux/regulator/consumer.h>
#include <linux/sysfs.h> #include <linux/sysfs.h>
@ -421,16 +422,14 @@ static const struct thermal_cooling_device_ops pwm_fan_cooling_ops = {
.set_cur_state = pwm_fan_set_cur_state, .set_cur_state = pwm_fan_set_cur_state,
}; };
static int pwm_fan_of_get_cooling_data(struct device *dev, static int pwm_fan_get_cooling_data(struct device *dev, struct pwm_fan_ctx *ctx)
struct pwm_fan_ctx *ctx)
{ {
struct device_node *np = dev->of_node;
int num, i, ret; int num, i, ret;
if (!of_property_present(np, "cooling-levels")) if (!device_property_present(dev, "cooling-levels"))
return 0; return 0;
ret = of_property_count_u32_elems(np, "cooling-levels"); ret = device_property_count_u32(dev, "cooling-levels");
if (ret <= 0) { if (ret <= 0) {
dev_err(dev, "Wrong data!\n"); dev_err(dev, "Wrong data!\n");
return ret ? : -EINVAL; return ret ? : -EINVAL;
@ -442,8 +441,8 @@ static int pwm_fan_of_get_cooling_data(struct device *dev,
if (!ctx->pwm_fan_cooling_levels) if (!ctx->pwm_fan_cooling_levels)
return -ENOMEM; return -ENOMEM;
ret = of_property_read_u32_array(np, "cooling-levels", ret = device_property_read_u32_array(dev, "cooling-levels",
ctx->pwm_fan_cooling_levels, num); ctx->pwm_fan_cooling_levels, num);
if (ret) { if (ret) {
dev_err(dev, "Property 'cooling-levels' cannot be read!\n"); dev_err(dev, "Property 'cooling-levels' cannot be read!\n");
return ret; return ret;
@ -574,8 +573,8 @@ static int pwm_fan_probe(struct platform_device *pdev)
for (i = 0; i < ctx->tach_count; i++) for (i = 0; i < ctx->tach_count; i++)
ctx->pulses_per_revolution[i] = 2; ctx->pulses_per_revolution[i] = 2;
of_property_read_u32_array(dev->of_node, "pulses-per-revolution", device_property_read_u32_array(dev, "pulses-per-revolution",
ctx->pulses_per_revolution, ctx->tach_count); ctx->pulses_per_revolution, ctx->tach_count);
} }
channels = devm_kcalloc(dev, channel_count + 1, channels = devm_kcalloc(dev, channel_count + 1,
@ -630,7 +629,7 @@ static int pwm_fan_probe(struct platform_device *pdev)
return PTR_ERR(hwmon); return PTR_ERR(hwmon);
} }
ret = pwm_fan_of_get_cooling_data(dev, ctx); ret = pwm_fan_get_cooling_data(dev, ctx);
if (ret) if (ret)
return ret; return ret;