个人技术分享

问题描述:

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;
}