aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Breathitt Gray <vilhelm.gray@gmail.com>2018-04-18 08:53:21 -0400
committerLinus Walleij <linus.walleij@linaro.org>2018-04-26 18:56:11 -0400
commit304440aa96c6e5cc37eaa7a46ff4dd862e4c21be (patch)
tree401aaccbe6f4a426f1aff4b470f4f82cdfaab18a
parentaaf96e51de117cdfa2dc04735639895b46a3da3f (diff)
gpio: pcie-idio-24: Fix port memory offset for get_multiple/set_multiple callbacks
The ioread8/iowrite8 functions expect a memory offset argument. This patch fixes the ports array to provide the memory addresses of the respective device I/O registers. Fixes: ca37081595a2 ("gpio: pcie-idio-24: Implement get_multiple/set_multiple callbacks") Signed-off-by: William Breathitt Gray <vilhelm.gray@gmail.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
-rw-r--r--drivers/gpio/gpio-pcie-idio-24.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/drivers/gpio/gpio-pcie-idio-24.c b/drivers/gpio/gpio-pcie-idio-24.c
index 835607ecf658..3e77c2a9a9fd 100644
--- a/drivers/gpio/gpio-pcie-idio-24.c
+++ b/drivers/gpio/gpio-pcie-idio-24.c
@@ -206,10 +206,10 @@ static int idio_24_gpio_get_multiple(struct gpio_chip *chip,
206 unsigned long word_mask; 206 unsigned long word_mask;
207 const unsigned long port_mask = GENMASK(gpio_reg_size - 1, 0); 207 const unsigned long port_mask = GENMASK(gpio_reg_size - 1, 0);
208 unsigned long port_state; 208 unsigned long port_state;
209 u8 __iomem ports[] = { 209 void __iomem *ports[] = {
210 idio24gpio->reg->out0_7, idio24gpio->reg->out8_15, 210 &idio24gpio->reg->out0_7, &idio24gpio->reg->out8_15,
211 idio24gpio->reg->out16_23, idio24gpio->reg->in0_7, 211 &idio24gpio->reg->out16_23, &idio24gpio->reg->in0_7,
212 idio24gpio->reg->in8_15, idio24gpio->reg->in16_23, 212 &idio24gpio->reg->in8_15, &idio24gpio->reg->in16_23,
213 }; 213 };
214 const unsigned long out_mode_mask = BIT(1); 214 const unsigned long out_mode_mask = BIT(1);
215 215
@@ -236,7 +236,7 @@ static int idio_24_gpio_get_multiple(struct gpio_chip *chip,
236 236
237 /* read bits from current gpio port (port 6 is TTL GPIO) */ 237 /* read bits from current gpio port (port 6 is TTL GPIO) */
238 if (i < 6) 238 if (i < 6)
239 port_state = ioread8(ports + i); 239 port_state = ioread8(ports[i]);
240 else if (ioread8(&idio24gpio->reg->ctl) & out_mode_mask) 240 else if (ioread8(&idio24gpio->reg->ctl) & out_mode_mask)
241 port_state = ioread8(&idio24gpio->reg->ttl_out0_7); 241 port_state = ioread8(&idio24gpio->reg->ttl_out0_7);
242 else 242 else
@@ -301,9 +301,9 @@ static void idio_24_gpio_set_multiple(struct gpio_chip *chip,
301 const unsigned long port_mask = GENMASK(gpio_reg_size, 0); 301 const unsigned long port_mask = GENMASK(gpio_reg_size, 0);
302 unsigned long flags; 302 unsigned long flags;
303 unsigned int out_state; 303 unsigned int out_state;
304 u8 __iomem ports[] = { 304 void __iomem *ports[] = {
305 idio24gpio->reg->out0_7, idio24gpio->reg->out8_15, 305 &idio24gpio->reg->out0_7, &idio24gpio->reg->out8_15,
306 idio24gpio->reg->out16_23 306 &idio24gpio->reg->out16_23
307 }; 307 };
308 const unsigned long out_mode_mask = BIT(1); 308 const unsigned long out_mode_mask = BIT(1);
309 const unsigned int ttl_offset = 48; 309 const unsigned int ttl_offset = 48;
@@ -327,9 +327,9 @@ static void idio_24_gpio_set_multiple(struct gpio_chip *chip,
327 raw_spin_lock_irqsave(&idio24gpio->lock, flags); 327 raw_spin_lock_irqsave(&idio24gpio->lock, flags);
328 328
329 /* process output lines */ 329 /* process output lines */
330 out_state = ioread8(ports + i) & ~gpio_mask; 330 out_state = ioread8(ports[i]) & ~gpio_mask;
331 out_state |= (*bits >> bits_offset) & gpio_mask; 331 out_state |= (*bits >> bits_offset) & gpio_mask;
332 iowrite8(out_state, ports + i); 332 iowrite8(out_state, ports[i]);
333 333
334 raw_spin_unlock_irqrestore(&idio24gpio->lock, flags); 334 raw_spin_unlock_irqrestore(&idio24gpio->lock, flags);
335 } 335 }