问题描述:
BQ25703充电IC在DC电源插入时让系统电池图标显示充电,拔出时不充电。
解决方案:
kernel-5.10\drivers\power\supply\bq25700_charger.c
static irqreturn_t bq25700_irq_handler_thread(int irq, void *private)
{
struct bq25700_device *charger = private;
int irq_flag;
struct bq25700_state state;
if (bq25700_field_read(charger, AC_STAT)) {
// dc charger to battery by wi 20240529
irq_flag = IRQF_TRIGGER_LOW;
+ bq25700_field_write(charger, INPUT_CURRENT, charger- >init_data.input_current_cdp);
+ bq25700_field_write(charger, CHARGE_CURRENT, charger->init_data.ichg);
+ bq25700_get_chip_state(charger, &state);
+ charger->state = state;
+ power_supply_changed(charger->supply_charger);
+ DBG("BQ25700: set irq_flag = IRQF_TRIGGER_LOW\n");
// dc charger to battery by wi 20240529
} else {
irq_flag = IRQF_TRIGGER_HIGH;
bq25700_field_write(charger, INPUT_CURRENT,
charger->init_data.input_current_sdp);
bq25700_disable_charge(charger);
bq25700_get_chip_state(charger, &state);
charger->state = state;
power_supply_changed(charger->supply_charger);
charger->typec0_status = USB_STATUS_NONE;
charger->typec1_status = USB_STATUS_NONE;
DBG("BQ25700:set irq_flag = IRQF_TRIGGER_HIGH\n");
}
irq_set_irq_type(irq, irq_flag | IRQF_ONESHOT);
return IRQ_HANDLED;
}