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

power: supply: bq25890_charger: Add the BQ25896 part

The BQ25896 is almost identical to the BQ25890.

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

authored by

Angus Ainslie (Purism) and committed by
Sebastian Reichel
2e1a2dde 0838d84f

+22 -5
+3
Documentation/devicetree/bindings/power/supply/bq25890.txt
··· 1 1 Binding for TI bq25890 Li-Ion Charger 2 2 3 + This driver will support the bq25896 and the bq25890. There are other ICs 4 + in the same family but those have not been tested. 5 + 3 6 Required properties: 4 7 - compatible: Should contain one of the following: 5 8 * "ti,bq25890"
+19 -5
drivers/power/supply/bq25890_charger.c
··· 32 32 #define BQ25890_IRQ_PIN "bq25890_irq" 33 33 34 34 #define BQ25890_ID 3 35 + #define BQ25896_ID 0 35 36 36 37 enum bq25890_fields { 37 38 F_EN_HIZ, F_EN_ILIM, F_IILIM, /* Reg00 */ ··· 154 153 [F_CONV_RATE] = REG_FIELD(0x02, 6, 6), 155 154 [F_BOOSTF] = REG_FIELD(0x02, 5, 5), 156 155 [F_ICO_EN] = REG_FIELD(0x02, 4, 4), 157 - [F_HVDCP_EN] = REG_FIELD(0x02, 3, 3), 158 - [F_MAXC_EN] = REG_FIELD(0x02, 2, 2), 156 + [F_HVDCP_EN] = REG_FIELD(0x02, 3, 3), // reserved on BQ25896 157 + [F_MAXC_EN] = REG_FIELD(0x02, 2, 2), // reserved on BQ25896 159 158 [F_FORCE_DPM] = REG_FIELD(0x02, 1, 1), 160 159 [F_AUTO_DPDM_EN] = REG_FIELD(0x02, 0, 0), 161 160 /* REG03 */ ··· 164 163 [F_OTG_CFG] = REG_FIELD(0x03, 5, 5), 165 164 [F_CHG_CFG] = REG_FIELD(0x03, 4, 4), 166 165 [F_SYSVMIN] = REG_FIELD(0x03, 1, 3), 166 + /* MIN_VBAT_SEL on BQ25896 */ 167 167 /* REG04 */ 168 168 [F_PUMPX_EN] = REG_FIELD(0x04, 7, 7), 169 169 [F_ICHG] = REG_FIELD(0x04, 0, 6), ··· 183 181 [F_CHG_TMR] = REG_FIELD(0x07, 1, 2), 184 182 [F_JEITA_ISET] = REG_FIELD(0x07, 0, 0), 185 183 /* REG08 */ 186 - [F_BATCMP] = REG_FIELD(0x08, 6, 7), 184 + [F_BATCMP] = REG_FIELD(0x08, 6, 7), // 5-7 on BQ25896 187 185 [F_VCLAMP] = REG_FIELD(0x08, 2, 4), 188 186 [F_TREG] = REG_FIELD(0x08, 0, 1), 189 187 /* REG09 */ ··· 197 195 [F_PUMPX_DN] = REG_FIELD(0x09, 0, 0), 198 196 /* REG0A */ 199 197 [F_BOOSTV] = REG_FIELD(0x0A, 4, 7), 198 + /* PFM_OTG_DIS 3 on BQ25896 */ 200 199 [F_BOOSTI] = REG_FIELD(0x0A, 0, 2), 201 200 /* REG0B */ 202 201 [F_VBUS_STAT] = REG_FIELD(0x0B, 5, 7), 203 202 [F_CHG_STAT] = REG_FIELD(0x0B, 3, 4), 204 203 [F_PG_STAT] = REG_FIELD(0x0B, 2, 2), 205 - [F_SDP_STAT] = REG_FIELD(0x0B, 1, 1), 204 + [F_SDP_STAT] = REG_FIELD(0x0B, 1, 1), // reserved on BQ25896 206 205 [F_VSYS_STAT] = REG_FIELD(0x0B, 0, 0), 207 206 /* REG0C */ 208 207 [F_WD_FAULT] = REG_FIELD(0x0C, 7, 7), ··· 397 394 398 395 case POWER_SUPPLY_PROP_MANUFACTURER: 399 396 val->strval = BQ25890_MANUFACTURER; 397 + break; 398 + 399 + case POWER_SUPPLY_PROP_MODEL_NAME: 400 + if (bq->chip_id == BQ25890_ID) 401 + val->strval = "BQ25890"; 402 + else if (bq->chip_id == BQ25896_ID) 403 + val->strval = "BQ25896"; 404 + else 405 + val->strval = "UNKNOWN"; 406 + 400 407 break; 401 408 402 409 case POWER_SUPPLY_PROP_ONLINE: ··· 660 647 661 648 static enum power_supply_property bq25890_power_supply_props[] = { 662 649 POWER_SUPPLY_PROP_MANUFACTURER, 650 + POWER_SUPPLY_PROP_MODEL_NAME, 663 651 POWER_SUPPLY_PROP_STATUS, 664 652 POWER_SUPPLY_PROP_ONLINE, 665 653 POWER_SUPPLY_PROP_HEALTH, ··· 862 848 return bq->chip_id; 863 849 } 864 850 865 - if (bq->chip_id != BQ25890_ID) { 851 + if ((bq->chip_id != BQ25890_ID) && (bq->chip_id != BQ25896_ID)) { 866 852 dev_err(dev, "Chip with ID=%d, not supported!\n", bq->chip_id); 867 853 return -ENODEV; 868 854 }