linux-pm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Krzysztof Kozlowski <krzk@kernel.org>
To: Matheus Castello <matheus@castello.eng.br>
Cc: sre@kernel.org, robh+dt@kernel.org, mark.rutland@arm.com,
	linux-pm@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/4] power: supply: max17040: Config alert SOC low level threshold from FDT
Date: Wed, 25 Jul 2018 12:42:34 +0200	[thread overview]
Message-ID: <CAJKOXPd93QKfUQvruwGe3WL52_yhbCG_mPSwt74thPNqdJ7qxg@mail.gmail.com> (raw)
In-Reply-To: <20180723040816.19455-3-matheus@castello.eng.br>

On 23 July 2018 at 06:08, Matheus Castello <matheus@castello.eng.br> wrote:
> For configuration of fuel gauge alert for a low level state of charge
> interrupt we add a function to config level threshold and a device tree
> binding property to set it in flatned device tree node.
>
> Now we can use "maxim,alert-soc-level" property with the values from
> 1 up to 32 to configure alert interrupt threshold.
>
> Signed-off-by: Matheus Castello <matheus@castello.eng.br>
> ---
>  drivers/power/supply/max17040_battery.c | 36 +++++++++++++++++++++++++++++++++
>  1 file changed, 36 insertions(+)

Hi Matheus,

In series, bindings describing new DT property should go before
introducing them in the driver.

>
> diff --git a/drivers/power/supply/max17040_battery.c b/drivers/power/supply/max17040_battery.c
> index 6e54e58814a9..3efa52d32b44 100644
> --- a/drivers/power/supply/max17040_battery.c
> +++ b/drivers/power/supply/max17040_battery.c
> @@ -47,6 +47,8 @@ struct max17040_chip {
>         int soc;
>         /* State Of Charge */
>         int status;
> +       /* Alert threshold */

Threshold in what units?

> +       int alert_threshold;
>  };
>
>  static int max17040_get_property(struct power_supply *psy,
> @@ -123,6 +125,28 @@ static void max17040_get_soc(struct i2c_client *client)
>         chip->soc = (soc >> 8);
>  }
>
> +static int max17040_set_soc_threshold(struct i2c_client *client, u8 level)
> +{
> +       int ret;
> +       u16 data;
> +
> +       /* check if level is between 1% and 32% */
> +       if (level > 0 && level < 33) {
> +               /* alert threshold use LSb 5 bits from RCOMP */
> +               /* two's-complements form: 00000 = 32% and 11111 = 1% */

Please use Linux style comments.

> +               level = 32 - level;
> +               data = max17040_read_reg(client, MAX17040_RCOMP);
> +               data &= 0xFFE0;

Please define the mask.

> +               data |= level;
> +               max17040_write_reg(client, MAX17040_RCOMP, data);
> +               ret = 0;
> +       } else {
> +               ret = -EINVAL;
> +       }
> +
> +       return ret;
> +}
> +
>  static void max17040_get_version(struct i2c_client *client)
>  {
>         u16 version;
> @@ -165,6 +189,16 @@ static void max17040_get_status(struct i2c_client *client)
>                 chip->status = POWER_SUPPLY_STATUS_FULL;
>  }
>
> +static void max17040_get_of_data(struct max17040_chip *chip)
> +{
> +       struct device *dev = &chip->client->dev;
> +       struct device_node *np = dev->of_node;
> +
> +       if (of_property_read_s32(np, "maxim,alert-soc-level",
> +                       &chip->alert_threshold))
> +               chip->alert_threshold = 4;

1. You read s32 and later cast it to u8. Either some validation of
possible values or of_property_read_u8().
2. You have hard-coded default value - please put it in some define.
There are already defines, e.g.: MAX17040_BATTERY_FULL
3. Also the bindings say something about power up value... not 4.
4, I think that  default - missing - value should mean "no interrupt warnings".

> +}
> +
>  static void max17040_work(struct work_struct *work)
>  {
>         struct max17040_chip *chip;
> @@ -231,6 +265,7 @@ static int max17040_probe(struct i2c_client *client,
>
>         chip->client = client;
>         chip->pdata = client->dev.platform_data;
> +       max17040_get_of_data(chip);
>
>         i2c_set_clientdata(client, chip);
>         psy_cfg.drv_data = chip;
> @@ -262,6 +297,7 @@ static int max17040_probe(struct i2c_client *client,
>
>         max17040_reset(client);
>         max17040_get_version(client);
> +       max17040_set_soc_threshold(client, chip->alert_threshold);

1. Return value ignored.
2. First you enable interrupts for whatever default value of alerts
and then you set the alerts threshold. You might generate false
warning in such case so this should be in reverse order.

Best regards,
Krzysztof

>
>         INIT_DEFERRABLE_WORK(&chip->work, max17040_work);
>         queue_delayed_work(system_power_efficient_wq, &chip->work,
> --
> 2.13.3
>

  reply	other threads:[~2018-07-25 10:42 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-23  4:08 [PATCH 0/4] power: supply: MAX17040: Add IRQ for low level and alert SOC changes Matheus Castello
2018-07-23  4:08 ` [PATCH 1/4] power: supply: max17040: Add IRQ handler for low SOC alert Matheus Castello
2018-07-25 10:27   ` Krzysztof Kozlowski
2018-07-23  4:08 ` [PATCH 2/4] power: supply: max17040: Config alert SOC low level threshold from FDT Matheus Castello
2018-07-25 10:42   ` Krzysztof Kozlowski [this message]
2018-07-23  4:08 ` [PATCH 3/4] dt-bindings: power: supply: Max17040: Add low level SOC alert threshold Matheus Castello
2018-07-25 10:45   ` Krzysztof Kozlowski
2018-07-23  4:08 ` [PATCH 4/4] power: supply: max17040: Send uevent in SOC changes Matheus Castello
2018-07-25 10:52   ` Krzysztof Kozlowski
2018-09-16 11:45 ` [PATCH 0/4] power: supply: MAX17040: Add IRQ for low level and alert " Sebastian Reichel
2018-09-17 11:32   ` Krzysztof Kozlowski
2018-09-18  3:45     ` Matheus Castello
2019-04-15  1:26     ` [PATCH v2 " Matheus Castello
2019-04-15  1:26       ` Matheus Castello
2019-04-15  1:26       ` [PATCH v2 1/4] power: supply: max17040: Add IRQ handler for low SOC alert Matheus Castello
2019-04-15  1:26         ` Matheus Castello
2019-04-15  7:10         ` Krzysztof Kozlowski
2019-04-15  7:10           ` Krzysztof Kozlowski
2019-04-19 18:12           ` Matheus Castello
2019-04-19 18:12             ` Matheus Castello
2019-04-15  1:26       ` [PATCH v2 2/4] dt-bindings: power: supply: Max17040: Add low level SOC alert threshold Matheus Castello
2019-04-15  1:26         ` Matheus Castello
2019-04-15  7:13         ` Krzysztof Kozlowski
2019-04-15  7:13           ` Krzysztof Kozlowski
2019-04-29 22:13         ` Rob Herring
2019-04-29 22:13           ` Rob Herring
2019-05-26 23:13           ` Matheus Castello
2019-04-15  1:26       ` [PATCH v2 3/4] power: supply: max17040: Config alert SOC low level threshold from FDT Matheus Castello
2019-04-15  1:26         ` Matheus Castello
2019-04-15  7:27         ` Krzysztof Kozlowski
2019-04-15  7:27           ` Krzysztof Kozlowski
2019-04-15  1:26       ` [PATCH v2 4/4] power: supply: max17040: Send uevent in SOC changes Matheus Castello
2019-04-15  1:26         ` Matheus Castello
2019-04-15  7:30         ` Krzysztof Kozlowski
2019-04-15  7:30           ` Krzysztof Kozlowski
2019-05-27  2:22           ` [PATCH v3 0/5] power: supply: MAX17040: Add IRQ for low level and alert " Matheus Castello
2019-05-27  2:22             ` [PATCH v3 1/5] power: supply: max17040: Add IRQ handler for low SOC alert Matheus Castello
2019-05-29 14:26               ` Krzysztof Kozlowski
2019-05-27  2:22             ` [PATCH v3 2/5] dt-bindings: power: supply: Max17040: Add low level SOC alert threshold Matheus Castello
2019-05-29 14:40               ` Krzysztof Kozlowski
2019-05-29 14:57               ` Krzysztof Kozlowski
2019-06-02 21:38                 ` Matheus Castello
2019-06-05 12:04                   ` Krzysztof Kozlowski
2019-05-27  2:22             ` [PATCH v3 3/5] power: supply: max17040: Config alert SOC low level threshold from FDT Matheus Castello
2019-05-29 14:46               ` Krzysztof Kozlowski
2019-06-02 22:26                 ` Matheus Castello
2019-06-05 12:05                   ` Krzysztof Kozlowski
2019-05-27  2:22             ` [PATCH v3 4/5] power: supply: max17040: Clear ALRT bit when the SOC are above threshold Matheus Castello
2019-05-29 14:54               ` Krzysztof Kozlowski
2019-05-27  2:22             ` [PATCH v3 5/5] power: supply: max17040: Send uevent in SOC and status change Matheus Castello
2019-05-29 15:00               ` Krzysztof Kozlowski
2019-10-31 18:41                 ` [PATCH v4 0/4] power: supply: MAX17040: Add IRQ for low level and alert SOC changes Matheus Castello
2019-10-31 18:41                   ` [PATCH v4 1/4] power: supply: max17040: Add IRQ handler for low SOC alert Matheus Castello
2019-11-01 15:08                     ` Krzysztof Kozlowski
2019-10-31 18:41                   ` [PATCH v4 2/4] dt-bindings: power: supply: Max17040: Add low level SOC alert threshold Matheus Castello
2019-11-01 15:10                     ` Krzysztof Kozlowski
2019-11-05  1:58                     ` Rob Herring
2019-11-05  5:42                       ` [PATCH v5 0/5] power: supply: MAX17040: Add IRQ for low level and alert SOC changes Matheus Castello
2019-11-05  5:42                         ` [PATCH v5 1/5] power: supply: max17040: Add IRQ handler for low SOC alert Matheus Castello
2019-11-05  5:42                         ` [PATCH v5 2/5] dt-bindings: power: supply: Max17040: Add DT bindings for max17040 fuel gauge Matheus Castello
2019-11-05  5:42                         ` [PATCH v5 3/5] devicetree: mfd: max14577: Add reference to max14040_battery.txt descriptions Matheus Castello
2019-11-05  5:42                         ` [PATCH v5 4/5] power: supply: max17040: Config alert SOC low level threshold from FDT Matheus Castello
2019-11-05  9:59                           ` Krzysztof Kozlowski
2019-11-07  3:17                             ` [PATCH v6 0/5] power: supply: MAX17040: Add IRQ for low level and alert SOC changes Matheus Castello
2019-11-07  3:17                               ` [PATCH v6 1/5] power: supply: max17040: Add IRQ handler for low SOC alert Matheus Castello
2019-11-07  3:17                               ` [PATCH v6 2/5] dt-bindings: power: supply: Max17040: Add DT bindings for max17040 fuel gauge Matheus Castello
2019-11-14  0:53                                 ` Rob Herring
2019-11-07  3:17                               ` [PATCH v6 3/5] devicetree: mfd: max14577: Add reference to max14040_battery.txt descriptions Matheus Castello
2019-11-11 10:09                                 ` Lee Jones
2019-11-14  0:54                                 ` Rob Herring
2019-11-07  3:17                               ` [PATCH v6 4/5] power: supply: max17040: Config alert SOC low level threshold from FDT Matheus Castello
2019-11-07  3:17                               ` [PATCH v6 5/5] power: supply: max17040: Send uevent in SOC and status change Matheus Castello
2019-11-11  9:59                               ` [PATCH v6 0/5] power: supply: MAX17040: Add IRQ for low level and alert SOC changes Lee Jones
2019-11-05  5:42                         ` [PATCH v5 5/5] power: supply: max17040: Send uevent in SOC and status change Matheus Castello
2019-10-31 18:41                   ` [PATCH v4 3/4] power: supply: max17040: Config alert SOC low level threshold from FDT Matheus Castello
2019-11-01 15:27                     ` Krzysztof Kozlowski
2019-11-01 16:52                       ` Matheus Castello
2019-11-02 18:12                         ` Matheus Castello
2019-11-04 11:04                           ` Krzysztof Kozlowski
2019-11-04 10:59                         ` Krzysztof Kozlowski
2019-10-31 18:41                   ` [PATCH v4 4/4] power: supply: max17040: Send uevent in SOC and status change Matheus Castello
2019-11-01 15:30                     ` Krzysztof Kozlowski

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=CAJKOXPd93QKfUQvruwGe3WL52_yhbCG_mPSwt74thPNqdJ7qxg@mail.gmail.com \
    --to=krzk@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=matheus@castello.eng.br \
    --cc=robh+dt@kernel.org \
    --cc=sre@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;
as well as URLs for NNTP newsgroup(s).