#include <linux/of_gpio.h>
#include <linux/thermal.h>
-struct gpio_fan_alarm {
- unsigned int gpio;
- unsigned int active_low;
-};
-
struct gpio_fan_speed {
int rpm;
int ctrl_val;
int resume_speed;
#endif
bool pwm_enable;
- struct gpio_fan_alarm *alarm;
+ unsigned int alarm_gpio;
+ unsigned int alarm_gpio_active_low;
struct work_struct alarm_work;
};
struct device_attribute *attr, char *buf)
{
struct gpio_fan_data *fan_data = dev_get_drvdata(dev);
- struct gpio_fan_alarm *alarm = fan_data->alarm;
- int value = gpio_get_value_cansleep(alarm->gpio);
+ int value = gpio_get_value_cansleep(fan_data->alarm_gpio);
- if (alarm->active_low)
+ if (fan_data->alarm_gpio_active_low)
value = !value;
return sprintf(buf, "%d\n", value);
int err;
int alarm_irq;
struct device *dev = fan_data->dev;
- struct gpio_fan_alarm *alarm = fan_data->alarm;
- err = devm_gpio_request(dev, alarm->gpio, "GPIO fan alarm");
+ err = devm_gpio_request(dev, fan_data->alarm_gpio, "GPIO fan alarm");
if (err)
return err;
- err = gpio_direction_input(alarm->gpio);
+ err = gpio_direction_input(fan_data->alarm_gpio);
if (err)
return err;
* If the alarm GPIO don't support interrupts, just leave
* without initializing the fail notification support.
*/
- alarm_irq = gpio_to_irq(alarm->gpio);
+ alarm_irq = gpio_to_irq(fan_data->alarm_gpio);
if (alarm_irq < 0)
return 0;
struct device *dev = container_of(kobj, struct device, kobj);
struct gpio_fan_data *data = dev_get_drvdata(dev);
- if (index == 0 && !data->alarm)
+ if (index == 0 && !data->alarm_gpio)
return 0;
if (index > 0 && !data->ctrl)
return 0;
/* Alarm GPIO if one exists */
if (of_gpio_named_count(np, "alarm-gpios") > 0) {
- struct gpio_fan_alarm *alarm;
int val;
enum of_gpio_flags flags;
- alarm = devm_kzalloc(dev, sizeof(struct gpio_fan_alarm),
- GFP_KERNEL);
- if (!alarm)
- return -ENOMEM;
-
val = of_get_named_gpio_flags(np, "alarm-gpios", 0, &flags);
if (val < 0)
return val;
- alarm->gpio = val;
- alarm->active_low = flags & OF_GPIO_ACTIVE_LOW;
-
- fan_data->alarm = alarm;
+ fan_data->alarm_gpio = val;
+ fan_data->alarm_gpio_active_low = flags & OF_GPIO_ACTIVE_LOW;
}
/* Fill GPIO pin array */
fan_data->num_ctrl = of_gpio_count(np);
if (fan_data->num_ctrl <= 0) {
- if (fan_data->alarm)
+ if (fan_data->alarm_gpio)
return 0;
dev_err(dev, "DT properties empty / missing");
return -ENODEV;
mutex_init(&fan_data->lock);
/* Configure alarm GPIO if available. */
- if (fan_data->alarm) {
+ if (fan_data->alarm_gpio) {
err = fan_alarm_init(fan_data);
if (err)
return err;