From d288491f1b5a3288fd2a11a23e7e654ce54c70a9 Mon Sep 17 00:00:00 2001 From: Ashay Jaiswal Date: Thu, 13 Apr 2017 15:29:18 +0530 Subject: [PATCH] qcom: smb2: ensure QC adapter is at 5V at shutdown In the shutdown hook, driver forces adapter to 5V but there is a possibility that the source change IRQ triggers and moves back the adapter to 9V. To avoid this and any race between the irq's and shutdown path, disable all irqs as the first step in shutdown path. CRs-Fixed: 2032575 Change-Id: I0d8f59a73b6631e9bf6f5d64dd215c239e7772fe Signed-off-by: Ashay Jaiswal --- drivers/power/supply/qcom/qpnp-smb2.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/power/supply/qcom/qpnp-smb2.c b/drivers/power/supply/qcom/qpnp-smb2.c index 81e656c06da0..289ccbedbc9f 100644 --- a/drivers/power/supply/qcom/qpnp-smb2.c +++ b/drivers/power/supply/qcom/qpnp-smb2.c @@ -2022,6 +2022,16 @@ static int smb2_request_interrupts(struct smb2 *chip) return rc; } +static void smb2_disable_interrupts(struct smb_charger *chg) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(smb2_irqs); i++) { + if (smb2_irqs[i].irq > 0) + disable_irq(smb2_irqs[i].irq); + } +} + #if defined(CONFIG_DEBUG_FS) static int force_batt_psy_update_write(void *data, u64 val) @@ -2284,6 +2294,9 @@ static void smb2_shutdown(struct platform_device *pdev) struct smb2 *chip = platform_get_drvdata(pdev); struct smb_charger *chg = &chip->chg; + /* disable all interrupts */ + smb2_disable_interrupts(chg); + /* configure power role for UFP */ smblib_masked_write(chg, TYPE_C_INTRPT_ENB_SOFTWARE_CTRL_REG, TYPEC_POWER_ROLE_CMD_MASK, UFP_EN_CMD_BIT);