123456789101112131415161718192021222324252627282930313233343536373839404142 |
- From 55125538eea73e8156f3457ada0756c535400825 Mon Sep 17 00:00:00 2001
- From: Phil Elwell <[email protected]>
- Date: Wed, 30 Mar 2022 09:48:41 +0100
- Subject: [PATCH] pinctrl: bcm2835: Only return non-GPIOs to inputs
- Allowing GPIO state to persist allows the use of gpioset to control
- GPIO levels without having to use the --mode=wait feature.
- Signed-off-by: Phil Elwell <[email protected]>
- ---
- drivers/pinctrl/bcm/pinctrl-bcm2835.c | 12 ++++++------
- 1 file changed, 6 insertions(+), 6 deletions(-)
- --- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
- +++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
- @@ -908,9 +908,12 @@ static int bcm2835_pmx_free(struct pinct
- unsigned offset)
- {
- struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
- + enum bcm2835_fsel fsel = bcm2835_pinctrl_fsel_get(pc, offset);
- +
- + /* Return non-GPIOs to GPIO_IN */
- + if (fsel != BCM2835_FSEL_GPIO_IN && fsel != BCM2835_FSEL_GPIO_OUT)
- + bcm2835_pinctrl_fsel_set(pc, offset, BCM2835_FSEL_GPIO_IN);
-
- - /* disable by setting to GPIO_IN */
- - bcm2835_pinctrl_fsel_set(pc, offset, BCM2835_FSEL_GPIO_IN);
- return 0;
- }
-
- @@ -952,10 +955,7 @@ static void bcm2835_pmx_gpio_disable_fre
- struct pinctrl_gpio_range *range,
- unsigned offset)
- {
- - struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
- -
- - /* disable by setting to GPIO_IN */
- - bcm2835_pinctrl_fsel_set(pc, offset, BCM2835_FSEL_GPIO_IN);
- + (void)bcm2835_pmx_free(pctldev, offset);
- }
-
- static int bcm2835_pmx_gpio_set_direction(struct pinctrl_dev *pctldev,
|