Loading drivers/power/supply/qcom/qpnp-qnovo5.c +17 −4 Original line number Diff line number Diff line Loading @@ -227,6 +227,19 @@ static int pt_dis_votable_cb(struct votable *votable, void *data, int disable, { struct qnovo *chip = data; int rc; u8 val = 0; if (!disable) { rc = qnovo5_write(chip, QNOVO_PHASE, &val, 1); if (rc < 0) dev_err(chip->dev, "Couldn't write to QNOVO_PHASE rc=%d\n", rc); rc = qnovo5_write(chip, QNOVO_P2_TICK, &val, 1); if (rc < 0) dev_err(chip->dev, "Couldn't write to QNOVO_P2_TICK rc=%d\n", rc); } rc = qnovo5_masked_write(chip, QNOVO_PE_CTRL, QNOVO_PTRAIN_EN_BIT, (bool)disable ? 0 : QNOVO_PTRAIN_EN_BIT); Loading Loading @@ -450,7 +463,7 @@ static struct param_info params[] = { .name = "PCURR1", .start_addr = QNOVO_PCURR1_LSB, .num_regs = 2, .reg_to_unit_multiplier = 305185, /* converts to nA */ .reg_to_unit_multiplier = 488281, /* converts to nA */ .reg_to_unit_divider = 1, .units_str = "uA", }, Loading @@ -458,7 +471,7 @@ static struct param_info params[] = { .name = "PCURR1_SUM", .start_addr = QNOVO_PCURR1_SUM_LSB, .num_regs = 2, .reg_to_unit_multiplier = 305185, /* converts to nA */ .reg_to_unit_multiplier = 488281, /* converts to nA */ .reg_to_unit_divider = 1, .units_str = "uA", }, Loading @@ -466,7 +479,7 @@ static struct param_info params[] = { .name = "PCURR1_TERMINAL", .start_addr = QNOVO_PCURR1_TERMINAL_LSB, .num_regs = 2, .reg_to_unit_multiplier = 305185, /* converts to nA */ .reg_to_unit_multiplier = 488281, /* converts to nA */ .reg_to_unit_divider = 1, .min_val = -10000000, .max_val = 10000000, Loading Loading @@ -540,7 +553,7 @@ static struct param_info params[] = { .name = "PCURR2", .start_addr = QNOVO_PCURR2_LSB, .num_regs = 2, .reg_to_unit_multiplier = 305185, /* converts to nA */ .reg_to_unit_multiplier = 488281, /* converts to nA */ .reg_to_unit_divider = 1, .units_str = "uA", }, Loading drivers/power/supply/qcom/qpnp-smb5.c +26 −0 Original line number Diff line number Diff line Loading @@ -1179,7 +1179,9 @@ static enum power_supply_property smb5_batt_props[] = { POWER_SUPPLY_PROP_INPUT_CURRENT_LIMITED, POWER_SUPPLY_PROP_VOLTAGE_NOW, POWER_SUPPLY_PROP_VOLTAGE_MAX, POWER_SUPPLY_PROP_VOLTAGE_QNOVO, POWER_SUPPLY_PROP_CURRENT_NOW, POWER_SUPPLY_PROP_CURRENT_QNOVO, POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX, POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT, POWER_SUPPLY_PROP_TEMP, Loading Loading @@ -1257,10 +1259,18 @@ static int smb5_batt_get_prop(struct power_supply *psy, val->intval = get_client_vote(chg->fv_votable, BATT_PROFILE_VOTER); break; case POWER_SUPPLY_PROP_VOLTAGE_QNOVO: val->intval = get_client_vote_locked(chg->fv_votable, QNOVO_VOTER); break; case POWER_SUPPLY_PROP_CURRENT_NOW: rc = smblib_get_prop_from_bms(chg, POWER_SUPPLY_PROP_CURRENT_NOW, val); break; case POWER_SUPPLY_PROP_CURRENT_QNOVO: val->intval = get_client_vote_locked(chg->fcc_votable, QNOVO_VOTER); break; case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX: val->intval = get_client_vote(chg->fcc_votable, BATT_PROFILE_VOTER); Loading Loading @@ -1361,6 +1371,10 @@ static int smb5_batt_set_prop(struct power_supply *psy, chg->batt_profile_fv_uv = val->intval; vote(chg->fv_votable, BATT_PROFILE_VOTER, true, val->intval); break; case POWER_SUPPLY_PROP_VOLTAGE_QNOVO: vote(chg->fv_votable, QNOVO_VOTER, (val->intval >= 0), val->intval); break; case POWER_SUPPLY_PROP_STEP_CHARGING_ENABLED: chg->step_chg_enabled = !!val->intval; break; Loading @@ -1375,6 +1389,18 @@ static int smb5_batt_set_prop(struct power_supply *psy, chg->batt_profile_fcc_ua = val->intval; vote(chg->fcc_votable, BATT_PROFILE_VOTER, true, val->intval); break; case POWER_SUPPLY_PROP_CURRENT_QNOVO: vote(chg->pl_disable_votable, PL_QNOVO_VOTER, val->intval != -EINVAL && val->intval < 2000000, 0); if (val->intval == -EINVAL) { vote(chg->fcc_votable, BATT_PROFILE_VOTER, true, chg->batt_profile_fcc_ua); vote(chg->fcc_votable, QNOVO_VOTER, false, 0); } else { vote(chg->fcc_votable, QNOVO_VOTER, true, val->intval); vote(chg->fcc_votable, BATT_PROFILE_VOTER, false, 0); } break; case POWER_SUPPLY_PROP_SET_SHIP_MODE: /* Not in ship mode as long as the device is active */ if (!val->intval) Loading drivers/power/supply/qcom/smb5-lib.h +1 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ enum print_reason { #define SW_QC3_VOTER "SW_QC3_VOTER" #define AICL_RERUN_VOTER "AICL_RERUN_VOTER" #define SW_ICL_MAX_VOTER "SW_ICL_MAX_VOTER" #define PL_QNOVO_VOTER "PL_QNOVO_VOTER" #define QNOVO_VOTER "QNOVO_VOTER" #define BATT_PROFILE_VOTER "BATT_PROFILE_VOTER" #define OTG_DELAY_VOTER "OTG_DELAY_VOTER" Loading Loading
drivers/power/supply/qcom/qpnp-qnovo5.c +17 −4 Original line number Diff line number Diff line Loading @@ -227,6 +227,19 @@ static int pt_dis_votable_cb(struct votable *votable, void *data, int disable, { struct qnovo *chip = data; int rc; u8 val = 0; if (!disable) { rc = qnovo5_write(chip, QNOVO_PHASE, &val, 1); if (rc < 0) dev_err(chip->dev, "Couldn't write to QNOVO_PHASE rc=%d\n", rc); rc = qnovo5_write(chip, QNOVO_P2_TICK, &val, 1); if (rc < 0) dev_err(chip->dev, "Couldn't write to QNOVO_P2_TICK rc=%d\n", rc); } rc = qnovo5_masked_write(chip, QNOVO_PE_CTRL, QNOVO_PTRAIN_EN_BIT, (bool)disable ? 0 : QNOVO_PTRAIN_EN_BIT); Loading Loading @@ -450,7 +463,7 @@ static struct param_info params[] = { .name = "PCURR1", .start_addr = QNOVO_PCURR1_LSB, .num_regs = 2, .reg_to_unit_multiplier = 305185, /* converts to nA */ .reg_to_unit_multiplier = 488281, /* converts to nA */ .reg_to_unit_divider = 1, .units_str = "uA", }, Loading @@ -458,7 +471,7 @@ static struct param_info params[] = { .name = "PCURR1_SUM", .start_addr = QNOVO_PCURR1_SUM_LSB, .num_regs = 2, .reg_to_unit_multiplier = 305185, /* converts to nA */ .reg_to_unit_multiplier = 488281, /* converts to nA */ .reg_to_unit_divider = 1, .units_str = "uA", }, Loading @@ -466,7 +479,7 @@ static struct param_info params[] = { .name = "PCURR1_TERMINAL", .start_addr = QNOVO_PCURR1_TERMINAL_LSB, .num_regs = 2, .reg_to_unit_multiplier = 305185, /* converts to nA */ .reg_to_unit_multiplier = 488281, /* converts to nA */ .reg_to_unit_divider = 1, .min_val = -10000000, .max_val = 10000000, Loading Loading @@ -540,7 +553,7 @@ static struct param_info params[] = { .name = "PCURR2", .start_addr = QNOVO_PCURR2_LSB, .num_regs = 2, .reg_to_unit_multiplier = 305185, /* converts to nA */ .reg_to_unit_multiplier = 488281, /* converts to nA */ .reg_to_unit_divider = 1, .units_str = "uA", }, Loading
drivers/power/supply/qcom/qpnp-smb5.c +26 −0 Original line number Diff line number Diff line Loading @@ -1179,7 +1179,9 @@ static enum power_supply_property smb5_batt_props[] = { POWER_SUPPLY_PROP_INPUT_CURRENT_LIMITED, POWER_SUPPLY_PROP_VOLTAGE_NOW, POWER_SUPPLY_PROP_VOLTAGE_MAX, POWER_SUPPLY_PROP_VOLTAGE_QNOVO, POWER_SUPPLY_PROP_CURRENT_NOW, POWER_SUPPLY_PROP_CURRENT_QNOVO, POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX, POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT, POWER_SUPPLY_PROP_TEMP, Loading Loading @@ -1257,10 +1259,18 @@ static int smb5_batt_get_prop(struct power_supply *psy, val->intval = get_client_vote(chg->fv_votable, BATT_PROFILE_VOTER); break; case POWER_SUPPLY_PROP_VOLTAGE_QNOVO: val->intval = get_client_vote_locked(chg->fv_votable, QNOVO_VOTER); break; case POWER_SUPPLY_PROP_CURRENT_NOW: rc = smblib_get_prop_from_bms(chg, POWER_SUPPLY_PROP_CURRENT_NOW, val); break; case POWER_SUPPLY_PROP_CURRENT_QNOVO: val->intval = get_client_vote_locked(chg->fcc_votable, QNOVO_VOTER); break; case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX: val->intval = get_client_vote(chg->fcc_votable, BATT_PROFILE_VOTER); Loading Loading @@ -1361,6 +1371,10 @@ static int smb5_batt_set_prop(struct power_supply *psy, chg->batt_profile_fv_uv = val->intval; vote(chg->fv_votable, BATT_PROFILE_VOTER, true, val->intval); break; case POWER_SUPPLY_PROP_VOLTAGE_QNOVO: vote(chg->fv_votable, QNOVO_VOTER, (val->intval >= 0), val->intval); break; case POWER_SUPPLY_PROP_STEP_CHARGING_ENABLED: chg->step_chg_enabled = !!val->intval; break; Loading @@ -1375,6 +1389,18 @@ static int smb5_batt_set_prop(struct power_supply *psy, chg->batt_profile_fcc_ua = val->intval; vote(chg->fcc_votable, BATT_PROFILE_VOTER, true, val->intval); break; case POWER_SUPPLY_PROP_CURRENT_QNOVO: vote(chg->pl_disable_votable, PL_QNOVO_VOTER, val->intval != -EINVAL && val->intval < 2000000, 0); if (val->intval == -EINVAL) { vote(chg->fcc_votable, BATT_PROFILE_VOTER, true, chg->batt_profile_fcc_ua); vote(chg->fcc_votable, QNOVO_VOTER, false, 0); } else { vote(chg->fcc_votable, QNOVO_VOTER, true, val->intval); vote(chg->fcc_votable, BATT_PROFILE_VOTER, false, 0); } break; case POWER_SUPPLY_PROP_SET_SHIP_MODE: /* Not in ship mode as long as the device is active */ if (!val->intval) Loading
drivers/power/supply/qcom/smb5-lib.h +1 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ enum print_reason { #define SW_QC3_VOTER "SW_QC3_VOTER" #define AICL_RERUN_VOTER "AICL_RERUN_VOTER" #define SW_ICL_MAX_VOTER "SW_ICL_MAX_VOTER" #define PL_QNOVO_VOTER "PL_QNOVO_VOTER" #define QNOVO_VOTER "QNOVO_VOTER" #define BATT_PROFILE_VOTER "BATT_PROFILE_VOTER" #define OTG_DELAY_VOTER "OTG_DELAY_VOTER" Loading