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: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
This commit is contained in:
parent
b0047b90db
commit
91a0192e90
|
@ -7,7 +7,6 @@
|
||||||
|
|
||||||
#include <linux/gpio/driver.h>
|
#include <linux/gpio/driver.h>
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
#include <linux/platform_data/pcf857x.h>
|
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/irqdomain.h>
|
#include <linux/irqdomain.h>
|
||||||
|
@ -18,7 +17,6 @@
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
|
|
||||||
|
|
||||||
static const struct i2c_device_id pcf857x_id[] = {
|
static const struct i2c_device_id pcf857x_id[] = {
|
||||||
{ "pcf8574", 8 },
|
{ "pcf8574", 8 },
|
||||||
{ "pcf8574a", 8 },
|
{ "pcf8574a", 8 },
|
||||||
|
@ -277,18 +275,12 @@ static const struct irq_chip pcf857x_irq_chip = {
|
||||||
static int pcf857x_probe(struct i2c_client *client)
|
static int pcf857x_probe(struct i2c_client *client)
|
||||||
{
|
{
|
||||||
const struct i2c_device_id *id = i2c_client_get_device_id(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 device_node *np = client->dev.of_node;
|
||||||
struct pcf857x *gpio;
|
struct pcf857x *gpio;
|
||||||
unsigned int n_latch = 0;
|
unsigned int n_latch = 0;
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_OF) && np)
|
|
||||||
of_property_read_u32(np, "lines-initial-states", &n_latch);
|
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. */
|
/* Allocate, initialize, and register this gpio_chip. */
|
||||||
gpio = devm_kzalloc(&client->dev, sizeof(*gpio), GFP_KERNEL);
|
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);
|
mutex_init(&gpio->lock);
|
||||||
|
|
||||||
gpio->chip.base = pdata ? pdata->gpio_base : -1;
|
gpio->chip.base = -1;
|
||||||
gpio->chip.can_sleep = true;
|
gpio->chip.can_sleep = true;
|
||||||
gpio->chip.parent = &client->dev;
|
gpio->chip.parent = &client->dev;
|
||||||
gpio->chip.owner = THIS_MODULE;
|
gpio->chip.owner = THIS_MODULE;
|
||||||
|
@ -406,17 +398,6 @@ static int pcf857x_probe(struct i2c_client *client)
|
||||||
if (status < 0)
|
if (status < 0)
|
||||||
goto fail;
|
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");
|
dev_info(&client->dev, "probed\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -428,16 +409,6 @@ fail:
|
||||||
return status;
|
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)
|
static void pcf857x_shutdown(struct i2c_client *client)
|
||||||
{
|
{
|
||||||
struct pcf857x *gpio = i2c_get_clientdata(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),
|
.of_match_table = of_match_ptr(pcf857x_of_table),
|
||||||
},
|
},
|
||||||
.probe_new = pcf857x_probe,
|
.probe_new = pcf857x_probe,
|
||||||
.remove = pcf857x_remove,
|
|
||||||
.shutdown = pcf857x_shutdown,
|
.shutdown = pcf857x_shutdown,
|
||||||
.id_table = pcf857x_id,
|
.id_table = pcf857x_id,
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,45 +0,0 @@
|
||||||
/* 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 */
|
|
Loading…
Reference in New Issue