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