Commit d1b25092 authored by Marek Vasut's avatar Marek Vasut Committed by Sebastian Reichel

power: supply: bq25890: Factor out chip state update

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: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarMarek Vasut <marex@denx.de>
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
parent 5dd48268
...@@ -454,20 +454,18 @@ static int bq25890_get_vbus_voltage(struct bq25890_device *bq) ...@@ -454,20 +454,18 @@ static int bq25890_get_vbus_voltage(struct bq25890_device *bq)
return bq25890_find_val(ret, TBL_VBUSV); return bq25890_find_val(ret, TBL_VBUSV);
} }
static int bq25890_power_supply_get_property(struct power_supply *psy, static void bq25890_update_state(struct bq25890_device *bq,
enum power_supply_property psp, enum power_supply_property psp,
union power_supply_propval *val) struct bq25890_state *state)
{ {
struct bq25890_device *bq = power_supply_get_drvdata(psy);
struct bq25890_state state;
bool do_adc_conv; bool do_adc_conv;
int ret; int ret;
mutex_lock(&bq->lock); mutex_lock(&bq->lock);
/* update state in case we lost an interrupt */ /* update state in case we lost an interrupt */
__bq25890_handle_irq(bq); __bq25890_handle_irq(bq);
state = bq->state; *state = bq->state;
do_adc_conv = !state.online && bq25890_is_adc_property(psp); do_adc_conv = !state->online && bq25890_is_adc_property(psp);
if (do_adc_conv) if (do_adc_conv)
bq25890_field_write(bq, F_CONV_START, 1); bq25890_field_write(bq, F_CONV_START, 1);
mutex_unlock(&bq->lock); mutex_unlock(&bq->lock);
...@@ -475,6 +473,17 @@ static int bq25890_power_supply_get_property(struct power_supply *psy, ...@@ -475,6 +473,17 @@ static int bq25890_power_supply_get_property(struct power_supply *psy,
if (do_adc_conv) if (do_adc_conv)
regmap_field_read_poll_timeout(bq->rmap_fields[F_CONV_START], regmap_field_read_poll_timeout(bq->rmap_fields[F_CONV_START],
ret, !ret, 25000, 1000000); 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) { switch (psp) {
case POWER_SUPPLY_PROP_STATUS: case POWER_SUPPLY_PROP_STATUS:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment