Loading Documentation/devicetree/bindings/power/supply/qcom/qpnp-smb2.txt +0 −6 Original line number Diff line number Diff line Loading @@ -137,12 +137,6 @@ Charger specific properties: be based off battery voltage. For both SOC and battery voltage, charger receives the signal from FG to resume charging. - qcom,micro-usb Usage: optional Value type: <empty> Definition: Boolean flag which indicates that the platform only support micro usb port. - qcom,suspend-input-on-debug-batt Usage: optional Value type: <empty> Loading drivers/power/supply/power_supply_sysfs.c +1 −0 Original line number Diff line number Diff line Loading @@ -319,6 +319,7 @@ static struct device_attribute power_supply_attrs[] = { POWER_SUPPLY_ATTR(pd_voltage_max), POWER_SUPPLY_ATTR(pd_voltage_min), POWER_SUPPLY_ATTR(sdp_current_max), POWER_SUPPLY_ATTR(connector_type), /* Local extensions of type int64_t */ POWER_SUPPLY_ATTR(charge_counter_ext), /* Properties of type `const char *' */ Loading drivers/power/supply/qcom/qpnp-smb2.c +27 −15 Original line number Diff line number Diff line Loading @@ -313,8 +313,6 @@ static int smb2_parse_dt(struct smb2 *chip) chip->dt.auto_recharge_soc = of_property_read_bool(node, "qcom,auto-recharge-soc"); chg->micro_usb_mode = of_property_read_bool(node, "qcom,micro-usb"); chg->dcp_icl_ua = chip->dt.usb_icl_ua; chg->suspend_input_on_debug_batt = of_property_read_bool(node, Loading Loading @@ -356,6 +354,7 @@ static enum power_supply_property smb2_usb_props[] = { POWER_SUPPLY_PROP_PD_VOLTAGE_MAX, POWER_SUPPLY_PROP_PD_VOLTAGE_MIN, POWER_SUPPLY_PROP_SDP_CURRENT_MAX, POWER_SUPPLY_PROP_CONNECTOR_TYPE, }; static int smb2_usb_get_prop(struct power_supply *psy, Loading @@ -378,9 +377,9 @@ static int smb2_usb_get_prop(struct power_supply *psy, if (!val->intval) break; if ((chg->typec_mode == POWER_SUPPLY_TYPEC_SOURCE_DEFAULT || chg->micro_usb_mode) && chg->real_charger_type == POWER_SUPPLY_TYPE_USB) if (((chg->typec_mode == POWER_SUPPLY_TYPEC_SOURCE_DEFAULT) || (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB)) && (chg->real_charger_type == POWER_SUPPLY_TYPE_USB)) val->intval = 0; else val->intval = 1; Loading Loading @@ -409,7 +408,7 @@ static int smb2_usb_get_prop(struct power_supply *psy, val->intval = chg->real_charger_type; break; case POWER_SUPPLY_PROP_TYPEC_MODE: if (chg->micro_usb_mode) if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) val->intval = POWER_SUPPLY_TYPEC_NONE; else if (chip->bad_part) val->intval = POWER_SUPPLY_TYPEC_SOURCE_DEFAULT; Loading @@ -417,13 +416,13 @@ static int smb2_usb_get_prop(struct power_supply *psy, val->intval = chg->typec_mode; break; case POWER_SUPPLY_PROP_TYPEC_POWER_ROLE: if (chg->micro_usb_mode) if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) val->intval = POWER_SUPPLY_TYPEC_PR_NONE; else rc = smblib_get_prop_typec_power_role(chg, val); break; case POWER_SUPPLY_PROP_TYPEC_CC_ORIENTATION: if (chg->micro_usb_mode) if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) val->intval = 0; else rc = smblib_get_prop_typec_cc_orientation(chg, val); Loading Loading @@ -471,6 +470,9 @@ static int smb2_usb_get_prop(struct power_supply *psy, val->intval = get_client_vote(chg->usb_icl_votable, USB_PSY_VOTER); break; case POWER_SUPPLY_PROP_CONNECTOR_TYPE: val->intval = chg->connector_type; break; default: pr_err("get prop %d is not supported in usb\n", psp); rc = -EINVAL; Loading Loading @@ -609,9 +611,9 @@ static int smb2_usb_port_get_prop(struct power_supply *psy, if (!val->intval) break; if ((chg->typec_mode == POWER_SUPPLY_TYPEC_SOURCE_DEFAULT || chg->micro_usb_mode) && chg->real_charger_type == POWER_SUPPLY_TYPE_USB) if (((chg->typec_mode == POWER_SUPPLY_TYPEC_SOURCE_DEFAULT) || (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB)) && (chg->real_charger_type == POWER_SUPPLY_TYPE_USB)) val->intval = 1; else val->intval = 0; Loading Loading @@ -1268,7 +1270,7 @@ static int smb2_init_vconn_regulator(struct smb2 *chip) struct regulator_config cfg = {}; int rc = 0; if (chg->micro_usb_mode) if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) return 0; chg->vconn_vreg = devm_kzalloc(chg->dev, sizeof(*chg->vconn_vreg), Loading Loading @@ -1563,9 +1565,9 @@ static int smb2_init_hw(struct smb2 *chip) vote(chg->pd_disallowed_votable_indirect, HVDCP_TIMEOUT_VOTER, true, 0); vote(chg->pd_disallowed_votable_indirect, MICRO_USB_VOTER, chg->micro_usb_mode, 0); (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB), 0); vote(chg->hvdcp_enable_votable, MICRO_USB_VOTER, chg->micro_usb_mode, 0); (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB), 0); /* * AICL configuration: Loading Loading @@ -1595,7 +1597,17 @@ static int smb2_init_hw(struct smb2 *chip) return rc; } if (chg->micro_usb_mode) /* Check USB connector type (typeC/microUSB) */ rc = smblib_read(chg, RID_CC_CONTROL_7_0_REG, &val); if (rc < 0) { dev_err(chg->dev, "Couldn't read RID_CC_CONTROL_7_0 rc=%d\n", rc); return rc; } chg->connector_type = (val & EN_MICRO_USB_MODE_BIT) ? POWER_SUPPLY_CONNECTOR_MICRO_USB : POWER_SUPPLY_CONNECTOR_TYPEC; if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) rc = smb2_disable_typec(chg); else rc = smb2_configure_typec(chg); Loading drivers/power/supply/qcom/smb-lib.c +8 −7 Original line number Diff line number Diff line Loading @@ -979,8 +979,8 @@ int smblib_get_icl_current(struct smb_charger *chg, int *icl_ua) u8 load_cfg; bool override; if ((chg->typec_mode == POWER_SUPPLY_TYPEC_SOURCE_DEFAULT || chg->micro_usb_mode) if (((chg->typec_mode == POWER_SUPPLY_TYPEC_SOURCE_DEFAULT) || (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB)) && (chg->usb_psy_desc.type == POWER_SUPPLY_TYPE_USB)) { rc = get_sdp_current(chg, icl_ua); if (rc < 0) { Loading Loading @@ -3404,7 +3404,7 @@ void smblib_usb_plugin_locked(struct smb_charger *chg) smblib_err(chg, "Couldn't disable DPDM rc=%d\n", rc); } if (chg->micro_usb_mode) if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) smblib_micro_usb_plugin(chg, vbus_rising); power_supply_changed(chg->usb_psy); Loading Loading @@ -3723,7 +3723,7 @@ static void smblib_handle_apsd_done(struct smb_charger *chg, bool rising) switch (apsd_result->bit) { case SDP_CHARGER_BIT: case CDP_CHARGER_BIT: if (chg->micro_usb_mode) if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) extcon_set_cable_state_(chg->extcon, EXTCON_USB, true); /* if not DCP then no hvdcp timeout happens. Enable pd here */ Loading Loading @@ -3765,7 +3765,8 @@ irqreturn_t smblib_handle_usb_source_change(int irq, void *data) } smblib_dbg(chg, PR_REGISTER, "APSD_STATUS = 0x%02x\n", stat); if (chg->micro_usb_mode && (stat & APSD_DTC_STATUS_DONE_BIT) if ((chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) && (stat & APSD_DTC_STATUS_DONE_BIT) && !chg->uusb_apsd_rerun_done) { /* * Force re-run APSD to handle slow insertion related Loading Loading @@ -4262,7 +4263,7 @@ irqreturn_t smblib_handle_usb_typec_change(int irq, void *data) struct smb_irq_data *irq_data = data; struct smb_charger *chg = irq_data->parent_data; if (chg->micro_usb_mode) { if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) { cancel_delayed_work_sync(&chg->uusb_otg_work); vote(chg->awake_votable, OTG_DELAY_VOTER, true, 0); smblib_dbg(chg, PR_INTERRUPT, "Scheduling OTG work\n"); Loading Loading @@ -4674,7 +4675,7 @@ static void smblib_vconn_oc_work(struct work_struct *work) int rc, i; u8 stat; if (chg->micro_usb_mode) if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) return; smblib_err(chg, "over-current detected on VCONN\n"); Loading drivers/power/supply/qcom/smb-lib.h +1 −1 Original line number Diff line number Diff line Loading @@ -324,7 +324,7 @@ struct smb_charger { bool sw_jeita_enabled; bool is_hdc; bool chg_done; bool micro_usb_mode; bool connector_type; bool otg_en; bool vconn_en; bool suspend_input_on_debug_batt; Loading Loading
Documentation/devicetree/bindings/power/supply/qcom/qpnp-smb2.txt +0 −6 Original line number Diff line number Diff line Loading @@ -137,12 +137,6 @@ Charger specific properties: be based off battery voltage. For both SOC and battery voltage, charger receives the signal from FG to resume charging. - qcom,micro-usb Usage: optional Value type: <empty> Definition: Boolean flag which indicates that the platform only support micro usb port. - qcom,suspend-input-on-debug-batt Usage: optional Value type: <empty> Loading
drivers/power/supply/power_supply_sysfs.c +1 −0 Original line number Diff line number Diff line Loading @@ -319,6 +319,7 @@ static struct device_attribute power_supply_attrs[] = { POWER_SUPPLY_ATTR(pd_voltage_max), POWER_SUPPLY_ATTR(pd_voltage_min), POWER_SUPPLY_ATTR(sdp_current_max), POWER_SUPPLY_ATTR(connector_type), /* Local extensions of type int64_t */ POWER_SUPPLY_ATTR(charge_counter_ext), /* Properties of type `const char *' */ Loading
drivers/power/supply/qcom/qpnp-smb2.c +27 −15 Original line number Diff line number Diff line Loading @@ -313,8 +313,6 @@ static int smb2_parse_dt(struct smb2 *chip) chip->dt.auto_recharge_soc = of_property_read_bool(node, "qcom,auto-recharge-soc"); chg->micro_usb_mode = of_property_read_bool(node, "qcom,micro-usb"); chg->dcp_icl_ua = chip->dt.usb_icl_ua; chg->suspend_input_on_debug_batt = of_property_read_bool(node, Loading Loading @@ -356,6 +354,7 @@ static enum power_supply_property smb2_usb_props[] = { POWER_SUPPLY_PROP_PD_VOLTAGE_MAX, POWER_SUPPLY_PROP_PD_VOLTAGE_MIN, POWER_SUPPLY_PROP_SDP_CURRENT_MAX, POWER_SUPPLY_PROP_CONNECTOR_TYPE, }; static int smb2_usb_get_prop(struct power_supply *psy, Loading @@ -378,9 +377,9 @@ static int smb2_usb_get_prop(struct power_supply *psy, if (!val->intval) break; if ((chg->typec_mode == POWER_SUPPLY_TYPEC_SOURCE_DEFAULT || chg->micro_usb_mode) && chg->real_charger_type == POWER_SUPPLY_TYPE_USB) if (((chg->typec_mode == POWER_SUPPLY_TYPEC_SOURCE_DEFAULT) || (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB)) && (chg->real_charger_type == POWER_SUPPLY_TYPE_USB)) val->intval = 0; else val->intval = 1; Loading Loading @@ -409,7 +408,7 @@ static int smb2_usb_get_prop(struct power_supply *psy, val->intval = chg->real_charger_type; break; case POWER_SUPPLY_PROP_TYPEC_MODE: if (chg->micro_usb_mode) if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) val->intval = POWER_SUPPLY_TYPEC_NONE; else if (chip->bad_part) val->intval = POWER_SUPPLY_TYPEC_SOURCE_DEFAULT; Loading @@ -417,13 +416,13 @@ static int smb2_usb_get_prop(struct power_supply *psy, val->intval = chg->typec_mode; break; case POWER_SUPPLY_PROP_TYPEC_POWER_ROLE: if (chg->micro_usb_mode) if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) val->intval = POWER_SUPPLY_TYPEC_PR_NONE; else rc = smblib_get_prop_typec_power_role(chg, val); break; case POWER_SUPPLY_PROP_TYPEC_CC_ORIENTATION: if (chg->micro_usb_mode) if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) val->intval = 0; else rc = smblib_get_prop_typec_cc_orientation(chg, val); Loading Loading @@ -471,6 +470,9 @@ static int smb2_usb_get_prop(struct power_supply *psy, val->intval = get_client_vote(chg->usb_icl_votable, USB_PSY_VOTER); break; case POWER_SUPPLY_PROP_CONNECTOR_TYPE: val->intval = chg->connector_type; break; default: pr_err("get prop %d is not supported in usb\n", psp); rc = -EINVAL; Loading Loading @@ -609,9 +611,9 @@ static int smb2_usb_port_get_prop(struct power_supply *psy, if (!val->intval) break; if ((chg->typec_mode == POWER_SUPPLY_TYPEC_SOURCE_DEFAULT || chg->micro_usb_mode) && chg->real_charger_type == POWER_SUPPLY_TYPE_USB) if (((chg->typec_mode == POWER_SUPPLY_TYPEC_SOURCE_DEFAULT) || (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB)) && (chg->real_charger_type == POWER_SUPPLY_TYPE_USB)) val->intval = 1; else val->intval = 0; Loading Loading @@ -1268,7 +1270,7 @@ static int smb2_init_vconn_regulator(struct smb2 *chip) struct regulator_config cfg = {}; int rc = 0; if (chg->micro_usb_mode) if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) return 0; chg->vconn_vreg = devm_kzalloc(chg->dev, sizeof(*chg->vconn_vreg), Loading Loading @@ -1563,9 +1565,9 @@ static int smb2_init_hw(struct smb2 *chip) vote(chg->pd_disallowed_votable_indirect, HVDCP_TIMEOUT_VOTER, true, 0); vote(chg->pd_disallowed_votable_indirect, MICRO_USB_VOTER, chg->micro_usb_mode, 0); (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB), 0); vote(chg->hvdcp_enable_votable, MICRO_USB_VOTER, chg->micro_usb_mode, 0); (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB), 0); /* * AICL configuration: Loading Loading @@ -1595,7 +1597,17 @@ static int smb2_init_hw(struct smb2 *chip) return rc; } if (chg->micro_usb_mode) /* Check USB connector type (typeC/microUSB) */ rc = smblib_read(chg, RID_CC_CONTROL_7_0_REG, &val); if (rc < 0) { dev_err(chg->dev, "Couldn't read RID_CC_CONTROL_7_0 rc=%d\n", rc); return rc; } chg->connector_type = (val & EN_MICRO_USB_MODE_BIT) ? POWER_SUPPLY_CONNECTOR_MICRO_USB : POWER_SUPPLY_CONNECTOR_TYPEC; if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) rc = smb2_disable_typec(chg); else rc = smb2_configure_typec(chg); Loading
drivers/power/supply/qcom/smb-lib.c +8 −7 Original line number Diff line number Diff line Loading @@ -979,8 +979,8 @@ int smblib_get_icl_current(struct smb_charger *chg, int *icl_ua) u8 load_cfg; bool override; if ((chg->typec_mode == POWER_SUPPLY_TYPEC_SOURCE_DEFAULT || chg->micro_usb_mode) if (((chg->typec_mode == POWER_SUPPLY_TYPEC_SOURCE_DEFAULT) || (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB)) && (chg->usb_psy_desc.type == POWER_SUPPLY_TYPE_USB)) { rc = get_sdp_current(chg, icl_ua); if (rc < 0) { Loading Loading @@ -3404,7 +3404,7 @@ void smblib_usb_plugin_locked(struct smb_charger *chg) smblib_err(chg, "Couldn't disable DPDM rc=%d\n", rc); } if (chg->micro_usb_mode) if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) smblib_micro_usb_plugin(chg, vbus_rising); power_supply_changed(chg->usb_psy); Loading Loading @@ -3723,7 +3723,7 @@ static void smblib_handle_apsd_done(struct smb_charger *chg, bool rising) switch (apsd_result->bit) { case SDP_CHARGER_BIT: case CDP_CHARGER_BIT: if (chg->micro_usb_mode) if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) extcon_set_cable_state_(chg->extcon, EXTCON_USB, true); /* if not DCP then no hvdcp timeout happens. Enable pd here */ Loading Loading @@ -3765,7 +3765,8 @@ irqreturn_t smblib_handle_usb_source_change(int irq, void *data) } smblib_dbg(chg, PR_REGISTER, "APSD_STATUS = 0x%02x\n", stat); if (chg->micro_usb_mode && (stat & APSD_DTC_STATUS_DONE_BIT) if ((chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) && (stat & APSD_DTC_STATUS_DONE_BIT) && !chg->uusb_apsd_rerun_done) { /* * Force re-run APSD to handle slow insertion related Loading Loading @@ -4262,7 +4263,7 @@ irqreturn_t smblib_handle_usb_typec_change(int irq, void *data) struct smb_irq_data *irq_data = data; struct smb_charger *chg = irq_data->parent_data; if (chg->micro_usb_mode) { if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) { cancel_delayed_work_sync(&chg->uusb_otg_work); vote(chg->awake_votable, OTG_DELAY_VOTER, true, 0); smblib_dbg(chg, PR_INTERRUPT, "Scheduling OTG work\n"); Loading Loading @@ -4674,7 +4675,7 @@ static void smblib_vconn_oc_work(struct work_struct *work) int rc, i; u8 stat; if (chg->micro_usb_mode) if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) return; smblib_err(chg, "over-current detected on VCONN\n"); Loading
drivers/power/supply/qcom/smb-lib.h +1 −1 Original line number Diff line number Diff line Loading @@ -324,7 +324,7 @@ struct smb_charger { bool sw_jeita_enabled; bool is_hdc; bool chg_done; bool micro_usb_mode; bool connector_type; bool otg_en; bool vconn_en; bool suspend_input_on_debug_batt; Loading