Loading drivers/power/supply/qcom/qpnp-smb5.c +1 −0 Original line number Diff line number Diff line Loading @@ -2757,6 +2757,7 @@ static int smb5_post_init(struct smb5 *chip) return rc; } rerun_election(chg->temp_change_irq_disable_votable); return 0; } Loading drivers/power/supply/qcom/smb5-lib.c +35 −0 Original line number Diff line number Diff line Loading @@ -1646,6 +1646,29 @@ static int smblib_icl_irq_disable_vote_callback(struct votable *votable, return 0; } static int smblib_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; } /******************* * VCONN REGULATOR * * *****************/ Loading Loading @@ -4873,6 +4896,9 @@ void smblib_usb_plugin_locked(struct smb_charger *chg) if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) smblib_micro_usb_plugin(chg, vbus_rising); vote(chg->temp_change_irq_disable_votable, DEFAULT_VOTER, !vbus_rising, 0); power_supply_changed(chg->usb_psy); if (chg->dual_role) dual_role_instance_changed(chg->dual_role); Loading Loading @@ -6726,6 +6752,15 @@ static int smblib_create_votables(struct smb_charger *chg) return rc; } chg->temp_change_irq_disable_votable = create_votable( "TEMP_CHANGE_IRQ_DISABLE", VOTE_SET_ANY, smblib_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/smb5-lib.h +1 −0 Original line number Diff line number Diff line Loading @@ -414,6 +414,7 @@ struct smb_charger { struct votable *icl_irq_disable_votable; struct votable *limited_irq_disable_votable; struct votable *hdc_irq_disable_votable; struct votable *temp_change_irq_disable_votable; /* work */ struct work_struct bms_update_work; Loading Loading
drivers/power/supply/qcom/qpnp-smb5.c +1 −0 Original line number Diff line number Diff line Loading @@ -2757,6 +2757,7 @@ static int smb5_post_init(struct smb5 *chip) return rc; } rerun_election(chg->temp_change_irq_disable_votable); return 0; } Loading
drivers/power/supply/qcom/smb5-lib.c +35 −0 Original line number Diff line number Diff line Loading @@ -1646,6 +1646,29 @@ static int smblib_icl_irq_disable_vote_callback(struct votable *votable, return 0; } static int smblib_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; } /******************* * VCONN REGULATOR * * *****************/ Loading Loading @@ -4873,6 +4896,9 @@ void smblib_usb_plugin_locked(struct smb_charger *chg) if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) smblib_micro_usb_plugin(chg, vbus_rising); vote(chg->temp_change_irq_disable_votable, DEFAULT_VOTER, !vbus_rising, 0); power_supply_changed(chg->usb_psy); if (chg->dual_role) dual_role_instance_changed(chg->dual_role); Loading Loading @@ -6726,6 +6752,15 @@ static int smblib_create_votables(struct smb_charger *chg) return rc; } chg->temp_change_irq_disable_votable = create_votable( "TEMP_CHANGE_IRQ_DISABLE", VOTE_SET_ANY, smblib_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/smb5-lib.h +1 −0 Original line number Diff line number Diff line Loading @@ -414,6 +414,7 @@ struct smb_charger { struct votable *icl_irq_disable_votable; struct votable *limited_irq_disable_votable; struct votable *hdc_irq_disable_votable; struct votable *temp_change_irq_disable_votable; /* work */ struct work_struct bms_update_work; Loading