Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+3 −63
Original line number Original line Diff line number Diff line
@@ -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 {
	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)
	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,


	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,


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


+0 −16
Original line number Original line Diff line number Diff line
/*
 * 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