2021-08-16 16:53:21

by Sebastian Krzyszkowiak

[permalink] [raw]
Subject: [PATCH 1/4] power: supply: max17042_battery: clean up MAX17055_V_empty

This register is same as in MAX17047 and MAX17050, so there's no need
for custom casing it.

Signed-off-by: Sebastian Krzyszkowiak <[email protected]>
---
drivers/power/supply/max17042_battery.c | 4 ----
include/linux/power/max17042_battery.h | 1 -
2 files changed, 5 deletions(-)

diff --git a/drivers/power/supply/max17042_battery.c b/drivers/power/supply/max17042_battery.c
index c6078f179fb3..01e6728a9e2b 100644
--- a/drivers/power/supply/max17042_battery.c
+++ b/drivers/power/supply/max17042_battery.c
@@ -283,8 +283,6 @@ static int max17042_get_property(struct power_supply *psy,
case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN:
if (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17042)
ret = regmap_read(map, MAX17042_V_empty, &data);
- else if (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17055)
- ret = regmap_read(map, MAX17055_V_empty, &data);
else
ret = regmap_read(map, MAX17047_V_empty, &data);
if (ret < 0)
@@ -778,8 +776,6 @@ static inline void max17042_override_por_values(struct max17042_chip *chip)

if (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17042)
max17042_override_por(map, MAX17042_V_empty, config->vempty);
- if (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17055)
- max17042_override_por(map, MAX17055_V_empty, config->vempty);
else
max17042_override_por(map, MAX17047_V_empty, config->vempty);
max17042_override_por(map, MAX17042_TempNom, config->temp_nom);
diff --git a/include/linux/power/max17042_battery.h b/include/linux/power/max17042_battery.h
index d55c746ac56e..7e5da60cbea3 100644
--- a/include/linux/power/max17042_battery.h
+++ b/include/linux/power/max17042_battery.h
@@ -113,7 +113,6 @@ enum max17042_register {
enum max17055_register {
MAX17055_QRes = 0x0C,
MAX17055_TTF = 0x20,
- MAX17055_V_empty = 0x3A,
MAX17055_TIMER = 0x3E,
MAX17055_USER_MEM = 0x40,
MAX17055_RGAIN = 0x42,
--
2.32.0


2021-08-16 16:53:35

by Sebastian Krzyszkowiak

[permalink] [raw]
Subject: [PATCH 2/4] power: supply: max17042_battery: fix typo in MAx17042_TOFF

Signed-off-by: Sebastian Krzyszkowiak <[email protected]>
---
drivers/power/supply/max17042_battery.c | 2 +-
include/linux/power/max17042_battery.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/power/supply/max17042_battery.c b/drivers/power/supply/max17042_battery.c
index 01e6728a9e2b..eeccc365fe54 100644
--- a/drivers/power/supply/max17042_battery.c
+++ b/drivers/power/supply/max17042_battery.c
@@ -744,7 +744,7 @@ static inline void max17042_override_por_values(struct max17042_chip *chip)
struct max17042_config_data *config = chip->pdata->config_data;

max17042_override_por(map, MAX17042_TGAIN, config->tgain);
- max17042_override_por(map, MAx17042_TOFF, config->toff);
+ max17042_override_por(map, MAX17042_TOFF, config->toff);
max17042_override_por(map, MAX17042_CGAIN, config->cgain);
max17042_override_por(map, MAX17042_COFF, config->coff);

diff --git a/include/linux/power/max17042_battery.h b/include/linux/power/max17042_battery.h
index 7e5da60cbea3..86f16fc3b694 100644
--- a/include/linux/power/max17042_battery.h
+++ b/include/linux/power/max17042_battery.h
@@ -69,7 +69,7 @@ enum max17042_register {
MAX17042_RelaxCFG = 0x2A,
MAX17042_MiscCFG = 0x2B,
MAX17042_TGAIN = 0x2C,
- MAx17042_TOFF = 0x2D,
+ MAX17042_TOFF = 0x2D,
MAX17042_CGAIN = 0x2E,
MAX17042_COFF = 0x2F,

--
2.32.0

2021-08-16 16:53:44

by Sebastian Krzyszkowiak

[permalink] [raw]
Subject: [PATCH 3/4] power: supply: max17042_battery: more robust chip type checks

Prepared by checking the datasheets of max17042, max17047/50
and max170455 for differences in register maps.

Signed-off-by: Sebastian Krzyszkowiak <[email protected]>
---
drivers/power/supply/max17042_battery.c | 40 +++++++++++++------------
include/linux/power/max17042_battery.h | 9 ++++--
2 files changed, 27 insertions(+), 22 deletions(-)

diff --git a/drivers/power/supply/max17042_battery.c b/drivers/power/supply/max17042_battery.c
index eeccc365fe54..e6bcda966476 100644
--- a/drivers/power/supply/max17042_battery.c
+++ b/drivers/power/supply/max17042_battery.c
@@ -763,34 +763,36 @@ static inline void max17042_override_por_values(struct max17042_chip *chip)
max17042_override_por(map, MAX17042_FilterCFG, config->filter_cfg);
max17042_override_por(map, MAX17042_RelaxCFG, config->relax_cfg);
max17042_override_por(map, MAX17042_MiscCFG, config->misc_cfg);
- max17042_override_por(map, MAX17042_MaskSOC, config->masksoc);

max17042_override_por(map, MAX17042_FullCAP, config->fullcap);
max17042_override_por(map, MAX17042_FullCAPNom, config->fullcapnom);
- if (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17042)
- max17042_override_por(map, MAX17042_SOC_empty,
- config->socempty);
- max17042_override_por(map, MAX17042_LAvg_empty, config->lavg_empty);
max17042_override_por(map, MAX17042_dQacc, config->dqacc);
max17042_override_por(map, MAX17042_dPacc, config->dpacc);

- if (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17042)
- max17042_override_por(map, MAX17042_V_empty, config->vempty);
- else
- max17042_override_por(map, MAX17047_V_empty, config->vempty);
- max17042_override_por(map, MAX17042_TempNom, config->temp_nom);
- max17042_override_por(map, MAX17042_TempLim, config->temp_lim);
- max17042_override_por(map, MAX17042_FCTC, config->fctc);
max17042_override_por(map, MAX17042_RCOMP0, config->rcomp0);
max17042_override_por(map, MAX17042_TempCo, config->tcompc0);
- if (chip->chip_type &&
- ((chip->chip_type == MAXIM_DEVICE_TYPE_MAX17042) ||
+
+ if (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17042) {
+ max17042_override_por(map, MAX17042_MaskSOC, config->masksoc);
+ max17042_override_por(map, MAX17042_SOC_empty, config->socempty);
+ max17042_override_por(map, MAX17042_V_empty, config->vempty);
+ max17042_override_por(map, MAX17042_EmptyTempCo, config->empty_tempco);
+ max17042_override_por(map, MAX17042_K_empty0, config->kempty0);
+ }
+
+ if ((chip->chip_type == MAXIM_DEVICE_TYPE_MAX17042) ||
(chip->chip_type == MAXIM_DEVICE_TYPE_MAX17047) ||
- (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17050))) {
- max17042_override_por(map, MAX17042_EmptyTempCo,
- config->empty_tempco);
- max17042_override_por(map, MAX17042_K_empty0,
- config->kempty0);
+ (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17050)) {
+ max17042_override_por(map, MAX17042_LAvg_empty, config->lavg_empty);
+ max17042_override_por(map, MAX17042_TempNom, config->temp_nom);
+ max17042_override_por(map, MAX17042_TempLim, config->temp_lim);
+ max17042_override_por(map, MAX17042_FCTC, config->fctc);
+ }
+
+ if ((chip->chip_type == MAXIM_DEVICE_TYPE_MAX17047) ||
+ (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17050) ||
+ (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17055)) {
+ max17042_override_por(map, MAX17047_V_empty, config->vempty);
}
}

diff --git a/include/linux/power/max17042_battery.h b/include/linux/power/max17042_battery.h
index 86f16fc3b694..dd24756a8af7 100644
--- a/include/linux/power/max17042_battery.h
+++ b/include/linux/power/max17042_battery.h
@@ -110,12 +110,14 @@ enum max17042_register {
MAX17042_VFSOC = 0xFF,
};

+/* Registers specific to max17055 only */
enum max17055_register {
MAX17055_QRes = 0x0C,
+ MAX17055_RCell = 0x14,
MAX17055_TTF = 0x20,
- MAX17055_TIMER = 0x3E,
+ MAX17055_DieTemp = 0x34,
MAX17055_USER_MEM = 0x40,
- MAX17055_RGAIN = 0x42,
+ MAX17055_RGAIN = 0x43,

MAX17055_ConvgCfg = 0x49,
MAX17055_VFRemCap = 0x4A,
@@ -154,13 +156,14 @@ enum max17055_register {
MAX17055_AtAvCap = 0xDF,
};

-/* Registers specific to max17047/50 */
+/* Registers specific to max17047/50/55 */
enum max17047_register {
MAX17047_QRTbl00 = 0x12,
MAX17047_FullSOCThr = 0x13,
MAX17047_QRTbl10 = 0x22,
MAX17047_QRTbl20 = 0x32,
MAX17047_V_empty = 0x3A,
+ MAX17047_TIMER = 0x3E,
MAX17047_QRTbl30 = 0x42,
};

--
2.32.0

2021-08-16 16:54:18

by Sebastian Krzyszkowiak

[permalink] [raw]
Subject: [PATCH 4/4] power: supply: max17042_battery: log SOC threshold using debug log level

There's no need to print a message on every change in battery percentage
on regular log levels.

Signed-off-by: Sebastian Krzyszkowiak <[email protected]>
---
drivers/power/supply/max17042_battery.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/power/supply/max17042_battery.c b/drivers/power/supply/max17042_battery.c
index e6bcda966476..8dffae76b6a3 100644
--- a/drivers/power/supply/max17042_battery.c
+++ b/drivers/power/supply/max17042_battery.c
@@ -872,7 +872,7 @@ static irqreturn_t max17042_thread_handler(int id, void *dev)
return IRQ_HANDLED;

if ((val & STATUS_SMN_BIT) || (val & STATUS_SMX_BIT)) {
- dev_info(&chip->client->dev, "SOC threshold INTR\n");
+ dev_dbg(&chip->client->dev, "SOC threshold INTR\n");
max17042_set_soc_threshold(chip, 1);
}

--
2.32.0

2021-08-17 14:02:30

by Sebastian Reichel

[permalink] [raw]
Subject: Re: [PATCH 1/4] power: supply: max17042_battery: clean up MAX17055_V_empty

Hi,

On Mon, Aug 16, 2021 at 06:50:13PM +0200, Sebastian Krzyszkowiak wrote:
> This register is same as in MAX17047 and MAX17050, so there's no need
> for custom casing it.
>
> Signed-off-by: Sebastian Krzyszkowiak <[email protected]>
> ---

Thanks, series queued.

-- Sebastian

> drivers/power/supply/max17042_battery.c | 4 ----
> include/linux/power/max17042_battery.h | 1 -
> 2 files changed, 5 deletions(-)
>
> diff --git a/drivers/power/supply/max17042_battery.c b/drivers/power/supply/max17042_battery.c
> index c6078f179fb3..01e6728a9e2b 100644
> --- a/drivers/power/supply/max17042_battery.c
> +++ b/drivers/power/supply/max17042_battery.c
> @@ -283,8 +283,6 @@ static int max17042_get_property(struct power_supply *psy,
> case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN:
> if (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17042)
> ret = regmap_read(map, MAX17042_V_empty, &data);
> - else if (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17055)
> - ret = regmap_read(map, MAX17055_V_empty, &data);
> else
> ret = regmap_read(map, MAX17047_V_empty, &data);
> if (ret < 0)
> @@ -778,8 +776,6 @@ static inline void max17042_override_por_values(struct max17042_chip *chip)
>
> if (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17042)
> max17042_override_por(map, MAX17042_V_empty, config->vempty);
> - if (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17055)
> - max17042_override_por(map, MAX17055_V_empty, config->vempty);
> else
> max17042_override_por(map, MAX17047_V_empty, config->vempty);
> max17042_override_por(map, MAX17042_TempNom, config->temp_nom);
> diff --git a/include/linux/power/max17042_battery.h b/include/linux/power/max17042_battery.h
> index d55c746ac56e..7e5da60cbea3 100644
> --- a/include/linux/power/max17042_battery.h
> +++ b/include/linux/power/max17042_battery.h
> @@ -113,7 +113,6 @@ enum max17042_register {
> enum max17055_register {
> MAX17055_QRes = 0x0C,
> MAX17055_TTF = 0x20,
> - MAX17055_V_empty = 0x3A,
> MAX17055_TIMER = 0x3E,
> MAX17055_USER_MEM = 0x40,
> MAX17055_RGAIN = 0x42,
> --
> 2.32.0
>


Attachments:
(No filename) (2.09 kB)
signature.asc (849.00 B)
Download all attachments