return -ENOTSUPP;
}
+static int max77620_gpio_irq_init_hw(struct gpio_chip *gc)
+{
+ struct max77620_gpio *gpio = gpiochip_get_data(gc);
+ unsigned int i;
+ int err;
+
+ /*
+ * GPIO interrupts may be left ON after bootloader, hence let's
+ * pre-initialize hardware to the expected state by disabling all
+ * the interrupts.
+ */
+ for (i = 0; i < MAX77620_GPIO_NR; i++) {
+ err = regmap_update_bits(gpio->rmap, GPIO_REG_ADDR(i),
+ MAX77620_CNFG_GPIO_INT_MASK, 0);
+ if (err < 0) {
+ dev_err(gpio->dev,
+ "failed to disable interrupt: %d\n", err);
+ return err;
+ }
+ }
+
+ return 0;
+}
+
static int max77620_gpio_probe(struct platform_device *pdev)
{
struct max77620_chip *chip = dev_get_drvdata(pdev->dev.parent);
mgpio->gpio_chip.irq.chip = &max77620_gpio_irqchip;
mgpio->gpio_chip.irq.default_type = IRQ_TYPE_NONE;
mgpio->gpio_chip.irq.handler = handle_edge_irq;
+ mgpio->gpio_chip.irq.init_hw = max77620_gpio_irq_init_hw,
mgpio->gpio_chip.irq.threaded = true;
platform_set_drvdata(pdev, mgpio);