]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
Add support for bq27521 battery monitor
authorPavel Machek <pavel@ucw.cz>
Fri, 10 Nov 2017 10:39:37 +0000 (11:39 +0100)
committerSebastian Reichel <sre@kernel.org>
Fri, 8 Dec 2017 17:02:15 +0000 (18:02 +0100)
This adds basic support for BQ27521 battery monitor, used in Nokia N9
and N950. In particular, battery voltage is important to be able to
tell when the battery is almost empty. Emptying battery on N950 is
pretty painful, as flasher needs to be used to recover phone in such case.

Signed-off-by: Pavel Machek <pavel@ucw.cz>
Acked-by: Andrew F. Davis <afd@ti.com>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
Documentation/devicetree/bindings/power/supply/bq27xxx.txt
drivers/power/supply/bq27xxx_battery.c
drivers/power/supply/bq27xxx_battery_i2c.c
include/linux/power/bq27xxx_battery.h

index 6858e1a804adaa55bcc91233e052d1b26d63bfa3..615c1cb6889f89be4e20793fa8d709a5f5b490f0 100644 (file)
@@ -15,6 +15,7 @@ Required properties:
  * "ti,bq27520g2" - BQ27520-g2
  * "ti,bq27520g3" - BQ27520-g3
  * "ti,bq27520g4" - BQ27520-g4
+ * "ti,bq27521" - BQ27521
  * "ti,bq27530" - BQ27530
  * "ti,bq27531" - BQ27531
  * "ti,bq27541" - BQ27541
index 51f0961ecf3e015c5ff9752d8999ac1281c48e34..d99981542a46291891104741e2b88fdf54f764c7 100644 (file)
@@ -323,6 +323,30 @@ static u8
                [BQ27XXX_REG_AP] = INVALID_REG_ADDR,
                BQ27XXX_DM_REG_ROWS,
        },
+       bq27521_regs[BQ27XXX_REG_MAX] = {
+               [BQ27XXX_REG_CTRL] = 0x02,
+               [BQ27XXX_REG_TEMP] = 0x0a,
+               [BQ27XXX_REG_INT_TEMP] = INVALID_REG_ADDR,
+               [BQ27XXX_REG_VOLT] = 0x0c,
+               [BQ27XXX_REG_AI] = 0x0e,
+               [BQ27XXX_REG_FLAGS] = 0x08,
+               [BQ27XXX_REG_TTE] = INVALID_REG_ADDR,
+               [BQ27XXX_REG_TTF] = INVALID_REG_ADDR,
+               [BQ27XXX_REG_TTES] = INVALID_REG_ADDR,
+               [BQ27XXX_REG_TTECP] = INVALID_REG_ADDR,
+               [BQ27XXX_REG_NAC] = INVALID_REG_ADDR,
+               [BQ27XXX_REG_FCC] = INVALID_REG_ADDR,
+               [BQ27XXX_REG_CYCT] = INVALID_REG_ADDR,
+               [BQ27XXX_REG_AE] = INVALID_REG_ADDR,
+               [BQ27XXX_REG_SOC] = INVALID_REG_ADDR,
+               [BQ27XXX_REG_DCAP] = INVALID_REG_ADDR,
+               [BQ27XXX_REG_AP] = INVALID_REG_ADDR,
+               [BQ27XXX_DM_CTRL] = INVALID_REG_ADDR,
+               [BQ27XXX_DM_CLASS] = INVALID_REG_ADDR,
+               [BQ27XXX_DM_BLOCK] = INVALID_REG_ADDR,
+               [BQ27XXX_DM_DATA] = INVALID_REG_ADDR,
+               [BQ27XXX_DM_CKSUM] = INVALID_REG_ADDR,
+       },
        bq27530_regs[BQ27XXX_REG_MAX] = {
                [BQ27XXX_REG_CTRL] = 0x00,
                [BQ27XXX_REG_TEMP] = 0x06,
@@ -557,6 +581,15 @@ static enum power_supply_property bq27520g4_props[] = {
        POWER_SUPPLY_PROP_MANUFACTURER,
 };
 
+static enum power_supply_property bq27521_props[] = {
+       POWER_SUPPLY_PROP_STATUS,
+       POWER_SUPPLY_PROP_PRESENT,
+       POWER_SUPPLY_PROP_VOLTAGE_NOW,
+       POWER_SUPPLY_PROP_CURRENT_NOW,
+       POWER_SUPPLY_PROP_TEMP,
+       POWER_SUPPLY_PROP_TECHNOLOGY,
+};
+
 static enum power_supply_property bq27530_props[] = {
        POWER_SUPPLY_PROP_STATUS,
        POWER_SUPPLY_PROP_PRESENT,
@@ -671,6 +704,7 @@ static struct bq27xxx_dm_reg bq27500_dm_regs[] = {
 #define bq27520g2_dm_regs 0
 #define bq27520g3_dm_regs 0
 #define bq27520g4_dm_regs 0
+#define bq27521_dm_regs 0
 #define bq27530_dm_regs 0
 #define bq27531_dm_regs 0
 #define bq27541_dm_regs 0
@@ -717,8 +751,8 @@ static struct bq27xxx_dm_reg bq27621_dm_regs[] = {
 #endif
 
 #define BQ27XXX_O_ZERO 0x00000001
-#define BQ27XXX_O_OTDC 0x00000002
-#define BQ27XXX_O_UTOT  0x00000004
+#define BQ27XXX_O_OTDC 0x00000002 /* has OTC/OTD overtemperature flags */
+#define BQ27XXX_O_UTOT  0x00000004 /* has OT overtemperature flag */
 #define BQ27XXX_O_CFGUP        0x00000008
 #define BQ27XXX_O_RAM  0x00000010
 
@@ -751,6 +785,7 @@ static struct {
        [BQ27520G2] = BQ27XXX_DATA(bq27520g2, 0         , BQ27XXX_O_OTDC),
        [BQ27520G3] = BQ27XXX_DATA(bq27520g3, 0         , BQ27XXX_O_OTDC),
        [BQ27520G4] = BQ27XXX_DATA(bq27520g4, 0         , BQ27XXX_O_OTDC),
+       [BQ27521]   = BQ27XXX_DATA(bq27521,   0         , 0),
        [BQ27530]   = BQ27XXX_DATA(bq27530,   0         , BQ27XXX_O_UTOT),
        [BQ27531]   = BQ27XXX_DATA(bq27531,   0         , BQ27XXX_O_UTOT),
        [BQ27541]   = BQ27XXX_DATA(bq27541,   0         , BQ27XXX_O_OTDC),
index 0b11ed472f3383e2d884446f60b57953fefe3ccd..6b25e5f2337ec29ed34f83f5a7fcce8ec91d0a5d 100644 (file)
@@ -239,6 +239,7 @@ static const struct i2c_device_id bq27xxx_i2c_id_table[] = {
        { "bq27520g2", BQ27520G2 },
        { "bq27520g3", BQ27520G3 },
        { "bq27520g4", BQ27520G4 },
+       { "bq27521", BQ27521 },
        { "bq27530", BQ27530 },
        { "bq27531", BQ27531 },
        { "bq27541", BQ27541 },
@@ -269,6 +270,7 @@ static const struct of_device_id bq27xxx_battery_i2c_of_match_table[] = {
        { .compatible = "ti,bq27520g2" },
        { .compatible = "ti,bq27520g3" },
        { .compatible = "ti,bq27520g4" },
+       { .compatible = "ti,bq27521" },
        { .compatible = "ti,bq27530" },
        { .compatible = "ti,bq27531" },
        { .compatible = "ti,bq27541" },
index e6187f524f2cb5ea76730027ac1491eb75d63ee5..01fbf1b162587c41c39c1fb35dd6f4c28dcca854 100644 (file)
@@ -16,6 +16,7 @@ enum bq27xxx_chip {
        BQ27520G2, /* bq27520G2 */
        BQ27520G3, /* bq27520G3 */
        BQ27520G4, /* bq27520G4 */
+       BQ27521, /* bq27521 */
        BQ27530, /* bq27530, bq27531 */
        BQ27531,
        BQ27541, /* bq27541, bq27542, bq27546, bq27742 */