Skip to content

Commit a43f783

Browse files
committed
fuel_gauge: composite: query sources for capacity and soc
Query the configured data sources for capacity and soc information before falling back to the composite fuel gauge configuration. This means the battery properties are no longer required. Signed-off-by: Jordan Yates <[email protected]>
1 parent b275e11 commit a43f783

File tree

2 files changed

+32
-22
lines changed

2 files changed

+32
-22
lines changed

drivers/fuel_gauge/composite/fuel_gauge_composite.c

+32-16
Original file line numberDiff line numberDiff line change
@@ -90,16 +90,25 @@ static int composite_get_prop(const struct device *dev, fuel_gauge_prop_t prop,
9090

9191
switch (prop) {
9292
case FUEL_GAUGE_FULL_CHARGE_CAPACITY:
93-
if (config->charge_capacity_microamp_hours == 0) {
94-
return -ENOTSUP;
93+
rc = composite_channel_get(dev, SENSOR_CHAN_GAUGE_FULL_AVAIL_CAPACITY, &sensor_val);
94+
if (rc == -ENOTSUP) {
95+
if (config->charge_capacity_microamp_hours == 0) {
96+
return -ENOTSUP;
97+
}
98+
val->full_charge_capacity = config->charge_capacity_microamp_hours;
99+
rc = 0;
95100
}
96-
val->full_charge_capacity = config->charge_capacity_microamp_hours;
97101
break;
98102
case FUEL_GAUGE_DESIGN_CAPACITY:
99-
if (config->charge_capacity_microamp_hours == 0) {
100-
return -ENOTSUP;
103+
rc = composite_channel_get(dev, SENSOR_CHAN_GAUGE_FULL_CHARGE_CAPACITY,
104+
&sensor_val);
105+
if (rc == -ENOTSUP) {
106+
if (config->charge_capacity_microamp_hours == 0) {
107+
return -ENOTSUP;
108+
}
109+
val->design_cap = config->charge_capacity_microamp_hours / 1000;
110+
rc = 0;
101111
}
102-
val->full_charge_capacity = config->charge_capacity_microamp_hours / 1000;
103112
break;
104113
case FUEL_GAUGE_VOLTAGE:
105114
sensor_chan = config->fg_channels ? SENSOR_CHAN_GAUGE_VOLTAGE : SENSOR_CHAN_VOLTAGE;
@@ -108,17 +117,24 @@ static int composite_get_prop(const struct device *dev, fuel_gauge_prop_t prop,
108117
break;
109118
case FUEL_GAUGE_ABSOLUTE_STATE_OF_CHARGE:
110119
case FUEL_GAUGE_RELATIVE_STATE_OF_CHARGE:
111-
if (config->ocv_lookup_table[0] == -1) {
112-
return -ENOTSUP;
113-
}
114-
/* Fetch the voltage from the sensor */
115-
sensor_chan = config->fg_channels ? SENSOR_CHAN_GAUGE_VOLTAGE : SENSOR_CHAN_VOLTAGE;
116-
rc = composite_channel_get(dev, sensor_chan, &sensor_val);
117-
voltage = sensor_value_to_micro(&sensor_val);
120+
rc = composite_channel_get(dev, SENSOR_CHAN_GAUGE_STATE_OF_CHARGE, &sensor_val);
118121
if (rc == 0) {
119-
/* Convert voltage to state of charge */
120-
val->relative_state_of_charge =
121-
battery_soc_lookup(config->ocv_lookup_table, voltage) / 1000;
122+
val->absolute_state_of_charge = sensor_val.val1;
123+
} else if (rc == -ENOTSUP) {
124+
if (config->ocv_lookup_table[0] == -1) {
125+
return -ENOTSUP;
126+
}
127+
/* Fetch the voltage from the sensor */
128+
sensor_chan = config->fg_channels ? SENSOR_CHAN_GAUGE_VOLTAGE
129+
: SENSOR_CHAN_VOLTAGE;
130+
rc = composite_channel_get(dev, sensor_chan, &sensor_val);
131+
voltage = sensor_value_to_micro(&sensor_val);
132+
if (rc == 0) {
133+
/* Convert voltage to state of charge */
134+
val->relative_state_of_charge =
135+
battery_soc_lookup(config->ocv_lookup_table, voltage) /
136+
1000;
137+
}
122138
}
123139
break;
124140
case FUEL_GAUGE_CURRENT:

dts/bindings/fuel-gauge/zephyr,fuel-gauge-composite.yaml

-6
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,3 @@ properties:
3131
Sources should be queried by the sensor API fuel gauge
3232
channels (SENSOR_CHAN_GAUGE_*), instead of the generic
3333
channels (SENSOR_CHAN_VOLTAGE, etc).
34-
35-
device-chemistry:
36-
required: true
37-
38-
ocv-capacity-table-0:
39-
required: true

0 commit comments

Comments
 (0)