mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-03 23:58:05 +00:00
hwmon: (gpio-fan) Convert to use devm_ functions
Convert to use devm_ functions to reduce code size and simplify the code. Cc: Simon Guinot <sguinot@lacie.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net> Acked-by: Simon Guinot <sguinot@lacie.com>
This commit is contained in:
parent
60c2b56975
commit
d00985f3dd
1 changed files with 15 additions and 41 deletions
|
@ -95,17 +95,17 @@ static int fan_alarm_init(struct gpio_fan_data *fan_data,
|
||||||
|
|
||||||
fan_data->alarm = alarm;
|
fan_data->alarm = alarm;
|
||||||
|
|
||||||
err = gpio_request(alarm->gpio, "GPIO fan alarm");
|
err = devm_gpio_request(&pdev->dev, alarm->gpio, "GPIO fan alarm");
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
err = gpio_direction_input(alarm->gpio);
|
err = gpio_direction_input(alarm->gpio);
|
||||||
if (err)
|
if (err)
|
||||||
goto err_free_gpio;
|
return err;
|
||||||
|
|
||||||
err = device_create_file(&pdev->dev, &dev_attr_fan1_alarm);
|
err = device_create_file(&pdev->dev, &dev_attr_fan1_alarm);
|
||||||
if (err)
|
if (err)
|
||||||
goto err_free_gpio;
|
return err;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If the alarm GPIO don't support interrupts, just leave
|
* If the alarm GPIO don't support interrupts, just leave
|
||||||
|
@ -117,8 +117,8 @@ static int fan_alarm_init(struct gpio_fan_data *fan_data,
|
||||||
|
|
||||||
INIT_WORK(&fan_data->alarm_work, fan_alarm_notify);
|
INIT_WORK(&fan_data->alarm_work, fan_alarm_notify);
|
||||||
irq_set_irq_type(alarm_irq, IRQ_TYPE_EDGE_BOTH);
|
irq_set_irq_type(alarm_irq, IRQ_TYPE_EDGE_BOTH);
|
||||||
err = request_irq(alarm_irq, fan_alarm_irq_handler, IRQF_SHARED,
|
err = devm_request_irq(&pdev->dev, alarm_irq, fan_alarm_irq_handler,
|
||||||
"GPIO fan alarm", fan_data);
|
IRQF_SHARED, "GPIO fan alarm", fan_data);
|
||||||
if (err)
|
if (err)
|
||||||
goto err_free_sysfs;
|
goto err_free_sysfs;
|
||||||
|
|
||||||
|
@ -126,21 +126,14 @@ static int fan_alarm_init(struct gpio_fan_data *fan_data,
|
||||||
|
|
||||||
err_free_sysfs:
|
err_free_sysfs:
|
||||||
device_remove_file(&pdev->dev, &dev_attr_fan1_alarm);
|
device_remove_file(&pdev->dev, &dev_attr_fan1_alarm);
|
||||||
err_free_gpio:
|
|
||||||
gpio_free(alarm->gpio);
|
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fan_alarm_free(struct gpio_fan_data *fan_data)
|
static void fan_alarm_free(struct gpio_fan_data *fan_data)
|
||||||
{
|
{
|
||||||
struct platform_device *pdev = fan_data->pdev;
|
struct platform_device *pdev = fan_data->pdev;
|
||||||
int alarm_irq = gpio_to_irq(fan_data->alarm->gpio);
|
|
||||||
|
|
||||||
if (alarm_irq >= 0)
|
|
||||||
free_irq(alarm_irq, fan_data);
|
|
||||||
device_remove_file(&pdev->dev, &dev_attr_fan1_alarm);
|
device_remove_file(&pdev->dev, &dev_attr_fan1_alarm);
|
||||||
gpio_free(fan_data->alarm->gpio);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -365,15 +358,14 @@ static int fan_ctrl_init(struct gpio_fan_data *fan_data,
|
||||||
int i, err;
|
int i, err;
|
||||||
|
|
||||||
for (i = 0; i < num_ctrl; i++) {
|
for (i = 0; i < num_ctrl; i++) {
|
||||||
err = gpio_request(ctrl[i], "GPIO fan control");
|
err = devm_gpio_request(&pdev->dev, ctrl[i],
|
||||||
|
"GPIO fan control");
|
||||||
if (err)
|
if (err)
|
||||||
goto err_free_gpio;
|
return err;
|
||||||
|
|
||||||
err = gpio_direction_output(ctrl[i], gpio_get_value(ctrl[i]));
|
err = gpio_direction_output(ctrl[i], gpio_get_value(ctrl[i]));
|
||||||
if (err) {
|
if (err)
|
||||||
gpio_free(ctrl[i]);
|
return err;
|
||||||
goto err_free_gpio;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fan_data->num_ctrl = num_ctrl;
|
fan_data->num_ctrl = num_ctrl;
|
||||||
|
@ -382,32 +374,18 @@ static int fan_ctrl_init(struct gpio_fan_data *fan_data,
|
||||||
fan_data->speed = pdata->speed;
|
fan_data->speed = pdata->speed;
|
||||||
fan_data->pwm_enable = true; /* Enable manual fan speed control. */
|
fan_data->pwm_enable = true; /* Enable manual fan speed control. */
|
||||||
fan_data->speed_index = get_fan_speed_index(fan_data);
|
fan_data->speed_index = get_fan_speed_index(fan_data);
|
||||||
if (fan_data->speed_index < 0) {
|
if (fan_data->speed_index < 0)
|
||||||
err = -ENODEV;
|
return -ENODEV;
|
||||||
goto err_free_gpio;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = sysfs_create_group(&pdev->dev.kobj, &gpio_fan_ctrl_group);
|
err = sysfs_create_group(&pdev->dev.kobj, &gpio_fan_ctrl_group);
|
||||||
if (err)
|
|
||||||
goto err_free_gpio;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
err_free_gpio:
|
|
||||||
for (i = i - 1; i >= 0; i--)
|
|
||||||
gpio_free(ctrl[i]);
|
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fan_ctrl_free(struct gpio_fan_data *fan_data)
|
static void fan_ctrl_free(struct gpio_fan_data *fan_data)
|
||||||
{
|
{
|
||||||
struct platform_device *pdev = fan_data->pdev;
|
struct platform_device *pdev = fan_data->pdev;
|
||||||
int i;
|
|
||||||
|
|
||||||
sysfs_remove_group(&pdev->dev.kobj, &gpio_fan_ctrl_group);
|
sysfs_remove_group(&pdev->dev.kobj, &gpio_fan_ctrl_group);
|
||||||
for (i = 0; i < fan_data->num_ctrl; i++)
|
|
||||||
gpio_free(fan_data->ctrl[i]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -431,7 +409,8 @@ static int __devinit gpio_fan_probe(struct platform_device *pdev)
|
||||||
if (!pdata)
|
if (!pdata)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
fan_data = kzalloc(sizeof(struct gpio_fan_data), GFP_KERNEL);
|
fan_data = devm_kzalloc(&pdev->dev, sizeof(struct gpio_fan_data),
|
||||||
|
GFP_KERNEL);
|
||||||
if (!fan_data)
|
if (!fan_data)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
@ -443,7 +422,7 @@ static int __devinit gpio_fan_probe(struct platform_device *pdev)
|
||||||
if (pdata->alarm) {
|
if (pdata->alarm) {
|
||||||
err = fan_alarm_init(fan_data, pdata->alarm);
|
err = fan_alarm_init(fan_data, pdata->alarm);
|
||||||
if (err)
|
if (err)
|
||||||
goto err_free_data;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Configure control GPIOs if available. */
|
/* Configure control GPIOs if available. */
|
||||||
|
@ -480,10 +459,6 @@ static int __devinit gpio_fan_probe(struct platform_device *pdev)
|
||||||
err_free_alarm:
|
err_free_alarm:
|
||||||
if (fan_data->alarm)
|
if (fan_data->alarm)
|
||||||
fan_alarm_free(fan_data);
|
fan_alarm_free(fan_data);
|
||||||
err_free_data:
|
|
||||||
platform_set_drvdata(pdev, NULL);
|
|
||||||
kfree(fan_data);
|
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -497,7 +472,6 @@ static int __devexit gpio_fan_remove(struct platform_device *pdev)
|
||||||
fan_alarm_free(fan_data);
|
fan_alarm_free(fan_data);
|
||||||
if (fan_data->ctrl)
|
if (fan_data->ctrl)
|
||||||
fan_ctrl_free(fan_data);
|
fan_ctrl_free(fan_data);
|
||||||
kfree(fan_data);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue