mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-07 12:25:00 -04:00
Merge "power: qpnp-qg: Add support for SMB-sensing for SMB1395/6"
This commit is contained in:
commit
1f8ff78eb8
5 changed files with 33 additions and 7 deletions
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in a new issue