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

Commit acaa0379 authored by Alexandre TORGUE's avatar Alexandre TORGUE Committed by Linus Walleij
Browse files

pinctrl: stm32: Implement .get_direction gpio_chip callback



Add .get_direction() gpiochip callback in STM32 pinctrl driver.

Signed-off-by: default avatarAlexandre TORGUE <alexandre.torgue@st.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 9efa6d1a
Loading
Loading
Loading
Loading
+21 −2
Original line number Diff line number Diff line
@@ -209,6 +209,24 @@ static int stm32_gpio_to_irq(struct gpio_chip *chip, unsigned int offset)
	return irq_create_fwspec_mapping(&fwspec);
}

static int stm32_gpio_get_direction(struct gpio_chip *chip, unsigned int offset)
{
	struct stm32_gpio_bank *bank = gpiochip_get_data(chip);
	int pin = stm32_gpio_pin(offset);
	int ret;
	u32 mode, alt;

	stm32_pmx_get_mode(bank, pin, &mode, &alt);
	if ((alt == 0) && (mode == 0))
		ret = 1;
	else if ((alt == 0) && (mode == 1))
		ret = 0;
	else
		ret = -EINVAL;

	return ret;
}

static const struct gpio_chip stm32_gpio_template = {
	.request		= stm32_gpio_request,
	.free			= stm32_gpio_free,
@@ -217,6 +235,7 @@ static const struct gpio_chip stm32_gpio_template = {
	.direction_input	= stm32_gpio_direction_input,
	.direction_output	= stm32_gpio_direction_output,
	.to_irq			= stm32_gpio_to_irq,
	.get_direction		= stm32_gpio_get_direction,
};

static int stm32_gpio_irq_request_resources(struct irq_data *irq_data)
@@ -577,8 +596,8 @@ static void stm32_pmx_set_mode(struct stm32_gpio_bank *bank,
	clk_disable(bank->clk);
}

static void stm32_pmx_get_mode(struct stm32_gpio_bank *bank,
		int pin, u32 *mode, u32 *alt)
void stm32_pmx_get_mode(struct stm32_gpio_bank *bank, int pin, u32 *mode,
			u32 *alt)
{
	u32 val;
	int alt_shift = (pin % 8) * 4;
+4 −1
Original line number Diff line number Diff line
@@ -45,7 +45,10 @@ struct stm32_pinctrl_match_data {
	const unsigned int npins;
};

int stm32_pctl_probe(struct platform_device *pdev);
struct stm32_gpio_bank;

int stm32_pctl_probe(struct platform_device *pdev);
void stm32_pmx_get_mode(struct stm32_gpio_bank *bank,
			int pin, u32 *mode, u32 *alt);
#endif /* __PINCTRL_STM32_H */