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
>>
next prev parent 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).