Skip to content

Commit 64abfac

Browse files
committed
fuel_gauge: composite: choose sensor channel types
Choose whether the data sources should be queried by the generic sensor channels (`SENSOR_CHAN_VOLTAGE`, etc), or the fuel guage specific channels (`SENSOR_CHAN_GAUGE_*`). Signed-off-by: Jordan Yates <[email protected]>
1 parent ad56be5 commit 64abfac

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

drivers/fuel_gauge/composite/fuel_gauge_composite.c

+10-3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ struct composite_config {
1919
int32_t ocv_lookup_table[BATTERY_OCV_TABLE_LEN];
2020
uint32_t charge_capacity_microamp_hours;
2121
enum battery_chemistry chemistry;
22+
bool fg_channels;
2223
};
2324

2425
struct composite_data {
@@ -60,6 +61,7 @@ static int composite_get_prop(const struct device *dev, fuel_gauge_prop_t prop,
6061
struct composite_data *data = dev->data;
6162
k_ticks_t now = k_uptime_ticks();
6263
struct sensor_value sensor_val;
64+
enum sensor_channel sensor_chan;
6365
int64_t voltage;
6466
int rc = 0;
6567

@@ -100,7 +102,8 @@ static int composite_get_prop(const struct device *dev, fuel_gauge_prop_t prop,
100102
val->full_charge_capacity = config->charge_capacity_microamp_hours / 1000;
101103
break;
102104
case FUEL_GAUGE_VOLTAGE:
103-
rc = composite_channel_get(dev, SENSOR_CHAN_VOLTAGE, &sensor_val);
105+
sensor_chan = config->fg_channels ? SENSOR_CHAN_GAUGE_VOLTAGE : SENSOR_CHAN_VOLTAGE;
106+
rc = composite_channel_get(dev, sensor_chan, &sensor_val);
104107
val->voltage = sensor_value_to_micro(&sensor_val);
105108
break;
106109
case FUEL_GAUGE_ABSOLUTE_STATE_OF_CHARGE:
@@ -109,7 +112,8 @@ static int composite_get_prop(const struct device *dev, fuel_gauge_prop_t prop,
109112
return -ENOTSUP;
110113
}
111114
/* Fetch the voltage from the sensor */
112-
rc = composite_channel_get(dev, SENSOR_CHAN_VOLTAGE, &sensor_val);
115+
sensor_chan = config->fg_channels ? SENSOR_CHAN_GAUGE_VOLTAGE : SENSOR_CHAN_VOLTAGE;
116+
rc = composite_channel_get(dev, sensor_chan, &sensor_val);
113117
voltage = sensor_value_to_micro(&sensor_val);
114118
if (rc == 0) {
115119
/* Convert voltage to state of charge */
@@ -119,7 +123,9 @@ static int composite_get_prop(const struct device *dev, fuel_gauge_prop_t prop,
119123
break;
120124
case FUEL_GAUGE_CURRENT:
121125
case FUEL_GAUGE_AVG_CURRENT:
122-
rc = composite_channel_get(dev, SENSOR_CHAN_CURRENT, &sensor_val);
126+
sensor_chan =
127+
config->fg_channels ? SENSOR_CHAN_GAUGE_AVG_CURRENT : SENSOR_CHAN_CURRENT;
128+
rc = composite_channel_get(dev, sensor_chan, &sensor_val);
123129
val->current = sensor_value_to_micro(&sensor_val);
124130
break;
125131
default:
@@ -156,6 +162,7 @@ static DEVICE_API(fuel_gauge, composite_api) = {
156162
.charge_capacity_microamp_hours = \
157163
DT_INST_PROP_OR(inst, charge_full_design_microamp_hours, 0), \
158164
.chemistry = BATTERY_CHEMISTRY_DT_GET(inst), \
165+
.fg_channels = DT_INST_PROP(inst, fuel_gauge_channels), \
159166
}; \
160167
static struct composite_data composite_##inst##_data; \
161168
DEVICE_DT_INST_DEFINE(inst, fuel_gauge_composite_init, NULL, &composite_##inst##_data, \

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

+7
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,13 @@ properties:
2525
2626
Device must implement the sensor API.
2727
28+
fuel-gauge-channels:
29+
type: boolean
30+
description: |
31+
Sources should be queried by the sensor API fuel gauge
32+
channels (SENSOR_CHAN_GAUGE_*), instead of the generic
33+
channels (SENSOR_CHAN_VOLTAGE, etc).
34+
2835
device-chemistry:
2936
required: true
3037

0 commit comments

Comments
 (0)