Commit efe21754 authored by Dmitry Osipenko's avatar Dmitry Osipenko Committed by Sebastian Reichel
Browse files

power: supply: smb347-charger: Add missing pin control activation



Pin control needs to be activated by setting the enable bit, otherwise
hardware rejects all pin changes. Previously this stayed unnoticed on
Nexus 7 because pin control was enabled by default after rebooting from
downstream kernel, which uses driver that enables the bit and charger
registers are non-volatile until power supply (battery) is disconnected.
Configure the pin control enable bit. This fixes the potentially
never-enabled charging on devices that use pin control.

Signed-off-by: default avatarDmitry Osipenko <digetx@gmail.com>
Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
parent 17e7bc53
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@
#define CFG_PIN_EN_CTRL_ACTIVE_LOW		0x60
#define CFG_PIN_EN_APSD_IRQ			BIT(1)
#define CFG_PIN_EN_CHARGER_ERROR		BIT(2)
#define CFG_PIN_EN_CTRL				BIT(4)
#define CFG_THERM				0x07
#define CFG_THERM_SOFT_HOT_COMPENSATION_MASK	0x03
#define CFG_THERM_SOFT_HOT_COMPENSATION_SHIFT	0
@@ -726,6 +727,15 @@ static int smb347_hw_init(struct smb347_charger *smb)
	if (ret < 0)
		goto fail;

	/* Activate pin control, making it writable. */
	switch (smb->enable_control) {
	case SMB3XX_CHG_ENABLE_PIN_ACTIVE_LOW:
	case SMB3XX_CHG_ENABLE_PIN_ACTIVE_HIGH:
		ret = regmap_set_bits(smb->regmap, CFG_PIN, CFG_PIN_EN_CTRL);
		if (ret < 0)
			goto fail;
	}

	/*
	 * Make the charging functionality controllable by a write to the
	 * command register unless pin control is specified in the platform