From: Lubomir Rintel <lkundrak@v3.sk>
To: Mark Brown <broonie@kernel.org>,
Geert Uytterhoeven <geert+renesas@glider.be>,
Darren Hart <dvhart@infradead.org>,
Andy Shevchenko <andy@infradead.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
James Cameron <quozl@laptop.org>,
Sebastian Reichel <sre@kernel.org>,
Rob Herring <robh+dt@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Eric Miao <eric.y.miao@gmail.com>,
Haojian Zhuang <haojian.zhuang@gmail.com>,
Daniel Mack <daniel@zonque.org>,
Robert Jarzmik <robert.jarzmik@free.fr>,
linux-spi@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
platform-driver-x86@vger.kernel.org, devel@driverdev.osuosl.org,
linux-pm@vger.kernel.org, Lubomir Rintel <lkundrak@v3.sk>
Subject: [PATCH v2 17/17] power: supply: olpc_battery: Add OLPC XO 1.75 support
Date: Fri, 16 Nov 2018 17:24:03 +0100 [thread overview]
Message-ID: <20181116162403.49854-18-lkundrak@v3.sk> (raw)
In-Reply-To: <20181116162403.49854-1-lkundrak@v3.sk>
The battery and the protocol are essentially the same as OLPC XO 1.5,
but the responses from the EC are LSB first.
Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
Acked-by: Pavel Machek <pavel@ucw.cz>
---
Changes since v1:
- s/s16 ecword_to_cpu/u16 ecword_to_cpu/
- s/u16 ec_byte/u16 ec_word/
drivers/power/supply/olpc_battery.c | 23 ++++++++++++++++++-----
1 file changed, 18 insertions(+), 5 deletions(-)
diff --git a/drivers/power/supply/olpc_battery.c b/drivers/power/supply/olpc_battery.c
index ec5dfb8fcb8a..898e8a6128bb 100644
--- a/drivers/power/supply/olpc_battery.c
+++ b/drivers/power/supply/olpc_battery.c
@@ -56,6 +56,7 @@ struct olpc_battery_data {
struct power_supply *olpc_bat;
char bat_serial[17];
int new_proto;
+ int little_endian;
};
/*********************************************************************
@@ -321,6 +322,14 @@ static int olpc_bat_get_voltage_max_design(union power_supply_propval *val)
return ret;
}
+static u16 ecword_to_cpu(struct olpc_battery_data *data, u16 ec_word)
+{
+ if (data->little_endian)
+ return le16_to_cpu(ec_word);
+ else
+ return be16_to_cpu(ec_word);
+}
+
/*********************************************************************
* Battery properties
*********************************************************************/
@@ -393,7 +402,7 @@ static int olpc_bat_get_property(struct power_supply *psy,
if (ret)
return ret;
- val->intval = (s16)be16_to_cpu(ec_word) * 9760L / 32;
+ val->intval = ecword_to_cpu(data, ec_word) * 9760L / 32;
break;
case POWER_SUPPLY_PROP_CURRENT_AVG:
case POWER_SUPPLY_PROP_CURRENT_NOW:
@@ -401,7 +410,7 @@ static int olpc_bat_get_property(struct power_supply *psy,
if (ret)
return ret;
- val->intval = (s16)be16_to_cpu(ec_word) * 15625L / 120;
+ val->intval = ecword_to_cpu(data, ec_word) * 15625L / 120;
break;
case POWER_SUPPLY_PROP_CAPACITY:
ret = olpc_ec_cmd(EC_BAT_SOC, NULL, 0, &ec_byte, 1);
@@ -432,21 +441,21 @@ static int olpc_bat_get_property(struct power_supply *psy,
if (ret)
return ret;
- val->intval = (s16)be16_to_cpu(ec_word) * 10 / 256;
+ val->intval = ecword_to_cpu(data, ec_word) * 10 / 256;
break;
case POWER_SUPPLY_PROP_TEMP_AMBIENT:
ret = olpc_ec_cmd(EC_AMB_TEMP, NULL, 0, (void *)&ec_word, 2);
if (ret)
return ret;
- val->intval = (int)be16_to_cpu(ec_word) * 10 / 256;
+ val->intval = (int)ecword_to_cpu(data, ec_word) * 10 / 256;
break;
case POWER_SUPPLY_PROP_CHARGE_COUNTER:
ret = olpc_ec_cmd(EC_BAT_ACR, NULL, 0, (void *)&ec_word, 2);
if (ret)
return ret;
- val->intval = (s16)be16_to_cpu(ec_word) * 6250 / 15;
+ val->intval = ecword_to_cpu(data, ec_word) * 6250 / 15;
break;
case POWER_SUPPLY_PROP_SERIAL_NUMBER:
ret = olpc_ec_cmd(EC_BAT_SERIAL, NULL, 0, (void *)&ser_buf, 8);
@@ -626,6 +635,10 @@ static int olpc_battery_probe(struct platform_device *pdev)
if (ecver > 0x44) {
/* XO 1 or 1.5 with a new EC firmware. */
data->new_proto = 1;
+ } else if (of_find_compatible_node(NULL, NULL, "olpc,xo1.75-ec")) {
+ /* XO 1.75 */
+ data->new_proto = 1;
+ data->little_endian = 1;
} else if (ecver < 0x44) {
/*
* We've seen a number of EC protocol changes; this driver
--
2.19.1
next prev parent reply other threads:[~2018-11-16 16:25 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-16 16:23 [PATCH v2 0/17] Add support for OLPC XO 1.75 Embedded Controller Lubomir Rintel
2018-11-16 16:23 ` [PATCH v2 01/17] power: supply: olpc_battery: correct the temperature units Lubomir Rintel
2018-12-05 21:05 ` Sebastian Reichel
2018-11-16 16:23 ` [PATCH v2 02/17] dt-bindings: olpc,xo1.75-ec: Add OLPC XO-1.75 EC bindings Lubomir Rintel
2018-11-17 16:03 ` Rob Herring
2018-11-16 16:23 ` [PATCH v2 03/17] Platform: OLPC: Remove an unused include Lubomir Rintel
2018-11-16 16:23 ` [PATCH v2 04/17] Revert "platform/olpc: Make ec explicitly non-modular" Lubomir Rintel
2018-11-16 16:23 ` [PATCH v2 05/17] Platform: OLPC: Move OLPC config symbol out of x86 tree Lubomir Rintel
2018-11-16 16:23 ` [PATCH v2 06/17] Platform: OLPC: Add XO-1.75 EC driver Lubomir Rintel
2018-12-02 23:13 ` Darren Hart
2018-12-03 7:54 ` Andy Shevchenko
2018-11-16 16:23 ` [PATCH v2 07/17] Platform: OLPC: Avoid a warning if the EC didn't register yet Lubomir Rintel
2018-12-02 23:15 ` Darren Hart
2018-11-16 16:23 ` [PATCH v2 08/17] Platform: OLPC: Move EC-specific functionality out from x86 Lubomir Rintel
2018-11-16 16:23 ` [PATCH v2 09/17] Platform: OLPC: Use BIT() and GENMASK() for event masks Lubomir Rintel
2018-11-16 16:23 ` [PATCH v2 10/17] Platform: OLPC: add a regulator for the DCON Lubomir Rintel
2018-11-16 16:23 ` [PATCH v2 11/17] dt-bindings: olpc_battery: Add XO-1.5 battery Lubomir Rintel
2018-12-05 20:53 ` Sebastian Reichel
2018-11-16 16:23 ` [PATCH v2 12/17] x86, olpc: Use a correct version when making up a battery node Lubomir Rintel
2018-11-16 16:23 ` [PATCH v2 13/17] power: supply: olpc_battery: Use DT to get battery version Lubomir Rintel
2018-12-02 23:24 ` Darren Hart
2018-12-05 20:54 ` Sebastian Reichel
2019-01-07 18:25 ` Lubomir Rintel
2018-11-16 16:24 ` [PATCH v2 14/17] power: supply: olpc_battery: Move priv data to a struct Lubomir Rintel
2018-12-05 20:57 ` Sebastian Reichel
2018-11-16 16:24 ` [PATCH v2 15/17] power: supply: olpc_battery: Use devm_power_supply_register() Lubomir Rintel
2018-12-05 20:58 ` Sebastian Reichel
2018-11-16 16:24 ` [PATCH v2 16/17] power: supply: olpc_battery: Avoid using platform_info Lubomir Rintel
2018-12-05 20:59 ` Sebastian Reichel
2018-11-16 16:24 ` Lubomir Rintel [this message]
2018-12-02 23:34 ` [PATCH v2 17/17] power: supply: olpc_battery: Add OLPC XO 1.75 support Darren Hart
2019-01-07 18:02 ` Lubomir Rintel
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=20181116162403.49854-18-lkundrak@v3.sk \
--to=lkundrak@v3.sk \
--cc=andy@infradead.org \
--cc=broonie@kernel.org \
--cc=daniel@zonque.org \
--cc=devel@driverdev.osuosl.org \
--cc=devicetree@vger.kernel.org \
--cc=dvhart@infradead.org \
--cc=eric.y.miao@gmail.com \
--cc=geert+renesas@glider.be \
--cc=gregkh@linuxfoundation.org \
--cc=haojian.zhuang@gmail.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-spi@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=platform-driver-x86@vger.kernel.org \
--cc=quozl@laptop.org \
--cc=robert.jarzmik@free.fr \
--cc=robh+dt@kernel.org \
--cc=sre@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;
as well as URLs for NNTP newsgroup(s).