gpio: pcf857x: Get rid of legacy platform data
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Mon, 16 Jan 2023 12:47:02 +0000 (14:47 +0200)
committerBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Mon, 30 Jan 2023 14:55:30 +0000 (15:55 +0100)
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>
drivers/gpio/gpio-pcf857x.c
include/linux/platform_data/pcf857x.h [deleted file]

index d9db878802b77d9ac63bd3ac8a114dc4bd8071f1..dfa15444a24a5a1e3c9c48e25efc2ceb7b28c437 100644 (file)
@@ -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,
 };
diff --git a/include/linux/platform_data/pcf857x.h b/include/linux/platform_data/pcf857x.h
deleted file mode 100644 (file)
index 01d0a3e..0000000
+++ /dev/null
@@ -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 */