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 :)