Skip to content

Commit 6e5f094

Browse files
author
Al Stone
committed
power: supply: core: Add support for generic fwnodes to power_supply_get_battery_info()
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2071846 Tested: This is one of a series of patch sets to enable Arm SystemReady IR support in the kernel for NXP i.MX8 platforms. This set updates the power subsystem. This set has been tested via simple boot tests and the CI loop. commit c76787b Author: Hans de Goede <hdegoede@redhat.com> Date: Sun Feb 6 19:35:37 2022 +0100 power: supply: core: Add support for generic fwnodes to power_supply_get_battery_info() Add support to power_supply_get_battery_info() to read the properties from other fwnode types such as swnodes added by platform code on x86 devices. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com> (cherry picked from commit c76787b) Signed-off-by: Al Stone <ahs3@redhat.com>
1 parent d4bd001 commit 6e5f094

File tree

1 file changed

+16
-10
lines changed

1 file changed

+16
-10
lines changed

drivers/power/supply/power_supply_core.c

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -571,7 +571,8 @@ int power_supply_get_battery_info(struct power_supply *psy,
571571
{
572572
struct power_supply_resistance_temp_table *resist_table;
573573
struct power_supply_battery_info *info;
574-
struct device_node *battery_np;
574+
struct device_node *battery_np = NULL;
575+
struct fwnode_reference_args args;
575576
struct fwnode_handle *fwnode;
576577
const char *value;
577578
int err, len, index;
@@ -610,17 +611,21 @@ int power_supply_get_battery_info(struct power_supply *psy,
610611
info->ocv_table_size[index] = -EINVAL;
611612
}
612613

613-
if (!psy->of_node) {
614-
dev_warn(&psy->dev, "%s currently only supports devicetree\n",
615-
__func__);
616-
return -ENXIO;
617-
}
614+
if (psy->of_node) {
615+
battery_np = of_parse_phandle(psy->of_node, "monitored-battery", 0);
616+
if (!battery_np)
617+
return -ENODEV;
618618

619-
battery_np = of_parse_phandle(psy->of_node, "monitored-battery", 0);
620-
if (!battery_np)
621-
return -ENODEV;
619+
fwnode = fwnode_handle_get(of_fwnode_handle(battery_np));
620+
} else {
621+
err = fwnode_property_get_reference_args(
622+
dev_fwnode(psy->dev.parent),
623+
"monitored-battery", NULL, 0, 0, &args);
624+
if (err)
625+
return err;
622626

623-
fwnode = of_fwnode_handle(battery_np);
627+
fwnode = args.fwnode;
628+
}
624629

625630
err = fwnode_property_read_string(fwnode, "compatible", &value);
626631
if (err)
@@ -778,6 +783,7 @@ int power_supply_get_battery_info(struct power_supply *psy,
778783
*info_out = info;
779784

780785
out_put_node:
786+
fwnode_handle_put(fwnode);
781787
of_node_put(battery_np);
782788
return err;
783789
}

0 commit comments

Comments
 (0)