@@ -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 :
0 commit comments