@@ -19,6 +19,7 @@ struct composite_config {
19
19
int32_t ocv_lookup_table [BATTERY_OCV_TABLE_LEN ];
20
20
uint32_t charge_capacity_microamp_hours ;
21
21
enum battery_chemistry chemistry ;
22
+ bool fg_channels ;
22
23
};
23
24
24
25
struct composite_data {
@@ -60,6 +61,7 @@ static int composite_get_prop(const struct device *dev, fuel_gauge_prop_t prop,
60
61
struct composite_data * data = dev -> data ;
61
62
k_ticks_t now = k_uptime_ticks ();
62
63
struct sensor_value sensor_val ;
64
+ enum sensor_channel sensor_chan ;
63
65
int64_t voltage ;
64
66
int rc = 0 ;
65
67
@@ -100,7 +102,8 @@ static int composite_get_prop(const struct device *dev, fuel_gauge_prop_t prop,
100
102
val -> full_charge_capacity = config -> charge_capacity_microamp_hours / 1000 ;
101
103
break ;
102
104
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 );
104
107
val -> voltage = sensor_value_to_micro (& sensor_val );
105
108
break ;
106
109
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,
109
112
return - ENOTSUP ;
110
113
}
111
114
/* 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 );
113
117
voltage = sensor_value_to_micro (& sensor_val );
114
118
if (rc == 0 ) {
115
119
/* Convert voltage to state of charge */
@@ -119,7 +123,9 @@ static int composite_get_prop(const struct device *dev, fuel_gauge_prop_t prop,
119
123
break ;
120
124
case FUEL_GAUGE_CURRENT :
121
125
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 );
123
129
val -> current = sensor_value_to_micro (& sensor_val );
124
130
break ;
125
131
default :
@@ -156,6 +162,7 @@ static DEVICE_API(fuel_gauge, composite_api) = {
156
162
.charge_capacity_microamp_hours = \
157
163
DT_INST_PROP_OR(inst, charge_full_design_microamp_hours, 0), \
158
164
.chemistry = BATTERY_CHEMISTRY_DT_GET(inst), \
165
+ .fg_channels = DT_INST_PROP(inst, fuel_gauge_channels), \
159
166
}; \
160
167
static struct composite_data composite_##inst##_data; \
161
168
DEVICE_DT_INST_DEFINE(inst, fuel_gauge_composite_init, NULL, &composite_##inst##_data, \
0 commit comments