Skip to content

Commit de68987

Browse files
DimitriFedrausre
authored andcommitted
power: supply: gpio-charger: add support for default charge current limit
With DT properties charge-current-limit-gpios and charge-current-limit-mapping one can define charge current limits in uA using up to 32 GPIOs. At the moment the driver defaults to smallest charge current limitation for safety reasons. When disabling charging is supported, which should be common, the driver defaults to non charging on probe. By having a default, charging can be enabled on probe for such devices. Signed-off-by: Dimitri Fedrau <[email protected]> Link: https://lore.kernel.org/r/20241218-default-charge-current-limit-v3-2-b26118cf06b5@liebherr.com Signed-off-by: Sebastian Reichel <[email protected]>
1 parent 0a219d6 commit de68987

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

drivers/power/supply/gpio-charger.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,8 @@ static int init_charge_current_limit(struct device *dev,
195195
{
196196
int i, len;
197197
u32 cur_limit = U32_MAX;
198+
bool set_def_limit;
199+
u32 def_limit;
198200

199201
gpio_charger->current_limit_gpios = devm_gpiod_get_array_optional(dev,
200202
"charge-current-limit", GPIOD_OUT_LOW);
@@ -228,15 +230,26 @@ static int init_charge_current_limit(struct device *dev,
228230
if (len < 0)
229231
return len;
230232

233+
set_def_limit = !device_property_read_u32(dev,
234+
"charge-current-limit-default-microamp",
235+
&def_limit);
231236
for (i=0; i < gpio_charger->current_limit_map_size; i++) {
232237
if (gpio_charger->current_limit_map[i].limit_ua > cur_limit) {
233238
dev_err(dev, "charge-current-limit-mapping not sorted by current in descending order\n");
234239
return -EINVAL;
235240
}
236241

237242
cur_limit = gpio_charger->current_limit_map[i].limit_ua;
243+
if (set_def_limit && def_limit == cur_limit) {
244+
set_charge_current_limit(gpio_charger, cur_limit);
245+
return 0;
246+
}
238247
}
239248

249+
if (set_def_limit)
250+
dev_warn(dev, "charge-current-limit-default-microamp %u not listed in charge-current-limit-mapping\n",
251+
def_limit);
252+
240253
/* default to smallest current limitation for safety reasons */
241254
len = gpio_charger->current_limit_map_size - 1;
242255
set_charge_current_limit(gpio_charger,

0 commit comments

Comments
 (0)