From: Julian Andres Klode <jak@jak-linux.org>
To: Henrique de Moraes Holschuh <ibm-acpi@hmh.eng.br>,
Matthew Garrett <matthew.garrett@nebula.com>
Cc: Julian Andres Klode <jak@jak-linux.org>,
ibm-acpi-devel@lists.sourceforge.net (open list:THINKPAD ACPI
EXT...),
platform-driver-x86@vger.kernel.org (open list:THINKPAD ACPI
EXT...), linux-kernel@vger.kernel.org (open list)
Subject: [PATCH 4/4] thinkpad_acpi: battery: Add inhibit_charge_minutes attribute
Date: Mon, 11 Nov 2013 14:56:33 +0100 [thread overview]
Message-ID: <1384178195-12218-5-git-send-email-jak@jak-linux.org> (raw)
In-Reply-To: <1384178195-12218-1-git-send-email-jak@jak-linux.org>
This should be considered experimental. There seem to be to ways to
inhibit charging, one globally using peak shift state, and one using
a battery-specific inhibit charge command. The latter is implemented
here. Setting a permanent timeout is not supported currently.
Reading the timeout is not supported because the ACPI call needed
to read the value is not documented/reverse-engineered yet.
Signed-off-by: Julian Andres Klode <jak@jak-linux.org>
---
Documentation/laptops/thinkpad-acpi.txt | 12 ++++++++++++
drivers/platform/x86/thinkpad_acpi.c | 34 ++++++++++++++++++++++++++++++++-
2 files changed, 45 insertions(+), 1 deletion(-)
diff --git a/Documentation/laptops/thinkpad-acpi.txt b/Documentation/laptops/thinkpad-acpi.txt
index 8ec1898..e639f72 100644
--- a/Documentation/laptops/thinkpad-acpi.txt
+++ b/Documentation/laptops/thinkpad-acpi.txt
@@ -1378,6 +1378,18 @@ battery sysfs attribute: force_discharge_ac_break
Break the discharging when the AC disconnects (0 or 1)
+battery sysfs attribute: inhibit_charge_minutes
+
+ Inhibit charging for the specified amount of minutes. This attribute
+ may not be very precise, the charging may start again some seconds
+ earlier than requested. It's also write-only until someone figured out
+ how reading that value works.
+
+ Values range: -1 to 720
+
+ The value -1 is supposed to mean permanently.
+
+
Multiple Commands, Module Parameters
------------------------------------
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index 6b0521a..a9cba4e 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -8358,7 +8358,7 @@ static struct ibm_struct fan_driver_data = {
/* Modify battery_init() if you modify them */
#define BATTERY_MAX_COUNT 3
-#define BATTERY_MAX_ATTRS 4
+#define BATTERY_MAX_ATTRS 5
static struct battery {
char name[3 + 1 + 1];
@@ -8518,6 +8518,31 @@ static ssize_t battery_force_discharge_ac_break_store(struct device *dev,
return count;
}
+static ssize_t battery_inhibit_charge_minutes_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t count)
+{
+ int bat = battery_attribute_get_battery(attr);
+ int res = -EINVAL;
+ int value;
+
+ res = kstrtoint(buf, 0, &value);
+ if (res || value > 720 || value < -1)
+ return res ? res : -EINVAL;
+
+ if (value == -1)
+ value = 1;
+ else
+ value = (value << 8) | (value & 1);
+
+ value |= (bat << 4);
+
+ if (!hkey_handle || !acpi_evalf(hkey_handle, &res, "BICS",
+ "dd", (int) value) || res < 0)
+ return -EIO;
+ return count;
+}
+
static int __init battery_init(struct ibm_init_struct *iibm)
{
int res;
@@ -8577,6 +8602,13 @@ static int __init battery_init(struct ibm_init_struct *iibm)
battery_force_discharge_ac_break_store),
.var = (void *) (unsigned long) (i + 1)
};
+ batteries[i].attributes[j++] = (struct dev_ext_attribute) {
+ .attr = __ATTR(inhibit_charge_minutes,
+ S_IWUSR,
+ NULL,
+ battery_inhibit_charge_minutes_store),
+ .var = (void *) (unsigned long) (i + 1)
+ };
strncpy(batteries[i].name, "BAT", 3);
batteries[i].name[3] = '0' + i;
--
1.8.4.2
next prev parent reply other threads:[~2013-11-11 13:57 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-11 13:56 [PATCH 0/4] thinkpad_acpi: Add support for controlling charge thresholds Julian Andres Klode
2013-11-11 13:56 ` [PATCH 1/4] " Julian Andres Klode
2013-11-13 13:50 ` Julian Andres Klode
2013-12-30 13:29 ` Julian Andres Klode
2013-12-30 21:58 ` Henrique de Moraes Holschuh
2013-12-30 22:40 ` Henrique de Moraes Holschuh
2013-12-31 0:01 ` Julian Andres Klode
2013-12-31 12:12 ` [ibm-acpi-devel] " Henrique de Moraes Holschuh
2013-12-31 22:46 ` Julian Andres Klode
2014-04-06 12:14 ` Julian Andres Klode
2014-04-09 18:00 ` Henrique de Moraes Holschuh
2013-11-11 13:56 ` [PATCH 2/4] thinkpad_acpi: battery: Add force_discharge attribute Julian Andres Klode
2013-11-11 13:56 ` [PATCH 3/4] thinkpad_acpi: battery: Add force_discharge_ac_break attribute Julian Andres Klode
2013-11-11 13:56 ` Julian Andres Klode [this message]
2013-11-25 14:59 ` [PATCH 0/4] thinkpad_acpi: Add support for controlling charge thresholds Julian Andres Klode
2013-12-28 21:10 ` Julian Andres Klode
2013-12-28 22:10 ` Henrique de Moraes Holschuh
2013-12-30 13:26 ` Julian Andres Klode
2013-12-30 20:06 ` Henrique de Moraes Holschuh
2014-01-20 21:22 ` Pavel Machek
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=1384178195-12218-5-git-send-email-jak@jak-linux.org \
--to=jak@jak-linux.org \
--cc=ibm-acpi-devel@lists.sourceforge.net \
--cc=ibm-acpi@hmh.eng.br \
--cc=linux-kernel@vger.kernel.org \
--cc=matthew.garrett@nebula.com \
--cc=platform-driver-x86@vger.kernel.org \
/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