Merge "power: qpnp-qg: Add support for SMB-sensing for SMB1395/6"

This commit is contained in:
qctecmdr 2020-09-02 08:39:51 -07:00 • committed by Gerrit - the friendly Code Review server
commit 1f8ff78eb8
5 changed files with 33 additions and 7 deletions

View file

@ -71,6 +71,7 @@ struct qg_dt {
bool esr_disable;
bool esr_discharge_enable;
bool qg_ext_sense;
bool use_cp_iin_sns;
bool use_s7_ocv;
bool qg_sleep_config;
bool qg_fast_chg_cfg;
@ -130,6 +131,7 @@ struct qpnp_qg {
struct power_supply *usb_psy;
struct power_supply *dc_psy;
struct power_supply *parallel_psy;
struct power_supply *cp_psy;
struct qg_esr_data esr_data[QG_MAX_ESR_COUNT];
/* status variable */

View file

@ -108,6 +108,7 @@ enum qg_ext_iio_channels {
FORCE_RECHARGE,
CHARGE_DONE,
PARALLEL_CHARGING_ENABLED,
CP_CHARGING_ENABLED,
};
static const char * const qg_ext_iio_chan_name[] = {
@ -116,6 +117,7 @@ static const char * const qg_ext_iio_chan_name[] = {
[FORCE_RECHARGE] = "force_recharge",
[CHARGE_DONE] = "charge_done",
[PARALLEL_CHARGING_ENABLED] = "parallel_charging_enabled",
[CP_CHARGING_ENABLED] = "cp_charging_enabled",
};
#endif

View file

@ -308,7 +308,7 @@ bool is_input_present(struct qpnp_qg *chip)
return is_usb_present(chip) || is_dc_present(chip);
}
static bool is_parallel_available(struct qpnp_qg *chip)
bool is_parallel_available(struct qpnp_qg *chip)
{
if (is_chan_valid(chip, PARALLEL_CHARGING_ENABLED))
return true;
@ -316,12 +316,26 @@ static bool is_parallel_available(struct qpnp_qg *chip)
return false;
}
bool is_cp_available(struct qpnp_qg *chip)
{
if (chip->cp_psy)
return true;
chip->cp_psy = power_supply_get_by_name("charge_pump_master");
if (!chip->cp_psy)
return false;
return true;
}
bool is_parallel_enabled(struct qpnp_qg *chip)
{
int val = 0;
if (is_parallel_available(chip))
qg_read_iio_chan(chip, PARALLEL_CHARGING_ENABLED, &val);
else if (is_cp_available(chip))
qg_read_iio_chan(chip, CP_CHARGING_ENABLED, &val);
return val ? true : false;
}

View file

@ -21,6 +21,8 @@ bool is_usb_present(struct qpnp_qg *chip);
bool is_dc_present(struct qpnp_qg *chip);
bool is_input_present(struct qpnp_qg *chip);
bool is_parallel_enabled(struct qpnp_qg *chip);
bool is_cp_available(struct qpnp_qg *chip);
bool is_parallel_available(struct qpnp_qg *chip);
int qg_write_monotonic_soc(struct qpnp_qg *chip, int msoc);
int qg_get_battery_temp(struct qpnp_qg *chip, int *batt_temp);
int qg_get_battery_current(struct qpnp_qg *chip, int *ibat_ua);

View file

@ -2418,13 +2418,15 @@ static int qg_parallel_status_update(struct qpnp_qg *chip)
"Parallel status changed Enabled=%d\n", parallel_enabled);
mutex_lock(&chip->data_lock);
/*
* Parallel charger uses the same external sense, hence do not
* enable SMB sensing if PMI632 is configured for external sense.
* dt.qg_ext_sense = Uses external rsense, if defined do not
* enable SMB sensing (for non-CP parallel charger).
* dt.cp_iin_sns = Uses CP IIN_SNS, enable SMB sensing (for CP charger).
*/
if (!chip->dt.qg_ext_sense)
update_smb = true;
if (is_cp_available(chip))
update_smb = chip->dt.use_cp_iin_sns ? true : false;
else if (is_parallel_available(chip))
update_smb = chip->dt.qg_ext_sense ? false : true;
rc = process_rt_fifo_data(chip, update_smb);
if (rc < 0)
@ -2674,7 +2676,8 @@ static int qg_notifier_cb(struct notifier_block *nb,
if ((strcmp(psy->desc->name, "battery") == 0)
|| (strcmp(psy->desc->name, "parallel") == 0)
|| (strcmp(psy->desc->name, "usb") == 0)
|| (strcmp(psy->desc->name, "dc") == 0)) {
|| (strcmp(psy->desc->name, "dc") == 0)
|| (strcmp(psy->desc->name, "charge_pump_master") == 0)) {
/*
* We cannot vote for awake votable here as that takes
* a mutex lock and this is executed in an atomic context.
@ -4362,6 +4365,9 @@ static int qg_parse_dt(struct qpnp_qg *chip)
chip->dt.qg_ext_sense = of_property_read_bool(node, "qcom,qg-ext-sns");
chip->dt.use_cp_iin_sns = of_property_read_bool(node,
"qcom,use-cp-iin-sns");
chip->dt.use_s7_ocv = of_property_read_bool(node, "qcom,qg-use-s7-ocv");
rc = of_property_read_u32(node, "qcom,min-sleep-time-secs", &temp);