pinctrl: stm32: Implement .get_direction gpio_chip callback
Add .get_direction() gpiochip callback in STM32 pinctrl driver. Signed-off-by: Alexandre TORGUE <alexandre.torgue@st.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
9efa6d1a1e
commit
acaa037970
|
@ -209,6 +209,24 @@ static int stm32_gpio_to_irq(struct gpio_chip *chip, unsigned int offset)
|
||||||
return irq_create_fwspec_mapping(&fwspec);
|
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 = {
|
static const struct gpio_chip stm32_gpio_template = {
|
||||||
.request = stm32_gpio_request,
|
.request = stm32_gpio_request,
|
||||||
.free = stm32_gpio_free,
|
.free = stm32_gpio_free,
|
||||||
|
@ -217,6 +235,7 @@ static const struct gpio_chip stm32_gpio_template = {
|
||||||
.direction_input = stm32_gpio_direction_input,
|
.direction_input = stm32_gpio_direction_input,
|
||||||
.direction_output = stm32_gpio_direction_output,
|
.direction_output = stm32_gpio_direction_output,
|
||||||
.to_irq = stm32_gpio_to_irq,
|
.to_irq = stm32_gpio_to_irq,
|
||||||
|
.get_direction = stm32_gpio_get_direction,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int stm32_gpio_irq_request_resources(struct irq_data *irq_data)
|
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);
|
clk_disable(bank->clk);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void stm32_pmx_get_mode(struct stm32_gpio_bank *bank,
|
void stm32_pmx_get_mode(struct stm32_gpio_bank *bank, int pin, u32 *mode,
|
||||||
int pin, u32 *mode, u32 *alt)
|
u32 *alt)
|
||||||
{
|
{
|
||||||
u32 val;
|
u32 val;
|
||||||
int alt_shift = (pin % 8) * 4;
|
int alt_shift = (pin % 8) * 4;
|
||||||
|
|
|
@ -45,7 +45,10 @@ struct stm32_pinctrl_match_data {
|
||||||
const unsigned int npins;
|
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 */
|
#endif /* __PINCTRL_STM32_H */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue