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

Commit 8e293fb0 authored by Linus Walleij's avatar Linus Walleij
Browse files

gpio: stmpe: implement .get_direction()



This implements the .get_direction() callback for the STMPE
expander GPIO.

Cc: Patrice Chotard <patrice.chotard@st.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 353661df
Loading
Loading
Loading
Loading
+17 −0
Original line number Original line Diff line number Diff line
@@ -68,6 +68,22 @@ static void stmpe_gpio_set(struct gpio_chip *chip, unsigned offset, int val)
		stmpe_reg_write(stmpe, reg, mask);
		stmpe_reg_write(stmpe, reg, mask);
}
}


static int stmpe_gpio_get_direction(struct gpio_chip *chip,
				    unsigned offset)
{
	struct stmpe_gpio *stmpe_gpio = gpiochip_get_data(chip);
	struct stmpe *stmpe = stmpe_gpio->stmpe;
	u8 reg = stmpe->regs[STMPE_IDX_GPDR_LSB] - (offset / 8);
	u8 mask = 1 << (offset % 8);
	int ret;

	ret = stmpe_reg_read(stmpe, reg);
	if (ret < 0)
		return ret;

	return !(ret & mask);
}

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)
{
{
@@ -106,6 +122,7 @@ static int stmpe_gpio_request(struct gpio_chip *chip, unsigned offset)
static struct gpio_chip template_chip = {
static struct gpio_chip template_chip = {
	.label			= "stmpe",
	.label			= "stmpe",
	.owner			= THIS_MODULE,
	.owner			= THIS_MODULE,
	.get_direction		= stmpe_gpio_get_direction,
	.direction_input	= stmpe_gpio_direction_input,
	.direction_input	= stmpe_gpio_direction_input,
	.get			= stmpe_gpio_get,
	.get			= stmpe_gpio_get,
	.direction_output	= stmpe_gpio_direction_output,
	.direction_output	= stmpe_gpio_direction_output,