mirror of
https://github.com/fail0verflow/switch-linux.git
synced 2025-05-04 02:34:21 -04:00
pwm-fan: implement enable GPIO
This commit is contained in:
parent
1a0c6c9b58
commit
995caae57d
2 changed files with 14 additions and 1 deletions
|
@ -1278,7 +1278,7 @@ source drivers/hwmon/pmbus/Kconfig
|
||||||
|
|
||||||
config SENSORS_PWM_FAN
|
config SENSORS_PWM_FAN
|
||||||
tristate "PWM fan"
|
tristate "PWM fan"
|
||||||
depends on (PWM && OF) || COMPILE_TEST
|
depends on (PWM && OF && GPIOLIB && OF_GPIO) || 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.
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
|
|
||||||
#include <linux/hwmon.h>
|
#include <linux/hwmon.h>
|
||||||
#include <linux/hwmon-sysfs.h>
|
#include <linux/hwmon-sysfs.h>
|
||||||
|
#include <linux/gpio/consumer.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/mutex.h>
|
#include <linux/mutex.h>
|
||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
|
@ -31,6 +32,7 @@
|
||||||
struct pwm_fan_ctx {
|
struct pwm_fan_ctx {
|
||||||
struct mutex lock;
|
struct mutex lock;
|
||||||
struct pwm_device *pwm;
|
struct pwm_device *pwm;
|
||||||
|
struct gpio_desc *enable_gpio;
|
||||||
unsigned int pwm_value;
|
unsigned int pwm_value;
|
||||||
unsigned int pwm_fan_state;
|
unsigned int pwm_fan_state;
|
||||||
unsigned int pwm_fan_max_state;
|
unsigned int pwm_fan_max_state;
|
||||||
|
@ -56,6 +58,10 @@ static int __set_pwm(struct pwm_fan_ctx *ctx, unsigned long pwm)
|
||||||
ret = pwm_apply_state(ctx->pwm, &state);
|
ret = pwm_apply_state(ctx->pwm, &state);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
ctx->pwm_value = pwm;
|
ctx->pwm_value = pwm;
|
||||||
|
|
||||||
|
if (ctx->enable_gpio)
|
||||||
|
gpiod_set_value(ctx->enable_gpio, !!pwm);
|
||||||
|
|
||||||
exit_set_pwm_err:
|
exit_set_pwm_err:
|
||||||
mutex_unlock(&ctx->lock);
|
mutex_unlock(&ctx->lock);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -240,6 +246,13 @@ static int pwm_fan_probe(struct platform_device *pdev)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ctx->enable_gpio = devm_gpiod_get(&pdev->dev, "enable", GPIOD_OUT_HIGH);
|
||||||
|
if (IS_ERR(ctx->enable_gpio)) {
|
||||||
|
ctx->enable_gpio = NULL;
|
||||||
|
} else {
|
||||||
|
gpiod_set_value(ctx->enable_gpio, 1);
|
||||||
|
}
|
||||||
|
|
||||||
hwmon = devm_hwmon_device_register_with_groups(&pdev->dev, "pwmfan",
|
hwmon = devm_hwmon_device_register_with_groups(&pdev->dev, "pwmfan",
|
||||||
ctx, pwm_fan_groups);
|
ctx, pwm_fan_groups);
|
||||||
if (IS_ERR(hwmon)) {
|
if (IS_ERR(hwmon)) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue