Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

power: supply: max17042: add MAX17055 support

The MAX17055 is very similar to the MAX17042 so extend the driver.

Signed-off-by: Angus Ainslie (Purism) <angus@akkea.ca>
Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org>
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>

authored by

Angus Ainslie (Purism) and committed by
Sebastian Reichel
bc90705b 47a34db3

+61 -4
+14 -3
drivers/power/supply/max17042_battery.c
··· 282 282 case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN: 283 283 if (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17042) 284 284 ret = regmap_read(map, MAX17042_V_empty, &data); 285 + else if (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17055) 286 + ret = regmap_read(map, MAX17055_V_empty, &data); 285 287 else 286 288 ret = regmap_read(map, MAX17047_V_empty, &data); 287 289 if (ret < 0) ··· 629 627 config->filter_cfg); 630 628 regmap_write(map, MAX17042_RelaxCFG, config->relax_cfg); 631 629 if (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17047 || 632 - chip->chip_type == MAXIM_DEVICE_TYPE_MAX17050) 630 + chip->chip_type == MAXIM_DEVICE_TYPE_MAX17050 || 631 + chip->chip_type == MAXIM_DEVICE_TYPE_MAX17055) 633 632 regmap_write(map, MAX17047_FullSOCThr, 634 633 config->full_soc_thresh); 635 634 } ··· 761 758 762 759 if (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17042) 763 760 max17042_override_por(map, MAX17042_V_empty, config->vempty); 761 + if (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17055) 762 + max17042_override_por(map, MAX17055_V_empty, config->vempty); 764 763 else 765 764 max17042_override_por(map, MAX17047_V_empty, config->vempty); 766 765 max17042_override_por(map, MAX17042_TempNom, config->temp_nom); ··· 770 765 max17042_override_por(map, MAX17042_FCTC, config->fctc); 771 766 max17042_override_por(map, MAX17042_RCOMP0, config->rcomp0); 772 767 max17042_override_por(map, MAX17042_TempCo, config->tcompc0); 773 - if (chip->chip_type) { 768 + if (chip->chip_type && 769 + ((chip->chip_type == MAXIM_DEVICE_TYPE_MAX17042) || 770 + (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17047) || 771 + (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17050))) { 774 772 max17042_override_por(map, MAX17042_EmptyTempCo, 775 773 config->empty_tempco); 776 774 max17042_override_por(map, MAX17042_K_empty0, ··· 937 929 if (!pdata) 938 930 return pdata; 939 931 940 - if (chip->chip_type != MAXIM_DEVICE_TYPE_MAX17042) { 932 + if ((chip->chip_type == MAXIM_DEVICE_TYPE_MAX17047) || 933 + (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17050)) { 941 934 pdata->init_data = max17047_default_pdata_init_regs; 942 935 pdata->num_init_data = 943 936 ARRAY_SIZE(max17047_default_pdata_init_regs); ··· 1176 1167 { .compatible = "maxim,max17042" }, 1177 1168 { .compatible = "maxim,max17047" }, 1178 1169 { .compatible = "maxim,max17050" }, 1170 + { .compatible = "maxim,max17055" }, 1179 1171 { }, 1180 1172 }; 1181 1173 MODULE_DEVICE_TABLE(of, max17042_dt_match); ··· 1186 1176 { "max17042", MAXIM_DEVICE_TYPE_MAX17042 }, 1187 1177 { "max17047", MAXIM_DEVICE_TYPE_MAX17047 }, 1188 1178 { "max17050", MAXIM_DEVICE_TYPE_MAX17050 }, 1179 + { "max17055", MAXIM_DEVICE_TYPE_MAX17055 }, 1189 1180 { } 1190 1181 }; 1191 1182 MODULE_DEVICE_TABLE(i2c, max17042_id);
+47 -1
include/linux/power/max17042_battery.h
··· 105 105 106 106 MAX17042_OCV = 0xEE, 107 107 108 - MAX17042_OCVInternal = 0xFB, 108 + MAX17042_OCVInternal = 0xFB, /* MAX17055 VFOCV */ 109 109 110 110 MAX17042_VFSOC = 0xFF, 111 + }; 112 + 113 + enum max17055_register { 114 + MAX17055_QRes = 0x0C, 115 + MAX17055_TTF = 0x20, 116 + MAX17055_V_empty = 0x3A, 117 + MAX17055_TIMER = 0x3E, 118 + MAX17055_USER_MEM = 0x40, 119 + MAX17055_RGAIN = 0x42, 120 + 121 + MAX17055_ConvgCfg = 0x49, 122 + MAX17055_VFRemCap = 0x4A, 123 + 124 + MAX17055_STATUS2 = 0xB0, 125 + MAX17055_POWER = 0xB1, 126 + MAX17055_ID = 0xB2, 127 + MAX17055_AvgPower = 0xB3, 128 + MAX17055_IAlrtTh = 0xB4, 129 + MAX17055_TTFCfg = 0xB5, 130 + MAX17055_CVMixCap = 0xB6, 131 + MAX17055_CVHalfTime = 0xB7, 132 + MAX17055_CGTempCo = 0xB8, 133 + MAX17055_Curve = 0xB9, 134 + MAX17055_HibCfg = 0xBA, 135 + MAX17055_Config2 = 0xBB, 136 + MAX17055_VRipple = 0xBC, 137 + MAX17055_RippleCfg = 0xBD, 138 + MAX17055_TimerH = 0xBE, 139 + 140 + MAX17055_RSense = 0xD0, 141 + MAX17055_ScOcvLim = 0xD1, 142 + 143 + MAX17055_SOCHold = 0xD3, 144 + MAX17055_MaxPeakPwr = 0xD4, 145 + MAX17055_SusPeakPwr = 0xD5, 146 + MAX17055_PackResistance = 0xD6, 147 + MAX17055_SysResistance = 0xD7, 148 + MAX17055_MinSysV = 0xD8, 149 + MAX17055_MPPCurrent = 0xD9, 150 + MAX17055_SPPCurrent = 0xDA, 151 + MAX17055_ModelCfg = 0xDB, 152 + MAX17055_AtQResidual = 0xDC, 153 + MAX17055_AtTTE = 0xDD, 154 + MAX17055_AtAvSOC = 0xDE, 155 + MAX17055_AtAvCap = 0xDF, 111 156 }; 112 157 113 158 /* Registers specific to max17047/50 */ ··· 170 125 MAXIM_DEVICE_TYPE_MAX17042, 171 126 MAXIM_DEVICE_TYPE_MAX17047, 172 127 MAXIM_DEVICE_TYPE_MAX17050, 128 + MAXIM_DEVICE_TYPE_MAX17055, 173 129 174 130 MAXIM_DEVICE_TYPE_NUM 175 131 };