power: supply: bq25890: Factor out chip state update
authorMarek Vasut <marex@denx.de>
Mon, 28 Nov 2022 09:28:50 +0000 (10:28 +0100)
committerSebastian Reichel <sebastian.reichel@collabora.com>
Mon, 2 Jan 2023 23:04:26 +0000 (00:04 +0100)
Pull the chip state and ADC conversion update functionality out into
separate function, so it can be reused elsewhere in the driver. This
is a preparatory patch, no functional change.

Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Marek Vasut <marex@denx.de>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
drivers/power/supply/bq25890_charger.c

index 2d731ea..e9f5964 100644 (file)
@@ -454,20 +454,18 @@ static int bq25890_get_vbus_voltage(struct bq25890_device *bq)
        return bq25890_find_val(ret, TBL_VBUSV);
 }
 
-static int bq25890_power_supply_get_property(struct power_supply *psy,
-                                            enum power_supply_property psp,
-                                            union power_supply_propval *val)
+static void bq25890_update_state(struct bq25890_device *bq,
+                                enum power_supply_property psp,
+                                struct bq25890_state *state)
 {
-       struct bq25890_device *bq = power_supply_get_drvdata(psy);
-       struct bq25890_state state;
        bool do_adc_conv;
        int ret;
 
        mutex_lock(&bq->lock);
        /* update state in case we lost an interrupt */
        __bq25890_handle_irq(bq);
-       state = bq->state;
-       do_adc_conv = !state.online && bq25890_is_adc_property(psp);
+       *state = bq->state;
+       do_adc_conv = !state->online && bq25890_is_adc_property(psp);
        if (do_adc_conv)
                bq25890_field_write(bq, F_CONV_START, 1);
        mutex_unlock(&bq->lock);
@@ -475,6 +473,17 @@ static int bq25890_power_supply_get_property(struct power_supply *psy,
        if (do_adc_conv)
                regmap_field_read_poll_timeout(bq->rmap_fields[F_CONV_START],
                        ret, !ret, 25000, 1000000);
+}
+
+static int bq25890_power_supply_get_property(struct power_supply *psy,
+                                            enum power_supply_property psp,
+                                            union power_supply_propval *val)
+{
+       struct bq25890_device *bq = power_supply_get_drvdata(psy);
+       struct bq25890_state state;
+       int ret;
+
+       bq25890_update_state(bq, psp, &state);
 
        switch (psp) {
        case POWER_SUPPLY_PROP_STATUS: