Message ID | 20211206131648.1521868-3-hverkuil-cisco@xs4all.nl |
---|---|
State | Accepted |
Commit | 1a4541b68e250bc4b21bd4c6178877523c5d896b |
Headers | show |
Series | pinctrl: can_sleep and pinctrl_gpio_direction | expand |
On 12/6/21 5:16 AM, Hans Verkuil wrote: > Set the direction directly without calling pinctrl_gpio_direction(). > This avoids the mutex_lock() calls in that function, which would > invalid the can_sleep = false. make invalid, or invalidate? With that fixed: Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
On Mon, Dec 6, 2021 at 2:16 PM Hans Verkuil <hverkuil-cisco@xs4all.nl> wrote: > Set the direction directly without calling pinctrl_gpio_direction(). > This avoids the mutex_lock() calls in that function, which would > invalid the can_sleep = false. > > Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Patch applied. Yours, Linus Walleij
diff --git a/drivers/pinctrl/bcm/pinctrl-bcm2835.c b/drivers/pinctrl/bcm/pinctrl-bcm2835.c index 2abcc6ce4eba..2f51fc3b24eb 100644 --- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c +++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c @@ -313,7 +313,10 @@ static inline void bcm2835_pinctrl_fsel_set( static int bcm2835_gpio_direction_input(struct gpio_chip *chip, unsigned offset) { - return pinctrl_gpio_direction_input(chip->base + offset); + struct bcm2835_pinctrl *pc = gpiochip_get_data(chip); + + bcm2835_pinctrl_fsel_set(pc, offset, BCM2835_FSEL_GPIO_IN); + return 0; } static int bcm2835_gpio_get(struct gpio_chip *chip, unsigned offset) @@ -348,8 +351,11 @@ static void bcm2835_gpio_set(struct gpio_chip *chip, unsigned offset, int value) static int bcm2835_gpio_direction_output(struct gpio_chip *chip, unsigned offset, int value) { - bcm2835_gpio_set(chip, offset, value); - return pinctrl_gpio_direction_output(chip->base + offset); + struct bcm2835_pinctrl *pc = gpiochip_get_data(chip); + + bcm2835_gpio_set_bit(pc, value ? GPSET0 : GPCLR0, offset); + bcm2835_pinctrl_fsel_set(pc, offset, BCM2835_FSEL_GPIO_OUT); + return 0; } static const struct gpio_chip bcm2835_gpio_chip = {
Set the direction directly without calling pinctrl_gpio_direction(). This avoids the mutex_lock() calls in that function, which would invalid the can_sleep = false. Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> --- drivers/pinctrl/bcm/pinctrl-bcm2835.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)