mirror of
https://github.com/torvalds/linux.git
synced 2024-11-15 08:31:55 +00:00
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/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");
|
||||
of_property_read_u32(np, "lines-initial-states", &n_latch);
|
||||
|
||||
/* 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 @@ fail:
|
||||
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,
|
||||
};
|
||||
|
@ -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
Block a user