@@ -90,16 +90,25 @@ static int composite_get_prop(const struct device *dev, fuel_gauge_prop_t prop,
90
90
91
91
switch (prop ) {
92
92
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 ;
95
100
}
96
- val -> full_charge_capacity = config -> charge_capacity_microamp_hours ;
97
101
break ;
98
102
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 ;
101
111
}
102
- val -> full_charge_capacity = config -> charge_capacity_microamp_hours / 1000 ;
103
112
break ;
104
113
case FUEL_GAUGE_VOLTAGE :
105
114
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,
108
117
break ;
109
118
case FUEL_GAUGE_ABSOLUTE_STATE_OF_CHARGE :
110
119
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 );
118
121
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
+ }
122
138
}
123
139
break ;
124
140
case FUEL_GAUGE_CURRENT :
0 commit comments