Commit 7d42e981 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'gpio-fixes-for-v5.15-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux

Pull gpio fixes from Bartosz Golaszewski:

 - fix a regression in GPIO ACPI on HP ElitePad 1000 G2 where the
   gpio_set_debounce_timeout() now returns a fatal error if the specific
   debounce period is not supported by the driver instead of just
   emitting a warning

 - fix return values of irq_mask/unmask() callbacks in gpio-uniphier

 - fix hwirq calculation in gpio-aspeed-sgpio

 - fix two issues in gpio-rockchip: only make the extended debounce
   support available for v2 and remove a redundant BIT() usage

* tag 'gpio-fixes-for-v5.15-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux:
  gpio/rockchip: fix get_direction value handling
  gpio/rockchip: extended debounce support is only available on v2
  gpio: gpio-aspeed-sgpio: Fix wrong hwirq in irq handler.
  gpio: uniphier: Fix void functions to remove return value
  gpiolib: acpi: Make set-debounce-timeout failures non fatal
parents 47d7e65d b22a4705
...@@ -395,7 +395,7 @@ static void aspeed_sgpio_irq_handler(struct irq_desc *desc) ...@@ -395,7 +395,7 @@ static void aspeed_sgpio_irq_handler(struct irq_desc *desc)
reg = ioread32(bank_reg(data, bank, reg_irq_status)); reg = ioread32(bank_reg(data, bank, reg_irq_status));
for_each_set_bit(p, &reg, 32) for_each_set_bit(p, &reg, 32)
generic_handle_domain_irq(gc->irq.domain, i * 32 + p); generic_handle_domain_irq(gc->irq.domain, i * 32 + p * 2);
} }
chained_irq_exit(ic, desc); chained_irq_exit(ic, desc);
......
...@@ -141,7 +141,7 @@ static int rockchip_gpio_get_direction(struct gpio_chip *chip, ...@@ -141,7 +141,7 @@ static int rockchip_gpio_get_direction(struct gpio_chip *chip,
u32 data; u32 data;
data = rockchip_gpio_readl_bit(bank, offset, bank->gpio_regs->port_ddr); data = rockchip_gpio_readl_bit(bank, offset, bank->gpio_regs->port_ddr);
if (data & BIT(offset)) if (data)
return GPIO_LINE_DIRECTION_OUT; return GPIO_LINE_DIRECTION_OUT;
return GPIO_LINE_DIRECTION_IN; return GPIO_LINE_DIRECTION_IN;
...@@ -195,7 +195,7 @@ static int rockchip_gpio_set_debounce(struct gpio_chip *gc, ...@@ -195,7 +195,7 @@ static int rockchip_gpio_set_debounce(struct gpio_chip *gc,
unsigned int cur_div_reg; unsigned int cur_div_reg;
u64 div; u64 div;
if (!IS_ERR(bank->db_clk)) { if (bank->gpio_type == GPIO_TYPE_V2 && !IS_ERR(bank->db_clk)) {
div_debounce_support = true; div_debounce_support = true;
freq = clk_get_rate(bank->db_clk); freq = clk_get_rate(bank->db_clk);
max_debounce = (GENMASK(23, 0) + 1) * 2 * 1000000 / freq; max_debounce = (GENMASK(23, 0) + 1) * 2 * 1000000 / freq;
......
...@@ -184,7 +184,7 @@ static void uniphier_gpio_irq_mask(struct irq_data *data) ...@@ -184,7 +184,7 @@ static void uniphier_gpio_irq_mask(struct irq_data *data)
uniphier_gpio_reg_update(priv, UNIPHIER_GPIO_IRQ_EN, mask, 0); uniphier_gpio_reg_update(priv, UNIPHIER_GPIO_IRQ_EN, mask, 0);
return irq_chip_mask_parent(data); irq_chip_mask_parent(data);
} }
static void uniphier_gpio_irq_unmask(struct irq_data *data) static void uniphier_gpio_irq_unmask(struct irq_data *data)
...@@ -194,7 +194,7 @@ static void uniphier_gpio_irq_unmask(struct irq_data *data) ...@@ -194,7 +194,7 @@ static void uniphier_gpio_irq_unmask(struct irq_data *data)
uniphier_gpio_reg_update(priv, UNIPHIER_GPIO_IRQ_EN, mask, mask); uniphier_gpio_reg_update(priv, UNIPHIER_GPIO_IRQ_EN, mask, mask);
return irq_chip_unmask_parent(data); irq_chip_unmask_parent(data);
} }
static int uniphier_gpio_irq_set_type(struct irq_data *data, unsigned int type) static int uniphier_gpio_irq_set_type(struct irq_data *data, unsigned int type)
......
...@@ -313,9 +313,11 @@ static struct gpio_desc *acpi_request_own_gpiod(struct gpio_chip *chip, ...@@ -313,9 +313,11 @@ static struct gpio_desc *acpi_request_own_gpiod(struct gpio_chip *chip,
ret = gpio_set_debounce_timeout(desc, agpio->debounce_timeout); ret = gpio_set_debounce_timeout(desc, agpio->debounce_timeout);
if (ret) if (ret)
gpiochip_free_own_desc(desc); dev_warn(chip->parent,
"Failed to set debounce-timeout for pin 0x%04X, err %d\n",
pin, ret);
return ret ? ERR_PTR(ret) : desc; return desc;
} }
static bool acpi_gpio_in_ignore_list(const char *controller_in, int pin_in) static bool acpi_gpio_in_ignore_list(const char *controller_in, int pin_in)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment