All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lubomir Rintel <lkundrak@v3.sk>
To: Andy Shevchenko <andy@infradead.org>,
	Darren Hart <dvhart@infradead.org>,
	platform-driver-x86@vger.kernel.org,
	Russell King <linux@armlinux.org.uk>
Cc: James Cameron <quozl@laptop.org>,
	Mark Rutland <mark.rutland@arm.com>, Pavel Machek <pavel@ucw.cz>,
	Rob Herring <robh+dt@kernel.org>,
	Sebastian Reichel <sre@kernel.org>,
	x86@kernel.org, linux-arm-kernel@lists.infradead.org,
	devicetree@vger.kernel.org, linux-pm@vger.kernel.org,
	linux-kernel@vger.kernel.org, Lubomir Rintel <lkundrak@v3.sk>,
	Sebastian Reichel <sebastian.reichel@collabora.com>
Subject: [PATCH v4 14/15] power: supply: olpc_battery: Avoid using platform_info
Date: Tue,  8 Jan 2019 18:58:17 +0100	[thread overview]
Message-ID: <20190108175818.705110-15-lkundrak@v3.sk> (raw)
In-Reply-To: <20190108175818.705110-1-lkundrak@v3.sk>

This wouldn't work on the DT-based ARM platform. Let's read the EC version
directly from the EC driver instead.

This makes the driver no longer x86 specific.

Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
Acked-by: Pavel Machek <pavel@ucw.cz>
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>

---
Changes since v2:
- Move the priv data allocation hunk from this patch to a proper place

Changes since v1:
- Use uint8_t instead of unsigned char [1] for ecver

 drivers/power/supply/Kconfig        |  2 +-
 drivers/power/supply/olpc_battery.c | 27 ++++++++++++++++++---------
 2 files changed, 19 insertions(+), 10 deletions(-)

diff --git a/drivers/power/supply/Kconfig b/drivers/power/supply/Kconfig
index e901b9879e7e..67a3bb26da39 100644
--- a/drivers/power/supply/Kconfig
+++ b/drivers/power/supply/Kconfig
@@ -151,7 +151,7 @@ config BATTERY_PMU
 
 config BATTERY_OLPC
 	tristate "One Laptop Per Child battery"
-	depends on X86_32 && OLPC
+	depends on OLPC
 	help
 	  Say Y to enable support for the battery on the OLPC laptop.
 
diff --git a/drivers/power/supply/olpc_battery.c b/drivers/power/supply/olpc_battery.c
index 0c9f7ce6b26b..8ebb4284cf05 100644
--- a/drivers/power/supply/olpc_battery.c
+++ b/drivers/power/supply/olpc_battery.c
@@ -20,8 +20,6 @@
 #include <linux/jiffies.h>
 #include <linux/sched.h>
 #include <linux/olpc-ec.h>
-#include <asm/olpc.h>
-
 
 #define EC_BAT_VOLTAGE	0x10	/* uint16_t,	*9.76/32,    mV   */
 #define EC_BAT_CURRENT	0x11	/* int16_t,	*15.625/120, mA   */
@@ -57,6 +55,7 @@ struct olpc_battery_data {
 	struct power_supply *olpc_ac;
 	struct power_supply *olpc_bat;
 	char bat_serial[17];
+	int new_proto;
 };
 
 /*********************************************************************
@@ -100,7 +99,7 @@ static const struct power_supply_desc olpc_ac_desc = {
 static int olpc_bat_get_status(struct olpc_battery_data *data,
 		union power_supply_propval *val, uint8_t ec_byte)
 {
-	if (olpc_platform_info.ecver > 0x44) {
+	if (data->new_proto) {
 		if (ec_byte & (BAT_STAT_CHARGING | BAT_STAT_TRICKLE))
 			val->intval = POWER_SUPPLY_STATUS_CHARGING;
 		else if (ec_byte & BAT_STAT_DISCHARGING)
@@ -608,19 +607,29 @@ static int olpc_battery_probe(struct platform_device *pdev)
 	struct power_supply_config psy_cfg = {};
 	struct olpc_battery_data *data;
 	uint8_t status;
+	uint8_t ecver;
+	int ret;
 
 	data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;
 	platform_set_drvdata(pdev, data);
 
-	/*
-	 * We've seen a number of EC protocol changes; this driver requires
-	 * the latest EC protocol, supported by 0x44 and above.
-	 */
-	if (olpc_platform_info.ecver < 0x44) {
+	/* See if the EC is already there and get the EC revision */
+	ret = olpc_ec_cmd(EC_FIRMWARE_REV, NULL, 0, &ecver, 1);
+	if (ret)
+		return ret;
+
+	if (ecver > 0x44) {
+		/* XO 1 or 1.5 with a new EC firmware. */
+		data->new_proto = 1;
+	} else if (ecver < 0x44) {
+		/*
+		 * We've seen a number of EC protocol changes; this driver
+		 * requires the latest EC protocol, supported by 0x44 and above.
+		 */
 		printk(KERN_NOTICE "OLPC EC version 0x%02x too old for "
-			"battery driver.\n", olpc_platform_info.ecver);
+			"battery driver.\n", ecver);
 		return -ENXIO;
 	}
 
-- 
2.20.1


WARNING: multiple messages have this Message-ID (diff)
From: Lubomir Rintel <lkundrak@v3.sk>
To: Andy Shevchenko <andy@infradead.org>,
	Darren Hart <dvhart@infradead.org>,
	platform-driver-x86@vger.kernel.org,
	Russell King <linux@armlinux.org.uk>
Cc: Mark Rutland <mark.rutland@arm.com>,
	devicetree@vger.kernel.org, James Cameron <quozl@laptop.org>,
	linux-pm@vger.kernel.org, x86@kernel.org,
	Sebastian Reichel <sre@kernel.org>,
	linux-kernel@vger.kernel.org, Lubomir Rintel <lkundrak@v3.sk>,
	Rob Herring <robh+dt@kernel.org>, Pavel Machek <pavel@ucw.cz>,
	Sebastian Reichel <sebastian.reichel@collabora.com>,
	linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 14/15] power: supply: olpc_battery: Avoid using platform_info
Date: Tue,  8 Jan 2019 18:58:17 +0100	[thread overview]
Message-ID: <20190108175818.705110-15-lkundrak@v3.sk> (raw)
In-Reply-To: <20190108175818.705110-1-lkundrak@v3.sk>

This wouldn't work on the DT-based ARM platform. Let's read the EC version
directly from the EC driver instead.

This makes the driver no longer x86 specific.

Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
Acked-by: Pavel Machek <pavel@ucw.cz>
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>

---
Changes since v2:
- Move the priv data allocation hunk from this patch to a proper place

Changes since v1:
- Use uint8_t instead of unsigned char [1] for ecver

 drivers/power/supply/Kconfig        |  2 +-
 drivers/power/supply/olpc_battery.c | 27 ++++++++++++++++++---------
 2 files changed, 19 insertions(+), 10 deletions(-)

diff --git a/drivers/power/supply/Kconfig b/drivers/power/supply/Kconfig
index e901b9879e7e..67a3bb26da39 100644
--- a/drivers/power/supply/Kconfig
+++ b/drivers/power/supply/Kconfig
@@ -151,7 +151,7 @@ config BATTERY_PMU
 
 config BATTERY_OLPC
 	tristate "One Laptop Per Child battery"
-	depends on X86_32 && OLPC
+	depends on OLPC
 	help
 	  Say Y to enable support for the battery on the OLPC laptop.
 
diff --git a/drivers/power/supply/olpc_battery.c b/drivers/power/supply/olpc_battery.c
index 0c9f7ce6b26b..8ebb4284cf05 100644
--- a/drivers/power/supply/olpc_battery.c
+++ b/drivers/power/supply/olpc_battery.c
@@ -20,8 +20,6 @@
 #include <linux/jiffies.h>
 #include <linux/sched.h>
 #include <linux/olpc-ec.h>
-#include <asm/olpc.h>
-
 
 #define EC_BAT_VOLTAGE	0x10	/* uint16_t,	*9.76/32,    mV   */
 #define EC_BAT_CURRENT	0x11	/* int16_t,	*15.625/120, mA   */
@@ -57,6 +55,7 @@ struct olpc_battery_data {
 	struct power_supply *olpc_ac;
 	struct power_supply *olpc_bat;
 	char bat_serial[17];
+	int new_proto;
 };
 
 /*********************************************************************
@@ -100,7 +99,7 @@ static const struct power_supply_desc olpc_ac_desc = {
 static int olpc_bat_get_status(struct olpc_battery_data *data,
 		union power_supply_propval *val, uint8_t ec_byte)
 {
-	if (olpc_platform_info.ecver > 0x44) {
+	if (data->new_proto) {
 		if (ec_byte & (BAT_STAT_CHARGING | BAT_STAT_TRICKLE))
 			val->intval = POWER_SUPPLY_STATUS_CHARGING;
 		else if (ec_byte & BAT_STAT_DISCHARGING)
@@ -608,19 +607,29 @@ static int olpc_battery_probe(struct platform_device *pdev)
 	struct power_supply_config psy_cfg = {};
 	struct olpc_battery_data *data;
 	uint8_t status;
+	uint8_t ecver;
+	int ret;
 
 	data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;
 	platform_set_drvdata(pdev, data);
 
-	/*
-	 * We've seen a number of EC protocol changes; this driver requires
-	 * the latest EC protocol, supported by 0x44 and above.
-	 */
-	if (olpc_platform_info.ecver < 0x44) {
+	/* See if the EC is already there and get the EC revision */
+	ret = olpc_ec_cmd(EC_FIRMWARE_REV, NULL, 0, &ecver, 1);
+	if (ret)
+		return ret;
+
+	if (ecver > 0x44) {
+		/* XO 1 or 1.5 with a new EC firmware. */
+		data->new_proto = 1;
+	} else if (ecver < 0x44) {
+		/*
+		 * We've seen a number of EC protocol changes; this driver
+		 * requires the latest EC protocol, supported by 0x44 and above.
+		 */
 		printk(KERN_NOTICE "OLPC EC version 0x%02x too old for "
-			"battery driver.\n", olpc_platform_info.ecver);
+			"battery driver.\n", ecver);
 		return -ENXIO;
 	}
 
-- 
2.20.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2019-01-08 17:59 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-08 17:58 [PATCH v4 00/15] Add support for OLPC XO 1.75 Embedded Controller Lubomir Rintel
2019-01-08 17:58 ` Lubomir Rintel
2019-01-08 17:58 ` [PATCH v4 01/15] ARM: export arm_pm_restart() Lubomir Rintel
2019-01-08 17:58   ` Lubomir Rintel
2019-01-08 23:31   ` Russell King - ARM Linux
2019-01-08 23:31     ` Russell King - ARM Linux
2019-01-09  7:24     ` Lubomir Rintel
2019-01-09  7:24       ` Lubomir Rintel
2019-01-08 17:58 ` [PATCH v4 02/15] dt-bindings: olpc,xo1.75-ec: Add OLPC XO-1.75 EC bindings Lubomir Rintel
2019-01-08 17:58   ` [PATCH v4 02/15] dt-bindings: olpc, xo1.75-ec: " Lubomir Rintel
2019-01-08 17:58   ` Lubomir Rintel
2019-01-08 17:58 ` [PATCH v4 03/15] Platform: OLPC: Remove an unused include Lubomir Rintel
2019-01-08 17:58   ` Lubomir Rintel
2019-01-08 17:58   ` Lubomir Rintel
2019-01-08 17:58 ` [PATCH v4 04/15] Platform: OLPC: Add XO-1.75 EC driver Lubomir Rintel
2019-01-08 17:58   ` Lubomir Rintel
2019-01-08 17:58 ` [PATCH v4 05/15] Platform: OLPC: Avoid a warning if the EC didn't register yet Lubomir Rintel
2019-01-08 17:58   ` Lubomir Rintel
2019-01-08 17:58 ` [PATCH v4 06/15] Platform: OLPC: Move EC-specific functionality out from x86 Lubomir Rintel
2019-01-08 17:58   ` Lubomir Rintel
2019-01-09 11:23   ` Andy Shevchenko
2019-01-09 11:23     ` Andy Shevchenko
2019-01-10 17:12     ` Lubomir Rintel
2019-01-10 17:12       ` Lubomir Rintel
2019-01-08 17:58 ` [PATCH v4 07/15] Platform: OLPC: Use BIT() and GENMASK() for event masks Lubomir Rintel
2019-01-08 17:58   ` Lubomir Rintel
2019-01-09 11:14   ` Andy Shevchenko
2019-01-09 11:14     ` Andy Shevchenko
2019-01-09 11:14     ` Andy Shevchenko
2019-01-08 17:58 ` [PATCH v4 08/15] Platform: OLPC: add a regulator for the DCON Lubomir Rintel
2019-01-08 17:58   ` Lubomir Rintel
2019-01-08 17:58 ` [PATCH v4 09/15] dt-bindings: olpc_battery: Add XO-1.5 battery Lubomir Rintel
2019-01-08 17:58   ` Lubomir Rintel
2019-01-08 17:58 ` [PATCH v4 10/15] x86, olpc: Use a correct version when making up a battery node Lubomir Rintel
2019-01-08 17:58   ` Lubomir Rintel
2019-01-08 17:58 ` [PATCH v4 11/15] power: supply: olpc_battery: Use DT to get battery version Lubomir Rintel
2019-01-08 17:58   ` Lubomir Rintel
2019-01-08 17:58 ` [PATCH v4 12/15] power: supply: olpc_battery: Move priv data to a struct Lubomir Rintel
2019-01-08 17:58   ` Lubomir Rintel
2019-01-08 17:58 ` [PATCH v4 13/15] power: supply: olpc_battery: Use devm_power_supply_register() Lubomir Rintel
2019-01-08 17:58   ` Lubomir Rintel
2019-01-08 17:58 ` Lubomir Rintel [this message]
2019-01-08 17:58   ` [PATCH v4 14/15] power: supply: olpc_battery: Avoid using platform_info Lubomir Rintel
2019-01-08 17:58 ` [PATCH v4 15/15] power: supply: olpc_battery: Add OLPC XO 1.75 support Lubomir Rintel
2019-01-08 17:58   ` Lubomir Rintel
2019-01-09 11:15 ` [PATCH v4 00/15] Add support for OLPC XO 1.75 Embedded Controller Andy Shevchenko
2019-01-09 11:15   ` Andy Shevchenko
2019-01-09 16:37   ` Lubomir Rintel
2019-01-09 16:37     ` Lubomir Rintel
2019-01-10 10:08     ` Andy Shevchenko
2019-01-10 10:08       ` Andy Shevchenko

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=20190108175818.705110-15-lkundrak@v3.sk \
    --to=lkundrak@v3.sk \
    --cc=andy@infradead.org \
    --cc=devicetree@vger.kernel.org \
    --cc=dvhart@infradead.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=mark.rutland@arm.com \
    --cc=pavel@ucw.cz \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=quozl@laptop.org \
    --cc=robh+dt@kernel.org \
    --cc=sebastian.reichel@collabora.com \
    --cc=sre@kernel.org \
    --cc=x86@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 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.