Commit 01c0e0a2 authored by Hans de Goede's avatar Hans de Goede Committed by Sebastian Reichel

power: supply: bq24190_charger: Use i2c-core irq-mapping code

The i2c-core already maps of irqs before calling the driver's probe
function and there are no in tree users of
bq24190_platform_data->gpio_int.

Remove the redundant custom irq-mapping code and just use client->irq.

Cc: Liam Breck <kernel@networkimprov.net>
Cc: Tony Lindgren <tony@atomide.com>
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: default avatarTony Lindgren <tony@atomide.com>
Signed-off-by: default avatarSebastian Reichel <sre@kernel.org>
parent b98074e2
...@@ -18,9 +18,6 @@ ...@@ -18,9 +18,6 @@
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/power/bq24190_charger.h>
#define BQ24190_MANUFACTURER "Texas Instruments" #define BQ24190_MANUFACTURER "Texas Instruments"
#define BQ24190_REG_ISC 0x00 /* Input Source Control */ #define BQ24190_REG_ISC 0x00 /* Input Source Control */
...@@ -153,8 +150,6 @@ struct bq24190_dev_info { ...@@ -153,8 +150,6 @@ struct bq24190_dev_info {
struct power_supply *battery; struct power_supply *battery;
char model_name[I2C_NAME_SIZE]; char model_name[I2C_NAME_SIZE];
kernel_ulong_t model; kernel_ulong_t model;
unsigned int gpio_int;
unsigned int irq;
bool initialized; bool initialized;
bool irq_event; bool irq_event;
struct mutex f_reg_lock; struct mutex f_reg_lock;
...@@ -1310,56 +1305,11 @@ static int bq24190_hw_init(struct bq24190_dev_info *bdi) ...@@ -1310,56 +1305,11 @@ static int bq24190_hw_init(struct bq24190_dev_info *bdi)
return bq24190_read(bdi, BQ24190_REG_SS, &bdi->ss_reg); return bq24190_read(bdi, BQ24190_REG_SS, &bdi->ss_reg);
} }
#ifdef CONFIG_OF
static int bq24190_setup_dt(struct bq24190_dev_info *bdi)
{
bdi->irq = irq_of_parse_and_map(bdi->dev->of_node, 0);
if (bdi->irq <= 0)
return -1;
return 0;
}
#else
static int bq24190_setup_dt(struct bq24190_dev_info *bdi)
{
return -1;
}
#endif
static int bq24190_setup_pdata(struct bq24190_dev_info *bdi,
struct bq24190_platform_data *pdata)
{
int ret;
if (!gpio_is_valid(pdata->gpio_int))
return -1;
ret = gpio_request(pdata->gpio_int, dev_name(bdi->dev));
if (ret < 0)
return -1;
ret = gpio_direction_input(pdata->gpio_int);
if (ret < 0)
goto out;
bdi->irq = gpio_to_irq(pdata->gpio_int);
if (!bdi->irq)
goto out;
bdi->gpio_int = pdata->gpio_int;
return 0;
out:
gpio_free(pdata->gpio_int);
return -1;
}
static int bq24190_probe(struct i2c_client *client, static int bq24190_probe(struct i2c_client *client,
const struct i2c_device_id *id) const struct i2c_device_id *id)
{ {
struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent); struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
struct device *dev = &client->dev; struct device *dev = &client->dev;
struct bq24190_platform_data *pdata = client->dev.platform_data;
struct power_supply_config charger_cfg = {}, battery_cfg = {}; struct power_supply_config charger_cfg = {}, battery_cfg = {};
struct bq24190_dev_info *bdi; struct bq24190_dev_info *bdi;
int ret; int ret;
...@@ -1385,12 +1335,7 @@ static int bq24190_probe(struct i2c_client *client, ...@@ -1385,12 +1335,7 @@ static int bq24190_probe(struct i2c_client *client,
i2c_set_clientdata(client, bdi); i2c_set_clientdata(client, bdi);
if (dev->of_node) if (!client->irq) {
ret = bq24190_setup_dt(bdi);
else
ret = bq24190_setup_pdata(bdi, pdata);
if (ret) {
dev_err(dev, "Can't get irq info\n"); dev_err(dev, "Can't get irq info\n");
return -EINVAL; return -EINVAL;
} }
...@@ -1436,7 +1381,7 @@ static int bq24190_probe(struct i2c_client *client, ...@@ -1436,7 +1381,7 @@ static int bq24190_probe(struct i2c_client *client,
bdi->initialized = true; bdi->initialized = true;
ret = devm_request_threaded_irq(dev, bdi->irq, NULL, ret = devm_request_threaded_irq(dev, client->irq, NULL,
bq24190_irq_handler_thread, bq24190_irq_handler_thread,
IRQF_TRIGGER_FALLING | IRQF_ONESHOT, IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
"bq24190-charger", bdi); "bq24190-charger", bdi);
...@@ -1445,7 +1390,7 @@ static int bq24190_probe(struct i2c_client *client, ...@@ -1445,7 +1390,7 @@ static int bq24190_probe(struct i2c_client *client,
goto out5; goto out5;
} }
enable_irq_wake(bdi->irq); enable_irq_wake(client->irq);
pm_runtime_mark_last_busy(dev); pm_runtime_mark_last_busy(dev);
pm_runtime_put_autosuspend(dev); pm_runtime_put_autosuspend(dev);
...@@ -1467,8 +1412,6 @@ static int bq24190_probe(struct i2c_client *client, ...@@ -1467,8 +1412,6 @@ static int bq24190_probe(struct i2c_client *client,
out1: out1:
pm_runtime_dont_use_autosuspend(dev); pm_runtime_dont_use_autosuspend(dev);
pm_runtime_disable(dev); pm_runtime_disable(dev);
if (bdi->gpio_int)
gpio_free(bdi->gpio_int);
return ret; return ret;
} }
...@@ -1492,9 +1435,6 @@ static int bq24190_remove(struct i2c_client *client) ...@@ -1492,9 +1435,6 @@ static int bq24190_remove(struct i2c_client *client)
pm_runtime_dont_use_autosuspend(bdi->dev); pm_runtime_dont_use_autosuspend(bdi->dev);
pm_runtime_disable(bdi->dev); pm_runtime_disable(bdi->dev);
if (bdi->gpio_int)
gpio_free(bdi->gpio_int);
return 0; return 0;
} }
......
/*
* Platform data for the TI bq24190 battery charger driver.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#ifndef _BQ24190_CHARGER_H_
#define _BQ24190_CHARGER_H_
struct bq24190_platform_data {
unsigned int gpio_int; /* GPIO pin that's connected to INT# */
};
#endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment