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

Commit 6653dd88 authored by Russell King's avatar Russell King Committed by Linus Walleij
Browse files

gpio: omap: simplify get_multiple()



There is no reason to have helper functions to read the datain and
dataout registers when they are only used in one location.  Simplify
this code to make it more readable.

Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: default avatarGrygorii Strashko <grygorii.strashko@ti.com>
Tested-by: default avatarTony Lindgren <tony@atomide.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 5ca5f92c
Loading
Loading
Loading
Loading
+11 −25
Original line number Diff line number Diff line
@@ -175,22 +175,6 @@ static void omap_set_gpio_dataout_mask_multiple(struct gpio_bank *bank,
	bank->context.dataout = l;
}

static unsigned long omap_get_gpio_datain_multiple(struct gpio_bank *bank,
					      unsigned long *mask)
{
	void __iomem *reg = bank->base + bank->regs->datain;

	return readl_relaxed(reg) & *mask;
}

static unsigned long omap_get_gpio_dataout_multiple(struct gpio_bank *bank,
					       unsigned long *mask)
{
	void __iomem *reg = bank->base + bank->regs->dataout;

	return readl_relaxed(reg) & *mask;
}

static inline void omap_gpio_rmw(void __iomem *base, u32 reg, u32 mask, bool set)
{
	int l = readl_relaxed(base + reg);
@@ -987,18 +971,20 @@ static int omap_gpio_get_multiple(struct gpio_chip *chip, unsigned long *mask,
				  unsigned long *bits)
{
	struct gpio_bank *bank = gpiochip_get_data(chip);
	void __iomem *reg = bank->base + bank->regs->direction;
	unsigned long in = readl_relaxed(reg), l;
	void __iomem *base = bank->base;
	u32 direction, m, val = 0;

	direction = readl_relaxed(base + bank->regs->direction);

	*bits = 0;
	m = direction & *mask;
	if (m)
		val |= readl_relaxed(base + bank->regs->datain) & m;

	l = in & *mask;
	if (l)
		*bits |= omap_get_gpio_datain_multiple(bank, &l);
	m = ~direction & *mask;
	if (m)
		val |= readl_relaxed(base + bank->regs->dataout) & m;

	l = ~in & *mask;
	if (l)
		*bits |= omap_get_gpio_dataout_multiple(bank, &l);
	*bits = val;

	return 0;
}