Commit 4bf00434 authored by Sebastian Krzyszkowiak's avatar Sebastian Krzyszkowiak Committed by Sebastian Reichel
Browse files

power: supply: max17042_battery: more robust chip type checks



Prepared by checking the datasheets of max17042, max17047/50
and max170455 for differences in register maps.

Signed-off-by: default avatarSebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>
Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
parent ed0d0a05
Loading
Loading
Loading
Loading
+21 −19
Original line number Diff line number Diff line
@@ -763,34 +763,36 @@ static inline void max17042_override_por_values(struct max17042_chip *chip)
	max17042_override_por(map, MAX17042_FilterCFG, config->filter_cfg);
	max17042_override_por(map, MAX17042_RelaxCFG, config->relax_cfg);
	max17042_override_por(map, MAX17042_MiscCFG, config->misc_cfg);
	max17042_override_por(map, MAX17042_MaskSOC, config->masksoc);

	max17042_override_por(map, MAX17042_FullCAP, config->fullcap);
	max17042_override_por(map, MAX17042_FullCAPNom, config->fullcapnom);
	if (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17042)
		max17042_override_por(map, MAX17042_SOC_empty,
						config->socempty);
	max17042_override_por(map, MAX17042_LAvg_empty, config->lavg_empty);
	max17042_override_por(map, MAX17042_dQacc, config->dqacc);
	max17042_override_por(map, MAX17042_dPacc, config->dpacc);

	if (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17042)
	max17042_override_por(map, MAX17042_RCOMP0, config->rcomp0);
	max17042_override_por(map, MAX17042_TempCo, config->tcompc0);

	if (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17042) {
		max17042_override_por(map, MAX17042_MaskSOC, config->masksoc);
		max17042_override_por(map, MAX17042_SOC_empty, config->socempty);
		max17042_override_por(map, MAX17042_V_empty, config->vempty);
	else
		max17042_override_por(map, MAX17047_V_empty, config->vempty);
		max17042_override_por(map, MAX17042_EmptyTempCo, config->empty_tempco);
		max17042_override_por(map, MAX17042_K_empty0, config->kempty0);
	}

	if ((chip->chip_type == MAXIM_DEVICE_TYPE_MAX17042) ||
	    (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17047) ||
	    (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17050)) {
		max17042_override_por(map, MAX17042_LAvg_empty, config->lavg_empty);
		max17042_override_por(map, MAX17042_TempNom, config->temp_nom);
		max17042_override_por(map, MAX17042_TempLim, config->temp_lim);
		max17042_override_por(map, MAX17042_FCTC, config->fctc);
	max17042_override_por(map, MAX17042_RCOMP0, config->rcomp0);
	max17042_override_por(map, MAX17042_TempCo, config->tcompc0);
	if (chip->chip_type &&
	    ((chip->chip_type == MAXIM_DEVICE_TYPE_MAX17042) ||
	    (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17047) ||
	    (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17050))) {
		max17042_override_por(map, MAX17042_EmptyTempCo,
						config->empty_tempco);
		max17042_override_por(map, MAX17042_K_empty0,
						config->kempty0);
	}

	if ((chip->chip_type == MAXIM_DEVICE_TYPE_MAX17047) ||
	    (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17050) ||
	    (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17055)) {
		max17042_override_por(map, MAX17047_V_empty, config->vempty);
	}
}

+6 −3
Original line number Diff line number Diff line
@@ -110,12 +110,14 @@ enum max17042_register {
	MAX17042_VFSOC		= 0xFF,
};

/* Registers specific to max17055 only */
enum max17055_register {
	MAX17055_QRes		= 0x0C,
	MAX17055_RCell		= 0x14,
	MAX17055_TTF		= 0x20,
	MAX17055_TIMER		= 0x3E,
	MAX17055_DieTemp	= 0x34,
	MAX17055_USER_MEM	= 0x40,
	MAX17055_RGAIN		= 0x42,
	MAX17055_RGAIN		= 0x43,

	MAX17055_ConvgCfg	= 0x49,
	MAX17055_VFRemCap	= 0x4A,
@@ -154,13 +156,14 @@ enum max17055_register {
	MAX17055_AtAvCap	= 0xDF,
};

/* Registers specific to max17047/50 */
/* Registers specific to max17047/50/55 */
enum max17047_register {
	MAX17047_QRTbl00	= 0x12,
	MAX17047_FullSOCThr	= 0x13,
	MAX17047_QRTbl10	= 0x22,
	MAX17047_QRTbl20	= 0x32,
	MAX17047_V_empty	= 0x3A,
	MAX17047_TIMER		= 0x3E,
	MAX17047_QRTbl30	= 0x42,
};