diff mbox series

power: supply: bq2415x_charger: report online status

Message ID 20240226194432.2174095-1-absicsz@gmail.com (mailing list archive)
State Handled Elsewhere, archived
Headers show
Series power: supply: bq2415x_charger: report online status | expand

Commit Message

Sicelo A. Mhlongo Feb. 26, 2024, 7:44 p.m. UTC
Provide the Online property. This chip does not have specific flags to
indicate the presence of an input voltage, but this can be inferred from
the reported charging status.

Signed-off-by: Sicelo A. Mhlongo <absicsz@gmail.com>
---
 drivers/power/supply/bq2415x_charger.c | 9 +++++++++
 1 file changed, 9 insertions(+)

Comments

Sebastian Reichel Feb. 27, 2024, 8:11 p.m. UTC | #1
Hi,

On Mon, Feb 26, 2024 at 09:44:32PM +0200, Sicelo A. Mhlongo wrote:
> Provide the Online property. This chip does not have specific flags to
> indicate the presence of an input voltage, but this can be inferred from
> the reported charging status.

The datasheet suggests, that you can get the status from the fault
bits:

011 - Poor input source or VBUS < UVLO

Greetings,

-- Sebastian

> 
> Signed-off-by: Sicelo A. Mhlongo <absicsz@gmail.com>
> ---
>  drivers/power/supply/bq2415x_charger.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/drivers/power/supply/bq2415x_charger.c b/drivers/power/supply/bq2415x_charger.c
> index 6a4798a62588..5b47a1d0a51a 100644
> --- a/drivers/power/supply/bq2415x_charger.c
> +++ b/drivers/power/supply/bq2415x_charger.c
> @@ -991,6 +991,7 @@ static enum power_supply_property bq2415x_power_supply_props[] = {
>  	/* TODO: maybe add more power supply properties */
>  	POWER_SUPPLY_PROP_STATUS,
>  	POWER_SUPPLY_PROP_MODEL_NAME,
> +	POWER_SUPPLY_PROP_ONLINE,
>  };
>  
>  static int bq2415x_power_supply_get_property(struct power_supply *psy,
> @@ -1017,6 +1018,14 @@ static int bq2415x_power_supply_get_property(struct power_supply *psy,
>  	case POWER_SUPPLY_PROP_MODEL_NAME:
>  		val->strval = bq->model;
>  		break;
> +	case POWER_SUPPLY_PROP_ONLINE:
> +		ret = bq2415x_exec_command(bq, BQ2415X_CHARGE_STATUS);
> +		/* Charger is Online when Charging or Full are reported. It is
> +		 * also likely online for the Unknown/Fault state too, but
> +		 * there is no way to be absolutely sure.
> +		 */
> +		val->intval = (ret == 1 || ret == 2);
> +		break;
>  	default:
>  		return -EINVAL;
>  	}
> -- 
> 2.43.0
>
Sicelo A. Mhlongo Feb. 27, 2024, 9:34 p.m. UTC | #2
Hi Sebastian

On Tue, Feb 27, 2024 at 09:11:36PM +0100, Sebastian Reichel wrote:
> Hi,
> 
> On Mon, Feb 26, 2024 at 09:44:32PM +0200, Sicelo A. Mhlongo wrote:
> > Provide the Online property. This chip does not have specific flags to
> > indicate the presence of an input voltage, but this can be inferred from
> > the reported charging status.
> 
> The datasheet suggests, that you can get the status from the fault
> bits:
> 
> 011 - Poor input source or VBUS < UVLO
> 
Absolutely, yes. This particular state, which is a fault condition, clearly
indicates VBUS is present.

However, when there are no faults at all, then those bits always read
`000`. On a running system, one can check this by connecting and
disconnecting a charger (Nokia N900 used in my tests) while watching
/sys/class/power_supply/bq24150a-0/registers. Only bit 4 changes state.
In other words, the fault bits do not appear to be enough to determine
the presence of an input voltage.

However, looking at them more closely seems to suggest I should respin the
patch to also report VBUS online if a fault is reported instead of only
during charging and charge full states.

Please let me know if this sounds correct, or if I misunderstood your
reply.

Sincerely
Sicelo
Sebastian Reichel Feb. 28, 2024, midnight UTC | #3
Hi,

On Tue, Feb 27, 2024 at 11:34:54PM +0200, Sicelo wrote:
> On Tue, Feb 27, 2024 at 09:11:36PM +0100, Sebastian Reichel wrote:
> > On Mon, Feb 26, 2024 at 09:44:32PM +0200, Sicelo A. Mhlongo wrote:
> > > Provide the Online property. This chip does not have specific flags to
> > > indicate the presence of an input voltage, but this can be inferred from
> > > the reported charging status.
> > 
> > The datasheet suggests, that you can get the status from the fault
> > bits:
> > 
> > 011 - Poor input source or VBUS < UVLO
> > 
> Absolutely, yes. This particular state, which is a fault condition, clearly
> indicates VBUS is present.

I assumed this might be set for a disconnected charger, considering
that no input source is a poor input source / 0V is < UVLO.

> However, when there are no faults at all, then those bits always read
> `000`. On a running system, one can check this by connecting and
> disconnecting a charger (Nokia N900 used in my tests) while watching
> /sys/class/power_supply/bq24150a-0/registers. Only bit 4 changes state.
> In other words, the fault bits do not appear to be enough to determine
> the presence of an input voltage.

Ok.

> However, looking at them more closely seems to suggest I should respin the
> patch to also report VBUS online if a fault is reported instead of only
> during charging and charge full states.

Right, so you can just check for BQ2415X_CHARGE_STATUS != 0.

> Please let me know if this sounds correct, or if I misunderstood your
> reply.

Greetings,

-- Sebastian
Sicelo A. Mhlongo Feb. 28, 2024, 7:09 a.m. UTC | #4
Good Day

On Wed, Feb 28, 2024 at 01:00:20AM +0100, Sebastian Reichel wrote:
> > > 
> > > 011 - Poor input source or VBUS < UVLO
> > > 
> > Absolutely, yes. This particular state, which is a fault condition, clearly
> > indicates VBUS is present.
> 
> I assumed this might be set for a disconnected charger, considering
> that no input source is a poor input source / 0V is < UVLO.

The meaning of that one can be phrased as: you are supplying VBUS, but
it is not high enough for the chip to sustain charging.

> > However, looking at them more closely seems to suggest I should respin the
> > patch to also report VBUS online if a fault is reported instead of only
> > during charging and charge full states.
> 
> Right, so you can just check for BQ2415X_CHARGE_STATUS != 0.

Thanks. v2 sent.

Regards,
Sicelo
diff mbox series

Patch

diff --git a/drivers/power/supply/bq2415x_charger.c b/drivers/power/supply/bq2415x_charger.c
index 6a4798a62588..5b47a1d0a51a 100644
--- a/drivers/power/supply/bq2415x_charger.c
+++ b/drivers/power/supply/bq2415x_charger.c
@@ -991,6 +991,7 @@  static enum power_supply_property bq2415x_power_supply_props[] = {
 	/* TODO: maybe add more power supply properties */
 	POWER_SUPPLY_PROP_STATUS,
 	POWER_SUPPLY_PROP_MODEL_NAME,
+	POWER_SUPPLY_PROP_ONLINE,
 };
 
 static int bq2415x_power_supply_get_property(struct power_supply *psy,
@@ -1017,6 +1018,14 @@  static int bq2415x_power_supply_get_property(struct power_supply *psy,
 	case POWER_SUPPLY_PROP_MODEL_NAME:
 		val->strval = bq->model;
 		break;
+	case POWER_SUPPLY_PROP_ONLINE:
+		ret = bq2415x_exec_command(bq, BQ2415X_CHARGE_STATUS);
+		/* Charger is Online when Charging or Full are reported. It is
+		 * also likely online for the Unknown/Fault state too, but
+		 * there is no way to be absolutely sure.
+		 */
+		val->intval = (ret == 1 || ret == 2);
+		break;
 	default:
 		return -EINVAL;
 	}