Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 304440aa authored by William Breathitt Gray's avatar William Breathitt Gray Committed by Linus Walleij
Browse files

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: ca370815 ("gpio: pcie-idio-24: Implement get_multiple/set_multiple callbacks")
Signed-off-by: default avatarWilliam Breathitt Gray <vilhelm.gray@gmail.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent aaf96e51
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -206,10 +206,10 @@ static int idio_24_gpio_get_multiple(struct gpio_chip *chip,
	unsigned long word_mask;
	const unsigned long port_mask = GENMASK(gpio_reg_size - 1, 0);
	unsigned long port_state;
	u8 __iomem ports[] = {
		idio24gpio->reg->out0_7, idio24gpio->reg->out8_15,
		idio24gpio->reg->out16_23, idio24gpio->reg->in0_7,
		idio24gpio->reg->in8_15, idio24gpio->reg->in16_23,
	void __iomem *ports[] = {
		&idio24gpio->reg->out0_7, &idio24gpio->reg->out8_15,
		&idio24gpio->reg->out16_23, &idio24gpio->reg->in0_7,
		&idio24gpio->reg->in8_15, &idio24gpio->reg->in16_23,
	};
	const unsigned long out_mode_mask = BIT(1);

@@ -236,7 +236,7 @@ static int idio_24_gpio_get_multiple(struct gpio_chip *chip,

		/* read bits from current gpio port (port 6 is TTL GPIO) */
		if (i < 6)
			port_state = ioread8(ports + i);
			port_state = ioread8(ports[i]);
		else if (ioread8(&idio24gpio->reg->ctl) & out_mode_mask)
			port_state = ioread8(&idio24gpio->reg->ttl_out0_7);
		else
@@ -301,9 +301,9 @@ static void idio_24_gpio_set_multiple(struct gpio_chip *chip,
	const unsigned long port_mask = GENMASK(gpio_reg_size, 0);
	unsigned long flags;
	unsigned int out_state;
	u8 __iomem ports[] = {
		idio24gpio->reg->out0_7, idio24gpio->reg->out8_15,
		idio24gpio->reg->out16_23
	void __iomem *ports[] = {
		&idio24gpio->reg->out0_7, &idio24gpio->reg->out8_15,
		&idio24gpio->reg->out16_23
	};
	const unsigned long out_mode_mask = BIT(1);
	const unsigned int ttl_offset = 48;
@@ -327,9 +327,9 @@ static void idio_24_gpio_set_multiple(struct gpio_chip *chip,
		raw_spin_lock_irqsave(&idio24gpio->lock, flags);

		/* process output lines */
		out_state = ioread8(ports + i) & ~gpio_mask;
		out_state = ioread8(ports[i]) & ~gpio_mask;
		out_state |= (*bits >> bits_offset) & gpio_mask;
		iowrite8(out_state, ports + i);
		iowrite8(out_state, ports[i]);

		raw_spin_unlock_irqrestore(&idio24gpio->lock, flags);
	}