diff --git a/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.c b/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.c index c3ff6dfbd960..69ac57dbe609 100644 --- a/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.c +++ b/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.c @@ -230,10 +230,22 @@ static int sc760x_enable_chip(struct sc760x_chip *sc, bool en) sc->sc760x_enable = en; if (sc->sc760x_enable) { + + if (!sc->irq_enabled) { + enable_irq_wake(sc->irq); + enable_irq(sc->irq); + sc->irq_enable = true; + } ret = sc760x_init_device(sc); if (ret < 0) { pr_info("init device failed(%d)\n", ret); } + } else { + if (sc->irq_enabled) { + disable_irq_wake(sc->irq); + disable_irq(sc->irq); + sc->irq_enable = false; + } } dev_err(sc->dev, "success to set %s state, sleep 2s\n", pinctrl_name); @@ -1166,7 +1178,9 @@ static int sc760x_register_interrupt(struct sc760x_chip *sc, struct i2c_client * return ret; } - enable_irq_wake(client->irq); + disable_irq_wake(client->irq); + disable_irq(client->irq); + sc->irq_enabled = false; sc->irq = client->irq; dev_err(sc->dev, "request thread irq success\n"); return 0; diff --git a/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.h b/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.h index 4fda0276e8cf..631a4065d0c8 100644 --- a/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.h +++ b/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.h @@ -199,6 +199,7 @@ struct sc760x_chip { int user_gpio_en; /* user gpio en */ int irq; + bool irq_enabled; int role; int sc760x_enable; u32 *thermal_levels;