diff options
| -rw-r--r-- | drivers/power/supply/qcom/qpnp-smb2.c | 51 | ||||
| -rw-r--r-- | drivers/power/supply/qcom/smb-lib.c | 64 | ||||
| -rw-r--r-- | drivers/power/supply/qcom/smb-lib.h | 12 | ||||
| -rw-r--r-- | drivers/power/supply/qcom/smb138x-charger.c | 26 | ||||
| -rw-r--r-- | drivers/usb/dwc3/dwc3-msm.c | 2 | ||||
| -rw-r--r-- | drivers/usb/pd/policy_engine.c | 14 |
6 files changed, 90 insertions, 79 deletions
diff --git a/drivers/power/supply/qcom/qpnp-smb2.c b/drivers/power/supply/qcom/qpnp-smb2.c index b0a78758abd6..b16c0ef47e93 100644 --- a/drivers/power/supply/qcom/qpnp-smb2.c +++ b/drivers/power/supply/qcom/qpnp-smb2.c @@ -330,7 +330,6 @@ static int smb2_parse_dt(struct smb2 *chip) static enum power_supply_property smb2_usb_props[] = { POWER_SUPPLY_PROP_PRESENT, POWER_SUPPLY_PROP_ONLINE, - POWER_SUPPLY_PROP_VOLTAGE_MIN, POWER_SUPPLY_PROP_VOLTAGE_MAX, POWER_SUPPLY_PROP_VOLTAGE_NOW, POWER_SUPPLY_PROP_PD_CURRENT_MAX, @@ -349,6 +348,9 @@ static enum power_supply_property smb2_usb_props[] = { POWER_SUPPLY_PROP_HW_CURRENT_MAX, POWER_SUPPLY_PROP_REAL_TYPE, POWER_SUPPLY_PROP_PR_SWAP, + POWER_SUPPLY_PROP_PD_VOLTAGE_MAX, + POWER_SUPPLY_PROP_PD_VOLTAGE_MIN, + POWER_SUPPLY_PROP_SDP_CURRENT_MAX, }; static int smb2_usb_get_prop(struct power_supply *psy, @@ -380,20 +382,17 @@ static int smb2_usb_get_prop(struct power_supply *psy, if (chg->real_charger_type == POWER_SUPPLY_TYPE_UNKNOWN) val->intval = 0; break; - case POWER_SUPPLY_PROP_VOLTAGE_MIN: - val->intval = chg->voltage_min_uv; - break; case POWER_SUPPLY_PROP_VOLTAGE_MAX: - val->intval = chg->voltage_max_uv; + rc = smblib_get_prop_usb_voltage_max(chg, val); break; case POWER_SUPPLY_PROP_VOLTAGE_NOW: rc = smblib_get_prop_usb_voltage_now(chg, val); break; case POWER_SUPPLY_PROP_PD_CURRENT_MAX: - rc = smblib_get_prop_pd_current_max(chg, val); + val->intval = get_client_vote(chg->usb_icl_votable, PD_VOTER); break; case POWER_SUPPLY_PROP_CURRENT_MAX: - rc = smblib_get_prop_usb_current_max(chg, val); + rc = smblib_get_prop_input_current_settled(chg, val); break; case POWER_SUPPLY_PROP_TYPE: val->intval = POWER_SUPPLY_TYPE_USB_PD; @@ -457,6 +456,16 @@ static int smb2_usb_get_prop(struct power_supply *psy, case POWER_SUPPLY_PROP_PR_SWAP: rc = smblib_get_prop_pr_swap_in_progress(chg, val); break; + case POWER_SUPPLY_PROP_PD_VOLTAGE_MAX: + val->intval = chg->voltage_max_uv; + break; + case POWER_SUPPLY_PROP_PD_VOLTAGE_MIN: + val->intval = chg->voltage_min_uv; + break; + case POWER_SUPPLY_PROP_SDP_CURRENT_MAX: + val->intval = get_client_vote(chg->usb_icl_votable, + USB_PSY_VOTER); + break; default: pr_err("get prop %d is not supported in usb\n", psp); rc = -EINVAL; @@ -484,18 +493,9 @@ static int smb2_usb_set_prop(struct power_supply *psy, } switch (psp) { - case POWER_SUPPLY_PROP_VOLTAGE_MIN: - rc = smblib_set_prop_usb_voltage_min(chg, val); - break; - case POWER_SUPPLY_PROP_VOLTAGE_MAX: - rc = smblib_set_prop_usb_voltage_max(chg, val); - break; case POWER_SUPPLY_PROP_PD_CURRENT_MAX: rc = smblib_set_prop_pd_current_max(chg, val); break; - case POWER_SUPPLY_PROP_CURRENT_MAX: - rc = smblib_set_prop_usb_current_max(chg, val); - break; case POWER_SUPPLY_PROP_TYPEC_POWER_ROLE: rc = smblib_set_prop_typec_power_role(chg, val); break; @@ -518,6 +518,15 @@ static int smb2_usb_set_prop(struct power_supply *psy, case POWER_SUPPLY_PROP_PR_SWAP: rc = smblib_set_prop_pr_swap_in_progress(chg, val); break; + case POWER_SUPPLY_PROP_PD_VOLTAGE_MAX: + rc = smblib_set_prop_pd_voltage_max(chg, val); + break; + case POWER_SUPPLY_PROP_PD_VOLTAGE_MIN: + rc = smblib_set_prop_pd_voltage_min(chg, val); + break; + case POWER_SUPPLY_PROP_SDP_CURRENT_MAX: + rc = smblib_set_prop_sdp_current_max(chg, val); + break; default: pr_err("set prop %d is not supported\n", psp); rc = -EINVAL; @@ -533,8 +542,6 @@ static int smb2_usb_prop_is_writeable(struct power_supply *psy, enum power_supply_property psp) { switch (psp) { - case POWER_SUPPLY_PROP_CURRENT_MAX: - case POWER_SUPPLY_PROP_TYPEC_POWER_ROLE: case POWER_SUPPLY_PROP_CTM_CURRENT_MAX: return 1; default: @@ -576,6 +583,8 @@ static int smb2_init_usb_psy(struct smb2 *chip) static enum power_supply_property smb2_usb_port_props[] = { POWER_SUPPLY_PROP_TYPE, POWER_SUPPLY_PROP_ONLINE, + POWER_SUPPLY_PROP_VOLTAGE_MAX, + POWER_SUPPLY_PROP_CURRENT_MAX, }; static int smb2_usb_port_get_prop(struct power_supply *psy, @@ -602,6 +611,12 @@ static int smb2_usb_port_get_prop(struct power_supply *psy, else val->intval = 0; break; + case POWER_SUPPLY_PROP_VOLTAGE_MAX: + val->intval = 5000000; + break; + case POWER_SUPPLY_PROP_CURRENT_MAX: + rc = smblib_get_prop_input_current_settled(chg, val); + break; default: pr_err_ratelimited("Get prop %d is not supported in pc_port\n", psp); diff --git a/drivers/power/supply/qcom/smb-lib.c b/drivers/power/supply/qcom/smb-lib.c index 3984a49f51f6..4d90f6fc8ac5 100644 --- a/drivers/power/supply/qcom/smb-lib.c +++ b/drivers/power/supply/qcom/smb-lib.c @@ -420,19 +420,21 @@ static int smblib_set_adapter_allowance(struct smb_charger *chg, { int rc = 0; - switch (allowed_voltage) { - case USBIN_ADAPTER_ALLOW_12V: - case USBIN_ADAPTER_ALLOW_5V_OR_12V: - case USBIN_ADAPTER_ALLOW_9V_TO_12V: - case USBIN_ADAPTER_ALLOW_5V_OR_9V_TO_12V: - case USBIN_ADAPTER_ALLOW_5V_TO_12V: - /* PM660 only support max. 9V */ - if (chg->smb_version == PM660_SUBTYPE) { - smblib_dbg(chg, PR_MISC, "voltage not supported=%d\n", - allowed_voltage); + /* PM660 only support max. 9V */ + if (chg->smb_version == PM660_SUBTYPE) { + switch (allowed_voltage) { + case USBIN_ADAPTER_ALLOW_12V: + case USBIN_ADAPTER_ALLOW_9V_TO_12V: + allowed_voltage = USBIN_ADAPTER_ALLOW_9V; + break; + case USBIN_ADAPTER_ALLOW_5V_OR_12V: + case USBIN_ADAPTER_ALLOW_5V_OR_9V_TO_12V: allowed_voltage = USBIN_ADAPTER_ALLOW_5V_OR_9V; + break; + case USBIN_ADAPTER_ALLOW_5V_TO_12V: + allowed_voltage = USBIN_ADAPTER_ALLOW_5V_TO_9V; + break; } - break; } rc = smblib_write(chg, USBIN_ADAPTER_ALLOW_CFG_REG, allowed_voltage); @@ -2187,6 +2189,25 @@ int smblib_get_prop_usb_online(struct smb_charger *chg, return rc; } +int smblib_get_prop_usb_voltage_max(struct smb_charger *chg, + union power_supply_propval *val) +{ + switch (chg->real_charger_type) { + case POWER_SUPPLY_TYPE_USB_HVDCP: + case POWER_SUPPLY_TYPE_USB_PD: + if (chg->smb_version == PM660_SUBTYPE) + val->intval = MICRO_9V; + else + val->intval = MICRO_12V; + break; + default: + val->intval = MICRO_5V; + break; + } + + return 0; +} + int smblib_get_prop_usb_voltage_now(struct smb_charger *chg, union power_supply_propval *val) { @@ -2206,21 +2227,6 @@ int smblib_get_prop_usb_voltage_now(struct smb_charger *chg, return iio_read_channel_processed(chg->iio.usbin_v_chan, &val->intval); } -int smblib_get_prop_pd_current_max(struct smb_charger *chg, - union power_supply_propval *val) -{ - val->intval = get_client_vote_locked(chg->usb_icl_votable, PD_VOTER); - return 0; -} - -int smblib_get_prop_usb_current_max(struct smb_charger *chg, - union power_supply_propval *val) -{ - val->intval = get_client_vote_locked(chg->usb_icl_votable, - USB_PSY_VOTER); - return 0; -} - int smblib_get_prop_usb_current_now(struct smb_charger *chg, union power_supply_propval *val) { @@ -2562,7 +2568,7 @@ static int smblib_handle_usb_current(struct smb_charger *chg, return rc; } -int smblib_set_prop_usb_current_max(struct smb_charger *chg, +int smblib_set_prop_sdp_current_max(struct smb_charger *chg, const union power_supply_propval *val) { int rc = 0; @@ -2649,7 +2655,7 @@ int smblib_set_prop_typec_power_role(struct smb_charger *chg, return rc; } -int smblib_set_prop_usb_voltage_min(struct smb_charger *chg, +int smblib_set_prop_pd_voltage_min(struct smb_charger *chg, const union power_supply_propval *val) { int rc, min_uv; @@ -2667,7 +2673,7 @@ int smblib_set_prop_usb_voltage_min(struct smb_charger *chg, return rc; } -int smblib_set_prop_usb_voltage_max(struct smb_charger *chg, +int smblib_set_prop_pd_voltage_max(struct smb_charger *chg, const union power_supply_propval *val) { int rc, max_uv; diff --git a/drivers/power/supply/qcom/smb-lib.h b/drivers/power/supply/qcom/smb-lib.h index 0bb1ae03d101..720986cde5a7 100644 --- a/drivers/power/supply/qcom/smb-lib.h +++ b/drivers/power/supply/qcom/smb-lib.h @@ -443,11 +443,9 @@ int smblib_get_prop_usb_online(struct smb_charger *chg, union power_supply_propval *val); int smblib_get_prop_usb_suspend(struct smb_charger *chg, union power_supply_propval *val); -int smblib_get_prop_usb_voltage_now(struct smb_charger *chg, - union power_supply_propval *val); -int smblib_get_prop_pd_current_max(struct smb_charger *chg, +int smblib_get_prop_usb_voltage_max(struct smb_charger *chg, union power_supply_propval *val); -int smblib_get_prop_usb_current_max(struct smb_charger *chg, +int smblib_get_prop_usb_voltage_now(struct smb_charger *chg, union power_supply_propval *val); int smblib_get_prop_usb_current_now(struct smb_charger *chg, union power_supply_propval *val); @@ -475,11 +473,11 @@ int smblib_get_prop_charge_qnovo_enable(struct smb_charger *chg, union power_supply_propval *val); int smblib_set_prop_pd_current_max(struct smb_charger *chg, const union power_supply_propval *val); -int smblib_set_prop_usb_current_max(struct smb_charger *chg, +int smblib_set_prop_sdp_current_max(struct smb_charger *chg, const union power_supply_propval *val); -int smblib_set_prop_usb_voltage_min(struct smb_charger *chg, +int smblib_set_prop_pd_voltage_max(struct smb_charger *chg, const union power_supply_propval *val); -int smblib_set_prop_usb_voltage_max(struct smb_charger *chg, +int smblib_set_prop_pd_voltage_min(struct smb_charger *chg, const union power_supply_propval *val); int smblib_set_prop_boost_current(struct smb_charger *chg, const union power_supply_propval *val); diff --git a/drivers/power/supply/qcom/smb138x-charger.c b/drivers/power/supply/qcom/smb138x-charger.c index ec74e3825dd5..17e5891ace4f 100644 --- a/drivers/power/supply/qcom/smb138x-charger.c +++ b/drivers/power/supply/qcom/smb138x-charger.c @@ -215,6 +215,7 @@ static enum power_supply_property smb138x_usb_props[] = { POWER_SUPPLY_PROP_TYPEC_MODE, POWER_SUPPLY_PROP_TYPEC_POWER_ROLE, POWER_SUPPLY_PROP_TYPEC_CC_ORIENTATION, + POWER_SUPPLY_PROP_SDP_CURRENT_MAX, }; static int smb138x_usb_get_prop(struct power_supply *psy, @@ -242,7 +243,7 @@ static int smb138x_usb_get_prop(struct power_supply *psy, rc = smblib_get_prop_usb_voltage_now(chg, val); break; case POWER_SUPPLY_PROP_CURRENT_MAX: - rc = smblib_get_prop_usb_current_max(chg, val); + val->intval = get_effective_result(chg->usb_icl_votable); break; case POWER_SUPPLY_PROP_TYPE: val->intval = chg->usb_psy_desc.type; @@ -256,6 +257,10 @@ static int smb138x_usb_get_prop(struct power_supply *psy, case POWER_SUPPLY_PROP_TYPEC_CC_ORIENTATION: rc = smblib_get_prop_typec_cc_orientation(chg, val); break; + case POWER_SUPPLY_PROP_SDP_CURRENT_MAX: + val->intval = get_client_vote(chg->usb_icl_votable, + USB_PSY_VOTER); + break; default: pr_err("get prop %d is not supported\n", prop); return -EINVAL; @@ -278,18 +283,12 @@ static int smb138x_usb_set_prop(struct power_supply *psy, int rc = 0; switch (prop) { - case POWER_SUPPLY_PROP_VOLTAGE_MIN: - rc = smblib_set_prop_usb_voltage_min(chg, val); - break; - case POWER_SUPPLY_PROP_VOLTAGE_MAX: - rc = smblib_set_prop_usb_voltage_max(chg, val); - break; - case POWER_SUPPLY_PROP_CURRENT_MAX: - rc = smblib_set_prop_usb_current_max(chg, val); - break; case POWER_SUPPLY_PROP_TYPEC_POWER_ROLE: rc = smblib_set_prop_typec_power_role(chg, val); break; + case POWER_SUPPLY_PROP_SDP_CURRENT_MAX: + rc = smblib_set_prop_sdp_current_max(chg, val); + break; default: pr_err("set prop %d is not supported\n", prop); return -EINVAL; @@ -301,13 +300,6 @@ static int smb138x_usb_set_prop(struct power_supply *psy, static int smb138x_usb_prop_is_writeable(struct power_supply *psy, enum power_supply_property prop) { - switch (prop) { - case POWER_SUPPLY_PROP_TYPEC_POWER_ROLE: - return 1; - default: - break; - } - return 0; } diff --git a/drivers/usb/dwc3/dwc3-msm.c b/drivers/usb/dwc3/dwc3-msm.c index 70db070b05d8..8e0783c36129 100644 --- a/drivers/usb/dwc3/dwc3-msm.c +++ b/drivers/usb/dwc3/dwc3-msm.c @@ -3702,7 +3702,7 @@ static int dwc3_msm_gadget_vbus_draw(struct dwc3_msm *mdwc, unsigned mA) } ret = power_supply_set_property(mdwc->usb_psy, - POWER_SUPPLY_PROP_CURRENT_MAX, &pval); + POWER_SUPPLY_PROP_SDP_CURRENT_MAX, &pval); if (ret) { dev_dbg(mdwc->dev, "power supply error when setting property\n"); return ret; diff --git a/drivers/usb/pd/policy_engine.c b/drivers/usb/pd/policy_engine.c index 0cbe95304417..e735e6e49e64 100644 --- a/drivers/usb/pd/policy_engine.c +++ b/drivers/usb/pd/policy_engine.c @@ -964,7 +964,7 @@ static void usbpd_set_state(struct usbpd *pd, enum usbpd_state next_state) pd->current_voltage = pd->requested_voltage = 5000000; val.intval = pd->requested_voltage; /* set max range to 5V */ power_supply_set_property(pd->usb_psy, - POWER_SUPPLY_PROP_VOLTAGE_MAX, &val); + POWER_SUPPLY_PROP_PD_VOLTAGE_MAX, &val); if (!pd->vbus_present) { pd->current_state = PE_SNK_DISCOVERY; @@ -1663,7 +1663,7 @@ static void usbpd_sm(struct work_struct *w) pd->requested_voltage = 5000000; val.intval = pd->requested_voltage; power_supply_set_property(pd->usb_psy, - POWER_SUPPLY_PROP_VOLTAGE_MIN, &val); + POWER_SUPPLY_PROP_PD_VOLTAGE_MIN, &val); pd->in_pr_swap = false; val.intval = 0; @@ -1982,8 +1982,8 @@ static void usbpd_sm(struct work_struct *w) val.intval = pd->requested_voltage; power_supply_set_property(pd->usb_psy, pd->requested_voltage >= pd->current_voltage ? - POWER_SUPPLY_PROP_VOLTAGE_MAX : - POWER_SUPPLY_PROP_VOLTAGE_MIN, + POWER_SUPPLY_PROP_PD_VOLTAGE_MAX : + POWER_SUPPLY_PROP_PD_VOLTAGE_MIN, &val); /* @@ -2034,8 +2034,8 @@ static void usbpd_sm(struct work_struct *w) val.intval = pd->requested_voltage; power_supply_set_property(pd->usb_psy, pd->requested_voltage >= pd->current_voltage ? - POWER_SUPPLY_PROP_VOLTAGE_MIN : - POWER_SUPPLY_PROP_VOLTAGE_MAX, &val); + POWER_SUPPLY_PROP_PD_VOLTAGE_MIN : + POWER_SUPPLY_PROP_PD_VOLTAGE_MAX, &val); pd->current_voltage = pd->requested_voltage; /* resume charging */ @@ -2217,7 +2217,7 @@ static void usbpd_sm(struct work_struct *w) val.intval = pd->requested_voltage; power_supply_set_property(pd->usb_psy, - POWER_SUPPLY_PROP_VOLTAGE_MIN, &val); + POWER_SUPPLY_PROP_PD_VOLTAGE_MIN, &val); pd_send_hard_reset(pd); pd->in_explicit_contract = false; |
