Loading drivers/power/supply/qcom/qg-core.h +2 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 */ Loading drivers/power/supply/qcom/qg-iio.h +2 −0 Original line number Diff line number Diff line Loading @@ -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[] = { Loading @@ -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 drivers/power/supply/qcom/qg-util.c +15 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; } Loading drivers/power/supply/qcom/qg-util.h +2 −0 Original line number Diff line number Diff line Loading @@ -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); Loading drivers/power/supply/qcom/qpnp-qg.c +12 −6 Original line number Diff line number Diff line Loading @@ -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) Loading Loading @@ -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. Loading Loading @@ -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 Loading
drivers/power/supply/qcom/qg-core.h +2 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 */ Loading
drivers/power/supply/qcom/qg-iio.h +2 −0 Original line number Diff line number Diff line Loading @@ -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[] = { Loading @@ -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
drivers/power/supply/qcom/qg-util.c +15 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; } Loading
drivers/power/supply/qcom/qg-util.h +2 −0 Original line number Diff line number Diff line Loading @@ -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); Loading
drivers/power/supply/qcom/qpnp-qg.c +12 −6 Original line number Diff line number Diff line Loading @@ -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) Loading Loading @@ -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. Loading Loading @@ -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