power: supply: bq27xxx_battery: Fix register map for BQ27510 and BQ27520
PATCH 1/1 power: supply: bq27xxx_battery: Fix register map for BQ27510 and BQ27520
The BQ27510 and BQ27520 use a slightly different register map than the BQ27500, add a new type enum and add these gauges to it.
--- drivers/power/supply/bq27xxx_battery.c | 41 +++++++++++++++++++++++++++++- drivers/power/supply/bq27xxx_battery_i2c.c | 4 +-- include/linux/power/bq27xxx_battery.h | 3 ++- 3 files changed, 44 insertions(+), 4 deletions(-)
drivers/power/supply/bq27xxx_battery.c +40 -1
@@ -164,6 +164,25 @@ static u8 bq27xxx_regs[][BQ27XXX_REG_MAX] = { [BQ27XXX_REG_DCAP] = 0x3c, [BQ27XXX_REG_AP ] =INVALID_REG_ADDR , }, + [BQ27510] = { + [BQ27XXX_REG_CTRL ] =0x00 , + [BQ27XXX_REG_TEMP ] =0x06 , + [BQ27XXX_REG_INT_TEMP ] =0x28 , + [BQ27XXX_REG_VOLT ] =0x08 , + [BQ27XXX_REG_AI ] =0x14 , + [BQ27XXX_REG_FLAGS ] =0x0a , + [BQ27XXX_REG_TTE ] =0x16 , + [BQ27XXX_REG_TTF ] =INVALID_REG_ADDR , + [BQ27XXX_REG_TTES ] =0x1a , + [BQ27XXX_REG_TTECP ] =INVALID_REG_ADDR , + [BQ27XXX_REG_NAC ] =0x0c , + [BQ27XXX_REG_FCC ] =0x12 , + [BQ27XXX_REG_CYCT ] =0x1e , + [BQ27XXX_REG_AE ] =INVALID_REG_ADDR , + [BQ27XXX_REG_SOC ] =0x20 , + [BQ27XXX_REG_DCAP ] =0x2e , + [BQ27XXX_REG_AP ] =INVALID_REG_ADDR , + }, [BQ27530 ] = { [BQ27XXX_REG_CTRL ] =0x00 , [BQ27XXX_REG_TEMP ] =0x06 ,
@@ -302,6 +321,24 @@ static enum power_supply_property bq27500_battery_props[] = { POWER_SUPPLY_PROP_MANUFACTURER, }; +static enum power_supply_property bq27510_battery_props[] = { +POWER_SUPPLY_PROP_STATUS , +POWER_SUPPLY_PROP_PRESENT , +POWER_SUPPLY_PROP_VOLTAGE_NOW , +POWER_SUPPLY_PROP_CURRENT_NOW , +POWER_SUPPLY_PROP_CAPACITY , +POWER_SUPPLY_PROP_CAPACITY_LEVEL , +POWER_SUPPLY_PROP_TEMP , +POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW , +POWER_SUPPLY_PROP_TECHNOLOGY , +POWER_SUPPLY_PROP_CHARGE_FULL , +POWER_SUPPLY_PROP_CHARGE_NOW , +POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN , +POWER_SUPPLY_PROP_CYCLE_COUNT , +POWER_SUPPLY_PROP_HEALTH , +POWER_SUPPLY_PROP_MANUFACTURER , +}; +static enum power_supply_property bq27530_battery_props[] = {POWER_SUPPLY_PROP_STATUS ,POWER_SUPPLY_PROP_PRESENT ,
@@ -385,6 +422,7 @@ static struct {BQ27XXX_PROP (BQ27000 , bq27000_battery_props),BQ27XXX_PROP (BQ27010 , bq27010_battery_props),BQ27XXX_PROP (BQ27500 , bq27500_battery_props), +BQ27XXX_PROP (BQ27510 , bq27510_battery_props),BQ27XXX_PROP (BQ27530 , bq27530_battery_props),BQ27XXX_PROP (BQ27541 , bq27541_battery_props), BQ27XXX_PROP(BQ27545, bq27545_battery_props),
@@ -635,7 +673,8 @@ static int bq27xxx_battery_read_pwr_avg(struct bq27xxx_device_info *di)*/ static bool bq27xxx_battery_overtemp (struct bq27xxx_device_info *di,u16 flags) { -if (di->chip ==BQ27500 || di->chip ==BQ27541 || di->chip ==BQ27545 ) +if (di->chip ==BQ27500 || di->chip ==BQ27510 || + di->chip ==BQ27541 || di->chip ==BQ27545 )return flags & (BQ27XXX_FLAG_OTC |BQ27XXX_FLAG_OTD );if (di->chip ==BQ27530 || di->chip ==BQ27421 )return flags &BQ27XXX_FLAG_OT ;
drivers/power/supply/bq27xxx_battery_i2c.c +2 -2
@@ -149,8 +149,8 @@ static const struct i2c_device_id bq27xxx_i2c_id_table[] = { { "bq27200", BQ27000 }, { "bq27210", BQ27010 }, { "bq27500", BQ27500 }, - { "bq27510", BQ27500 }, - { "bq27520", BQ27500 }, + { "bq27510", BQ27510 }, + { "bq27520", BQ27510 }, { "bq27530", BQ27530 }, { "bq27531", BQ27530 }, { "bq27541", BQ27541 },
include/linux/power/bq27xxx_battery.h +2 -1
@@ -4,7 +4,8 @@enum bq27xxx_chip {BQ27000 =1 ,/* bq27000, bq27200 */ BQ27010 ,/* bq27010, bq27210 */ -BQ27500 ,/* bq27500, bq27510, bq27520 */ +BQ27500 ,/* bq27500 */ +BQ27510 ,/* bq27510, bq27520 */ BQ27530 ,/* bq27530, bq27531 */ BQ27541 ,/* bq27541, bq27542, bq27546, bq27742 */ BQ27545 ,/* bq27545 */
Signature · 1 line
2.10.1
Quoted 84 lines · On Friday 04 November 2016 19:33:13 Andrew F. Davis wrote:
The BQ27510 and BQ27520 use a slightly different register map than the BQ27500, add a new type enum and add these gauges to it.
Fixes d74534c27775 ("power: bq27xxx_battery: Add support foradditional bq27xxx family devices") Based-on-patch-by: Kenneth R. Crudup <[email protected]>
Signed-off-by Andrew F. Davis <[email protected]>--- drivers/power/supply/bq27xxx_battery.c | 41 +++++++++++++++++++++++++++++- drivers/power/supply/bq27xxx_battery_i2c.c | 4 +-- include/linux/power/bq27xxx_battery.h | 3 ++- 3 files changed, 44 insertions(+), 4 deletions(-)(quoted diff) +0
-0
b/drivers/power/supply/bq27xxx_battery.cindex 3b0dbc6..bccb3f5 100644drivers/power/supply/bq27xxx_battery.c +38
-0@@ -164,6 +164,25 @@ static u8 bq27xxx_regs[][BQ27XXX_REG_MAX] = { [BQ27XXX_REG_DCAP] = 0x3c, [BQ27XXX_REG_AP ] =INVALID_REG_ADDR , }, + [BQ27510] = { + [BQ27XXX_REG_CTRL ] =0x00 , + [BQ27XXX_REG_TEMP ] =0x06 , + [BQ27XXX_REG_INT_TEMP ] =0x28 , + [BQ27XXX_REG_VOLT ] =0x08 , + [BQ27XXX_REG_AI ] =0x14 , + [BQ27XXX_REG_FLAGS ] =0x0a , + [BQ27XXX_REG_TTE ] =0x16 , + [BQ27XXX_REG_TTF ] =INVALID_REG_ADDR , + [BQ27XXX_REG_TTES ] =0x1a , + [BQ27XXX_REG_TTECP ] =INVALID_REG_ADDR , + [BQ27XXX_REG_NAC ] =0x0c , + [BQ27XXX_REG_FCC ] =0x12 , + [BQ27XXX_REG_CYCT ] =0x1e , + [BQ27XXX_REG_AE ] =INVALID_REG_ADDR , + [BQ27XXX_REG_SOC ] =0x20 , + [BQ27XXX_REG_DCAP ] =0x2e , + [BQ27XXX_REG_AP ] =INVALID_REG_ADDR , + }, [BQ27530 ] = { [BQ27XXX_REG_CTRL ] =0x00 , [BQ27XXX_REG_TEMP ] =0x06 ,@@ -302,6 +321,24 @@ static enum power_supply_property bq27500_battery_props[] = { POWER_SUPPLY_PROP_MANUFACTURER, }; +static enum power_supply_property bq27510_battery_props[] = { +POWER_SUPPLY_PROP_STATUS , +POWER_SUPPLY_PROP_PRESENT , +POWER_SUPPLY_PROP_VOLTAGE_NOW , +POWER_SUPPLY_PROP_CURRENT_NOW , +POWER_SUPPLY_PROP_CAPACITY , +POWER_SUPPLY_PROP_CAPACITY_LEVEL , +POWER_SUPPLY_PROP_TEMP , +POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW , +POWER_SUPPLY_PROP_TECHNOLOGY , +POWER_SUPPLY_PROP_CHARGE_FULL , +POWER_SUPPLY_PROP_CHARGE_NOW , +POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN , +POWER_SUPPLY_PROP_CYCLE_COUNT , +POWER_SUPPLY_PROP_HEALTH , +POWER_SUPPLY_PROP_MANUFACTURER , +}; +static enum power_supply_property bq27530_battery_props[] = {POWER_SUPPLY_PROP_STATUS ,POWER_SUPPLY_PROP_PRESENT ,@@ -385,6 +422,7 @@ static struct {BQ27XXX_PROP (BQ27000 , bq27000_battery_props),BQ27XXX_PROP (BQ27010 , bq27010_battery_props),BQ27XXX_PROP (BQ27500 , bq27500_battery_props), +BQ27XXX_PROP (BQ27510 , bq27510_battery_props),BQ27XXX_PROP (BQ27530 , bq27530_battery_props),BQ27XXX_PROP (BQ27541 , bq27541_battery_props), BQ27XXX_PROP(BQ27545, bq27545_battery_props),@@ -635,7 +673,8 @@ static int bq27xxx_battery_read_pwr_avg(struct
bq27xxx_device_info*di) */
static bool bq27xxx_battery_overtemp(structbq27xxx_device_info*di,
u16 flags) {drivers/power/supply/bq27xxx_battery.c +0
-1- if (di->chip == BQ27500 || di->chip == BQ27541 || di->chip ==BQ27545) + if (
di->chip== BQ27500 ||di->chip== BQ27510 ||
drivers/power/supply/bq27xxx_battery.c static int bq27xxx_battery_read_pwr_avg(struct bq27xxx_device_info *di) · line 680
Quoted 4 lines
drivers/power/supply/bq27xxx_battery.c +1
-0+ di->chip == BQ27541 || di->chip == BQ27545)return flags & (BQ27XXX_FLAG_OTC |BQ27XXX_FLAG_OTD );if (di->chip ==BQ27530 || di->chip ==BQ27421 )return flags &BQ27XXX_FLAG_OT ;
This function should be converted to switch/case blocks... those if/or/return conditions are now too big.
Quoted 31 lines
(quoted diff) +0
-0
b/drivers/power/supply/bq27xxx_battery_i2c.cindex 85d4ea2..5c5c3a6 100644drivers/power/supply/bq27xxx_battery_i2c.c +2
-2@@ -149,8 +149,8 @@ static const struct i2c_device_id bq27xxx_i2c_id_table[] = { { "bq27200", BQ27000 }, { "bq27210", BQ27010 }, { "bq27500", BQ27500 }, - { "bq27510", BQ27500 }, - { "bq27520", BQ27500 }, + { "bq27510", BQ27510 }, + { "bq27520", BQ27510 }, { "bq27530", BQ27530 }, { "bq27531", BQ27530 }, { "bq27541", BQ27541 },(quoted diff) +0
-0
b/include/linux/power/bq27xxx_battery.hindex e30deb0..bed9557 100644include/linux/power/bq27xxx_battery.h +2
-1@@ -4,7 +4,8 @@enum bq27xxx_chip {BQ27000 =1 ,/* bq27000, bq27200 */ BQ27010 ,/* bq27010, bq27210 */ -BQ27500 ,/* bq27500, bq27510, bq27520 */ +BQ27500 ,/* bq27500 */ +BQ27510 ,/* bq27510, bq27520 */ BQ27530 ,/* bq27530, bq27531 */ BQ27541 ,/* bq27541, bq27542, bq27546, bq27742 */ BQ27545 ,/* bq27545 */
Signature · 2 lines
Pali Rohár [email protected]
Hi,
Quoted 11 lines · Andrew F. Davis
The BQ27510 and BQ27520 use a slightly different register map than the BQ27500, add a new type enum and add these gauges to it.
Fixes d74534c27775 ("power: bq27xxx_battery: Add support for additional bq27xxx family devices")Based-on-patch-by Kenneth R. Crudup <[email protected]>Signed-off-by Andrew F. Davis <[email protected]>--- drivers/power/supply/bq27xxx_battery.c | 41 +++++++++++++++++++++++++++++- drivers/power/supply/bq27xxx_battery_i2c.c | 4 +-- include/linux/power/bq27xxx_battery.h | 3 ++- 3 files changed, 44 insertions(+), 4 deletions(-)
Queued into for-next. I think pali's hint, that bq27xxx_battery_overtemp() should be implemented using a switch-case is valid to make the code more readable. Please provide this change as follow-up patch.
-- Sebastian
Quoted 15 lines · Sebastian Reichel
Hi,
Quoted 11 lines · Andrew F. Davis
The BQ27510 and BQ27520 use a slightly different register map than the BQ27500, add a new type enum and add these gauges to it.
Fixes d74534c27775 ("power: bq27xxx_battery: Add support for additional bq27xxx family devices")Based-on-patch-by Kenneth R. Crudup <[email protected]>Signed-off-by Andrew F. Davis <[email protected]>--- drivers/power/supply/bq27xxx_battery.c | 41 +++++++++++++++++++++++++++++- drivers/power/supply/bq27xxx_battery_i2c.c | 4 +-- include/linux/power/bq27xxx_battery.h | 3 ++- 3 files changed, 44 insertions(+), 4 deletions(-)
Quoted 4 lines
Queued into for-next. I think pali's hint, that
bq27xxx_battery_overtemp()should be implemented using a switch-case is valid to make the code more readable. Please provide this change as follow-up patch.
I think there may be better ways than even switch-case, perhaps we can add additional info flags to the part's description tables, then just branch on that for each accessor type.
Anyway, I'll see what I can to to clean this up when I get some bandwidth.
Thanks,
Andrew