linux-pm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Hans de Goede <hdegoede@redhat.com>
To: Liam Breck <liam@networkimprov.net>
Cc: Sebastian Reichel <sre@kernel.org>, Takashi Iwai <tiwai@suse.de>,
	linux-pm@vger.kernel.org, Liam Breck <kernel@networkimprov.net>,
	Tony Lindgren <tony@atomide.com>
Subject: Re: [PATCH v2 4/7] power: supply: bq24190_charger: Never reset the charger chip
Date: Thu, 23 Mar 2017 09:16:05 +0100	[thread overview]
Message-ID: <0596c651-8009-d103-e02f-4b709cbfb9b3@redhat.com> (raw)
In-Reply-To: <CAKvHMgQ0XCuYg6MG4x+gouNPSoNKvmpj5x79_J_3PxnGKZkfUw@mail.gmail.com>

Hi,

On 22-03-17 19:41, Liam Breck wrote:
> On Wed, Mar 22, 2017 at 7:55 AM, Hans de Goede <hdegoede@redhat.com> wrote:
>> Resetting the charger should never be necessary it should always have
>> sane values programmed. If it is running with invalid values while we
>> are not running (system turned off or suspended) there is a big problem
>> as that may lead to overcharging the battery.
>>
>> The reset in suspend() is meant to put the charger back into default
>> mode, but this is not necessary and not a good idea. If the charger has
>> been programmed with a higher max charge_current / charge_voltage then
>> putting it back in default-mode will reset those to the safe power-on
>> defaults, leading to slower charging, or charging to a lower voltage
>> (and thus not using the full capacity) while suspended which is
>> undesirable. Reprogramming the max charge_current / charge_voltage
>> after the reset will not help here as that will put the charger back
>> in host mode and start the i2c watchdog if the host then does not do
>> anything for 40s (iow if we're suspended for more then 40s) the watchdog
>> expires resetting the device to default-mode, including resetting all
>> the registers to there safe power-on defaults. So the only way to keep
>> using custom charge settings while suspending is to keep the charger in
>> its normal running state with the i2c watchdog disabled. This is fine
>> as the charger will still automatically switch from constant current
>> to constant voltage and stop charging when the battery is full.
>>
>> Besides never being necessary resetting the charger also causes problems
>> on systems where the charge voltage limit is set higher then the reset
>> value, if this is the case and the charger is reset while charging and
>> the battery voltage is between the 2 voltages, then about half the time
>> the charger gets confused and claims to be charging (REG08 contains 0x64)
>> but in reality the charger has decoupled itself from VBUS (Q1 off) and
>> is drawing 0A from VBUS, leaving the system running from the battery.
>>
>> Cc: Liam Breck <kernel@networkimprov.net>
>> Cc: Tony Lindgren <tony@atomide.com>
>> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
>> ---
>> Changes in v2:
>> -This is a new patch in v2 of this patch-set
>> ---
>>  drivers/power/supply/bq24190_charger.c | 58 ----------------------------------
>>  1 file changed, 58 deletions(-)
>>
>> diff --git a/drivers/power/supply/bq24190_charger.c b/drivers/power/supply/bq24190_charger.c
>> index 7a2a496..b535f24 100644
>> --- a/drivers/power/supply/bq24190_charger.c
>> +++ b/drivers/power/supply/bq24190_charger.c
>> @@ -526,40 +526,6 @@ static int bq24190_set_mode_host(struct bq24190_dev_info *bdi)
>>         return bq24190_write(bdi, BQ24190_REG_CTTC, v);
>>  }
>>
>> -static int bq24190_register_reset(struct bq24190_dev_info *bdi)
>> -{
>> -       int ret, limit = 100;
>> -       u8 v;
>> -
>> -       /* Reset the registers */
>> -       ret = bq24190_write_mask(bdi, BQ24190_REG_POC,
>> -                       BQ24190_REG_POC_RESET_MASK,
>> -                       BQ24190_REG_POC_RESET_SHIFT,
>> -                       0x1);
>> -       if (ret < 0)
>> -               return ret;
>> -
>> -       /* Reset bit will be cleared by hardware so poll until it is */
>> -       do {
>> -               ret = bq24190_read_mask(bdi, BQ24190_REG_POC,
>> -                               BQ24190_REG_POC_RESET_MASK,
>> -                               BQ24190_REG_POC_RESET_SHIFT,
>> -                               &v);
>> -               if (ret < 0)
>> -                       return ret;
>> -
>> -               if (!v)
>> -                       break;
>> -
>> -               udelay(10);
>> -       } while (--limit);
>> -
>> -       if (!limit)
>> -               return -EIO;
>> -
>> -       return 0;
>> -}
>
> Let's leave this in with __maybe_unused.

I don't like leaving dead code around and bringing it back from git
history is quite easy.

Regards,

Hans


>
>>  /* Charger power supply property routines */
>>
>>  static int bq24190_charger_get_charge_type(struct bq24190_dev_info *bdi,
>> @@ -1380,10 +1346,6 @@ static int bq24190_hw_init(struct bq24190_dev_info *bdi)
>>                 return -ENODEV;
>>         }
>>
>> -       ret = bq24190_register_reset(bdi);
>> -       if (ret < 0)
>> -               return ret;
>> -
>>         ret = bq24190_set_mode_host(bdi);
>>         if (ret < 0)
>>                 return ret;
>> @@ -1534,7 +1496,6 @@ static int bq24190_remove(struct i2c_client *client)
>>                 pm_runtime_put_noidle(bdi->dev);
>>         }
>>
>> -       bq24190_register_reset(bdi);
>>         bq24190_sysfs_remove_group(bdi);
>>         power_supply_unregister(bdi->battery);
>>         power_supply_unregister(bdi->charger);
>> @@ -1577,23 +1538,6 @@ static __maybe_unused int bq24190_runtime_resume(struct device *dev)
>>
>>  static __maybe_unused int bq24190_pm_suspend(struct device *dev)
>>  {
>> -       struct i2c_client *client = to_i2c_client(dev);
>> -       struct bq24190_dev_info *bdi = i2c_get_clientdata(client);
>> -       int error;
>> -
>> -       error = pm_runtime_get_sync(bdi->dev);
>> -       if (error < 0) {
>> -               dev_warn(bdi->dev, "pm_runtime_get failed: %i\n", error);
>> -               pm_runtime_put_noidle(bdi->dev);
>> -       }
>> -
>> -       bq24190_register_reset(bdi);
>> -
>> -       if (error >= 0) {
>> -               pm_runtime_mark_last_busy(bdi->dev);
>> -               pm_runtime_put_autosuspend(bdi->dev);
>> -       }
>> -
>>         return 0;
>>  }
>>
>> @@ -1612,8 +1556,6 @@ static __maybe_unused int bq24190_pm_resume(struct device *dev)
>>                 pm_runtime_put_noidle(bdi->dev);
>>         }
>>
>> -       bq24190_register_reset(bdi);
>> -       bq24190_set_mode_host(bdi);
>>         bq24190_read(bdi, BQ24190_REG_SS, &bdi->ss_reg);
>>
>>         if (error >= 0) {
>> --
>> 2.9.3
>>

  reply	other threads:[~2017-03-23  8:24 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-22 14:55 [PATCH 0/7] power: supply: bq24190_charger: Various fixes + extcon support Hans de Goede
2017-03-22 14:55 ` [PATCH v2 1/7] power: supply: bq24190_charger: Use i2c-core irq-mapping code Hans de Goede
2017-03-22 15:37   ` Tony Lindgren
2017-03-23 11:11   ` Sebastian Reichel
2017-03-24 23:44   ` Liam Breck
2017-03-22 14:55 ` [PATCH v2 2/7] power: supply: bq24190_charger: Add support for bq24192i Hans de Goede
2017-03-23 11:12   ` Sebastian Reichel
2017-03-24 23:34   ` Liam Breck
2017-03-22 14:55 ` [PATCH v2 3/7] power: supply: bq24190_charger: Use extcon to determine ilimit, 5v boost Hans de Goede
2017-03-22 15:50   ` Tony Lindgren
2017-03-22 15:57     ` Hans de Goede
2017-03-22 18:50   ` Liam Breck
2017-03-23  8:31     ` Hans de Goede
2017-03-22 14:55 ` [PATCH v2 4/7] power: supply: bq24190_charger: Never reset the charger chip Hans de Goede
2017-03-22 15:43   ` Tony Lindgren
2017-03-22 15:45     ` Hans de Goede
2017-03-22 15:51       ` Tony Lindgren
2017-03-23  7:16       ` Liam Breck
2017-03-23  8:44         ` Hans de Goede
2017-03-23 11:36           ` Liam Breck
2017-03-23 11:44             ` Hans de Goede
2017-03-23 11:47               ` Liam Breck
2017-03-23 11:48                 ` Hans de Goede
2017-03-23 20:33               ` Liam Breck
2017-03-23 22:01                 ` Hans de Goede
2017-03-24 23:49                   ` Liam Breck
2017-03-22 18:41   ` Liam Breck
2017-03-23  8:16     ` Hans de Goede [this message]
2017-03-23 10:59     ` Sebastian Reichel
2017-03-23 11:20   ` Sebastian Reichel
2017-03-22 14:55 ` [PATCH v2 5/7] power: supply: bq24190_charger: Don't spam the logs on charger plug / unplug Hans de Goede
2017-03-22 15:44   ` Tony Lindgren
2017-03-23 11:17   ` Sebastian Reichel
2017-03-23 13:34   ` Liam Breck
2017-03-23 21:31   ` Liam Breck
2017-03-23 22:02     ` Hans de Goede
2017-03-23 22:24       ` Liam Breck
2017-03-24  9:25         ` Sebastian Reichel
2017-03-24 23:31           ` Liam Breck
2017-03-24 10:29   ` [PATCH] power: bq24190_charger: Limit over/under voltage fault logging Liam Breck
2017-03-25 11:17     ` Hans de Goede
2017-03-25 11:24   ` [PATCH v2] " Liam Breck
2017-03-26  8:44     ` Hans de Goede
2017-03-26 10:56       ` Liam Breck
2017-03-26 11:04         ` Hans de Goede
2017-03-29 16:33           ` Tony Lindgren
2017-03-22 14:55 ` [PATCH v2 6/7] power: supply: bq24190_charger: Cleanup error-exit labels in probe() Hans de Goede
2017-03-22 15:45   ` Tony Lindgren
2017-03-22 19:09   ` Liam Breck
2017-03-23  8:37     ` Hans de Goede
2017-03-24 23:58       ` Liam Breck
2017-03-23 11:21   ` Sebastian Reichel
2017-03-23 11:46     ` Hans de Goede
2017-03-22 14:55 ` [PATCH v2 7/7] power: supply: bq24190_charger: Remove battery power_supply device Hans de Goede
2017-03-25  0:19   ` Liam Breck

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=0596c651-8009-d103-e02f-4b709cbfb9b3@redhat.com \
    --to=hdegoede@redhat.com \
    --cc=kernel@networkimprov.net \
    --cc=liam@networkimprov.net \
    --cc=linux-pm@vger.kernel.org \
    --cc=sre@kernel.org \
    --cc=tiwai@suse.de \
    --cc=tony@atomide.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).