Linux Power Management development
 help / color / mirror / Atom feed
From: "Andrew F. Davis" <afd@ti.com>
To: Liam Breck <liam@networkimprov.net>, linux-pm@vger.kernel.org
Cc: Liam Breck <kernel@networkimprov.net>
Subject: Re: [PATCH] power: bq27xxx_battery: Unique chip IDs
Date: Wed, 8 Mar 2017 11:23:24 -0600	[thread overview]
Message-ID: <0088f5a9-995e-bc57-6fa1-3c8991287a13@ti.com> (raw)
In-Reply-To: <20170307230536.22886-1-liam@networkimprov.net>

On 03/07/2017 05:05 PM, Liam Breck wrote:
> From: Liam Breck <kernel@networkimprov.net>
> 
> Assign every chip a unique ID, to enable
> power_supply_battery_info config for all supported chips.
> There are no functional changes to the driver.
> 
> Depends-on: power: bq27xxx_battery: Add power_supply_battery_info support
> Signed-off-by: Liam Breck <kernel@networkimprov.net>
> 
> ---
> Andrew, let me know if you'd like me to include this in the other patchset.

Why do we need this at all? It may be just bit too early for me, but I'm
not seeing what this gets us, that couldn't be done before.

> 
>  drivers/power/supply/bq27xxx_battery.c     | 94 +++++++++++++++++-------------
>  drivers/power/supply/bq27xxx_battery_i2c.c | 14 ++---
>  include/linux/power/bq27xxx_battery.h      | 15 +++--
>  3 files changed, 71 insertions(+), 52 deletions(-)
> 
> diff --git a/drivers/power/supply/bq27xxx_battery.c b/drivers/power/supply/bq27xxx_battery.c
> index ed976a1..30af0e4 100644
> --- a/drivers/power/supply/bq27xxx_battery.c
> +++ b/drivers/power/supply/bq27xxx_battery.c
> @@ -117,8 +117,8 @@ enum bq27xxx_reg_index {
>  };
>  
>  /* Register mappings */
> -static u8 bq27xxx_regs[][BQ27XXX_REG_MAX] = {
> -	[BQ27000] = {
> +static u8
> +	bq27000_regs[BQ27XXX_REG_MAX] = {
>  		[BQ27XXX_REG_CTRL] = 0x00,
>  		[BQ27XXX_REG_TEMP] = 0x06,
>  		[BQ27XXX_REG_INT_TEMP] = INVALID_REG_ADDR,
> @@ -142,7 +142,7 @@ static u8 bq27xxx_regs[][BQ27XXX_REG_MAX] = {
>  		[BQ27XXX_DM_DATA] = INVALID_REG_ADDR,
>  		[BQ27XXX_DM_CKSUM] = INVALID_REG_ADDR,
>  	},
> -	[BQ27010] = {
> +	bq27010_regs[BQ27XXX_REG_MAX] = {
>  		[BQ27XXX_REG_CTRL] = 0x00,
>  		[BQ27XXX_REG_TEMP] = 0x06,
>  		[BQ27XXX_REG_INT_TEMP] = INVALID_REG_ADDR,
> @@ -166,7 +166,7 @@ static u8 bq27xxx_regs[][BQ27XXX_REG_MAX] = {
>  		[BQ27XXX_DM_DATA] = INVALID_REG_ADDR,
>  		[BQ27XXX_DM_CKSUM] = INVALID_REG_ADDR,
>  	},
> -	[BQ27500] = {
> +	bq27500_regs[BQ27XXX_REG_MAX] = {
>  		[BQ27XXX_REG_CTRL] = 0x00,
>  		[BQ27XXX_REG_TEMP] = 0x06,
>  		[BQ27XXX_REG_INT_TEMP] = 0x28,
> @@ -190,7 +190,7 @@ static u8 bq27xxx_regs[][BQ27XXX_REG_MAX] = {
>  		[BQ27XXX_DM_DATA] = 0x40,
>  		[BQ27XXX_DM_CKSUM] = 0x60,
>  	},
> -	[BQ27510] = {
> +	bq27510_regs[BQ27XXX_REG_MAX] = {
>  		[BQ27XXX_REG_CTRL] = 0x00,
>  		[BQ27XXX_REG_TEMP] = 0x06,
>  		[BQ27XXX_REG_INT_TEMP] = 0x28,
> @@ -214,7 +214,7 @@ static u8 bq27xxx_regs[][BQ27XXX_REG_MAX] = {
>  		[BQ27XXX_DM_DATA] = 0x40,
>  		[BQ27XXX_DM_CKSUM] = 0x60,
>  	},
> -	[BQ27530] = {
> +	bq27530_regs[BQ27XXX_REG_MAX] = {
>  		[BQ27XXX_REG_CTRL] = 0x00,
>  		[BQ27XXX_REG_TEMP] = 0x06,
>  		[BQ27XXX_REG_INT_TEMP] = 0x32,
> @@ -238,7 +238,7 @@ static u8 bq27xxx_regs[][BQ27XXX_REG_MAX] = {
>  		[BQ27XXX_DM_DATA] = 0x40,
>  		[BQ27XXX_DM_CKSUM] = 0x60,
>  	},
> -	[BQ27541] = {
> +	bq27541_regs[BQ27XXX_REG_MAX] = {
>  		[BQ27XXX_REG_CTRL] = 0x00,
>  		[BQ27XXX_REG_TEMP] = 0x06,
>  		[BQ27XXX_REG_INT_TEMP] = 0x28,
> @@ -262,7 +262,7 @@ static u8 bq27xxx_regs[][BQ27XXX_REG_MAX] = {
>  		[BQ27XXX_DM_DATA] = 0x40,
>  		[BQ27XXX_DM_CKSUM] = 0x60,
>  	},
> -	[BQ27545] = {
> +	bq27545_regs[BQ27XXX_REG_MAX] = {
>  		[BQ27XXX_REG_CTRL] = 0x00,
>  		[BQ27XXX_REG_TEMP] = 0x06,
>  		[BQ27XXX_REG_INT_TEMP] = 0x28,
> @@ -286,7 +286,7 @@ static u8 bq27xxx_regs[][BQ27XXX_REG_MAX] = {
>  		[BQ27XXX_DM_DATA] = 0x40,
>  		[BQ27XXX_DM_CKSUM] = 0x60,
>  	},
> -	[BQ27421] = {
> +	bq27425_regs[BQ27XXX_REG_MAX] = {
>  		[BQ27XXX_REG_CTRL] = 0x00,
>  		[BQ27XXX_REG_TEMP] = 0x02,
>  		[BQ27XXX_REG_INT_TEMP] = 0x1e,
> @@ -309,31 +309,25 @@ static u8 bq27xxx_regs[][BQ27XXX_REG_MAX] = {
>  		[BQ27XXX_DM_BLOCK] = 0x3f,
>  		[BQ27XXX_DM_DATA] = 0x40,
>  		[BQ27XXX_DM_CKSUM] = 0x60,
> -	},
> -	[BQ27425] = {
> -		[BQ27XXX_REG_CTRL] = 0x00,
> -		[BQ27XXX_REG_TEMP] = 0x02,
> -		[BQ27XXX_REG_INT_TEMP] = 0x1e,
> -		[BQ27XXX_REG_VOLT] = 0x04,
> -		[BQ27XXX_REG_AI] = 0x10,
> -		[BQ27XXX_REG_FLAGS] = 0x06,
> -		[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] = 0x08,
> -		[BQ27XXX_REG_FCC] = 0x0e,
> -		[BQ27XXX_REG_CYCT] = INVALID_REG_ADDR,
> -		[BQ27XXX_REG_AE] = INVALID_REG_ADDR,
> -		[BQ27XXX_REG_SOC] = 0x1c,
> -		[BQ27XXX_REG_DCAP] = 0x3c,
> -		[BQ27XXX_REG_AP] = 0x18,
> -		[BQ27XXX_DM_CTRL] = 0x61,
> -		[BQ27XXX_DM_CLASS] = 0x3e,
> -		[BQ27XXX_DM_BLOCK] = 0x3f,
> -		[BQ27XXX_DM_DATA] = 0x40,
> -		[BQ27XXX_DM_CKSUM] = 0x60,
> -	},
> +	};
> +
> +static u8* bq27xxx_regs[] = {
> +	[BQ27000] = bq27000_regs, /* really bq27200 */
> +	[BQ27010] = bq27010_regs, /* really bq27210 */

Not strictly true, the bq270x0 and bq272x0 are different chips, one has
an HDQ bus and the other I2C, later chips have both ports on each chip.

Andrew

> +	[BQ27500] = bq27500_regs,
> +	[BQ27510] = bq27510_regs,
> +	[BQ27520] = bq27510_regs,
> +	[BQ27530] = bq27530_regs,
> +	[BQ27531] = bq27530_regs,
> +	[BQ27541] = bq27541_regs,
> +	[BQ27542] = bq27541_regs,
> +	[BQ27546] = bq27541_regs,
> +	[BQ27742] = bq27541_regs,
> +	[BQ27545] = bq27545_regs,
> +	[BQ27425] = bq27425_regs,
> +	[BQ27421] = bq27425_regs,
> +	[BQ27441] = bq27425_regs,
> +	[BQ27621] = bq27425_regs,
>  };
>  
>  static enum power_supply_property bq27000_battery_props[] = {
> @@ -469,7 +463,7 @@ static enum power_supply_property bq27545_battery_props[] = {
>  	POWER_SUPPLY_PROP_MANUFACTURER,
>  };
>  
> -static enum power_supply_property bq27421_battery_props[] = {
> +static enum power_supply_property bq27425_battery_props[] = {
>  	POWER_SUPPLY_PROP_STATUS,
>  	POWER_SUPPLY_PROP_PRESENT,
>  	POWER_SUPPLY_PROP_VOLTAGE_NOW,
> @@ -498,11 +492,18 @@ static struct {
>  	BQ27XXX_PROP(BQ27010, bq27010_battery_props),
>  	BQ27XXX_PROP(BQ27500, bq27500_battery_props),
>  	BQ27XXX_PROP(BQ27510, bq27510_battery_props),
> +	BQ27XXX_PROP(BQ27520, bq27510_battery_props),
>  	BQ27XXX_PROP(BQ27530, bq27530_battery_props),
> +	BQ27XXX_PROP(BQ27531, bq27530_battery_props),
>  	BQ27XXX_PROP(BQ27541, bq27541_battery_props),
> +	BQ27XXX_PROP(BQ27542, bq27541_battery_props),
> +	BQ27XXX_PROP(BQ27546, bq27541_battery_props),
> +	BQ27XXX_PROP(BQ27742, bq27541_battery_props),
>  	BQ27XXX_PROP(BQ27545, bq27545_battery_props),
> -	BQ27XXX_PROP(BQ27421, bq27421_battery_props),
> -	BQ27XXX_PROP(BQ27425, bq27421_battery_props),
> +	BQ27XXX_PROP(BQ27425, bq27425_battery_props),
> +	BQ27XXX_PROP(BQ27421, bq27425_battery_props),
> +	BQ27XXX_PROP(BQ27441, bq27425_battery_props),
> +	BQ27XXX_PROP(BQ27621, bq27425_battery_props),
>  };
>  
>  static DEFINE_MUTEX(bq27xxx_list_lock);
> @@ -796,7 +797,8 @@ static int bq27xxx_battery_set_cfgupdate(struct bq27xxx_device_info *di,
>  static int bq27xxx_battery_write_dm_block(struct bq27xxx_device_info *di,
>  					  struct bq27xxx_dm_buf *buf)
>  {
> -	bool cfgup = di->chip == BQ27425 || di->chip == BQ27421; /* || BQ27441 || BQ27621 */
> +	bool cfgup = di->chip == BQ27425 || di->chip == BQ27421
> +		  || di->chip == BQ27441 || di->chip == BQ27621;
>  	int ret;
>  
>  	if (!buf->updt)
> @@ -1169,8 +1171,11 @@ static bool bq27xxx_battery_overtemp(struct bq27xxx_device_info *di, u16 flags)
>  	case BQ27545:
>  		return flags & (BQ27XXX_FLAG_OTC | BQ27XXX_FLAG_OTD);
>  	case BQ27530:
> +	case BQ27531:
>  	case BQ27421:
>  	case BQ27425:
> +	case BQ27441:
> +	case BQ27621:
>  		return flags & BQ27XXX_FLAG_OT;
>  	default:
>  		return false;
> @@ -1182,10 +1187,17 @@ static bool bq27xxx_battery_overtemp(struct bq27xxx_device_info *di, u16 flags)
>   */
>  static bool bq27xxx_battery_undertemp(struct bq27xxx_device_info *di, u16 flags)
>  {
> -	if (di->chip == BQ27530 || di->chip == BQ27421 || di->chip == BQ27425)
> +	switch (di->chip) {
> +	case BQ27530:
> +	case BQ27531:
> +	case BQ27421:
> +	case BQ27425:
> +	case BQ27441:
> +	case BQ27621:
>  		return flags & BQ27XXX_FLAG_UT;
> -
> -	return false;
> +	default:
> +		return false;
> +	}
>  }
>  
>  /*
> diff --git a/drivers/power/supply/bq27xxx_battery_i2c.c b/drivers/power/supply/bq27xxx_battery_i2c.c
> index 4039b9d..abdc266 100644
> --- a/drivers/power/supply/bq27xxx_battery_i2c.c
> +++ b/drivers/power/supply/bq27xxx_battery_i2c.c
> @@ -230,18 +230,18 @@ static const struct i2c_device_id bq27xxx_i2c_id_table[] = {
>  	{ "bq27210", BQ27010 },
>  	{ "bq27500", BQ27500 },
>  	{ "bq27510", BQ27510 },
> -	{ "bq27520", BQ27510 },
> +	{ "bq27520", BQ27520 },
>  	{ "bq27530", BQ27530 },
> -	{ "bq27531", BQ27530 },
> +	{ "bq27531", BQ27531 },
>  	{ "bq27541", BQ27541 },
> -	{ "bq27542", BQ27541 },
> -	{ "bq27546", BQ27541 },
> -	{ "bq27742", BQ27541 },
> +	{ "bq27542", BQ27542 },
> +	{ "bq27546", BQ27546 },
> +	{ "bq27742", BQ27742 },
>  	{ "bq27545", BQ27545 },
>  	{ "bq27421", BQ27421 },
>  	{ "bq27425", BQ27425 },
> -	{ "bq27441", BQ27425 },
> -	{ "bq27621", BQ27425 },
> +	{ "bq27441", BQ27441 },
> +	{ "bq27621", BQ27621 },
>  	{},
>  };
>  MODULE_DEVICE_TABLE(i2c, bq27xxx_i2c_id_table);
> diff --git a/include/linux/power/bq27xxx_battery.h b/include/linux/power/bq27xxx_battery.h
> index 44f469a..870e6f5 100644
> --- a/include/linux/power/bq27xxx_battery.h
> +++ b/include/linux/power/bq27xxx_battery.h
> @@ -2,15 +2,22 @@
>  #define __LINUX_BQ27X00_BATTERY_H__
>  
>  enum bq27xxx_chip {
> -	BQ27000 = 1, /* bq27000, bq27200 */
> -	BQ27010, /* bq27010, bq27210 */
> +	BQ27000 = 1, /* bq27200 */
> +	BQ27010, /* bq27210 */
>  	BQ27500, /* bq27500 */
>  	BQ27510, /* bq27510, bq27520 */
> +	BQ27520,
>  	BQ27530, /* bq27530, bq27531 */
> +	BQ27531,
>  	BQ27541, /* bq27541, bq27542, bq27546, bq27742 */
> +	BQ27542,
> +	BQ27546,
> +	BQ27742,
>  	BQ27545, /* bq27545 */
> -	BQ27421, /* bq27421 */
> -	BQ27425, /* bq27425, bq27441, bq27621 */
> +	BQ27425, /* bq27425, bq27421, bq27441, bq27621 */
> +	BQ27421,
> +	BQ27441,
> +	BQ27621,
>  };
>  
>  /**
> 

  reply	other threads:[~2017-03-08 17:23 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-07 23:05 [PATCH] power: bq27xxx_battery: Unique chip IDs Liam Breck
2017-03-08 17:23 ` Andrew F. Davis [this message]
2017-03-08 17:45   ` Liam Breck
2017-03-08 17:58     ` Andrew F. Davis
2017-03-08 18:16       ` Liam Breck
2017-03-08 18:23         ` Andrew F. Davis
2017-03-08 21:22           ` Liam Breck
2017-03-08 23:49             ` Liam Breck
2017-03-09 15:30               ` Andrew F. Davis
2017-03-09 15:38                 ` Andrew F. Davis
2017-03-09 17:26                   ` Liam Breck
2017-03-09 17:33                     ` Andrew F. Davis
2017-03-09 17:43                       ` Liam Breck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=0088f5a9-995e-bc57-6fa1-3c8991287a13@ti.com \
    --to=afd@ti.com \
    --cc=kernel@networkimprov.net \
    --cc=liam@networkimprov.net \
    --cc=linux-pm@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox