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,
cw00.choi@samsung.com, b.zolnierkie@samsung.com,
lee.jones@linaro.org, linux-pm@vger.kernel.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v5 4/5] power: supply: max17040: Config alert SOC low level threshold from FDT
Date: Tue, 5 Nov 2019 10:59:05 +0100 [thread overview]
Message-ID: <20191105095905.GA31721@pi3> (raw)
In-Reply-To: <20191105054218.29826-5-matheus@castello.eng.br>
On Tue, Nov 05, 2019 at 02:42:17AM -0300, Matheus Castello 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-low-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 | 96 +++++++++++++++++++++----
> 1 file changed, 82 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/power/supply/max17040_battery.c b/drivers/power/supply/max17040_battery.c
> index 75459f76d02c..c48a691cbd7b 100644
> --- a/drivers/power/supply/max17040_battery.c
> +++ b/drivers/power/supply/max17040_battery.c
> @@ -29,6 +29,9 @@
> #define MAX17040_DELAY 1000
> #define MAX17040_BATTERY_FULL 95
>
> +#define MAX17040_ATHD_MASK 0xFFC0
> +#define MAX17040_ATHD_DEFAULT_POWER_UP 4
> +
> struct max17040_chip {
> struct i2c_client *client;
> struct delayed_work work;
> @@ -43,6 +46,8 @@ struct max17040_chip {
> int soc;
> /* State Of Charge */
> int status;
> + /* Low alert threshold from 32% to 1% of the State of Charge */
> + u32 low_soc_alert;
> };
>
> static int max17040_get_property(struct power_supply *psy,
> @@ -99,6 +104,21 @@ static void max17040_reset(struct i2c_client *client)
> max17040_write_reg(client, MAX17040_CMD, 0x0054);
> }
>
> +static int max17040_set_low_soc_alert(struct i2c_client *client, u32 level)
> +{
> + int ret;
> + u16 data;
> +
> + level = 32 - level;
> + data = max17040_read_reg(client, MAX17040_RCOMP);
> + /* clear the alrt bit and set LSb 5 bits */
> + data &= MAX17040_ATHD_MASK;
> + data |= level;
> + ret = max17040_write_reg(client, MAX17040_RCOMP, data);
> +
> + return ret;
> +}
> +
> static void max17040_get_vcell(struct i2c_client *client)
> {
> struct max17040_chip *chip = i2c_get_clientdata(client);
> @@ -115,7 +135,6 @@ static void max17040_get_soc(struct i2c_client *client)
> u16 soc;
>
> soc = max17040_read_reg(client, MAX17040_SOC);
> -
> chip->soc = (soc >> 8);
> }
>
> @@ -161,6 +180,24 @@ static void max17040_get_status(struct i2c_client *client)
> chip->status = POWER_SUPPLY_STATUS_FULL;
> }
>
> +static int max17040_get_of_data(struct max17040_chip *chip)
> +{
> + struct device *dev = &chip->client->dev;
> + struct device_node *np = dev->of_node;
> + int ret = 0;
> +
> + if (of_property_read_u32(np, "maxim,alert-low-soc-level",
> + &chip->low_soc_alert)) {
> + chip->low_soc_alert = MAX17040_ATHD_DEFAULT_POWER_UP;
> + } else if (chip->low_soc_alert <= 0 ||
> + chip->low_soc_alert >= 33) {
> + /* low_soc_alert is not between 1% and 32% */
> + ret = -EINVAL;
> + }
> +
> + return ret;
> +}
> +
> static void max17040_check_changes(struct i2c_client *client)
> {
> max17040_get_vcell(client);
> @@ -192,9 +229,27 @@ static irqreturn_t max17040_thread_handler(int id, void *dev)
> /* send uevent */
> power_supply_changed(chip->battery);
>
> + /* reset alert bit */
> + max17040_set_low_soc_alert(client, chip->low_soc_alert);
> +
> return IRQ_HANDLED;
> }
>
> +static int max17040_enable_alert_irq(struct max17040_chip *chip)
> +{
It does not make really sense to move this code to separate function in
this patch. This should be done in patch 1/5. Otherwise you add a code
in patch 1 and later in patch 4 you immediately rearrange it. This
raises eybrows and gives a hint that patchset is not well structured.
> + struct i2c_client *client = chip->client;
> + unsigned int flags;
> + int ret;
> +
> + dev_info(&client->dev, "IRQ: enabled\n");
While at it, get rid of dev_info here. It does not bring any useful
information. All this is available in /proc/interrupts.
Best regards,
Krzysztof
> + flags = IRQF_TRIGGER_FALLING | IRQF_ONESHOT;
> + ret = devm_request_threaded_irq(&client->dev, client->irq, NULL,
> + max17040_thread_handler, flags,
> + chip->battery->desc->name, chip);
> +
> + return ret;
> +}
> +
> static enum power_supply_property max17040_battery_props[] = {
> POWER_SUPPLY_PROP_STATUS,
> POWER_SUPPLY_PROP_ONLINE,
> @@ -216,6 +271,7 @@ static int max17040_probe(struct i2c_client *client,
> struct i2c_adapter *adapter = client->adapter;
> struct power_supply_config psy_cfg = {};
> struct max17040_chip *chip;
> + int ret;
>
> if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE))
> return -EIO;
> @@ -226,6 +282,12 @@ static int max17040_probe(struct i2c_client *client,
>
> chip->client = client;
> chip->pdata = client->dev.platform_data;
> + ret = max17040_get_of_data(chip);
> + if (ret) {
> + dev_err(&client->dev,
> + "failed: low SOC alert OF data out of bounds\n");
> + return ret;
> + }
>
> i2c_set_clientdata(client, chip);
> psy_cfg.drv_data = chip;
> @@ -242,20 +304,26 @@ static int max17040_probe(struct i2c_client *client,
>
> /* check interrupt */
> if (client->irq) {
> - int ret;
> - unsigned int flags;
> -
> - dev_info(&client->dev, "IRQ: enabled\n");
> - flags = IRQF_TRIGGER_FALLING | IRQF_ONESHOT;
> - ret = devm_request_threaded_irq(&client->dev, client->irq, NULL,
> - max17040_thread_handler, flags,
> - chip->battery->desc->name,
> - chip);
> -
> - if (ret) {
> - client->irq = 0;
> + if (of_device_is_compatible(client->dev.of_node,
> + "maxim,max77836-battery")) {
> + ret = max17040_set_low_soc_alert(client,
> + chip->low_soc_alert);
> + if (ret) {
> + dev_err(&client->dev,
> + "Failed to set low SOC alert: err %d\n",
> + ret);
> + return ret;
> + }
> +
> + ret = max17040_enable_alert_irq(chip);
> + if (ret) {
> + client->irq = 0;
> + dev_warn(&client->dev,
> + "Failed to get IRQ err %d\n", ret);
> + }
> + } else {
> dev_warn(&client->dev,
> - "Failed to get IRQ err %d\n", ret);
> + "Device not compatible for IRQ");
> }
> }
>
> --
> 2.24.0.rc2
>
next prev parent reply other threads:[~2019-11-05 9:59 UTC|newest]
Thread overview: 71+ 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
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 ` [PATCH v2 1/4] power: supply: max17040: Add IRQ handler for low SOC alert Matheus Castello
2019-04-15 7:10 ` Krzysztof Kozlowski
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 7:13 ` Krzysztof Kozlowski
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 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 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 [this message]
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=20191105095905.GA31721@pi3 \
--to=krzk@kernel.org \
--cc=b.zolnierkie@samsung.com \
--cc=cw00.choi@samsung.com \
--cc=devicetree@vger.kernel.org \
--cc=lee.jones@linaro.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.