From 7434e9a293a562f6ddafa395d49b3027d71df4dc Mon Sep 17 00:00:00 2001 From: Chenjian Date: Tue, 27 Dec 2022 09:46:35 +0800 Subject: [PATCH] mfd: clear interrupt status in probe VRS RTC may assert interrupt if battery mounted. Clear the status registers before interrupt enabled to prevent bad logic. Bug 3910065 Bug 3742306 Change-Id: I02dc6ce9352b1f1932cc539e6988375da4098014 Signed-off-by: Chenjian Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2833620 (cherry picked from commit a50dd0a752641a30d84a5edfed426a12f2641acc) Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2839704 (cherry picked from commit 1b7ac9b9dce9e87b6eab9f0116414fa636b00f87) Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3414735 Reviewed-by: Shubhi Garg Tested-by: Shubhi Garg Reviewed-by: Bibek Basu GVS: buildbot_gerritrpt --- drivers/mfd/nvidia-vrs-pseq.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/mfd/nvidia-vrs-pseq.c b/drivers/mfd/nvidia-vrs-pseq.c index eb40c56d..40cffb28 100644 --- a/drivers/mfd/nvidia-vrs-pseq.c +++ b/drivers/mfd/nvidia-vrs-pseq.c @@ -228,6 +228,14 @@ static int nvvrs_pseq_probe(struct i2c_client *client, return ret; } + /* When battery mounted, the chip may have IRQ asserted. */ + /* Clear it before IRQ requested. */ + ret = nvvrs_pseq_irq_clear(nvvrs_chip); + if (ret < 0) { + dev_err(nvvrs_chip->dev, "Failed to clear IRQ: %d\n", ret); + return ret; + } + nvvrs_pseq_irq_chip.irq_drv_data = nvvrs_chip; ret = devm_regmap_add_irq_chip(nvvrs_chip->dev, nvvrs_chip->rmap, client->irq, IRQF_ONESHOT | IRQF_SHARED, 0,