Commit 91a0192e authored by Andy Shevchenko's avatar Andy Shevchenko Committed by Bartosz Golaszewski
Browse files

gpio: pcf857x: Get rid of legacy platform data



Platform data is a legacy interface to supply device properties
to the driver. In this case we don't have in-kernel users for it.
Moreover it uses plain GPIO numbers which is no-no for a new code.

Just remove it for good.

Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarBartosz Golaszewski <bartosz.golaszewski@linaro.org>
parent b0047b90
Loading
Loading
Loading
Loading
+2 −32
Original line number Diff line number Diff line
@@ -7,7 +7,6 @@

#include <linux/gpio/driver.h>
#include <linux/i2c.h>
#include <linux/platform_data/pcf857x.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/irqdomain.h>
@@ -18,7 +17,6 @@
#include <linux/slab.h>
#include <linux/spinlock.h>


static const struct i2c_device_id pcf857x_id[] = {
	{ "pcf8574", 8 },
	{ "pcf8574a", 8 },
@@ -277,18 +275,12 @@ static const struct irq_chip pcf857x_irq_chip = {
static int pcf857x_probe(struct i2c_client *client)
{
	const struct i2c_device_id *id = i2c_client_get_device_id(client);
	struct pcf857x_platform_data *pdata = dev_get_platdata(&client->dev);
	struct device_node *np = client->dev.of_node;
	struct pcf857x *gpio;
	unsigned int n_latch = 0;
	int status;

	if (IS_ENABLED(CONFIG_OF) && np)
	of_property_read_u32(np, "lines-initial-states", &n_latch);
	else if (pdata)
		n_latch = pdata->n_latch;
	else
		dev_dbg(&client->dev, "no platform data\n");

	/* Allocate, initialize, and register this gpio_chip. */
	gpio = devm_kzalloc(&client->dev, sizeof(*gpio), GFP_KERNEL);
@@ -297,7 +289,7 @@ static int pcf857x_probe(struct i2c_client *client)

	mutex_init(&gpio->lock);

	gpio->chip.base			= pdata ? pdata->gpio_base : -1;
	gpio->chip.base			= -1;
	gpio->chip.can_sleep		= true;
	gpio->chip.parent		= &client->dev;
	gpio->chip.owner		= THIS_MODULE;
@@ -406,17 +398,6 @@ static int pcf857x_probe(struct i2c_client *client)
	if (status < 0)
		goto fail;

	/* Let platform code set up the GPIOs and their users.
	 * Now is the first time anyone could use them.
	 */
	if (pdata && pdata->setup) {
		status = pdata->setup(client,
				gpio->chip.base, gpio->chip.ngpio,
				pdata->context);
		if (status < 0)
			dev_warn(&client->dev, "setup --> %d\n", status);
	}

	dev_info(&client->dev, "probed\n");

	return 0;
@@ -428,16 +409,6 @@ static int pcf857x_probe(struct i2c_client *client)
	return status;
}

static void pcf857x_remove(struct i2c_client *client)
{
	struct pcf857x_platform_data *pdata = dev_get_platdata(&client->dev);
	struct pcf857x *gpio = i2c_get_clientdata(client);

	if (pdata && pdata->teardown)
		pdata->teardown(client, gpio->chip.base, gpio->chip.ngpio,
				pdata->context);
}

static void pcf857x_shutdown(struct i2c_client *client)
{
	struct pcf857x *gpio = i2c_get_clientdata(client);
@@ -452,7 +423,6 @@ static struct i2c_driver pcf857x_driver = {
		.of_match_table = of_match_ptr(pcf857x_of_table),
	},
	.probe_new = pcf857x_probe,
	.remove	= pcf857x_remove,
	.shutdown = pcf857x_shutdown,
	.id_table = pcf857x_id,
};
+0 −45
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __LINUX_PCF857X_H
#define __LINUX_PCF857X_H

/**
 * struct pcf857x_platform_data - data to set up pcf857x driver
 * @gpio_base: number of the chip's first GPIO
 * @n_latch: optional bit-inverse of initial register value; if
 *	you leave this initialized to zero the driver will act
 *	like the chip was just reset
 * @setup: optional callback issued once the GPIOs are valid
 * @teardown: optional callback issued before the GPIOs are invalidated
 * @context: optional parameter passed to setup() and teardown()
 *
 * In addition to the I2C_BOARD_INFO() state appropriate to each chip,
 * the i2c_board_info used with the pcf875x driver must provide its
 * platform_data (pointer to one of these structures) with at least
 * the gpio_base value initialized.
 *
 * The @setup callback may be used with the kind of board-specific glue
 * which hands the (now-valid) GPIOs to other drivers, or which puts
 * devices in their initial states using these GPIOs.
 *
 * These GPIO chips are only "quasi-bidirectional"; read the chip specs
 * to understand the behavior.  They don't have separate registers to
 * record which pins are used for input or output, record which output
 * values are driven, or provide access to input values.  That must be
 * inferred by reading the chip's value and knowing the last value written
 * to it.  If you leave n_latch initialized to zero, that last written
 * value is presumed to be all ones (as if the chip were just reset).
 */
struct pcf857x_platform_data {
	unsigned	gpio_base;
	unsigned	n_latch;

	int		(*setup)(struct i2c_client *client,
					int gpio, unsigned ngpio,
					void *context);
	void		(*teardown)(struct i2c_client *client,
					int gpio, unsigned ngpio,
					void *context);
	void		*context;
};

#endif /* __LINUX_PCF857X_H */