Device's IRQ broke after Linux kernel update

288 views Asked by At

After upgrading from 3.18.31 to 3.18.71 kernel to bringup Android Oreo for my device (msm8953, stock - Nougat), IRQ in cs35l35 driver became broken. Before upgrade, IRQ handled only 3-4 times, but now it can be handled >10k times in 5 minutes. I've tried to look at other drivers in sound/soc/codecs with IRQ, but they have nearly the same code to register IRQ handler.

Also, IRQ handler doesn't work anymore after E irq 97 : nobody cared (try booting with the "irqpoll" option) message in log. I've looked into /proc/interrupts and cs35l35 IRQ was 97.

GPIO interrupt pin connected to gpio90, pulled down.

IRQ handler register code:

    cs35l35->irq_gpio = devm_gpiod_get_optional(&i2c_client->dev,
        "irq", GPIOD_IN);
    if (IS_ERR(cs35l35->irq_gpio))
        return PTR_ERR(cs35l35->irq_gpio);

    ret = devm_request_threaded_irq(&i2c_client->dev,
                    gpiod_to_irq(cs35l35->irq_gpio),
                    NULL, cs35l35_irq,
                    IRQF_ONESHOT | IRQF_TRIGGER_LOW,
                    "cs35l35", cs35l35);
    if (ret != 0) {
        dev_err(&i2c_client->dev, "Failed to request IRQ: %d\n", ret);
        goto err;
    }

Any other code can be found at https://github.com/meizucustoms/android_kernel_meizu_m1721 (branch lineage-15.1-rebase). cs35l35.c - https://github.com/meizucustoms/android_kernel_meizu_m1721/blob/lineage-15.1-rebase/sound/soc/codecs/cs35l35.c

So, how can I fix this? Thank you for any help :)

0

There are 0 answers