diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2022-05-20 08:26:28 -1000 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2022-05-20 08:26:28 -1000 |
commit | 3b5e1590a26713a8c76896f0f1b99f52ec24e72f (patch) | |
tree | 0d2b902cc54c23c042c53d7cf6919eef484cd43f /drivers | |
parent | 317de3dbe2f16eb732de685cf49390349ecff2f3 (diff) | |
parent | 3ecb10175b1f776f076553c24e2689e42953fef5 (diff) | |
download | linux-rpi-3b5e1590a26713a8c76896f0f1b99f52ec24e72f.tar.gz linux-rpi-3b5e1590a26713a8c76896f0f1b99f52ec24e72f.tar.bz2 linux-rpi-3b5e1590a26713a8c76896f0f1b99f52ec24e72f.zip |
Merge tag 'gpio-fixes-for-v5.18' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux
Pull gpio fixes from Bartosz Golaszewski:
- fix bitops logic in gpio-vf610
- return an error if the user tries to use inverted polarity in
gpio-mvebu
* tag 'gpio-fixes-for-v5.18' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux:
gpio: mvebu/pwm: Refuse requests with inverted polarity
gpio: gpio-vf610: do not touch other bits when set the target bit
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpio/gpio-mvebu.c | 3 | ||||
-rw-r--r-- | drivers/gpio/gpio-vf610.c | 8 |
2 files changed, 9 insertions, 2 deletions
diff --git a/drivers/gpio/gpio-mvebu.c b/drivers/gpio/gpio-mvebu.c index a2c8dd329b31..2db19cd640a4 100644 --- a/drivers/gpio/gpio-mvebu.c +++ b/drivers/gpio/gpio-mvebu.c @@ -707,6 +707,9 @@ static int mvebu_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, unsigned long flags; unsigned int on, off; + if (state->polarity != PWM_POLARITY_NORMAL) + return -EINVAL; + val = (unsigned long long) mvpwm->clk_rate * state->duty_cycle; do_div(val, NSEC_PER_SEC); if (val > UINT_MAX + 1ULL) diff --git a/drivers/gpio/gpio-vf610.c b/drivers/gpio/gpio-vf610.c index 20780c35da1b..23cddb265a0d 100644 --- a/drivers/gpio/gpio-vf610.c +++ b/drivers/gpio/gpio-vf610.c @@ -125,9 +125,13 @@ static int vf610_gpio_direction_output(struct gpio_chip *chip, unsigned gpio, { struct vf610_gpio_port *port = gpiochip_get_data(chip); unsigned long mask = BIT(gpio); + u32 val; - if (port->sdata && port->sdata->have_paddr) - vf610_gpio_writel(mask, port->gpio_base + GPIO_PDDR); + if (port->sdata && port->sdata->have_paddr) { + val = vf610_gpio_readl(port->gpio_base + GPIO_PDDR); + val |= mask; + vf610_gpio_writel(val, port->gpio_base + GPIO_PDDR); + } vf610_gpio_set(chip, gpio, value); |