From: Artur Weber <aweber.kernel@gmail.com>
To: Krzysztof Kozlowski <krzk@kernel.org>,
Chanwoo Choi <cw00.choi@samsung.com>
Cc: Sebastian Reichel <sre@kernel.org>, Rob Herring <robh@kernel.org>,
Conor Dooley <conor+dt@kernel.org>, Lee Jones <lee@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Alim Akhtar <alim.akhtar@samsung.com>,
linux-pm@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-samsung-soc@vger.kernel.org,
~postmarketos/upstreaming@lists.sr.ht,
Henrik Grimler <henrik@grimler.se>,
Wolfgang Wiedmeyer <wolfgit@wiedmeyer.de>,
Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>,
Artur Weber <aweber.kernel@gmail.com>
Subject: [PATCH RFC 05/11] power: supply: max77693: Expose INPUT_CURRENT_LIMIT and CURRENT_MAX
Date: Thu, 30 May 2024 10:55:55 +0200 [thread overview]
Message-ID: <20240530-max77693-charger-extcon-v1-5-dc2a9e5bdf30@gmail.com> (raw)
In-Reply-To: <20240530-max77693-charger-extcon-v1-0-dc2a9e5bdf30@gmail.com>
There are two charger current limit registers:
- Fast charge current limit (which controls current going from the
charger to the battery);
- CHGIN input current limit (which controls current going into the
charger through the cable, and is managed by the CHARGER regulator).
Add the necessary functions to retrieve the CHGIN input limit (from CHARGER
regulator) and maximum fast charge current values, and expose them as power
supply properties.
Signed-off-by: Artur Weber <aweber.kernel@gmail.com>
---
drivers/power/supply/max77693_charger.c | 52 +++++++++++++++++++++++++++++++++
1 file changed, 52 insertions(+)
diff --git a/drivers/power/supply/max77693_charger.c b/drivers/power/supply/max77693_charger.c
index 2001e12c9f7d..894c35b750b3 100644
--- a/drivers/power/supply/max77693_charger.c
+++ b/drivers/power/supply/max77693_charger.c
@@ -9,6 +9,7 @@
#include <linux/platform_device.h>
#include <linux/power_supply.h>
#include <linux/regmap.h>
+#include <linux/regulator/consumer.h>
#include <linux/mfd/max77693.h>
#include <linux/mfd/max77693-common.h>
#include <linux/mfd/max77693-private.h>
@@ -21,6 +22,7 @@ struct max77693_charger {
struct device *dev;
struct max77693_dev *max77693;
struct power_supply *charger;
+ struct regulator *regu;
u32 constant_volt;
u32 min_system_volt;
@@ -197,12 +199,51 @@ static int max77693_get_online(struct regmap *regmap, int *val)
return 0;
}
+/*
+ * There are *two* current limit registers:
+ * - CHGIN limit, which limits the input current from the external charger;
+ * - Fast charge current limit, which limits the current going to the battery.
+ */
+
+static int max77693_get_input_current_limit(struct max77693_charger *chg,
+ int *val)
+{
+ int ret;
+
+ ret = regulator_get_current_limit(chg->regu);
+ if (ret < 0)
+ return ret;
+
+ *val = ret;
+
+ return 0;
+}
+
+static int max77693_get_fast_charge_current(struct regmap *regmap, int *val)
+{
+ unsigned int data;
+ int ret;
+
+ ret = regmap_read(regmap, MAX77693_CHG_REG_CHG_CNFG_02, &data);
+ if (ret < 0)
+ return ret;
+
+ data &= CHG_CNFG_02_CC_MASK;
+ data >>= CHG_CNFG_02_CC_SHIFT;
+
+ *val = (data * 333 / 10) * 1000; /* 3 steps/0.1A */
+
+ return 0;
+}
+
static enum power_supply_property max77693_charger_props[] = {
POWER_SUPPLY_PROP_STATUS,
POWER_SUPPLY_PROP_CHARGE_TYPE,
POWER_SUPPLY_PROP_HEALTH,
POWER_SUPPLY_PROP_PRESENT,
POWER_SUPPLY_PROP_ONLINE,
+ POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT,
+ POWER_SUPPLY_PROP_CURRENT_MAX,
POWER_SUPPLY_PROP_MODEL_NAME,
POWER_SUPPLY_PROP_MANUFACTURER,
};
@@ -231,6 +272,12 @@ static int max77693_charger_get_property(struct power_supply *psy,
case POWER_SUPPLY_PROP_ONLINE:
ret = max77693_get_online(regmap, &val->intval);
break;
+ case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
+ ret = max77693_get_input_current_limit(chg, &val->intval);
+ break;
+ case POWER_SUPPLY_PROP_CURRENT_MAX:
+ ret = max77693_get_fast_charge_current(regmap, &val->intval);
+ break;
case POWER_SUPPLY_PROP_MODEL_NAME:
val->strval = max77693_charger_model;
break;
@@ -680,6 +727,11 @@ static int max77693_charger_probe(struct platform_device *pdev)
chg->dev = &pdev->dev;
chg->max77693 = max77693;
+ chg->regu = devm_regulator_get(chg->dev, "CHARGER");
+ if (IS_ERR(chg->regu))
+ return dev_err_probe(&pdev->dev, PTR_ERR(chg->regu),
+ "failed to get charger regulator\n");
+
ret = max77693_dt_init(&pdev->dev, chg);
if (ret)
return ret;
--
2.45.1
next prev parent reply other threads:[~2024-05-30 8:56 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-30 8:55 [PATCH RFC 00/11] power: supply: max77693: Toggle charging/OTG based on extcon status Artur Weber
2024-05-30 8:55 ` [PATCH RFC 01/11] dt-bindings: power: supply: max77693: Add fast charge current property Artur Weber
2024-05-31 9:35 ` Krzysztof Kozlowski
2024-05-30 8:55 ` [PATCH RFC 02/11] dt-bindings: power: supply: max77693: Add maxim,usb-connector property Artur Weber
2024-05-31 9:15 ` Krzysztof Kozlowski
2024-05-30 8:55 ` [PATCH RFC 03/11] mfd: max77693: Add defines for charger current control Artur Weber
2024-05-31 9:14 ` Krzysztof Kozlowski
2024-05-30 8:55 ` [PATCH RFC 04/11] mfd: max77693: Add defines for OTG control Artur Weber
2024-05-31 9:36 ` Krzysztof Kozlowski
2024-05-30 8:55 ` Artur Weber [this message]
2024-05-31 9:38 ` [PATCH RFC 05/11] power: supply: max77693: Expose INPUT_CURRENT_LIMIT and CURRENT_MAX Krzysztof Kozlowski
2024-05-31 12:22 ` Artur Weber
2024-05-30 8:55 ` [PATCH RFC 06/11] power: supply: max77693: Set charge current limits during init Artur Weber
2024-05-31 9:47 ` Krzysztof Kozlowski
2024-05-31 11:55 ` Artur Weber
2024-05-31 12:18 ` Krzysztof Kozlowski
2024-06-05 14:43 ` Artur Weber
2024-05-30 8:55 ` [PATCH RFC 07/11] power: supply: max77693: Add USB extcon detection for enabling charging Artur Weber
2024-05-30 8:55 ` [PATCH RFC 08/11] power: supply: max77693: Add support for detecting and enabling OTG Artur Weber
2024-05-30 8:55 ` [PATCH RFC 09/11] power: supply: max77693: Set up charge/input current according to cable type Artur Weber
2024-05-30 8:56 ` [PATCH RFC 10/11] ARM: dts: samsung: exynos4212-tab3: Set fast charge current for MAX77693 Artur Weber
2024-05-30 8:56 ` [PATCH RFC 11/11] ARM: dts: samsung: exynos4212-tab3: Add USB connector node Artur Weber
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=20240530-max77693-charger-extcon-v1-5-dc2a9e5bdf30@gmail.com \
--to=aweber.kernel@gmail.com \
--cc=GNUtoo@cyberdimension.org \
--cc=alim.akhtar@samsung.com \
--cc=conor+dt@kernel.org \
--cc=cw00.choi@samsung.com \
--cc=devicetree@vger.kernel.org \
--cc=henrik@grimler.se \
--cc=krzk+dt@kernel.org \
--cc=krzk@kernel.org \
--cc=lee@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=robh@kernel.org \
--cc=sre@kernel.org \
--cc=wolfgit@wiedmeyer.de \
--cc=~postmarketos/upstreaming@lists.sr.ht \
/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