Loading drivers/power/smb1351-charger.c +26 −12 Original line number Diff line number Diff line Loading @@ -3002,6 +3002,11 @@ static void smb1351_chg_remove_work(struct work_struct *work) if (!(reg & IRQ_SOURCE_DET_BIT)) { pr_debug("chg removed\n"); chip->chg_present = false; /* clear parallel slave PRESENT */ if (parallel_psy && chip->parallel.slave_detected) { pr_debug("set parallel charger un-present!\n"); power_supply_set_present(parallel_psy, false); } power_supply_set_supply_type(chip->usb_psy, POWER_SUPPLY_TYPE_UNKNOWN); power_supply_set_present(chip->usb_psy, Loading @@ -3010,11 +3015,6 @@ static void smb1351_chg_remove_work(struct work_struct *work) power_supply_set_dp_dm(chip->usb_psy, POWER_SUPPLY_DP_DM_DPR_DMR); chip->apsd_rerun = false; /* clear parallel slave PRESENT */ if (parallel_psy && chip->parallel.slave_detected) { pr_debug("set parallel charger un-present!\n"); power_supply_set_present(parallel_psy, false); } } else if (!chip->chg_remove_work_scheduled) { chip->chg_remove_work_scheduled = true; goto reschedule; Loading Loading @@ -3064,15 +3064,15 @@ static int smb1351_usbin_uv_handler(struct smb1351_charger *chip, u8 status) } } else { chip->chg_present = false; /* clear parallel slave PRESENT */ if (parallel_psy && chip->parallel.slave_detected) power_supply_set_present(parallel_psy, false); power_supply_set_supply_type(chip->usb_psy, POWER_SUPPLY_TYPE_UNKNOWN); power_supply_set_present(chip->usb_psy, chip->chg_present); pr_debug("updating usb_psy present=%d\n", chip->chg_present); /* clear parallel slave RESENT */ if (parallel_psy && chip->parallel.slave_detected) power_supply_set_present(parallel_psy, false); } return 0; } Loading Loading @@ -3116,12 +3116,12 @@ static int smb1351_usbin_ov_handler(struct smb1351_charger *chip, u8 status) if (status != 0) { chip->chg_present = false; chip->usbin_ov = true; power_supply_set_supply_type(chip->usb_psy, POWER_SUPPLY_TYPE_UNKNOWN); power_supply_set_present(chip->usb_psy, chip->chg_present); /* clear parallel slave PRESENT */ if (parallel_psy && chip->parallel.slave_detected) power_supply_set_present(parallel_psy, false); power_supply_set_supply_type(chip->usb_psy, POWER_SUPPLY_TYPE_UNKNOWN); power_supply_set_present(chip->usb_psy, chip->chg_present); } else { chip->usbin_ov = false; if (reg & IRQ_USBIN_UV_BIT) Loading Loading @@ -3870,11 +3870,25 @@ static void smb1351_external_power_changed(struct power_supply *psy) { struct smb1351_charger *chip = container_of(psy, struct smb1351_charger, batt_psy); struct power_supply *parallel_psy = smb1351_get_parallel_slave(chip); union power_supply_propval prop = {0,}; int rc, online = 0; int rc, online = 0, slave_present = 0; battery_soc_changed(chip); if (parallel_psy) { parallel_psy->get_property(parallel_psy, POWER_SUPPLY_PROP_PRESENT, &prop); slave_present = prop.intval; /* Don't update main charger ICL if slave is enabled */ if (chip->parallel.slave_detected && slave_present && chip->parallel.slave_icl_ma != 0) { pr_debug("Ignore ICL setting as parallel-slave is enabled\n"); return; } } rc = chip->usb_psy->get_property(chip->usb_psy, POWER_SUPPLY_PROP_ONLINE, &prop); if (rc) { Loading Loading
drivers/power/smb1351-charger.c +26 −12 Original line number Diff line number Diff line Loading @@ -3002,6 +3002,11 @@ static void smb1351_chg_remove_work(struct work_struct *work) if (!(reg & IRQ_SOURCE_DET_BIT)) { pr_debug("chg removed\n"); chip->chg_present = false; /* clear parallel slave PRESENT */ if (parallel_psy && chip->parallel.slave_detected) { pr_debug("set parallel charger un-present!\n"); power_supply_set_present(parallel_psy, false); } power_supply_set_supply_type(chip->usb_psy, POWER_SUPPLY_TYPE_UNKNOWN); power_supply_set_present(chip->usb_psy, Loading @@ -3010,11 +3015,6 @@ static void smb1351_chg_remove_work(struct work_struct *work) power_supply_set_dp_dm(chip->usb_psy, POWER_SUPPLY_DP_DM_DPR_DMR); chip->apsd_rerun = false; /* clear parallel slave PRESENT */ if (parallel_psy && chip->parallel.slave_detected) { pr_debug("set parallel charger un-present!\n"); power_supply_set_present(parallel_psy, false); } } else if (!chip->chg_remove_work_scheduled) { chip->chg_remove_work_scheduled = true; goto reschedule; Loading Loading @@ -3064,15 +3064,15 @@ static int smb1351_usbin_uv_handler(struct smb1351_charger *chip, u8 status) } } else { chip->chg_present = false; /* clear parallel slave PRESENT */ if (parallel_psy && chip->parallel.slave_detected) power_supply_set_present(parallel_psy, false); power_supply_set_supply_type(chip->usb_psy, POWER_SUPPLY_TYPE_UNKNOWN); power_supply_set_present(chip->usb_psy, chip->chg_present); pr_debug("updating usb_psy present=%d\n", chip->chg_present); /* clear parallel slave RESENT */ if (parallel_psy && chip->parallel.slave_detected) power_supply_set_present(parallel_psy, false); } return 0; } Loading Loading @@ -3116,12 +3116,12 @@ static int smb1351_usbin_ov_handler(struct smb1351_charger *chip, u8 status) if (status != 0) { chip->chg_present = false; chip->usbin_ov = true; power_supply_set_supply_type(chip->usb_psy, POWER_SUPPLY_TYPE_UNKNOWN); power_supply_set_present(chip->usb_psy, chip->chg_present); /* clear parallel slave PRESENT */ if (parallel_psy && chip->parallel.slave_detected) power_supply_set_present(parallel_psy, false); power_supply_set_supply_type(chip->usb_psy, POWER_SUPPLY_TYPE_UNKNOWN); power_supply_set_present(chip->usb_psy, chip->chg_present); } else { chip->usbin_ov = false; if (reg & IRQ_USBIN_UV_BIT) Loading Loading @@ -3870,11 +3870,25 @@ static void smb1351_external_power_changed(struct power_supply *psy) { struct smb1351_charger *chip = container_of(psy, struct smb1351_charger, batt_psy); struct power_supply *parallel_psy = smb1351_get_parallel_slave(chip); union power_supply_propval prop = {0,}; int rc, online = 0; int rc, online = 0, slave_present = 0; battery_soc_changed(chip); if (parallel_psy) { parallel_psy->get_property(parallel_psy, POWER_SUPPLY_PROP_PRESENT, &prop); slave_present = prop.intval; /* Don't update main charger ICL if slave is enabled */ if (chip->parallel.slave_detected && slave_present && chip->parallel.slave_icl_ma != 0) { pr_debug("Ignore ICL setting as parallel-slave is enabled\n"); return; } } rc = chip->usb_psy->get_property(chip->usb_psy, POWER_SUPPLY_PROP_ONLINE, &prop); if (rc) { Loading