Pull gpio fixes from Bartosz Golaszewski: - fix interrupt handling in suspend and wakeup in gpio-vf610 - fix a bug on setting direction to output in gpio-vf610 - add a missing memset() in gpio ACPI code * tag 'gpio-fixes-for-v6.6-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux: gpiolib: acpi: Add missing memset(0) to acpi_get_gpiod_from_data() gpio: vf610: set value before the direction to avoid a glitch gpio: vf610: mask the gpio irq in system suspend and support wakeup
Unified · Split
| @@ -126,14 +126,14 @@ static int vf610_gpio_direction_output(struct gpio_chip *chip, unsigned gpio, · 125 unmodified lines | |||
| 126 | unsigned long mask = BIT(gpio); | 126 | unsigned long mask = BIT(gpio); |
| 127 | u32 val; | 127 | u32 val; |
| 128 | 128 | ||
| 129 | vf610_gpio_set(chip, gpio, value); | ||
| 130 | |||
| 129 | if (port->sdata && port->sdata->have_paddr) { | 131 | if (port->sdata && port->sdata->have_paddr) { |
| 130 | val = vf610_gpio_readl(port->gpio_base + GPIO_PDDR); | 132 | val = vf610_gpio_readl(port->gpio_base + GPIO_PDDR); |
| 131 | val |= mask; | 133 | val |= mask; |
| 132 | vf610_gpio_writel(val, port->gpio_base + GPIO_PDDR); | 134 | vf610_gpio_writel(val, port->gpio_base + GPIO_PDDR); |
| 133 | } | 135 | } |
| 134 | 136 | ||
| 135 | vf610_gpio_set(chip, gpio, value); | ||
| 136 | |||
| 137 | return pinctrl_gpio_direction_output(chip->base + gpio); | 137 | return pinctrl_gpio_direction_output(chip->base + gpio); |
| 138 | } | 138 | } |
| 139 | 139 | ||
| @@ -246,7 +246,8 @@ static const struct irq_chip vf610_irqchip = { · 106 unmodified lines | |||
| 246 | .irq_unmask = vf610_gpio_irq_unmask, | 246 | .irq_unmask = vf610_gpio_irq_unmask, |
| 247 | .irq_set_type = vf610_gpio_irq_set_type, | 247 | .irq_set_type = vf610_gpio_irq_set_type, |
| 248 | .irq_set_wake = vf610_gpio_irq_set_wake, | 248 | .irq_set_wake = vf610_gpio_irq_set_wake, |
| 249 | .flags = IRQCHIP_IMMUTABLE, | 249 | .flags = IRQCHIP_IMMUTABLE | IRQCHIP_MASK_ON_SUSPEND |
| 250 | | IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND, | ||
| 250 | GPIOCHIP_IRQ_RESOURCE_HELPERS, | 251 | GPIOCHIP_IRQ_RESOURCE_HELPERS, |
| 251 | }; | 252 | }; |
| 252 | 253 | ||
| @@ -951,6 +951,7 @@ static struct gpio_desc *acpi_get_gpiod_from_data(struct fwnode_handle *fwnode, · 950 unmodified lines | |||
| 951 | if (!propname) | 951 | if (!propname) |
| 952 | return ERR_PTR(-EINVAL); | 952 | return ERR_PTR(-EINVAL); |
| 953 | 953 | ||
| 954 | memset(&lookup, 0, sizeof(lookup)); | ||
| 954 | lookup.index = index; | 955 | lookup.index = index; |
| 955 | 956 | ||
| 956 | ret = acpi_gpio_property_lookup(fwnode, propname, index, &lookup); | 957 | ret = acpi_gpio_property_lookup(fwnode, propname, index, &lookup); |