summaryrefslogtreecommitdiff
path: root/drivers/hwmon
diff options
context:
space:
mode:
authorDan Willemsen <dwillemsen@nvidia.com>2012-02-10 17:37:41 -0800
committerSimone Willett <swillett@nvidia.com>2012-02-18 10:58:30 -0800
commit09041edc214ed1d0155e292e44bbbb0e6994e797 (patch)
tree86ccd2b35ca4933b1c86a27d8f3ce5d8ae168b42 /drivers/hwmon
parenta5fcda903c132124873ae0a965c1fd81789aa31a (diff)
hwmon: adt7461: Remove usage of irq_to_gpio
This API is being removed in v3.2 Change-Id: I3d864dabd2273e737604776aa43c45a64eae90b3 Signed-off-by: Dan Willemsen <dwillemsen@nvidia.com> Reviewed-on: http://git-master/r/83561 Reviewed-by: Prashant Gaikwad <pgaikwad@nvidia.com> Reviewed-by: Varun Wadekar <vwadekar@nvidia.com>
Diffstat (limited to 'drivers/hwmon')
-rw-r--r--drivers/hwmon/adt7461.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/drivers/hwmon/adt7461.c b/drivers/hwmon/adt7461.c
index bf71f993cd2c..10ea2eb80668 100644
--- a/drivers/hwmon/adt7461.c
+++ b/drivers/hwmon/adt7461.c
@@ -120,6 +120,7 @@ struct adt7461_data {
u8 temp_hyst;
u8 alarms; /* bitvector */
void (*alarm_fn)(bool raised);
+ int irq_gpio;
};
/*
@@ -498,11 +499,10 @@ static void adt7461_work_func(struct work_struct *work)
{
struct adt7461_data *data =
container_of(work, struct adt7461_data, work);
- int irq = data->client->irq;
if (data->alarm_fn) {
/* Therm2 line is active low */
- data->alarm_fn(!gpio_get_value(irq_to_gpio(irq)));
+ data->alarm_fn(!gpio_get_value(data->irq_gpio));
}
}
@@ -572,9 +572,19 @@ static int adt7461_init_client(struct i2c_client *client)
if (!pdata || !pdata->supported_hwrev)
return -ENODEV;
- if (pdata->therm2)
+ data->irq_gpio = -1;
+
+ if (pdata->therm2) {
data->flags |= ADT7461_FLAG_THERM2;
+ if (gpio_is_valid(pdata->irq_gpio)) {
+ if (!IS_ERR(gpio_request(pdata->irq_gpio, "adt7461"))) {
+ gpio_direction_input(pdata->irq_gpio);
+ data->irq_gpio = pdata->irq_gpio;
+ }
+ }
+ }
+
if (pdata->ext_range)
data->flags |= ADT7461_FLAG_ADT7461_EXT;
@@ -708,8 +718,12 @@ static int adt7461_remove(struct i2c_client *client)
{
struct adt7461_data *data = i2c_get_clientdata(client);
- free_irq(client->irq, data);
- cancel_work_sync(&data->work);
+ if (data->flags & ADT7461_FLAG_THERM2) {
+ free_irq(client->irq, data);
+ cancel_work_sync(&data->work);
+ }
+ if (gpio_is_valid(data->irq_gpio))
+ gpio_free(data->irq_gpio);
hwmon_device_unregister(data->hwmon_dev);
sysfs_remove_group(&client->dev.kobj, &adt7461_group);
device_remove_file(&client->dev,