diff --git a/Documentation/devicetree/bindings/power/supply/qcom/qpnp-smb5.txt b/Documentation/devicetree/bindings/power/supply/qcom/qpnp-smb5.txt index 454f2a573ca9..d173819db9a7 100644 --- a/Documentation/devicetree/bindings/power/supply/qcom/qpnp-smb5.txt +++ b/Documentation/devicetree/bindings/power/supply/qcom/qpnp-smb5.txt @@ -275,6 +275,11 @@ Charger specific properties: Definition: Boolean flag which when present enables hardware-controlled operation of HVDCP. +- qcom,usb-pd-disable + Usage: optional + Value type: bool + Definition: Boolean flag which when present disables USB-PD operation. + ============================================= Second Level Nodes - SMB5 Charger Peripherals ============================================= diff --git a/drivers/power/supply/qcom/qpnp-smb5.c b/drivers/power/supply/qcom/qpnp-smb5.c index 1225a248783b..4eae836eb8c2 100644 --- a/drivers/power/supply/qcom/qpnp-smb5.c +++ b/drivers/power/supply/qcom/qpnp-smb5.c @@ -173,6 +173,7 @@ struct smb_dt_props { int chg_inhibit_thr_mv; bool no_battery; bool hvdcp_disable; + bool hvdcp_autonomous; int sec_charger_config; int auto_recharge_soc; int auto_recharge_vbat_mv; @@ -401,6 +402,9 @@ static int smb5_parse_dt_misc(struct smb5 *chip, struct device_node *node) "qcom,hvdcp-disable"); chg->hvdcp_disable = chip->dt.hvdcp_disable; + chip->dt.hvdcp_autonomous = of_property_read_bool(node, + "qcom,hvdcp-autonomous-enable"); + chip->dt.auto_recharge_soc = -EINVAL; rc = of_property_read_u32(node, "qcom,auto-recharge-soc", &chip->dt.auto_recharge_soc); @@ -1915,11 +1919,15 @@ static int smb5_init_hw(struct smb5 *chip) } /* - * Disable HVDCP autonomous mode operation by default. Additionally, if - * specified in DT: disable HVDCP and HVDCP authentication algorithm. + * Disable HVDCP autonomous mode operation by default, providing a DT + * knob to turn it on if required. Additionally, if specified in DT, + * disable HVDCP and HVDCP authentication algorithm. */ val = (chg->hvdcp_disable) ? 0 : (HVDCP_AUTH_ALG_EN_CFG_BIT | HVDCP_EN_BIT); + if (chip->dt.hvdcp_autonomous) + val |= HVDCP_AUTONOMOUS_MODE_EN_CFG_BIT; + rc = smblib_masked_write(chg, USBIN_OPTIONS_1_CFG_REG, (HVDCP_AUTH_ALG_EN_CFG_BIT | HVDCP_EN_BIT | HVDCP_AUTONOMOUS_MODE_EN_CFG_BIT),