Commit b03c04a0 authored by Linus Walleij's avatar Linus Walleij

gpio: stmpe: use gpiochip data pointer

This makes the driver use the data pointer added to the gpio_chip
to store a pointer to the state container instead of relying on
container_of().

Cc: Bhupesh Sharma <bhupesh.sharma@st.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 0b2c529a
...@@ -36,14 +36,9 @@ struct stmpe_gpio { ...@@ -36,14 +36,9 @@ struct stmpe_gpio {
u8 oldregs[CACHE_NR_REGS][CACHE_NR_BANKS]; u8 oldregs[CACHE_NR_REGS][CACHE_NR_BANKS];
}; };
static inline struct stmpe_gpio *to_stmpe_gpio(struct gpio_chip *chip)
{
return container_of(chip, struct stmpe_gpio, chip);
}
static int stmpe_gpio_get(struct gpio_chip *chip, unsigned offset) static int stmpe_gpio_get(struct gpio_chip *chip, unsigned offset)
{ {
struct stmpe_gpio *stmpe_gpio = to_stmpe_gpio(chip); struct stmpe_gpio *stmpe_gpio = gpiochip_get_data(chip);
struct stmpe *stmpe = stmpe_gpio->stmpe; struct stmpe *stmpe = stmpe_gpio->stmpe;
u8 reg = stmpe->regs[STMPE_IDX_GPMR_LSB] - (offset / 8); u8 reg = stmpe->regs[STMPE_IDX_GPMR_LSB] - (offset / 8);
u8 mask = 1 << (offset % 8); u8 mask = 1 << (offset % 8);
...@@ -58,7 +53,7 @@ static int stmpe_gpio_get(struct gpio_chip *chip, unsigned offset) ...@@ -58,7 +53,7 @@ static int stmpe_gpio_get(struct gpio_chip *chip, unsigned offset)
static void stmpe_gpio_set(struct gpio_chip *chip, unsigned offset, int val) static void stmpe_gpio_set(struct gpio_chip *chip, unsigned offset, int val)
{ {
struct stmpe_gpio *stmpe_gpio = to_stmpe_gpio(chip); struct stmpe_gpio *stmpe_gpio = gpiochip_get_data(chip);
struct stmpe *stmpe = stmpe_gpio->stmpe; struct stmpe *stmpe = stmpe_gpio->stmpe;
int which = val ? STMPE_IDX_GPSR_LSB : STMPE_IDX_GPCR_LSB; int which = val ? STMPE_IDX_GPSR_LSB : STMPE_IDX_GPCR_LSB;
u8 reg = stmpe->regs[which] - (offset / 8); u8 reg = stmpe->regs[which] - (offset / 8);
...@@ -77,7 +72,7 @@ static void stmpe_gpio_set(struct gpio_chip *chip, unsigned offset, int val) ...@@ -77,7 +72,7 @@ static void stmpe_gpio_set(struct gpio_chip *chip, unsigned offset, int val)
static int stmpe_gpio_direction_output(struct gpio_chip *chip, static int stmpe_gpio_direction_output(struct gpio_chip *chip,
unsigned offset, int val) unsigned offset, int val)
{ {
struct stmpe_gpio *stmpe_gpio = to_stmpe_gpio(chip); struct stmpe_gpio *stmpe_gpio = gpiochip_get_data(chip);
struct stmpe *stmpe = stmpe_gpio->stmpe; struct stmpe *stmpe = stmpe_gpio->stmpe;
u8 reg = stmpe->regs[STMPE_IDX_GPDR_LSB] - (offset / 8); u8 reg = stmpe->regs[STMPE_IDX_GPDR_LSB] - (offset / 8);
u8 mask = 1 << (offset % 8); u8 mask = 1 << (offset % 8);
...@@ -90,7 +85,7 @@ static int stmpe_gpio_direction_output(struct gpio_chip *chip, ...@@ -90,7 +85,7 @@ static int stmpe_gpio_direction_output(struct gpio_chip *chip,
static int stmpe_gpio_direction_input(struct gpio_chip *chip, static int stmpe_gpio_direction_input(struct gpio_chip *chip,
unsigned offset) unsigned offset)
{ {
struct stmpe_gpio *stmpe_gpio = to_stmpe_gpio(chip); struct stmpe_gpio *stmpe_gpio = gpiochip_get_data(chip);
struct stmpe *stmpe = stmpe_gpio->stmpe; struct stmpe *stmpe = stmpe_gpio->stmpe;
u8 reg = stmpe->regs[STMPE_IDX_GPDR_LSB] - (offset / 8); u8 reg = stmpe->regs[STMPE_IDX_GPDR_LSB] - (offset / 8);
u8 mask = 1 << (offset % 8); u8 mask = 1 << (offset % 8);
...@@ -100,7 +95,7 @@ static int stmpe_gpio_direction_input(struct gpio_chip *chip, ...@@ -100,7 +95,7 @@ static int stmpe_gpio_direction_input(struct gpio_chip *chip,
static int stmpe_gpio_request(struct gpio_chip *chip, unsigned offset) static int stmpe_gpio_request(struct gpio_chip *chip, unsigned offset)
{ {
struct stmpe_gpio *stmpe_gpio = to_stmpe_gpio(chip); struct stmpe_gpio *stmpe_gpio = gpiochip_get_data(chip);
struct stmpe *stmpe = stmpe_gpio->stmpe; struct stmpe *stmpe = stmpe_gpio->stmpe;
if (stmpe_gpio->norequest_mask & (1 << offset)) if (stmpe_gpio->norequest_mask & (1 << offset))
...@@ -123,7 +118,7 @@ static struct gpio_chip template_chip = { ...@@ -123,7 +118,7 @@ static struct gpio_chip template_chip = {
static int stmpe_gpio_irq_set_type(struct irq_data *d, unsigned int type) static int stmpe_gpio_irq_set_type(struct irq_data *d, unsigned int type)
{ {
struct gpio_chip *gc = irq_data_get_irq_chip_data(d); struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
struct stmpe_gpio *stmpe_gpio = to_stmpe_gpio(gc); struct stmpe_gpio *stmpe_gpio = gpiochip_get_data(gc);
int offset = d->hwirq; int offset = d->hwirq;
int regoffset = offset / 8; int regoffset = offset / 8;
int mask = 1 << (offset % 8); int mask = 1 << (offset % 8);
...@@ -151,7 +146,7 @@ static int stmpe_gpio_irq_set_type(struct irq_data *d, unsigned int type) ...@@ -151,7 +146,7 @@ static int stmpe_gpio_irq_set_type(struct irq_data *d, unsigned int type)
static void stmpe_gpio_irq_lock(struct irq_data *d) static void stmpe_gpio_irq_lock(struct irq_data *d)
{ {
struct gpio_chip *gc = irq_data_get_irq_chip_data(d); struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
struct stmpe_gpio *stmpe_gpio = to_stmpe_gpio(gc); struct stmpe_gpio *stmpe_gpio = gpiochip_get_data(gc);
mutex_lock(&stmpe_gpio->irq_lock); mutex_lock(&stmpe_gpio->irq_lock);
} }
...@@ -159,7 +154,7 @@ static void stmpe_gpio_irq_lock(struct irq_data *d) ...@@ -159,7 +154,7 @@ static void stmpe_gpio_irq_lock(struct irq_data *d)
static void stmpe_gpio_irq_sync_unlock(struct irq_data *d) static void stmpe_gpio_irq_sync_unlock(struct irq_data *d)
{ {
struct gpio_chip *gc = irq_data_get_irq_chip_data(d); struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
struct stmpe_gpio *stmpe_gpio = to_stmpe_gpio(gc); struct stmpe_gpio *stmpe_gpio = gpiochip_get_data(gc);
struct stmpe *stmpe = stmpe_gpio->stmpe; struct stmpe *stmpe = stmpe_gpio->stmpe;
int num_banks = DIV_ROUND_UP(stmpe->num_gpios, 8); int num_banks = DIV_ROUND_UP(stmpe->num_gpios, 8);
static const u8 regmap[] = { static const u8 regmap[] = {
...@@ -193,7 +188,7 @@ static void stmpe_gpio_irq_sync_unlock(struct irq_data *d) ...@@ -193,7 +188,7 @@ static void stmpe_gpio_irq_sync_unlock(struct irq_data *d)
static void stmpe_gpio_irq_mask(struct irq_data *d) static void stmpe_gpio_irq_mask(struct irq_data *d)
{ {
struct gpio_chip *gc = irq_data_get_irq_chip_data(d); struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
struct stmpe_gpio *stmpe_gpio = to_stmpe_gpio(gc); struct stmpe_gpio *stmpe_gpio = gpiochip_get_data(gc);
int offset = d->hwirq; int offset = d->hwirq;
int regoffset = offset / 8; int regoffset = offset / 8;
int mask = 1 << (offset % 8); int mask = 1 << (offset % 8);
...@@ -204,7 +199,7 @@ static void stmpe_gpio_irq_mask(struct irq_data *d) ...@@ -204,7 +199,7 @@ static void stmpe_gpio_irq_mask(struct irq_data *d)
static void stmpe_gpio_irq_unmask(struct irq_data *d) static void stmpe_gpio_irq_unmask(struct irq_data *d)
{ {
struct gpio_chip *gc = irq_data_get_irq_chip_data(d); struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
struct stmpe_gpio *stmpe_gpio = to_stmpe_gpio(gc); struct stmpe_gpio *stmpe_gpio = gpiochip_get_data(gc);
int offset = d->hwirq; int offset = d->hwirq;
int regoffset = offset / 8; int regoffset = offset / 8;
int mask = 1 << (offset % 8); int mask = 1 << (offset % 8);
...@@ -216,7 +211,7 @@ static void stmpe_dbg_show_one(struct seq_file *s, ...@@ -216,7 +211,7 @@ static void stmpe_dbg_show_one(struct seq_file *s,
struct gpio_chip *gc, struct gpio_chip *gc,
unsigned offset, unsigned gpio) unsigned offset, unsigned gpio)
{ {
struct stmpe_gpio *stmpe_gpio = to_stmpe_gpio(gc); struct stmpe_gpio *stmpe_gpio = gpiochip_get_data(gc);
struct stmpe *stmpe = stmpe_gpio->stmpe; struct stmpe *stmpe = stmpe_gpio->stmpe;
const char *label = gpiochip_is_requested(gc, offset); const char *label = gpiochip_is_requested(gc, offset);
int num_banks = DIV_ROUND_UP(stmpe->num_gpios, 8); int num_banks = DIV_ROUND_UP(stmpe->num_gpios, 8);
...@@ -375,7 +370,7 @@ static int stmpe_gpio_probe(struct platform_device *pdev) ...@@ -375,7 +370,7 @@ static int stmpe_gpio_probe(struct platform_device *pdev)
if (ret) if (ret)
goto out_free; goto out_free;
ret = gpiochip_add(&stmpe_gpio->chip); ret = gpiochip_add_data(&stmpe_gpio->chip, stmpe_gpio);
if (ret) { if (ret) {
dev_err(&pdev->dev, "unable to add gpiochip: %d\n", ret); dev_err(&pdev->dev, "unable to add gpiochip: %d\n", ret);
goto out_disable; goto out_disable;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment