All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sebastian Reichel <sre@kernel.org>
To: Andreas Dannenberg <dannenberg@ti.com>
Cc: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>,
	David Woodhouse <dwmw2@infradead.org>,
	Laurentiu Palcu <laurentiu.palcu@intel.com>,
	Krzysztof Kozlowski <k.kozlowski@samsung.com>,
	Ramakrishna Pallala <ramakrishna.pallala@intel.com>,
	linux-pm@vger.kernel.org, devicetree@vger.kernel.org
Subject: Re: [PATCH v5 05/11] power: bq24257: Add SW-based approach for Power Good determination
Date: Tue, 22 Sep 2015 21:37:20 +0200	[thread overview]
Message-ID: <20150922193719.GD9949@earth> (raw)
In-Reply-To: <1442612399-341-6-git-send-email-dannenberg@ti.com>

[-- Attachment #1: Type: text/plain, Size: 3705 bytes --]

Hi,

On Fri, Sep 18, 2015 at 04:39:53PM -0500, Andreas Dannenberg wrote:
> A software-based approach for determining the charger's input voltage
> "Power Good" state is introduced for devices like the bq24250 which
> don't have a dedicated hardware pin for that purpose. This SW-based
> approach is also used for other devices (with dedicated PG pin) as a
> fall back solution if that pin is not configured to be used through
> "pg-gpios".
> 
> Signed-off-by: Andreas Dannenberg <dannenberg@ti.com>
> ---
>  drivers/power/bq24257_charger.c | 49 ++++++++++++++++++++++++++++++++++++-----
>  1 file changed, 43 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/power/bq24257_charger.c b/drivers/power/bq24257_charger.c
> index 502dd8a5..135cfd4 100644
> --- a/drivers/power/bq24257_charger.c
> +++ b/drivers/power/bq24257_charger.c
> @@ -107,6 +107,7 @@ struct bq24257_device {
>  	struct mutex lock; /* protect state data */
>  
>  	bool iilimit_autoset_enable;
> +	bool pg_gpio_disable;

I don't think this is required.

>  };
>  
>  static bool bq24257_is_volatile_reg(struct device *dev, unsigned int reg)
> @@ -360,7 +361,26 @@ static int bq24257_get_chip_state(struct bq24257_device *bq,
>  
>  	state->fault = ret;
>  
> -	state->power_good = !gpiod_get_value_cansleep(bq->pg);
> +	if (bq->pg_gpio_disable)
> +		/*
> +		 * If we have a chip without a dedicated power-good GPIO or
> +		 * some other explicit bit that would provide this information
> +		 * assume the power is good if there is no supply related
> +		 * fault - and not good otherwise. There is a possibility for
> +		 * other errors to mask that power in fact is not good but this
> +		 * is probably the best we can do here.
> +		 */
> +		switch (state->fault) {
> +		case FAULT_INPUT_OVP:
> +		case FAULT_INPUT_UVLO:
> +		case FAULT_INPUT_LDO_LOW:
> +			state->power_good = false;
> +			break;
> +		default:
> +			state->power_good = true;
> +		}
> +	else
> +		state->power_good = !gpiod_get_value_cansleep(bq->pg);

I guess you can just handle this like an optional gpio

if(bq->pg)
    state->power_good = !gpiod_get_value_cansleep(bq->pg);
else
    ...

>  
>  	return 0;
>  }
> @@ -680,7 +700,7 @@ static int bq24257_pg_gpio_probe(struct bq24257_device *bq)
>  {
>  	bq->pg = devm_gpiod_get_index(bq->dev, BQ24257_PG_GPIO, 0, GPIOD_IN);
>  	if (IS_ERR(bq->pg)) {
> -		dev_err(bq->dev, "could not probe PG pin\n");
> +		dev_info(bq->dev, "could not probe PG pin\n");
>  		return PTR_ERR(bq->pg);
>  	}
>  
> @@ -814,10 +834,27 @@ static int bq24257_probe(struct i2c_client *client,
>  		INIT_DELAYED_WORK(&bq->iilimit_setup_work,
>  				  bq24257_iilimit_setup_work);
>  
> -	/* we can only check Power Good status by probing the PG pin */
> -	ret = bq24257_pg_gpio_probe(bq);
> -	if (ret < 0)
> -		return ret;
> +	/*
> +	 * The BQ24250 doesn't have a dedicated Power Good (PG) pin so we
> +	 * explicitly disable this feature for this device and instead use
> +	 * a SW-based approach to determine the PG state.
> +	 */
> +	if (bq->chip == BQ24250)
> +		bq->pg_gpio_disable = true;
> +
> +	/*
> +	 * For devices that do have a dedicated PG pin go ahead and probe it,
> +	 * using the SW-based approach as a fall back solution. Note that the
> +	 * use of the dedicated pin is preferred.
> +	 */
> +	if (!bq->pg_gpio_disable) {
> +		ret = bq24257_pg_gpio_probe(bq);
> +		if (ret < 0) {
> +			dev_info(bq->dev,
> +				 "using SW-based power-good detection\n");
> +			bq->pg_gpio_disable = true;
> +		}
> +	}
>  
>  	/* reset all registers to defaults */
>  	ret = bq24257_field_write(bq, F_RESET, 1);

-- Sebastian

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

  reply	other threads:[~2015-09-22 19:37 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-18 21:39 [PATCH v5 00/11] power: bq24257: Add support for bq24250/bq24251 Andreas Dannenberg
2015-09-18 21:39 ` [PATCH v5 01/11] dt: power: bq24257-charger: Cover additional devices Andreas Dannenberg
2015-09-22 16:24   ` Sebastian Reichel
2015-09-22 21:58     ` Andreas Dannenberg
2015-09-23  0:34       ` Sebastian Reichel
2015-09-23  8:14         ` Laurentiu Palcu
2015-09-23 14:13           ` Andreas Dannenberg
2015-09-18 21:39 ` [PATCH v5 02/11] power: bq24257: Add basic support for bq24250/bq24251 Andreas Dannenberg
2015-09-18 21:39 ` [PATCH v5 03/11] power: bq24257: Add bit definition for temp sense enable Andreas Dannenberg
2015-09-18 21:39 ` [PATCH v5 04/11] power: bq24257: Allow manual setting of input current limit Andreas Dannenberg
2015-09-18 21:39 ` [PATCH v5 06/11] power: bq24257: Use managed power supply register Andreas Dannenberg
2015-09-18 21:39 ` [PATCH v5 07/11] power: bq24257: Add over voltage protection setting support Andreas Dannenberg
2015-09-18 21:39 ` [PATCH v5 08/11] power: bq24257: Add input DPM voltage threshold " Andreas Dannenberg
     [not found] ` <1442612399-341-1-git-send-email-dannenberg-l0cyMroinI0@public.gmane.org>
2015-09-18 21:39   ` [PATCH v5 05/11] power: bq24257: Add SW-based approach for Power Good determination Andreas Dannenberg
2015-09-22 19:37     ` Sebastian Reichel [this message]
2015-09-23 19:34       ` Andreas Dannenberg
2015-09-23 20:02         ` Andreas Dannenberg
2015-09-18 21:39   ` [PATCH v5 09/11] power: bq24257: Allow input current limit sysfs access Andreas Dannenberg
2015-09-22 19:16     ` Sebastian Reichel
2015-09-22 22:10       ` Andreas Dannenberg
2015-09-23  0:29         ` Sebastian Reichel
2015-09-23 14:11           ` Andreas Dannenberg
2015-09-23 15:02             ` Sebastian Reichel
2015-09-23 18:32               ` Andreas Dannenberg
2015-09-23 18:53                 ` Sebastian Reichel
2015-09-23 19:47                   ` Andreas Dannenberg
2015-09-18 21:39 ` [PATCH v5 10/11] power: bq24257: Add various device-specific sysfs properties Andreas Dannenberg
2015-09-18 21:39 ` [PATCH v5 11/11] power: bq24257: Add platform data based initialization Andreas Dannenberg
2015-09-22 19:29   ` Sebastian Reichel
2015-09-22 19:31 ` [PATCH v5 00/11] power: bq24257: Add support for bq24250/bq24251 Sebastian Reichel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150922193719.GD9949@earth \
    --to=sre@kernel.org \
    --cc=dannenberg@ti.com \
    --cc=dbaryshkov@gmail.com \
    --cc=devicetree@vger.kernel.org \
    --cc=dwmw2@infradead.org \
    --cc=k.kozlowski@samsung.com \
    --cc=laurentiu.palcu@intel.com \
    --cc=linux-pm@vger.kernel.org \
    --cc=ramakrishna.pallala@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.