All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCHv3 0/2] Add support for generic register mapped poweroff.
@ 2015-03-12  0:37 Moritz Fischer
  2015-03-12  0:37 ` [PATCHv3 1/2] power: reset: Add generic SYSCON " Moritz Fischer
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Moritz Fischer @ 2015-03-12  0:37 UTC (permalink / raw)
  To: sre; +Cc: dbaryshkov, dwmw2, devicetree, linux-kernel, linux-pm,
	Moritz Fischer

This patchset adds support for generic register mapped poweroff via SYCON.

v3:
 - Fixed OF dependecies (again) as suggested by Sebastian
 - Remove (more) module specific stuff as suggested by Paul

v2:
 - Fixed documentation copy & paste
 - Deal with OF dependecies as suggested by Sebastian
 - Remove module specific stuff as suggested by Paul

v1:
 - Earlier versions of this were specific to our product, however,
   as Sebastian suggested, it can be generalized into a generic driver.

Moritz Fischer (2):
  power: reset: Add generic SYSCON register mapped poweroff.
  dt: power: Add docs for generic SYSCON poweroff driver.

 .../bindings/power/reset/syscon-poweroff.txt       |  23 +++++
 drivers/power/reset/Kconfig                        |   7 ++
 drivers/power/reset/Makefile                       |   1 +
 drivers/power/reset/syscon-poweroff.c              | 102 +++++++++++++++++++++
 4 files changed, 133 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/power/reset/syscon-poweroff.txt
 create mode 100644 drivers/power/reset/syscon-poweroff.c

-- 
1.9.3


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCHv3 1/2] power: reset: Add generic SYSCON register mapped poweroff.
  2015-03-12  0:37 [PATCHv3 0/2] Add support for generic register mapped poweroff Moritz Fischer
@ 2015-03-12  0:37 ` Moritz Fischer
  2015-03-12  0:37 ` [PATCHv3 2/2] dt: power: Add docs for generic SYSCON poweroff driver Moritz Fischer
  2015-04-06 16:51 ` [PATCHv3 0/2] Add support for generic register mapped poweroff Sebastian Reichel
  2 siblings, 0 replies; 4+ messages in thread
From: Moritz Fischer @ 2015-03-12  0:37 UTC (permalink / raw)
  To: sre; +Cc: dbaryshkov, dwmw2, devicetree, linux-kernel, linux-pm,
	Moritz Fischer

Add a generic SYSCON register mapped poweroff mechanism.

Signed-off-by: Moritz Fischer <moritz.fischer@ettus.com>
---
 drivers/power/reset/Kconfig           |   7 +++
 drivers/power/reset/Makefile          |   1 +
 drivers/power/reset/syscon-poweroff.c | 102 ++++++++++++++++++++++++++++++++++
 3 files changed, 110 insertions(+)

diff --git a/drivers/power/reset/Kconfig b/drivers/power/reset/Kconfig
index 27f6646..4bae079 100644
--- a/drivers/power/reset/Kconfig
+++ b/drivers/power/reset/Kconfig
@@ -151,6 +151,13 @@ config POWER_RESET_SYSCON
 	help
 	  Reboot support for generic SYSCON mapped register reset.
 
+config POWER_RESET_SYSCON_POWEROFF
+	bool "Generic SYSCON regmap poweroff driver"
+	depends on OF
+	select MFD_SYSCON
+	help
+	  Poweroff support for generic SYSCON mapped register poweroff.
+
 config POWER_RESET_RMOBILE
 	tristate "Renesas R-Mobile reset driver"
 	depends on ARCH_RMOBILE || COMPILE_TEST
diff --git a/drivers/power/reset/Makefile b/drivers/power/reset/Makefile
index 11de15b..dbe06c3 100644
--- a/drivers/power/reset/Makefile
+++ b/drivers/power/reset/Makefile
@@ -17,4 +17,5 @@ obj-$(CONFIG_POWER_RESET_VEXPRESS) += vexpress-poweroff.o
 obj-$(CONFIG_POWER_RESET_XGENE) += xgene-reboot.o
 obj-$(CONFIG_POWER_RESET_KEYSTONE) += keystone-reset.o
 obj-$(CONFIG_POWER_RESET_SYSCON) += syscon-reboot.o
+obj-$(CONFIG_POWER_RESET_SYSCON_POWEROFF) += syscon-poweroff.o
 obj-$(CONFIG_POWER_RESET_RMOBILE) += rmobile-reset.o
diff --git a/drivers/power/reset/syscon-poweroff.c b/drivers/power/reset/syscon-poweroff.c
new file mode 100644
index 0000000..5560b0d
--- /dev/null
+++ b/drivers/power/reset/syscon-poweroff.c
@@ -0,0 +1,102 @@
+/*
+ * Generic Syscon Poweroff Driver
+ *
+ * Copyright (c) 2015, National Instruments Corp.
+ * Author: Moritz Fischer <moritz.fischer@ettus.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/kallsyms.h>
+#include <linux/delay.h>
+#include <linux/io.h>
+#include <linux/notifier.h>
+#include <linux/mfd/syscon.h>
+#include <linux/of_address.h>
+#include <linux/of_device.h>
+#include <linux/platform_device.h>
+#include <linux/pm.h>
+#include <linux/regmap.h>
+
+static struct regmap *map;
+static u32 offset;
+static u32 mask;
+
+void syscon_poweroff(void)
+{
+	/* Issue the poweroff */
+	regmap_write(map, offset, mask);
+
+	mdelay(1000);
+
+	pr_emerg("Unable to poweroff system\n");
+}
+
+static int syscon_poweroff_probe(struct platform_device *pdev)
+{
+	char symname[KSYM_NAME_LEN];
+
+	map = syscon_regmap_lookup_by_phandle(pdev->dev.of_node, "regmap");
+	if (IS_ERR(map)) {
+		dev_err(&pdev->dev, "unable to get syscon");
+		return PTR_ERR(map);
+	}
+
+	if (of_property_read_u32(pdev->dev.of_node, "offset", &offset)) {
+		dev_err(&pdev->dev, "unable to read 'offset'");
+		return -EINVAL;
+	}
+
+	if (of_property_read_u32(pdev->dev.of_node, "mask", &mask)) {
+		dev_err(&pdev->dev, "unable to read 'mask'");
+		return -EINVAL;
+	}
+
+	if (pm_power_off) {
+		lookup_symbol_name((ulong)pm_power_off, symname);
+		dev_err(&pdev->dev,
+		"pm_power_off already claimed %p %s",
+		pm_power_off, symname);
+		return -EBUSY;
+	}
+
+	pm_power_off = syscon_poweroff;
+
+	return 0;
+}
+
+static int syscon_poweroff_remove(struct platform_device *pdev)
+{
+	if (pm_power_off == syscon_poweroff)
+		pm_power_off = NULL;
+
+	return 0;
+}
+
+static const struct of_device_id syscon_poweroff_of_match[] = {
+	{ .compatible = "syscon-poweroff" },
+	{}
+};
+
+static struct platform_driver syscon_poweroff_driver = {
+	.probe = syscon_poweroff_probe,
+	.remove = syscon_poweroff_remove,
+	.driver = {
+		.name = "syscon-poweroff",
+		.of_match_table = syscon_poweroff_of_match,
+	},
+};
+
+static int __init syscon_poweroff_register(void)
+{
+	return platform_driver_register(&syscon_poweroff_driver);
+}
+device_initcall(syscon_poweroff_register);
-- 
1.9.3


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCHv3 2/2] dt: power: Add docs for generic SYSCON poweroff driver.
  2015-03-12  0:37 [PATCHv3 0/2] Add support for generic register mapped poweroff Moritz Fischer
  2015-03-12  0:37 ` [PATCHv3 1/2] power: reset: Add generic SYSCON " Moritz Fischer
@ 2015-03-12  0:37 ` Moritz Fischer
  2015-04-06 16:51 ` [PATCHv3 0/2] Add support for generic register mapped poweroff Sebastian Reichel
  2 siblings, 0 replies; 4+ messages in thread
From: Moritz Fischer @ 2015-03-12  0:37 UTC (permalink / raw)
  To: sre; +Cc: dbaryshkov, dwmw2, devicetree, linux-kernel, linux-pm,
	Moritz Fischer

Add documentation for generic SYSCON poweroff driver.

Signed-off-by: Moritz Fischer <moritz.fischer@ettus.com>
---
 .../bindings/power/reset/syscon-poweroff.txt       | 23 ++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/Documentation/devicetree/bindings/power/reset/syscon-poweroff.txt b/Documentation/devicetree/bindings/power/reset/syscon-poweroff.txt
new file mode 100644
index 0000000..1e2546f
--- /dev/null
+++ b/Documentation/devicetree/bindings/power/reset/syscon-poweroff.txt
@@ -0,0 +1,23 @@
+Generic SYSCON mapped register poweroff driver
+
+This is a generic poweroff driver using syscon to map the poweroff register.
+The poweroff is generally performed with a write to the poweroff register
+defined by the register map pointed by syscon reference plus the offset
+with the mask defined in the poweroff node.
+
+Required properties:
+- compatible: should contain "syscon-poweroff"
+- regmap: this is phandle to the register map node
+- offset: offset in the register map for the poweroff register (in bytes)
+- mask: the poweroff value written to the poweroff register (32 bit access)
+
+Default will be little endian mode, 32 bit access only.
+
+Examples:
+
+	poweroff {
+	   compatible = "syscon-poweroff";
+	   regmap = <&regmapnode>;
+	   offset = <0x0>;
+	   mask = <0x7a>;
+	};
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCHv3 0/2] Add support for generic register mapped poweroff.
  2015-03-12  0:37 [PATCHv3 0/2] Add support for generic register mapped poweroff Moritz Fischer
  2015-03-12  0:37 ` [PATCHv3 1/2] power: reset: Add generic SYSCON " Moritz Fischer
  2015-03-12  0:37 ` [PATCHv3 2/2] dt: power: Add docs for generic SYSCON poweroff driver Moritz Fischer
@ 2015-04-06 16:51 ` Sebastian Reichel
  2 siblings, 0 replies; 4+ messages in thread
From: Sebastian Reichel @ 2015-04-06 16:51 UTC (permalink / raw)
  To: Moritz Fischer; +Cc: dbaryshkov, dwmw2, devicetree, linux-kernel, linux-pm

[-- Attachment #1: Type: text/plain, Size: 358 bytes --]

Hi,

On Wed, Mar 11, 2015 at 05:37:17PM -0700, Moritz Fischer wrote:
> This patchset adds support for generic register mapped poweroff
> via SYCON.

Thanks, pulled:

http://git.infradead.org/battery-2.6.git/commit/8a577608ba4a3cab1d74025cea382e40544ab9cd
http://git.infradead.org/battery-2.6.git/commit/0db739fa06f95a040313c4479e1940caeb48e92f

-- Sebastian

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2015-04-06 16:51 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-03-12  0:37 [PATCHv3 0/2] Add support for generic register mapped poweroff Moritz Fischer
2015-03-12  0:37 ` [PATCHv3 1/2] power: reset: Add generic SYSCON " Moritz Fischer
2015-03-12  0:37 ` [PATCHv3 2/2] dt: power: Add docs for generic SYSCON poweroff driver Moritz Fischer
2015-04-06 16:51 ` [PATCHv3 0/2] Add support for generic register mapped poweroff Sebastian Reichel

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.