Loading drivers/power/supply/qcom/qpnp-smblite.c +2 −0 Original line number Diff line number Diff line Loading @@ -1453,6 +1453,8 @@ static int smblite_post_init(struct smblite *chip) } } rerun_election(chg->temp_change_irq_disable_votable); return 0; } Loading drivers/power/supply/qcom/smblite-lib.c +35 −0 Original line number Diff line number Diff line Loading @@ -670,6 +670,30 @@ static int smblite_lib_icl_irq_disable_vote_callback(struct votable *votable, return 0; } static int smblite_lib_temp_change_irq_disable_vote_callback( struct votable *votable, void *data, int disable, const char *client) { struct smb_charger *chg = data; if (!chg->irq_info[TEMP_CHANGE_IRQ].irq) return 0; if (chg->irq_info[TEMP_CHANGE_IRQ].enabled && disable) { if (chg->irq_info[TEMP_CHANGE_IRQ].wake) disable_irq_wake(chg->irq_info[TEMP_CHANGE_IRQ].irq); disable_irq_nosync(chg->irq_info[TEMP_CHANGE_IRQ].irq); } else if (!chg->irq_info[TEMP_CHANGE_IRQ].enabled && !disable) { enable_irq(chg->irq_info[TEMP_CHANGE_IRQ].irq); if (chg->irq_info[TEMP_CHANGE_IRQ].wake) enable_irq_wake(chg->irq_info[TEMP_CHANGE_IRQ].irq); } chg->irq_info[TEMP_CHANGE_IRQ].enabled = !disable; return 0; } /******************** * BATT PSY GETTERS * ********************/ Loading Loading @@ -2277,6 +2301,8 @@ void smblite_lib_usb_plugin_locked(struct smb_charger *chg) if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) smblite_lib_micro_usb_plugin(chg, vbus_rising); vote(chg->temp_change_irq_disable_votable, DEFAULT_VOTER, !vbus_rising, 0); power_supply_changed(chg->usb_psy); smblite_lib_dbg(chg, PR_INTERRUPT, "IRQ: usbin-plugin %s\n", vbus_rising ? "attached" : "detached"); Loading Loading @@ -3278,6 +3304,15 @@ static int smblite_lib_create_votables(struct smb_charger *chg) return rc; } chg->temp_change_irq_disable_votable = create_votable( "TEMP_CHANGE_IRQ_DISABLE", VOTE_SET_ANY, smblite_lib_temp_change_irq_disable_vote_callback, chg); if (IS_ERR(chg->temp_change_irq_disable_votable)) { rc = PTR_ERR(chg->temp_change_irq_disable_votable); chg->temp_change_irq_disable_votable = NULL; return rc; } return rc; } Loading drivers/power/supply/qcom/smblite-lib.h +1 −0 Original line number Diff line number Diff line Loading @@ -268,6 +268,7 @@ struct smb_charger { struct votable *chg_disable_votable; struct votable *pl_enable_votable_indirect; struct votable *icl_irq_disable_votable; struct votable *temp_change_irq_disable_votable; /* work */ struct work_struct bms_update_work; Loading Loading
drivers/power/supply/qcom/qpnp-smblite.c +2 −0 Original line number Diff line number Diff line Loading @@ -1453,6 +1453,8 @@ static int smblite_post_init(struct smblite *chip) } } rerun_election(chg->temp_change_irq_disable_votable); return 0; } Loading
drivers/power/supply/qcom/smblite-lib.c +35 −0 Original line number Diff line number Diff line Loading @@ -670,6 +670,30 @@ static int smblite_lib_icl_irq_disable_vote_callback(struct votable *votable, return 0; } static int smblite_lib_temp_change_irq_disable_vote_callback( struct votable *votable, void *data, int disable, const char *client) { struct smb_charger *chg = data; if (!chg->irq_info[TEMP_CHANGE_IRQ].irq) return 0; if (chg->irq_info[TEMP_CHANGE_IRQ].enabled && disable) { if (chg->irq_info[TEMP_CHANGE_IRQ].wake) disable_irq_wake(chg->irq_info[TEMP_CHANGE_IRQ].irq); disable_irq_nosync(chg->irq_info[TEMP_CHANGE_IRQ].irq); } else if (!chg->irq_info[TEMP_CHANGE_IRQ].enabled && !disable) { enable_irq(chg->irq_info[TEMP_CHANGE_IRQ].irq); if (chg->irq_info[TEMP_CHANGE_IRQ].wake) enable_irq_wake(chg->irq_info[TEMP_CHANGE_IRQ].irq); } chg->irq_info[TEMP_CHANGE_IRQ].enabled = !disable; return 0; } /******************** * BATT PSY GETTERS * ********************/ Loading Loading @@ -2277,6 +2301,8 @@ void smblite_lib_usb_plugin_locked(struct smb_charger *chg) if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) smblite_lib_micro_usb_plugin(chg, vbus_rising); vote(chg->temp_change_irq_disable_votable, DEFAULT_VOTER, !vbus_rising, 0); power_supply_changed(chg->usb_psy); smblite_lib_dbg(chg, PR_INTERRUPT, "IRQ: usbin-plugin %s\n", vbus_rising ? "attached" : "detached"); Loading Loading @@ -3278,6 +3304,15 @@ static int smblite_lib_create_votables(struct smb_charger *chg) return rc; } chg->temp_change_irq_disable_votable = create_votable( "TEMP_CHANGE_IRQ_DISABLE", VOTE_SET_ANY, smblite_lib_temp_change_irq_disable_vote_callback, chg); if (IS_ERR(chg->temp_change_irq_disable_votable)) { rc = PTR_ERR(chg->temp_change_irq_disable_votable); chg->temp_change_irq_disable_votable = NULL; return rc; } return rc; } Loading
drivers/power/supply/qcom/smblite-lib.h +1 −0 Original line number Diff line number Diff line Loading @@ -268,6 +268,7 @@ struct smb_charger { struct votable *chg_disable_votable; struct votable *pl_enable_votable_indirect; struct votable *icl_irq_disable_votable; struct votable *temp_change_irq_disable_votable; /* work */ struct work_struct bms_update_work; Loading