Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 316002
b: refs/heads/master
c: d00985f
h: refs/heads/master
v: v3
  • Loading branch information
Guenter Roeck committed Jul 22, 2012
1 parent d1ec545 commit deef23a
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 42 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 60c2b5697560b0216ddbebaabebd1aac7abe3012
refs/heads/master: d00985f3dd5339eb3068e53f5704ae007ee62f90
56 changes: 15 additions & 41 deletions trunk/drivers/hwmon/gpio-fan.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,17 +95,17 @@ static int fan_alarm_init(struct gpio_fan_data *fan_data,

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)
return err;

err = gpio_direction_input(alarm->gpio);
if (err)
goto err_free_gpio;
return err;

err = device_create_file(&pdev->dev, &dev_attr_fan1_alarm);
if (err)
goto err_free_gpio;
return err;

/*
* If the alarm GPIO don't support interrupts, just leave
Expand All @@ -117,30 +117,23 @@ static int fan_alarm_init(struct gpio_fan_data *fan_data,

INIT_WORK(&fan_data->alarm_work, fan_alarm_notify);
irq_set_irq_type(alarm_irq, IRQ_TYPE_EDGE_BOTH);
err = request_irq(alarm_irq, fan_alarm_irq_handler, IRQF_SHARED,
"GPIO fan alarm", fan_data);
err = devm_request_irq(&pdev->dev, alarm_irq, fan_alarm_irq_handler,
IRQF_SHARED, "GPIO fan alarm", fan_data);
if (err)
goto err_free_sysfs;

return 0;

err_free_sysfs:
device_remove_file(&pdev->dev, &dev_attr_fan1_alarm);
err_free_gpio:
gpio_free(alarm->gpio);

return err;
}

static void fan_alarm_free(struct gpio_fan_data *fan_data)
{
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);
gpio_free(fan_data->alarm->gpio);
}

/*
Expand Down Expand Up @@ -365,15 +358,14 @@ static int fan_ctrl_init(struct gpio_fan_data *fan_data,
int i, err;

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)
goto err_free_gpio;
return err;

err = gpio_direction_output(ctrl[i], gpio_get_value(ctrl[i]));
if (err) {
gpio_free(ctrl[i]);
goto err_free_gpio;
}
if (err)
return err;
}

fan_data->num_ctrl = num_ctrl;
Expand All @@ -382,32 +374,18 @@ static int fan_ctrl_init(struct gpio_fan_data *fan_data,
fan_data->speed = pdata->speed;
fan_data->pwm_enable = true; /* Enable manual fan speed control. */
fan_data->speed_index = get_fan_speed_index(fan_data);
if (fan_data->speed_index < 0) {
err = -ENODEV;
goto err_free_gpio;
}
if (fan_data->speed_index < 0)
return -ENODEV;

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;
}

static void fan_ctrl_free(struct gpio_fan_data *fan_data)
{
struct platform_device *pdev = fan_data->pdev;
int i;

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]);
}

/*
Expand All @@ -431,7 +409,8 @@ static int __devinit gpio_fan_probe(struct platform_device *pdev)
if (!pdata)
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)
return -ENOMEM;

Expand All @@ -443,7 +422,7 @@ static int __devinit gpio_fan_probe(struct platform_device *pdev)
if (pdata->alarm) {
err = fan_alarm_init(fan_data, pdata->alarm);
if (err)
goto err_free_data;
return err;
}

/* Configure control GPIOs if available. */
Expand Down Expand Up @@ -480,10 +459,6 @@ static int __devinit gpio_fan_probe(struct platform_device *pdev)
err_free_alarm:
if (fan_data->alarm)
fan_alarm_free(fan_data);
err_free_data:
platform_set_drvdata(pdev, NULL);
kfree(fan_data);

return err;
}

Expand All @@ -497,7 +472,6 @@ static int __devexit gpio_fan_remove(struct platform_device *pdev)
fan_alarm_free(fan_data);
if (fan_data->ctrl)
fan_ctrl_free(fan_data);
kfree(fan_data);

return 0;
}
Expand Down

0 comments on commit deef23a

Please sign in to comment.