diff --git a/drivers/power/supply/qcom/qpnp-smb5.c b/drivers/power/supply/qcom/qpnp-smb5.c index 824952c76a1c..d50f82d5b8fc 100644 --- a/drivers/power/supply/qcom/qpnp-smb5.c +++ b/drivers/power/supply/qcom/qpnp-smb5.c @@ -805,6 +805,12 @@ static int smb5_parse_dt_mmi(struct smb5 *chip, struct device_node *node) chg->usb_dcp_curr_max = 0; np = of_find_node_by_path("/chosen"); + retval = of_property_read_u32(npoint, "qcom,cdp-curr-max", + &chg->usb_cdp_curr_max); + if (retval) { + chg->usb_cdp_curr_max = 1500000; + } + retval = of_property_read_u32(npoint, "qcom,dcp-curr-max", &chg->usb_dcp_curr_max); if (retval) { diff --git a/drivers/power/supply/qcom/smb5-lib.c b/drivers/power/supply/qcom/smb5-lib.c index bc5c4f28e8da..e236b761be31 100644 --- a/drivers/power/supply/qcom/smb5-lib.c +++ b/drivers/power/supply/qcom/smb5-lib.c @@ -6195,7 +6195,7 @@ static void update_sw_icl_max(struct smb_charger *chg, int val) break; case POWER_SUPPLY_TYPE_USB_CDP: vote(chg->usb_icl_votable, SW_ICL_MAX_VOTER, true, - CDP_CURRENT_UA); + (chg->usb_cdp_curr_max > 0) ? chg->usb_cdp_curr_max : CDP_CURRENT_UA); vote(chg->usb_icl_votable, USB_PSY_VOTER, false, 0); break; case POWER_SUPPLY_TYPE_USB_DCP: diff --git a/drivers/power/supply/qcom/smb5-lib.h b/drivers/power/supply/qcom/smb5-lib.h index d2375b05853a..6618d8b6fb73 100644 --- a/drivers/power/supply/qcom/smb5-lib.h +++ b/drivers/power/supply/qcom/smb5-lib.h @@ -633,6 +633,7 @@ struct smb_charger { ktime_t dcin_uv_last_time; int last_wls_vout; int usb_dcp_curr_max; + int usb_cdp_curr_max; /* mmi qc3p */ struct iio_channel **iio_chan_list_mmi_cp;