From: Daniel Mack <daniel@caiaq.de>
To: linux-kernel@vger.kernel.org
Cc: kay.sievers@vrfy.org, gregkh@suse.de, dwmw2@infradead.org,
broonie@opensource.wolfsonmicro.com, len.brown@intel.com,
astarikovskiy@suse.de, mreimer@vpop.net, zbr@ioremap.net,
tj@kernel.org, Daniel Mack <daniel@caiaq.de>,
Anton Vorontsov <avorontsov@ru.mvista.com>
Subject: [PATCH 3/3] power/ds2760_battery: make charge_now and charge_full writeable
Date: Tue, 18 May 2010 21:49:53 +0200 [thread overview]
Message-ID: <1274212193-16669-3-git-send-email-daniel@caiaq.de> (raw)
In-Reply-To: <20100517194016.GA12147@oksana.dev.rtsoft.ru>
For userspace tools and daemons, it might be necessary to adjust
the charge_now and charge_full properties of the ds2760 battery monitor,
for example for unavoidable corrections due to aging batteries.
Signed-off-by: Daniel Mack <daniel@caiaq.de>
Cc: Anton Vorontsov <avorontsov@ru.mvista.com>
Cc: Matt Reimer <mreimer@vpop.net>
Cc: Evgeniy Polyakov <zbr@ioremap.net>
Cc: Tejun Heo <tj@kernel.org>
Cc: David Woodhouse <dwmw2@infradead.org>
Cc: Alexey Starikovskiy <astarikovskiy@suse.de>
Cc: Len Brown <len.brown@intel.com>
Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>
---
drivers/power/ds2760_battery.c | 64 ++++++++++++++++++++++++++++++++++++++++
1 files changed, 64 insertions(+), 0 deletions(-)
diff --git a/drivers/power/ds2760_battery.c b/drivers/power/ds2760_battery.c
index 3bf8d1f..4d3b272 100644
--- a/drivers/power/ds2760_battery.c
+++ b/drivers/power/ds2760_battery.c
@@ -304,6 +304,28 @@ static void ds2760_battery_write_rated_capacity(struct ds2760_device_info *di,
w1_ds2760_recall_eeprom(di->w1_dev, DS2760_EEPROM_BLOCK1);
}
+static void ds2760_battery_write_active_full(struct ds2760_device_info *di,
+ int active_full)
+{
+ unsigned char tmp[2] = {
+ active_full >> 8,
+ active_full & 0xff
+ };
+
+ if (tmp[0] == di->raw[DS2760_ACTIVE_FULL] &&
+ tmp[1] == di->raw[DS2760_ACTIVE_FULL + 1])
+ return;
+
+ w1_ds2760_write(di->w1_dev, tmp, DS2760_ACTIVE_FULL, sizeof(tmp));
+ w1_ds2760_store_eeprom(di->w1_dev, DS2760_EEPROM_BLOCK0);
+ w1_ds2760_recall_eeprom(di->w1_dev, DS2760_EEPROM_BLOCK0);
+
+ /* Write to the di->raw[] buffer directly - the DS2760_ACTIVE_FULL
+ * values won't be read back by ds2760_battery_read_status() */
+ di->raw[DS2760_ACTIVE_FULL] = tmp[0];
+ di->raw[DS2760_ACTIVE_FULL + 1] = tmp[1];
+}
+
static void ds2760_battery_work(struct work_struct *work)
{
struct ds2760_device_info *di = container_of(work,
@@ -426,6 +448,45 @@ static int ds2760_battery_get_property(struct power_supply *psy,
return 0;
}
+static int ds2760_battery_set_property(struct power_supply *psy,
+ enum power_supply_property psp,
+ const union power_supply_propval *val)
+{
+ struct ds2760_device_info *di = to_ds2760_device_info(psy);
+
+ switch (psp) {
+ case POWER_SUPPLY_PROP_CHARGE_FULL:
+ /* the interface counts in uAh, convert the value */
+ ds2760_battery_write_active_full(di, val->intval / 1000L);
+ break;
+
+ case POWER_SUPPLY_PROP_CHARGE_NOW:
+ /* ds2760_battery_set_current_accum() does the conversion */
+ ds2760_battery_set_current_accum(di, val->intval);
+ break;
+
+ default:
+ return -EPERM;
+ }
+
+ return 0;
+}
+
+static int ds2760_battery_property_is_writeable(struct power_supply *psy,
+ enum power_supply_property psp)
+{
+ switch (psp) {
+ case POWER_SUPPLY_PROP_CHARGE_FULL:
+ case POWER_SUPPLY_PROP_CHARGE_NOW:
+ return 1;
+
+ default:
+ break;
+ }
+
+ return 0;
+}
+
static enum power_supply_property ds2760_battery_props[] = {
POWER_SUPPLY_PROP_STATUS,
POWER_SUPPLY_PROP_VOLTAGE_NOW,
@@ -460,6 +521,9 @@ static int ds2760_battery_probe(struct platform_device *pdev)
di->bat.properties = ds2760_battery_props;
di->bat.num_properties = ARRAY_SIZE(ds2760_battery_props);
di->bat.get_property = ds2760_battery_get_property;
+ di->bat.set_property = ds2760_battery_set_property;
+ di->bat.property_is_writeable =
+ ds2760_battery_property_is_writeable;
di->bat.set_charged = ds2760_battery_set_charged;
di->bat.external_power_changed =
ds2760_battery_external_power_changed;
--
1.7.1
next prev parent reply other threads:[~2010-05-18 19:51 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-11 16:38 [PATCH 1/3] pda_power: add support for writeable properties Daniel Mack
2010-05-11 16:38 ` [PATCH 2/3] power/ds2760_battery: make charge_now and charge_full writeable Daniel Mack
2010-05-11 16:44 ` Daniel Mack
2010-05-11 17:20 ` Anton Vorontsov
2010-05-11 17:28 ` Daniel Mack
2010-05-11 18:05 ` Anton Vorontsov
2010-05-18 18:24 ` Daniel Mack
2010-05-11 16:38 ` [PATCH 3/3] power/ds2760_battery: use factor of 20 for rated_capacity Daniel Mack
2010-05-11 17:19 ` Anton Vorontsov
2010-05-11 17:25 ` Daniel Mack
2010-05-11 17:47 ` Anton Vorontsov
2010-05-11 17:47 ` [PATCH 1/3] pda_power: add support for writeable properties Anton Vorontsov
2010-05-11 17:58 ` Daniel Mack
2010-05-11 18:23 ` Anton Vorontsov
2010-05-11 22:28 ` Daniel Mack
2010-05-12 18:15 ` [PATCH] Introduce {sysfs,device}_create_file_mode Anton Vorontsov
2010-05-12 18:18 ` Daniel Mack
2010-05-12 18:38 ` Greg KH
2010-05-12 19:08 ` Anton Vorontsov
2010-05-12 19:12 ` Kay Sievers
2010-05-12 19:19 ` Greg KH
2010-05-12 19:39 ` Anton Vorontsov
2010-05-12 19:30 ` Anton Vorontsov
2010-05-13 9:33 ` Daniel Mack
2010-05-17 19:40 ` [PATCH] power_supply: Use attribute groups Anton Vorontsov
2010-05-18 17:35 ` Daniel Mack
2010-05-18 19:49 ` [PATCH 1/3] " Daniel Mack
2010-05-18 19:49 ` [PATCH 2/3] pda_power: add support for writeable properties Daniel Mack
2010-05-18 19:56 ` Greg KH
2010-05-18 20:30 ` [PATCH] power/ds2760_battery: document ABI change Daniel Mack
2010-05-19 8:34 ` Anton Vorontsov
2010-05-18 19:49 ` Daniel Mack [this message]
2010-05-11 18:32 ` [PATCH 1/3] pda_power: add support for writeable properties Anton Vorontsov
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=1274212193-16669-3-git-send-email-daniel@caiaq.de \
--to=daniel@caiaq.de \
--cc=astarikovskiy@suse.de \
--cc=avorontsov@ru.mvista.com \
--cc=broonie@opensource.wolfsonmicro.com \
--cc=dwmw2@infradead.org \
--cc=gregkh@suse.de \
--cc=kay.sievers@vrfy.org \
--cc=len.brown@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mreimer@vpop.net \
--cc=tj@kernel.org \
--cc=zbr@ioremap.net \
/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.