gpio: pca953x: Introduce a long awaited ->get_direction()
PATCH v2 1/3 gpio: pca953x: Introduce a long awaited ->get_direction()
Introduce ->get_direction() callback for the driver.
---
v2: fix direction (0 for out, 1 for in)
drivers/gpio/gpio-pca953x.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)
drivers/gpio/gpio-pca953x.c +16 -0
@@ -363,6 +363,21 @@ static void pca953x_gpio_set_value(struct gpio_chip *gc, unsigned off, int val)mutex_unlock (&chip->i2c_lock); } +static int pca953x_gpio_get_direction (struct gpio_chip *gc,unsigned off) +{ +struct pca953x_chip *chip =gpiochip_get_data (gc); +u32 reg_val; +int ret; + +mutex_lock (&chip->i2c_lock); + ret =pca953x_read_single (chip, chip->regs->direction, ®_val, off); +mutex_unlock (&chip->i2c_lock); +if (ret <0 ) +return ret; + +return (reg_val & (1u << (off %BANK_SZ ))) ?GPIOF_DIR_IN :GPIOF_DIR_OUT ; +} +static void pca953x_gpio_set_multiple (struct gpio_chip *gc,unsigned long *mask,unsigned long *bits) {
@@ -408,6 +423,7 @@ static void pca953x_setup_gpio(struct pca953x_chip *chip, int gpios) gc->direction_output = pca953x_gpio_direction_output; gc->get = pca953x_gpio_get_value; gc->set = pca953x_gpio_set_value; + gc->get_direction = pca953x_gpio_get_direction; gc->set_multiple = pca953x_gpio_set_multiple; gc->can_sleep = true;
Signature · 1 line
2.11.0
PATCH v2 2/3 gpio: pca953x: Sort headers alphabetically
For sake of better maintenance sort the headers by alphabetical order.
--- drivers/gpio/gpio-pca953x.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)
drivers/gpio/gpio-pca953x.c +7 -6
@@ -11,18 +11,19 @@* the Free Software Foundation; version 2 of the License. */ -#include <linux/module.h> -#include <linux/init.h> +#include <linux/acpi.h> #include <linux/gpio.h> #include <linux/gpio/consumer.h> -#include <linux/interrupt.h> #include <linux/i2c.h> +#include <linux/init.h> +#include <linux/interrupt.h> +#include <linux/module.h> +#include <linux/of_platform.h> #include <linux/platform_data/pca953x.h> +#include <linux/regulator/consumer.h> #include <linux/slab.h> +#include <asm/unaligned.h> -#include <linux/of_platform.h> -#include <linux/acpi.h> -#include <linux/regulator/consumer.h> #define PCA953X_INPUT 0#define PCA953X_OUTPUT 1
Signature · 1 line
2.11.0
Re: [PATCH v2 2/3] gpio: pca953x: Sort headers alphabetically
Quoted 3 lines · Andy Shevchenko
For sake of better maintenance sort the headers by alphabetical order.
Signed-off-by Andy Shevchenko <[email protected]>
Patch applied.
Unrelated:
Quoted 2 lines
#include <
linux/gpio.h>
#include <linux/gpio/consumer.h>
#include <linux/gpio/driver.h> should normally be all that is needed.
Yours,
Linus Walleij
Re: [PATCH v2 2/3] gpio: pca953x: Sort headers alphabetically
Quoted 8 lines · Linus Walleij
Quoted 4 lines · Andy Shevchenko
For sake of better maintenance sort the headers by alphabetical order.
Signed-off-by Andy Shevchenko <[email protected]>
Quoted 8 lines
Patch applied.
Unrelated:
Quoted 2 lines
#include <
linux/gpio.h>
#include <linux/gpio/consumer.h>#include <
linux/gpio/driver.h> should normally be all that is needed.
Noted for the future, thanks!
Signature · 2 lines
Andy Shevchenko <[email protected]> Intel Finland Oy
PATCH v2 3/3 gpio: pca953x: Expand comment for "reset" GPIO in ACPI case
In reply to Andy ShevchenkoGPIO ACPI library is going to be stricter about resources, thus, expand comment regarding "reset" GPIO resource in this driver to clarify its usage in ACPI case.
--- drivers/gpio/gpio-pca953x.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
drivers/gpio/gpio-pca953x.c +7 -1
@@ -777,7 +777,13 @@ static int pca953x_probe(struct i2c_client *client, chip->gpio_start =-1 ; irq_base =0 ; -/* See if we need to de-assert a reset pin */ +/* +* See if we need to de-assert a reset pin. +* +* There is no known ACPI-enabled platforms that are +* using "reset" GPIO. Otherwise any of those platform +* must use _DSD method with corresponding property. +*/ reset_gpio =devm_gpiod_get_optional (&client->dev,"reset" ,GPIOD_OUT_LOW );if (IS_ERR (reset_gpio))
Signature · 1 line
2.11.0
Re: [PATCH v2 3/3] gpio: pca953x: Expand comment for "reset" GPIO in ACPI case
Quoted 5 lines · Andy Shevchenko
GPIO ACPI library is going to be stricter about resources, thus, expand comment regarding "reset" GPIO resource in this driver to clarify its usage in ACPI case.
Signed-off-by Andy Shevchenko <[email protected]>
Patch applied.
Yours,
Linus Walleij
Quoted 5 lines · Andy Shevchenko
Introduce ->get_direction() callback for the driver.
Signed-off-by Andy Shevchenko <[email protected]>---
v2: fix direction (0 for out, 1 for in)
This v2 patch applied.
Yours,
Linus Walleij
Quoted 1 line · Andy Shevchenko
+ return (
reg_val& (1u << (off %BANK_SZ))) ?GPIOF_DIR_IN:GPIOF_DIR_OUT;
The GPIOF_DIR_IN/GPIOF_DIR_OUT are part of the consumer API and should not be used inside drivers.
I've fixed it up to 1/0 when applying.
Yours,
Linus Walleij