diff options
Diffstat (limited to 'drivers/power')
-rw-r--r-- | drivers/power/qcom-charger/smb-lib.c | 22 | ||||
-rw-r--r-- | drivers/power/qcom-charger/smb-lib.h | 1 |
2 files changed, 23 insertions, 0 deletions
diff --git a/drivers/power/qcom-charger/smb-lib.c b/drivers/power/qcom-charger/smb-lib.c index c53659c07fc2..1a2665927a88 100644 --- a/drivers/power/qcom-charger/smb-lib.c +++ b/drivers/power/qcom-charger/smb-lib.c @@ -458,6 +458,19 @@ suspend: return rc; } +static int smblib_awake_vote_callback(struct votable *votable, void *data, + int awake, const char *client) +{ + struct smb_charger *chg = data; + + if (awake) + pm_stay_awake(chg->dev); + else + pm_relax(chg->dev); + + return 0; +} + /***************** * OTG REGULATOR * *****************/ @@ -1414,6 +1427,14 @@ int smblib_create_votables(struct smb_charger *chg) return rc; } + chg->awake_votable = create_votable("AWAKE", VOTE_SET_ANY, + smblib_awake_vote_callback, + chg); + if (IS_ERR(chg->awake_votable)) { + rc = PTR_ERR(chg->awake_votable); + return rc; + } + return rc; } @@ -1451,6 +1472,7 @@ int smblib_deinit(struct smb_charger *chg) destroy_votable(chg->usb_icl_votable); destroy_votable(chg->dc_icl_votable); destroy_votable(chg->pd_allowed_votable); + destroy_votable(chg->awake_votable); return 0; } diff --git a/drivers/power/qcom-charger/smb-lib.h b/drivers/power/qcom-charger/smb-lib.h index ac550eb09a0b..57b33fd368ea 100644 --- a/drivers/power/qcom-charger/smb-lib.h +++ b/drivers/power/qcom-charger/smb-lib.h @@ -87,6 +87,7 @@ struct smb_charger { struct votable *usb_icl_votable; struct votable *dc_icl_votable; struct votable *pd_allowed_votable; + struct votable *awake_votable; /* work */ struct delayed_work hvdcp_detect_work; |