linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v9 0/7] Netronix embedded controller driver for Kobo and Tolino ebook readers
@ 2021-01-24 21:41 Jonathan Neuschäfer
  2021-01-24 21:41 ` [PATCH v9 1/7] dt-bindings: Add vendor prefix for Netronix, Inc Jonathan Neuschäfer
                   ` (8 more replies)
  0 siblings, 9 replies; 20+ messages in thread
From: Jonathan Neuschäfer @ 2021-01-24 21:41 UTC (permalink / raw)
  To: linux-kernel
  Cc: Lee Jones, Rob Herring, Jonathan Neuschäfer, Thierry Reding,
	Uwe Kleine-König, Alessandro Zummo, Alexandre Belloni,
	Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	NXP Linux Team, Sam Ravnborg, Linus Walleij, Heiko Stuebner,
	Stephan Gerhold, Lubomir Rintel, Mark Brown, allen,
	Mauro Carvalho Chehab, David S. Miller, devicetree, linux-pwm,
	linux-rtc, linux-arm-kernel, Heiko Stuebner, Josua Mayer,
	Andreas Kemnade, Arnd Bergmann, Daniel Palmer, Andy Shevchenko

This patchset adds basic support for the embedded controller found on
older ebook reader boards designed by/with the ODM Netronix Inc.[1] and
sold by Kobo or Tolino, for example the Kobo Aura and the Tolino Shine.
These drivers are based on information contained in the vendor kernel
sources, but in order to all information in a single place, I documented
the register interface of the EC on GitHub[2].

[1]: http://www.netronixinc.com/products.aspx?ID=1
[2]: https://github.com/neuschaefer/linux/wiki/Netronix-MSP430-embedded-controller

v9:
- Fixed a bug in the error handling of ntxec_probe,
  Reported-by: kernel test robot <lkp@intel.com>
- Added Thierry Reding's ACK to the PWM patch

v8:
- https://lore.kernel.org/lkml/20210116194826.3866540-1-j.neuschaefer@gmx.net/
- MFD: Add missing module metadata to the core driver
- PWM/RTC: Copy dev.of_node from the parent device, to ensure that these
  devices are linked to the devicetree node

v7:
- https://lore.kernel.org/lkml/20210109180220.121511-1-j.neuschaefer@gmx.net/
- Adjust the RTC patch to a change in the RTC API:
  rtc_register_device is now devm_rtc_register_device.
- Add a #define for the known firmware version (0xd726).
  Lee Jones suggested doing this in a follow-up patch, but since I'm
  respinning the series anyway, I'm doing it here.



Jonathan Neuschäfer (7):
  dt-bindings: Add vendor prefix for Netronix, Inc.
  dt-bindings: mfd: Add binding for Netronix embedded controller
  mfd: Add base driver for Netronix embedded controller
  pwm: ntxec: Add driver for PWM function in Netronix EC
  rtc: New driver for RTC in Netronix embedded controller
  MAINTAINERS: Add entry for Netronix embedded controller
  ARM: dts: imx50-kobo-aura: Add Netronix embedded controller

 .../bindings/mfd/netronix,ntxec.yaml          |  76 ++++++
 .../devicetree/bindings/vendor-prefixes.yaml  |   2 +
 MAINTAINERS                                   |   9 +
 arch/arm/boot/dts/imx50-kobo-aura.dts         |  16 +-
 drivers/mfd/Kconfig                           |  11 +
 drivers/mfd/Makefile                          |   1 +
 drivers/mfd/ntxec.c                           | 221 ++++++++++++++++++
 drivers/pwm/Kconfig                           |   8 +
 drivers/pwm/Makefile                          |   1 +
 drivers/pwm/pwm-ntxec.c                       | 184 +++++++++++++++
 drivers/rtc/Kconfig                           |   8 +
 drivers/rtc/Makefile                          |   1 +
 drivers/rtc/rtc-ntxec.c                       | 145 ++++++++++++
 include/linux/mfd/ntxec.h                     |  37 +++
 14 files changed, 719 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/devicetree/bindings/mfd/netronix,ntxec.yaml
 create mode 100644 drivers/mfd/ntxec.c
 create mode 100644 drivers/pwm/pwm-ntxec.c
 create mode 100644 drivers/rtc/rtc-ntxec.c
 create mode 100644 include/linux/mfd/ntxec.h

--
2.29.2


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

* [PATCH v9 1/7] dt-bindings: Add vendor prefix for Netronix, Inc.
  2021-01-24 21:41 [PATCH v9 0/7] Netronix embedded controller driver for Kobo and Tolino ebook readers Jonathan Neuschäfer
@ 2021-01-24 21:41 ` Jonathan Neuschäfer
  2021-01-24 21:41 ` [PATCH v9 2/7] dt-bindings: mfd: Add binding for Netronix embedded controller Jonathan Neuschäfer
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 20+ messages in thread
From: Jonathan Neuschäfer @ 2021-01-24 21:41 UTC (permalink / raw)
  To: linux-kernel
  Cc: Lee Jones, Rob Herring, Jonathan Neuschäfer, Thierry Reding,
	Uwe Kleine-König, Alessandro Zummo, Alexandre Belloni,
	Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	NXP Linux Team, Sam Ravnborg, Linus Walleij, Heiko Stuebner,
	Stephan Gerhold, Lubomir Rintel, Mark Brown, allen,
	Mauro Carvalho Chehab, David S. Miller, devicetree, linux-pwm,
	linux-rtc, linux-arm-kernel, Heiko Stuebner, Josua Mayer,
	Andreas Kemnade, Arnd Bergmann, Daniel Palmer, Andy Shevchenko,
	Rob Herring, Krzysztof Kozlowski, Kuninori Morimoto,
	Geert Uytterhoeven, Max Merchel

Netronix, Inc. (http://www.netronixinc.com/) makes ebook reader board
designs, which are for example used in Kobo and Tolino devices.

An alternative prefix for Netronix would be "ntx", which is already used
in code released by Netronix. It is shorter, but perhaps less clear.

Signed-off-by: Jonathan Neuschäfer <j.neuschaefer@gmx.net>
Acked-by: Rob Herring <robh@kernel.org>
---
v4-v9:
- No changes

v3:
- https://lore.kernel.org/lkml/20200924192455.2484005-2-j.neuschaefer@gmx.net/
- Add Acked-by tag

v2:
- No changes
---
 Documentation/devicetree/bindings/vendor-prefixes.yaml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml
index 041ae90b0d8fd..4d36b8173b568 100644
--- a/Documentation/devicetree/bindings/vendor-prefixes.yaml
+++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml
@@ -756,6 +756,8 @@ patternProperties:
     description: Broadcom Corporation (formerly NetLogic Microsystems)
   "^netron-dy,.*":
     description: Netron DY
+  "^netronix,.*":
+    description: Netronix, Inc.
   "^netxeon,.*":
     description: Shenzhen Netxeon Technology CO., LTD
   "^neweast,.*":
--
2.29.2


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

* [PATCH v9 2/7] dt-bindings: mfd: Add binding for Netronix embedded controller
  2021-01-24 21:41 [PATCH v9 0/7] Netronix embedded controller driver for Kobo and Tolino ebook readers Jonathan Neuschäfer
  2021-01-24 21:41 ` [PATCH v9 1/7] dt-bindings: Add vendor prefix for Netronix, Inc Jonathan Neuschäfer
@ 2021-01-24 21:41 ` Jonathan Neuschäfer
  2021-01-24 21:41 ` [PATCH v9 3/7] mfd: Add base driver " Jonathan Neuschäfer
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 20+ messages in thread
From: Jonathan Neuschäfer @ 2021-01-24 21:41 UTC (permalink / raw)
  To: linux-kernel
  Cc: Lee Jones, Rob Herring, Jonathan Neuschäfer, Thierry Reding,
	Uwe Kleine-König, Alessandro Zummo, Alexandre Belloni,
	Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	NXP Linux Team, Sam Ravnborg, Linus Walleij, Heiko Stuebner,
	Stephan Gerhold, Lubomir Rintel, Mark Brown, allen,
	Mauro Carvalho Chehab, David S. Miller, devicetree, linux-pwm,
	linux-rtc, linux-arm-kernel, Heiko Stuebner, Josua Mayer,
	Andreas Kemnade, Arnd Bergmann, Daniel Palmer, Andy Shevchenko,
	Rob Herring

This EC is found in e-book readers of multiple brands (e.g. Kobo,
Tolino), and is typically implemented as a TI MSP430 microcontroller.

It controls different functions of the system, such as power on/off,
RTC, PWM for the backlight. The exact functionality provided can vary
between boards.

Signed-off-by: Jonathan Neuschäfer <j.neuschaefer@gmx.net>
Reviewed-by: Rob Herring <robh@kernel.org>
---
v5-v9:
- no changes

v4:
- Add R-b tag

v3:
- https://lore.kernel.org/lkml/20200924192455.2484005-3-j.neuschaefer@gmx.net/
- Remove binding in text form patch description again
- Add additionalProperties: false
- Remove interrupt-controller property from example
- Merge pwm/rtc nodes into main node

v2:
- Add the plaintext DT binding for comparison
---
 .../bindings/mfd/netronix,ntxec.yaml          | 76 +++++++++++++++++++
 1 file changed, 76 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/mfd/netronix,ntxec.yaml

diff --git a/Documentation/devicetree/bindings/mfd/netronix,ntxec.yaml b/Documentation/devicetree/bindings/mfd/netronix,ntxec.yaml
new file mode 100644
index 0000000000000..59a630025f52f
--- /dev/null
+++ b/Documentation/devicetree/bindings/mfd/netronix,ntxec.yaml
@@ -0,0 +1,76 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/mfd/netronix,ntxec.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Netronix Embedded Controller
+
+maintainers:
+  - Jonathan Neuschäfer <j.neuschaefer@gmx.net>
+
+description: |
+  This EC is found in e-book readers of multiple brands (e.g. Kobo, Tolino), and
+  is typically implemented as a TI MSP430 microcontroller.
+
+properties:
+  compatible:
+    const: netronix,ntxec
+
+  reg:
+    items:
+      - description: The I2C address of the EC
+
+  system-power-controller:
+    type: boolean
+    description: See Documentation/devicetree/bindings/power/power-controller.txt
+
+  interrupts:
+    minItems: 1
+    description:
+      The EC can signal interrupts via a GPIO line
+
+  "#pwm-cells":
+    const: 2
+    description: |
+      Number of cells in a PWM specifier.
+
+      The following PWM channels are supported:
+        - 0: The PWM channel controlled by registers 0xa1-0xa7
+
+required:
+  - compatible
+  - reg
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/interrupt-controller/irq.h>
+    i2c {
+            #address-cells = <1>;
+            #size-cells = <0>;
+
+            ec: embedded-controller@43 {
+                    pinctrl-names = "default";
+                    pinctrl-0 = <&pinctrl_ntxec>;
+
+                    compatible = "netronix,ntxec";
+                    reg = <0x43>;
+                    system-power-controller;
+                    interrupt-parent = <&gpio4>;
+                    interrupts = <11 IRQ_TYPE_EDGE_FALLING>;
+                    #pwm-cells = <2>;
+            };
+    };
+
+    backlight {
+            compatible = "pwm-backlight";
+            pwms = <&ec 0 50000>;
+            power-supply = <&backlight_regulator>;
+    };
+
+    backlight_regulator: regulator-dummy {
+            compatible = "regulator-fixed";
+            regulator-name = "backlight";
+    };
--
2.29.2


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

* [PATCH v9 3/7] mfd: Add base driver for Netronix embedded controller
  2021-01-24 21:41 [PATCH v9 0/7] Netronix embedded controller driver for Kobo and Tolino ebook readers Jonathan Neuschäfer
  2021-01-24 21:41 ` [PATCH v9 1/7] dt-bindings: Add vendor prefix for Netronix, Inc Jonathan Neuschäfer
  2021-01-24 21:41 ` [PATCH v9 2/7] dt-bindings: mfd: Add binding for Netronix embedded controller Jonathan Neuschäfer
@ 2021-01-24 21:41 ` Jonathan Neuschäfer
  2021-01-24 21:41 ` [PATCH v9 4/7] pwm: ntxec: Add driver for PWM function in Netronix EC Jonathan Neuschäfer
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 20+ messages in thread
From: Jonathan Neuschäfer @ 2021-01-24 21:41 UTC (permalink / raw)
  To: linux-kernel
  Cc: Lee Jones, Rob Herring, Jonathan Neuschäfer, Thierry Reding,
	Uwe Kleine-König, Alessandro Zummo, Alexandre Belloni,
	Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	NXP Linux Team, Sam Ravnborg, Linus Walleij, Heiko Stuebner,
	Stephan Gerhold, Lubomir Rintel, Mark Brown, allen,
	Mauro Carvalho Chehab, David S. Miller, devicetree, linux-pwm,
	linux-rtc, linux-arm-kernel, Heiko Stuebner, Josua Mayer,
	Andreas Kemnade, Arnd Bergmann, Daniel Palmer, Andy Shevchenko

The Netronix embedded controller is a microcontroller found in some
e-book readers designed by the original design manufacturer Netronix,
Inc. It contains RTC, battery monitoring, system power management, and
PWM functionality.

This driver implements register access and version detection.

Third-party hardware documentation is available at:

  https://github.com/neuschaefer/linux/wiki/Netronix-MSP430-embedded-controller

The EC supports interrupts, but the driver doesn't make use of them so
far.

Signed-off-by: Jonathan Neuschäfer <j.neuschaefer@gmx.net>
Acked-for-MFD-by: Lee Jones <lee.jones@linaro.org>
---
v9:
- Fix return value after regmap failure (bug found by kernel test robot <lkp@intel.com>)

v8:
- https://lore.kernel.org/lkml/20210116194826.3866540-4-j.neuschaefer@gmx.net/
- Add missing MODULE_DEVICE_TABLE
- Add module metadata (author, description, license)

v7:
- Add #define for version number (suggested by Lee Jones).

v6:
- Add Lee Jones' ACK

v5:
- no changes

v4:
- include asm/unaligned.h after linux/*
- Use put_unaligned_be16 instead of open-coded big-endian packing
- Clarify that 0x90=0xff00 causes an error in downstream kernel too
- Add commas after non-sentinel positions
- ntxec.h: declare structs device and regmap
- Replace WARN_ON usage and add comments to explain errors
- Replace dev_alert with dev_warn when the result isn't handled
- Change subdevice registration error message to dev_err
- Declare ntxec_reg8 as returning __be16
- Restructure version detection code
- Spell out ODM

v3:
- Add (EC) to CONFIG_MFD_NTXEC prompt
- Relicense as GPLv2 or later
- Add email address to copyright line
- remove empty lines in ntxec_poweroff and ntxec_restart functions
- Split long lines
- Remove 'Install ... handler' comments
- Make naming of struct i2c_client parameter consistent
- Remove struct ntxec_info
- Rework 'depends on' lines in Kconfig, hard-depend on I2C, select REGMAP_I2C and
  MFD_CORE
- Register subdevices via mfd_cells
- Move 8-bit register conversion to ntxec.h

v2:
- Add a description of the device to the patch text
- Unify spelling as 'Netronix embedded controller'.
  'Netronix' is the proper name of the manufacturer, but 'embedded controller'
  is just a label that I have assigned to the device.
- Switch to regmap, avoid regmap use in poweroff and reboot handlers.
  Inspired by cf84dc0bb40f4 ("mfd: rn5t618: Make restart handler atomic safe")
- Use a list of known-working firmware versions instead of checking for a
  known-incompatible version
- Prefix registers with NTXEC_REG_
- Define register values as constants
- Various style cleanups as suggested by Lee Jones
- Don't align = signs in struct initializers [Uwe Kleine-König]
- Don't use dev_dbg for an error message
- Explain sleep in poweroff handler
- Remove (struct ntxec).client
- Switch to .probe_new in i2c driver
- Add .remove callback
- Make CONFIG_MFD_NTXEC a tristate option
---
 drivers/mfd/Kconfig       |  11 ++
 drivers/mfd/Makefile      |   1 +
 drivers/mfd/ntxec.c       | 221 ++++++++++++++++++++++++++++++++++++++
 include/linux/mfd/ntxec.h |  37 +++++++
 4 files changed, 270 insertions(+)
 create mode 100644 drivers/mfd/ntxec.c
 create mode 100644 include/linux/mfd/ntxec.h

diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index bdfce7b156216..4280bcd47ec7d 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -976,6 +976,17 @@ config MFD_VIPERBOARD
 	  You need to select the mfd cell drivers separately.
 	  The drivers do not support all features the board exposes.

+config MFD_NTXEC
+	tristate "Netronix embedded controller (EC)"
+	depends on OF || COMPILE_TEST
+	depends on I2C
+	select REGMAP_I2C
+	select MFD_CORE
+	help
+	  Say yes here if you want to support the embedded controller found in
+	  certain e-book readers designed by the original design manufacturer
+	  Netronix.
+
 config MFD_RETU
 	tristate "Nokia Retu and Tahvo multi-function device"
 	select MFD_CORE
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index 14fdb188af022..948a3bf8e3e57 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -219,6 +219,7 @@ obj-$(CONFIG_MFD_INTEL_PMC_BXT)	+= intel_pmc_bxt.o
 obj-$(CONFIG_MFD_INTEL_PMT)	+= intel_pmt.o
 obj-$(CONFIG_MFD_PALMAS)	+= palmas.o
 obj-$(CONFIG_MFD_VIPERBOARD)    += viperboard.o
+obj-$(CONFIG_MFD_NTXEC)		+= ntxec.o
 obj-$(CONFIG_MFD_RC5T583)	+= rc5t583.o rc5t583-irq.o
 obj-$(CONFIG_MFD_RK808)		+= rk808.o
 obj-$(CONFIG_MFD_RN5T618)	+= rn5t618.o
diff --git a/drivers/mfd/ntxec.c b/drivers/mfd/ntxec.c
new file mode 100644
index 0000000000000..957de2b035290
--- /dev/null
+++ b/drivers/mfd/ntxec.c
@@ -0,0 +1,221 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * The Netronix embedded controller is a microcontroller found in some
+ * e-book readers designed by the original design manufacturer Netronix, Inc.
+ * It contains RTC, battery monitoring, system power management, and PWM
+ * functionality.
+ *
+ * This driver implements register access, version detection, and system
+ * power-off/reset.
+ *
+ * Copyright 2020 Jonathan Neuschäfer <j.neuschaefer@gmx.net>
+ */
+
+#include <linux/delay.h>
+#include <linux/errno.h>
+#include <linux/i2c.h>
+#include <linux/mfd/core.h>
+#include <linux/mfd/ntxec.h>
+#include <linux/module.h>
+#include <linux/pm.h>
+#include <linux/reboot.h>
+#include <linux/regmap.h>
+#include <linux/types.h>
+#include <asm/unaligned.h>
+
+#define NTXEC_REG_VERSION	0x00
+#define NTXEC_REG_POWEROFF	0x50
+#define NTXEC_REG_POWERKEEP	0x70
+#define NTXEC_REG_RESET		0x90
+
+#define NTXEC_POWEROFF_VALUE	0x0100
+#define NTXEC_POWERKEEP_VALUE	0x0800
+#define NTXEC_RESET_VALUE	0xff00
+
+static struct i2c_client *poweroff_restart_client;
+
+static void ntxec_poweroff(void)
+{
+	int res;
+	u8 buf[3] = { NTXEC_REG_POWEROFF };
+	struct i2c_msg msgs[] = {
+		{
+			.addr = poweroff_restart_client->addr,
+			.flags = 0,
+			.len = sizeof(buf),
+			.buf = buf,
+		},
+	};
+
+	put_unaligned_be16(NTXEC_POWEROFF_VALUE, buf + 1);
+
+	res = i2c_transfer(poweroff_restart_client->adapter, msgs, ARRAY_SIZE(msgs));
+	if (res < 0)
+		dev_warn(&poweroff_restart_client->dev,
+			 "Failed to power off (err = %d)\n", res);
+
+	/*
+	 * The time from the register write until the host CPU is powered off
+	 * has been observed to be about 2.5 to 3 seconds. Sleep long enough to
+	 * safely avoid returning from the poweroff handler.
+	 */
+	msleep(5000);
+}
+
+static int ntxec_restart(struct notifier_block *nb,
+			 unsigned long action, void *data)
+{
+	int res;
+	u8 buf[3] = { NTXEC_REG_RESET };
+	/*
+	 * NOTE: The lower half of the reset value is not sent, because sending
+	 * it causes an I2C error. (The reset handler in the downstream driver
+	 * does send the full two-byte value, but doesn't check the result).
+	 */
+	struct i2c_msg msgs[] = {
+		{
+			.addr = poweroff_restart_client->addr,
+			.flags = 0,
+			.len = sizeof(buf) - 1,
+			.buf = buf,
+		},
+	};
+
+	put_unaligned_be16(NTXEC_RESET_VALUE, buf + 1);
+
+	res = i2c_transfer(poweroff_restart_client->adapter, msgs, ARRAY_SIZE(msgs));
+	if (res < 0)
+		dev_warn(&poweroff_restart_client->dev,
+			 "Failed to restart (err = %d)\n", res);
+
+	return NOTIFY_DONE;
+}
+
+static struct notifier_block ntxec_restart_handler = {
+	.notifier_call = ntxec_restart,
+	.priority = 128,
+};
+
+static const struct regmap_config regmap_config = {
+	.name = "ntxec",
+	.reg_bits = 8,
+	.val_bits = 16,
+	.cache_type = REGCACHE_NONE,
+	.val_format_endian = REGMAP_ENDIAN_BIG,
+};
+
+static const struct mfd_cell ntxec_subdevices[] = {
+	{ .name = "ntxec-rtc" },
+	{ .name = "ntxec-pwm" },
+};
+
+static int ntxec_probe(struct i2c_client *client)
+{
+	struct ntxec *ec;
+	unsigned int version;
+	int res;
+
+	ec = devm_kmalloc(&client->dev, sizeof(*ec), GFP_KERNEL);
+	if (!ec)
+		return -ENOMEM;
+
+	ec->dev = &client->dev;
+
+	ec->regmap = devm_regmap_init_i2c(client, &regmap_config);
+	if (IS_ERR(ec->regmap)) {
+		dev_err(ec->dev, "Failed to set up regmap for device\n");
+		return PTR_ERR(ec->regmap);
+	}
+
+	/* Determine the firmware version */
+	res = regmap_read(ec->regmap, NTXEC_REG_VERSION, &version);
+	if (res < 0) {
+		dev_err(ec->dev, "Failed to read firmware version number\n");
+		return res;
+	}
+
+	/* Bail out if we encounter an unknown firmware version */
+	switch (version) {
+	case NTXEC_VERSION_KOBO_AURA:
+		break;
+	default:
+		dev_err(ec->dev,
+			"Netronix embedded controller version %04x is not supported.\n",
+			version);
+		return -ENODEV;
+	}
+
+	dev_info(ec->dev,
+		 "Netronix embedded controller version %04x detected.\n", version);
+
+	if (of_device_is_system_power_controller(ec->dev->of_node)) {
+		/*
+		 * Set the 'powerkeep' bit. This is necessary on some boards
+		 * in order to keep the system running.
+		 */
+		res = regmap_write(ec->regmap, NTXEC_REG_POWERKEEP,
+				   NTXEC_POWERKEEP_VALUE);
+		if (res < 0)
+			return res;
+
+		if (poweroff_restart_client)
+			/*
+			 * Another instance of the driver already took
+			 * poweroff/restart duties.
+			 */
+			dev_err(ec->dev, "poweroff_restart_client already assigned\n");
+		else
+			poweroff_restart_client = client;
+
+		if (pm_power_off)
+			/* Another driver already registered a poweroff handler. */
+			dev_err(ec->dev, "pm_power_off already assigned\n");
+		else
+			pm_power_off = ntxec_poweroff;
+
+		res = register_restart_handler(&ntxec_restart_handler);
+		if (res)
+			dev_err(ec->dev,
+				"Failed to register restart handler: %d\n", res);
+	}
+
+	i2c_set_clientdata(client, ec);
+
+	res = devm_mfd_add_devices(ec->dev, PLATFORM_DEVID_NONE, ntxec_subdevices,
+				   ARRAY_SIZE(ntxec_subdevices), NULL, 0, NULL);
+	if (res)
+		dev_err(ec->dev, "Failed to add subdevices: %d\n", res);
+
+	return res;
+}
+
+static int ntxec_remove(struct i2c_client *client)
+{
+	if (client == poweroff_restart_client) {
+		poweroff_restart_client = NULL;
+		pm_power_off = NULL;
+		unregister_restart_handler(&ntxec_restart_handler);
+	}
+
+	return 0;
+}
+
+static const struct of_device_id of_ntxec_match_table[] = {
+	{ .compatible = "netronix,ntxec", },
+	{}
+};
+MODULE_DEVICE_TABLE(of, of_ntxec_match_table);
+
+static struct i2c_driver ntxec_driver = {
+	.driver = {
+		.name = "ntxec",
+		.of_match_table = of_ntxec_match_table,
+	},
+	.probe_new = ntxec_probe,
+	.remove = ntxec_remove,
+};
+module_i2c_driver(ntxec_driver);
+
+MODULE_AUTHOR("Jonathan Neuschäfer <j.neuschaefer@gmx.net>");
+MODULE_DESCRIPTION("Core driver for Netronix EC");
+MODULE_LICENSE("GPL");
diff --git a/include/linux/mfd/ntxec.h b/include/linux/mfd/ntxec.h
new file mode 100644
index 0000000000000..361204d125f1a
--- /dev/null
+++ b/include/linux/mfd/ntxec.h
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright 2020 Jonathan Neuschäfer
+ *
+ * Register access and version information for the Netronix embedded
+ * controller.
+ */
+
+#ifndef NTXEC_H
+#define NTXEC_H
+
+#include <linux/types.h>
+
+struct device;
+struct regmap;
+
+struct ntxec {
+	struct device *dev;
+	struct regmap *regmap;
+};
+
+/*
+ * Some registers, such as the battery status register (0x41), are in
+ * big-endian, but others only have eight significant bits, which are in the
+ * first byte transmitted over I2C (the MSB of the big-endian value).
+ * This convenience function converts an 8-bit value to 16-bit for use in the
+ * second kind of register.
+ */
+static inline __be16 ntxec_reg8(u8 value)
+{
+	return value << 8;
+}
+
+/* Known firmware versions */
+#define NTXEC_VERSION_KOBO_AURA	0xd726	/* found in Kobo Aura */
+
+#endif
--
2.29.2


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

* [PATCH v9 4/7] pwm: ntxec: Add driver for PWM function in Netronix EC
  2021-01-24 21:41 [PATCH v9 0/7] Netronix embedded controller driver for Kobo and Tolino ebook readers Jonathan Neuschäfer
                   ` (2 preceding siblings ...)
  2021-01-24 21:41 ` [PATCH v9 3/7] mfd: Add base driver " Jonathan Neuschäfer
@ 2021-01-24 21:41 ` Jonathan Neuschäfer
  2021-01-24 21:41 ` [PATCH v9 5/7] rtc: New driver for RTC in Netronix embedded controller Jonathan Neuschäfer
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 20+ messages in thread
From: Jonathan Neuschäfer @ 2021-01-24 21:41 UTC (permalink / raw)
  To: linux-kernel
  Cc: Lee Jones, Rob Herring, Jonathan Neuschäfer, Thierry Reding,
	Uwe Kleine-König, Alessandro Zummo, Alexandre Belloni,
	Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	NXP Linux Team, Sam Ravnborg, Linus Walleij, Heiko Stuebner,
	Stephan Gerhold, Lubomir Rintel, Mark Brown, allen,
	Mauro Carvalho Chehab, David S. Miller, devicetree, linux-pwm,
	linux-rtc, linux-arm-kernel, Heiko Stuebner, Josua Mayer,
	Andreas Kemnade, Arnd Bergmann, Daniel Palmer, Andy Shevchenko

The Netronix EC provides a PWM output which is used for the backlight
on some ebook readers. This patches adds a driver for the PWM output.

The .get_state callback is not implemented, because the PWM state can't
be read back from the hardware.

Signed-off-by: Jonathan Neuschäfer <j.neuschaefer@gmx.net>
Reviewed-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Acked-by: Thierry Reding <thierry.reding@gmail.com>
---
v9:
- Add Thierry Reding's A-b tag

v8:
- https://lore.kernel.org/lkml/20210116194826.3866540-5-j.neuschaefer@gmx.net/
- Add Uwe Kleine-König's R-b tag
- Copy dev.of_node from parent device

v7:
- no changes

v6:
- Move period / duty cycle setting code to a function
- Rename pwmchip_to_priv to ntxec_pwm_from_chip
- Set period and duty cycle only before enabling the output
- Mention that duty=0, enable=1 is assumed not to happen
- Interleave writes to the period and duty cycle registers, to minimize the
  window of time that an inconsistent state is configured

v5:
- Avoid truncation of period and duty cycle to 32 bits
- Make ntxec_pwm_ops const
- Use regmap_multi_reg_write
- Add comment about get_state to ntxec_pwm_ops
- Add comments about non-atomicity of (period, duty cycle) update

v4:
- Document hardware/driver limitations
- Only accept normal polarity
- Fix a typo ("zone" -> "zero")
- change MAX_PERIOD_NS to 0xffff * 125
- Clamp period to the maximum rather than returning an error
- Rename private struct pointer to priv
- Rearrage control flow in _probe to save a few lines and a temporary variable
- Add missing MODULE_ALIAS line
- Spell out ODM

v3:
- Relicense as GPLv2 or later
- Add email address to copyright line
- Remove OF compatible string and don't include linux/of_device.h
- Fix bogus ?: in return line
- Don't use a comma after sentinels
- Avoid ret |= ... pattern
- Move 8-bit register conversion to ntxec.h

v2:
- Various grammar and style improvements, as suggested by Uwe Kleine-König,
  Lee Jones, and Alexandre Belloni
- Switch to regmap
- Prefix registers with NTXEC_REG_
- Add help text to the Kconfig option
- Use the .apply callback instead of the old API
- Add a #define for the time base (125ns)
- Don't change device state in .probe; this avoids multiple problems
- Rework division and overflow check logic to perform divisions in 32 bits
- Avoid setting duty cycle to zero, to work around a hardware quirk
---
 drivers/pwm/Kconfig     |   8 ++
 drivers/pwm/Makefile    |   1 +
 drivers/pwm/pwm-ntxec.c | 184 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 193 insertions(+)
 create mode 100644 drivers/pwm/pwm-ntxec.c

diff --git a/drivers/pwm/Kconfig b/drivers/pwm/Kconfig
index 0937e1c047acb..a2830b8832b97 100644
--- a/drivers/pwm/Kconfig
+++ b/drivers/pwm/Kconfig
@@ -393,6 +393,14 @@ config PWM_MXS
 	  To compile this driver as a module, choose M here: the module
 	  will be called pwm-mxs.

+config PWM_NTXEC
+	tristate "Netronix embedded controller PWM support"
+	depends on MFD_NTXEC
+	help
+	  Say yes here if you want to support the PWM output of the embedded
+	  controller found in certain e-book readers designed by the original
+	  design manufacturer Netronix.
+
 config PWM_OMAP_DMTIMER
 	tristate "OMAP Dual-Mode Timer PWM support"
 	depends on OF
diff --git a/drivers/pwm/Makefile b/drivers/pwm/Makefile
index 18b89d7fd092a..7d97eb595bbef 100644
--- a/drivers/pwm/Makefile
+++ b/drivers/pwm/Makefile
@@ -35,6 +35,7 @@ obj-$(CONFIG_PWM_MESON)		+= pwm-meson.o
 obj-$(CONFIG_PWM_MEDIATEK)	+= pwm-mediatek.o
 obj-$(CONFIG_PWM_MTK_DISP)	+= pwm-mtk-disp.o
 obj-$(CONFIG_PWM_MXS)		+= pwm-mxs.o
+obj-$(CONFIG_PWM_NTXEC)		+= pwm-ntxec.o
 obj-$(CONFIG_PWM_OMAP_DMTIMER)	+= pwm-omap-dmtimer.o
 obj-$(CONFIG_PWM_PCA9685)	+= pwm-pca9685.o
 obj-$(CONFIG_PWM_PXA)		+= pwm-pxa.o
diff --git a/drivers/pwm/pwm-ntxec.c b/drivers/pwm/pwm-ntxec.c
new file mode 100644
index 0000000000000..50c454c553c46
--- /dev/null
+++ b/drivers/pwm/pwm-ntxec.c
@@ -0,0 +1,184 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * The Netronix embedded controller is a microcontroller found in some
+ * e-book readers designed by the original design manufacturer Netronix, Inc.
+ * It contains RTC, battery monitoring, system power management, and PWM
+ * functionality.
+ *
+ * This driver implements PWM output.
+ *
+ * Copyright 2020 Jonathan Neuschäfer <j.neuschaefer@gmx.net>
+ *
+ * Limitations:
+ * - The get_state callback is not implemented, because the current state of
+ *   the PWM output can't be read back from the hardware.
+ * - The hardware can only generate normal polarity output.
+ * - The period and duty cycle can't be changed together in one atomic action.
+ */
+
+#include <linux/mfd/ntxec.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/pwm.h>
+#include <linux/regmap.h>
+#include <linux/types.h>
+
+struct ntxec_pwm {
+	struct device *dev;
+	struct ntxec *ec;
+	struct pwm_chip chip;
+};
+
+static struct ntxec_pwm *ntxec_pwm_from_chip(struct pwm_chip *chip)
+{
+	return container_of(chip, struct ntxec_pwm, chip);
+}
+
+#define NTXEC_REG_AUTO_OFF_HI	0xa1
+#define NTXEC_REG_AUTO_OFF_LO	0xa2
+#define NTXEC_REG_ENABLE	0xa3
+#define NTXEC_REG_PERIOD_LOW	0xa4
+#define NTXEC_REG_PERIOD_HIGH	0xa5
+#define NTXEC_REG_DUTY_LOW	0xa6
+#define NTXEC_REG_DUTY_HIGH	0xa7
+
+/*
+ * The time base used in the EC is 8MHz, or 125ns. Period and duty cycle are
+ * measured in this unit.
+ */
+#define TIME_BASE_NS 125
+
+/*
+ * The maximum input value (in nanoseconds) is determined by the time base and
+ * the range of the hardware registers that hold the converted value.
+ * It fits into 32 bits, so we can do our calculations in 32 bits as well.
+ */
+#define MAX_PERIOD_NS (TIME_BASE_NS * 0xffff)
+
+static int ntxec_pwm_set_raw_period_and_duty_cycle(struct pwm_chip *chip,
+						   int period, int duty)
+{
+	struct ntxec_pwm *priv = ntxec_pwm_from_chip(chip);
+
+	/*
+	 * Changes to the period and duty cycle take effect as soon as the
+	 * corresponding low byte is written, so the hardware may be configured
+	 * to an inconsistent state after the period is written and before the
+	 * duty cycle is fully written. If, in such a case, the old duty cycle
+	 * is longer than the new period, the EC may output 100% for a moment.
+	 *
+	 * To minimize the time between the changes to period and duty cycle
+	 * taking effect, the writes are interleaved.
+	 */
+
+	struct reg_sequence regs[] = {
+		{ NTXEC_REG_PERIOD_HIGH, ntxec_reg8(period >> 8) },
+		{ NTXEC_REG_DUTY_HIGH, ntxec_reg8(duty >> 8) },
+		{ NTXEC_REG_PERIOD_LOW, ntxec_reg8(period) },
+		{ NTXEC_REG_DUTY_LOW, ntxec_reg8(duty) },
+	};
+
+	return regmap_multi_reg_write(priv->ec->regmap, regs, ARRAY_SIZE(regs));
+}
+
+static int ntxec_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm_dev,
+			   const struct pwm_state *state)
+{
+	struct ntxec_pwm *priv = ntxec_pwm_from_chip(chip);
+	unsigned int period, duty;
+	int res;
+
+	if (state->polarity != PWM_POLARITY_NORMAL)
+		return -EINVAL;
+
+	period = min_t(u64, state->period, MAX_PERIOD_NS);
+	duty   = min_t(u64, state->duty_cycle, period);
+
+	period /= TIME_BASE_NS;
+	duty   /= TIME_BASE_NS;
+
+	/*
+	 * Writing a duty cycle of zero puts the device into a state where
+	 * writing a higher duty cycle doesn't result in the brightness that it
+	 * usually results in. This can be fixed by cycling the ENABLE register.
+	 *
+	 * As a workaround, write ENABLE=0 when the duty cycle is zero.
+	 * The case that something has previously set the duty cycle to zero
+	 * but ENABLE=1, is not handled.
+	 */
+	if (state->enabled && duty != 0) {
+		res = ntxec_pwm_set_raw_period_and_duty_cycle(chip, period, duty);
+		if (res)
+			return res;
+
+		res = regmap_write(priv->ec->regmap, NTXEC_REG_ENABLE, ntxec_reg8(1));
+		if (res)
+			return res;
+
+		/* Disable the auto-off timer */
+		res = regmap_write(priv->ec->regmap, NTXEC_REG_AUTO_OFF_HI, ntxec_reg8(0xff));
+		if (res)
+			return res;
+
+		return regmap_write(priv->ec->regmap, NTXEC_REG_AUTO_OFF_LO, ntxec_reg8(0xff));
+	} else {
+		return regmap_write(priv->ec->regmap, NTXEC_REG_ENABLE, ntxec_reg8(0));
+	}
+}
+
+static const struct pwm_ops ntxec_pwm_ops = {
+	.owner = THIS_MODULE,
+	.apply = ntxec_pwm_apply,
+	/*
+	 * No .get_state callback, because the current state cannot be read
+	 * back from the hardware.
+	 */
+};
+
+static int ntxec_pwm_probe(struct platform_device *pdev)
+{
+	struct ntxec *ec = dev_get_drvdata(pdev->dev.parent);
+	struct ntxec_pwm *priv;
+	struct pwm_chip *chip;
+
+	pdev->dev.of_node = pdev->dev.parent->of_node;
+
+	priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
+	if (!priv)
+		return -ENOMEM;
+
+	priv->ec = ec;
+	priv->dev = &pdev->dev;
+
+	platform_set_drvdata(pdev, priv);
+
+	chip = &priv->chip;
+	chip->dev = &pdev->dev;
+	chip->ops = &ntxec_pwm_ops;
+	chip->base = -1;
+	chip->npwm = 1;
+
+	return pwmchip_add(chip);
+}
+
+static int ntxec_pwm_remove(struct platform_device *pdev)
+{
+	struct ntxec_pwm *priv = platform_get_drvdata(pdev);
+	struct pwm_chip *chip = &priv->chip;
+
+	return pwmchip_remove(chip);
+}
+
+static struct platform_driver ntxec_pwm_driver = {
+	.driver = {
+		.name = "ntxec-pwm",
+	},
+	.probe = ntxec_pwm_probe,
+	.remove = ntxec_pwm_remove,
+};
+module_platform_driver(ntxec_pwm_driver);
+
+MODULE_AUTHOR("Jonathan Neuschäfer <j.neuschaefer@gmx.net>");
+MODULE_DESCRIPTION("PWM driver for Netronix EC");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:ntxec-pwm");
--
2.29.2


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

* [PATCH v9 5/7] rtc: New driver for RTC in Netronix embedded controller
  2021-01-24 21:41 [PATCH v9 0/7] Netronix embedded controller driver for Kobo and Tolino ebook readers Jonathan Neuschäfer
                   ` (3 preceding siblings ...)
  2021-01-24 21:41 ` [PATCH v9 4/7] pwm: ntxec: Add driver for PWM function in Netronix EC Jonathan Neuschäfer
@ 2021-01-24 21:41 ` Jonathan Neuschäfer
  2021-01-24 21:41 ` [PATCH v9 6/7] MAINTAINERS: Add entry for " Jonathan Neuschäfer
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 20+ messages in thread
From: Jonathan Neuschäfer @ 2021-01-24 21:41 UTC (permalink / raw)
  To: linux-kernel
  Cc: Lee Jones, Rob Herring, Jonathan Neuschäfer, Thierry Reding,
	Uwe Kleine-König, Alessandro Zummo, Alexandre Belloni,
	Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	NXP Linux Team, Sam Ravnborg, Linus Walleij, Heiko Stuebner,
	Stephan Gerhold, Lubomir Rintel, Mark Brown, allen,
	Mauro Carvalho Chehab, David S. Miller, devicetree, linux-pwm,
	linux-rtc, linux-arm-kernel, Heiko Stuebner, Josua Mayer,
	Andreas Kemnade, Arnd Bergmann, Daniel Palmer, Andy Shevchenko

With this driver, mainline Linux can keep its time and date in sync with
the vendor kernel.

Advanced functionality like alarm and automatic power-on is not yet
supported.

Signed-off-by: Jonathan Neuschäfer <j.neuschaefer@gmx.net>
Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
---
v9:
- no changes

v8:
- https://lore.kernel.org/lkml/20210116194826.3866540-6-j.neuschaefer@gmx.net/
- Copy dev.of_node from parent device

v7:
- Adjust to recent RTC API change (rtc_register_device -> devm_rtc_register_device)

v6:
- no changes

v5:
- Add Alexandre Belloni's A-b
- Use regmap_multi_reg_write

v4:
- Remove "driver" from Kconfig entry for consistency with most other entries
- Add missing MODULE_ALIAS line
- Give NTXEC_REG_READ_ macros longer names
- Solve the read tearing issue using Alexandre Belloni's algorithm
- Solve the write tearing issue using Uwe Kleine-König's algorithm
- Spell out ODM

v3:
- Add email address to copyright line
- Remove OF compatible string and don't include linux/of_device.h
- Don't use a comma after sentinels
- Avoid ret |= ... pattern
- Move 8-bit register conversion to ntxec.h
- Relicense as GPLv2 or later

v2:
- Rework top-of-file comment [Lee Jones]
- Sort the #include lines [Alexandre Belloni]
- don't align = signs in struct initializers [Uwe Kleine-König]
- Switch to regmap
- Fix register number used to read minutes and seconds
- Prefix registers with NTXEC_REG_
- Add help text to the Kconfig option
- Use devm_rtc_allocate_device and rtc_register_device, set ->range_min and ->range_max
---
 drivers/rtc/Kconfig     |   8 +++
 drivers/rtc/Makefile    |   1 +
 drivers/rtc/rtc-ntxec.c | 145 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 154 insertions(+)
 create mode 100644 drivers/rtc/rtc-ntxec.c

diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
index 6123f9f4fbc90..d49cf387add14 100644
--- a/drivers/rtc/Kconfig
+++ b/drivers/rtc/Kconfig
@@ -1315,6 +1315,14 @@ config RTC_DRV_CROS_EC
 	  This driver can also be built as a module. If so, the module
 	  will be called rtc-cros-ec.

+config RTC_DRV_NTXEC
+	tristate "Netronix embedded controller RTC"
+	depends on MFD_NTXEC
+	help
+	  Say yes here if you want to support the RTC functionality of the
+	  embedded controller found in certain e-book readers designed by the
+	  original design manufacturer Netronix.
+
 comment "on-CPU RTC drivers"

 config RTC_DRV_ASM9260
diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile
index bb8f319b09fbf..92c26eafe70ce 100644
--- a/drivers/rtc/Makefile
+++ b/drivers/rtc/Makefile
@@ -110,6 +110,7 @@ obj-$(CONFIG_RTC_DRV_MT7622)	+= rtc-mt7622.o
 obj-$(CONFIG_RTC_DRV_MV)	+= rtc-mv.o
 obj-$(CONFIG_RTC_DRV_MXC)	+= rtc-mxc.o
 obj-$(CONFIG_RTC_DRV_MXC_V2)	+= rtc-mxc_v2.o
+obj-$(CONFIG_RTC_DRV_NTXEC)	+= rtc-ntxec.o
 obj-$(CONFIG_RTC_DRV_OMAP)	+= rtc-omap.o
 obj-$(CONFIG_RTC_DRV_OPAL)	+= rtc-opal.o
 obj-$(CONFIG_RTC_DRV_PALMAS)	+= rtc-palmas.o
diff --git a/drivers/rtc/rtc-ntxec.c b/drivers/rtc/rtc-ntxec.c
new file mode 100644
index 0000000000000..850ca49186fdc
--- /dev/null
+++ b/drivers/rtc/rtc-ntxec.c
@@ -0,0 +1,145 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * The Netronix embedded controller is a microcontroller found in some
+ * e-book readers designed by the original design manufacturer Netronix, Inc.
+ * It contains RTC, battery monitoring, system power management, and PWM
+ * functionality.
+ *
+ * This driver implements access to the RTC time and date.
+ *
+ * Copyright 2020 Jonathan Neuschäfer <j.neuschaefer@gmx.net>
+ */
+
+#include <linux/mfd/ntxec.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/regmap.h>
+#include <linux/rtc.h>
+#include <linux/types.h>
+
+struct ntxec_rtc {
+	struct device *dev;
+	struct ntxec *ec;
+};
+
+#define NTXEC_REG_WRITE_YEAR	0x10
+#define NTXEC_REG_WRITE_MONTH	0x11
+#define NTXEC_REG_WRITE_DAY	0x12
+#define NTXEC_REG_WRITE_HOUR	0x13
+#define NTXEC_REG_WRITE_MINUTE	0x14
+#define NTXEC_REG_WRITE_SECOND	0x15
+
+#define NTXEC_REG_READ_YEAR_MONTH	0x20
+#define NTXEC_REG_READ_MDAY_HOUR	0x21
+#define NTXEC_REG_READ_MINUTE_SECOND	0x23
+
+static int ntxec_read_time(struct device *dev, struct rtc_time *tm)
+{
+	struct ntxec_rtc *rtc = dev_get_drvdata(dev);
+	unsigned int value;
+	int res;
+
+retry:
+	res = regmap_read(rtc->ec->regmap, NTXEC_REG_READ_MINUTE_SECOND, &value);
+	if (res < 0)
+		return res;
+
+	tm->tm_min = value >> 8;
+	tm->tm_sec = value & 0xff;
+
+	res = regmap_read(rtc->ec->regmap, NTXEC_REG_READ_MDAY_HOUR, &value);
+	if (res < 0)
+		return res;
+
+	tm->tm_mday = value >> 8;
+	tm->tm_hour = value & 0xff;
+
+	res = regmap_read(rtc->ec->regmap, NTXEC_REG_READ_YEAR_MONTH, &value);
+	if (res < 0)
+		return res;
+
+	tm->tm_year = (value >> 8) + 100;
+	tm->tm_mon = (value & 0xff) - 1;
+
+	/*
+	 * Read the minutes/seconds field again. If it changed since the first
+	 * read, we can't assume that the values read so far are consistent,
+	 * and should start from the beginning.
+	 */
+	res = regmap_read(rtc->ec->regmap, NTXEC_REG_READ_MINUTE_SECOND, &value);
+	if (res < 0)
+		return res;
+
+	if (tm->tm_min != value >> 8 || tm->tm_sec != (value & 0xff))
+		goto retry;
+
+	return 0;
+}
+
+static int ntxec_set_time(struct device *dev, struct rtc_time *tm)
+{
+	struct ntxec_rtc *rtc = dev_get_drvdata(dev);
+
+	/*
+	 * To avoid time overflows while we're writing the full date/time,
+	 * set the seconds field to zero before doing anything else. For the
+	 * next 59 seconds (plus however long it takes until the RTC's next
+	 * update of the second field), the seconds field will not overflow
+	 * into the other fields.
+	 */
+	struct reg_sequence regs[] = {
+		{ NTXEC_REG_WRITE_SECOND, ntxec_reg8(0) },
+		{ NTXEC_REG_WRITE_YEAR, ntxec_reg8(tm->tm_year - 100) },
+		{ NTXEC_REG_WRITE_MONTH, ntxec_reg8(tm->tm_mon + 1) },
+		{ NTXEC_REG_WRITE_DAY, ntxec_reg8(tm->tm_mday) },
+		{ NTXEC_REG_WRITE_HOUR, ntxec_reg8(tm->tm_hour) },
+		{ NTXEC_REG_WRITE_MINUTE, ntxec_reg8(tm->tm_min) },
+		{ NTXEC_REG_WRITE_SECOND, ntxec_reg8(tm->tm_sec) },
+	};
+
+	return regmap_multi_reg_write(rtc->ec->regmap, regs, ARRAY_SIZE(regs));
+}
+
+static const struct rtc_class_ops ntxec_rtc_ops = {
+	.read_time = ntxec_read_time,
+	.set_time = ntxec_set_time,
+};
+
+static int ntxec_rtc_probe(struct platform_device *pdev)
+{
+	struct rtc_device *dev;
+	struct ntxec_rtc *rtc;
+
+	pdev->dev.of_node = pdev->dev.parent->of_node;
+
+	rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL);
+	if (!rtc)
+		return -ENOMEM;
+
+	rtc->dev = &pdev->dev;
+	rtc->ec = dev_get_drvdata(pdev->dev.parent);
+	platform_set_drvdata(pdev, rtc);
+
+	dev = devm_rtc_allocate_device(&pdev->dev);
+	if (IS_ERR(dev))
+		return PTR_ERR(dev);
+
+	dev->ops = &ntxec_rtc_ops;
+	dev->range_min = RTC_TIMESTAMP_BEGIN_2000;
+	dev->range_max = 9025257599LL; /* 2255-12-31 23:59:59 */
+
+	return devm_rtc_register_device(dev);
+}
+
+static struct platform_driver ntxec_rtc_driver = {
+	.driver = {
+		.name = "ntxec-rtc",
+	},
+	.probe = ntxec_rtc_probe,
+};
+module_platform_driver(ntxec_rtc_driver);
+
+MODULE_AUTHOR("Jonathan Neuschäfer <j.neuschaefer@gmx.net>");
+MODULE_DESCRIPTION("RTC driver for Netronix EC");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:ntxec-rtc");
--
2.29.2


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

* [PATCH v9 6/7] MAINTAINERS: Add entry for Netronix embedded controller
  2021-01-24 21:41 [PATCH v9 0/7] Netronix embedded controller driver for Kobo and Tolino ebook readers Jonathan Neuschäfer
                   ` (4 preceding siblings ...)
  2021-01-24 21:41 ` [PATCH v9 5/7] rtc: New driver for RTC in Netronix embedded controller Jonathan Neuschäfer
@ 2021-01-24 21:41 ` Jonathan Neuschäfer
  2021-01-24 21:41 ` [PATCH v9 7/7] ARM: dts: imx50-kobo-aura: Add " Jonathan Neuschäfer
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 20+ messages in thread
From: Jonathan Neuschäfer @ 2021-01-24 21:41 UTC (permalink / raw)
  To: linux-kernel
  Cc: Lee Jones, Rob Herring, Jonathan Neuschäfer, Thierry Reding,
	Uwe Kleine-König, Alessandro Zummo, Alexandre Belloni,
	Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	NXP Linux Team, Sam Ravnborg, Linus Walleij, Heiko Stuebner,
	Stephan Gerhold, Lubomir Rintel, Mark Brown, allen,
	Mauro Carvalho Chehab, David S. Miller, devicetree, linux-pwm,
	linux-rtc, linux-arm-kernel, Heiko Stuebner, Josua Mayer,
	Andreas Kemnade, Arnd Bergmann, Daniel Palmer, Andy Shevchenko

Let's make sure I'll notice when there are patches for the NTXEC
drivers.

Signed-off-by: Jonathan Neuschäfer <j.neuschaefer@gmx.net>
---
v4-v9:
- no changes

v3:
- https://lore.kernel.org/lkml/20200924192455.2484005-7-j.neuschaefer@gmx.net/
- Remove pwm and rtc bindings

v2:
- No changes
---
 MAINTAINERS | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/MAINTAINERS b/MAINTAINERS
index 546aa66428c9f..0c6e739e3afb7 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -12298,6 +12298,15 @@ F:	include/net/netrom.h
 F:	include/uapi/linux/netrom.h
 F:	net/netrom/

+NETRONIX EMBEDDED CONTROLLER
+M:	Jonathan Neuschäfer <j.neuschaefer@gmx.net>
+S:	Maintained
+F:	Documentation/devicetree/bindings/mfd/netronix,ntxec.yaml
+F:	drivers/mfd/ntxec.c
+F:	drivers/pwm/pwm-ntxec.c
+F:	drivers/rtc/rtc-ntxec.c
+F:	include/linux/mfd/ntxec.h
+
 NETRONOME ETHERNET DRIVERS
 M:	Simon Horman <simon.horman@netronome.com>
 R:	Jakub Kicinski <kuba@kernel.org>
--
2.29.2


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

* [PATCH v9 7/7] ARM: dts: imx50-kobo-aura: Add Netronix embedded controller
  2021-01-24 21:41 [PATCH v9 0/7] Netronix embedded controller driver for Kobo and Tolino ebook readers Jonathan Neuschäfer
                   ` (5 preceding siblings ...)
  2021-01-24 21:41 ` [PATCH v9 6/7] MAINTAINERS: Add entry for " Jonathan Neuschäfer
@ 2021-01-24 21:41 ` Jonathan Neuschäfer
  2021-01-25 19:08   ` [PATCH] ARM: dts: imx6sl-tolino-shine2hd: " Andreas Kemnade
  2021-03-03  7:59   ` [PATCH v9 7/7] ARM: dts: imx50-kobo-aura: " Shawn Guo
  2021-02-08 21:56 ` [PATCH v9 0/7] Netronix embedded controller driver for Kobo and Tolino ebook readers Andreas Kemnade
  2021-03-01 10:28 ` [GIT PULL] Immutable branch between MFD, PWM and RTC due for the v5.13 merge window Lee Jones
  8 siblings, 2 replies; 20+ messages in thread
From: Jonathan Neuschäfer @ 2021-01-24 21:41 UTC (permalink / raw)
  To: linux-kernel
  Cc: Lee Jones, Rob Herring, Jonathan Neuschäfer, Thierry Reding,
	Uwe Kleine-König, Alessandro Zummo, Alexandre Belloni,
	Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	NXP Linux Team, Sam Ravnborg, Linus Walleij, Heiko Stuebner,
	Stephan Gerhold, Lubomir Rintel, Mark Brown, allen,
	Mauro Carvalho Chehab, David S. Miller, devicetree, linux-pwm,
	linux-rtc, linux-arm-kernel, Heiko Stuebner, Josua Mayer,
	Andreas Kemnade, Arnd Bergmann, Daniel Palmer, Andy Shevchenko

Enable the Netronix EC on the Kobo Aura ebook reader.

Several features are still missing:
 - Frontlight/backlight. The vendor kernel drives the frontlight LED
   using the PWM output of the EC and an additional boost pin that
   increases the brightness.
 - Battery monitoring
 - Interrupts for RTC alarm and low-battery events

Signed-off-by: Jonathan Neuschäfer <j.neuschaefer@gmx.net>
---
v5-v9:
- no changes

v4:
- https://lore.kernel.org/lkml/20201123000913.1506944-1-j.neuschaefer@gmx.net/
- Add 'grp' suffix to pinctrl node

v3:
- Remove interrupt-controller property from embedded-controller node
- subnodes of embedded-controller node in to the main node

v2:
- Fix pwm-cells property (should be 2, not 1)
---
 arch/arm/boot/dts/imx50-kobo-aura.dts | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/arch/arm/boot/dts/imx50-kobo-aura.dts b/arch/arm/boot/dts/imx50-kobo-aura.dts
index 97cfd970fe742..82ce8c43be867 100644
--- a/arch/arm/boot/dts/imx50-kobo-aura.dts
+++ b/arch/arm/boot/dts/imx50-kobo-aura.dts
@@ -143,10 +143,24 @@ &i2c3 {
 	pinctrl-0 = <&pinctrl_i2c3>;
 	status = "okay";

-	/* TODO: embedded controller at 0x43 */
+	embedded-controller@43 {
+		pinctrl-names = "default";
+		pinctrl-0 = <&pinctrl_ec>;
+		compatible = "netronix,ntxec";
+		reg = <0x43>;
+		system-power-controller;
+		interrupts-extended = <&gpio4 11 IRQ_TYPE_EDGE_FALLING>;
+		#pwm-cells = <2>;
+	};
 };

 &iomuxc {
+	pinctrl_ec: ecgrp {
+		fsl,pins = <
+			MX50_PAD_CSPI_SS0__GPIO4_11		0x0	/* INT */
+		>;
+	};
+
 	pinctrl_gpiokeys: gpiokeysgrp {
 		fsl,pins = <
 			MX50_PAD_CSPI_MISO__GPIO4_10		0x0
--
2.29.2


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

* [PATCH] ARM: dts: imx6sl-tolino-shine2hd: Add Netronix embedded controller
  2021-01-24 21:41 ` [PATCH v9 7/7] ARM: dts: imx50-kobo-aura: Add " Jonathan Neuschäfer
@ 2021-01-25 19:08   ` Andreas Kemnade
  2021-01-25 20:26     ` Jonathan Neuschäfer
  2021-03-03  7:59     ` Shawn Guo
  2021-03-03  7:59   ` [PATCH v9 7/7] ARM: dts: imx50-kobo-aura: " Shawn Guo
  1 sibling, 2 replies; 20+ messages in thread
From: Andreas Kemnade @ 2021-01-25 19:08 UTC (permalink / raw)
  To: robh+dt, shawnguo, s.hauer, kernel, festevam, linux-imx,
	devicetree, linux-arm-kernel, linux-kernel, j.neuschaefer
  Cc: Andreas Kemnade

For now, the driver detects an incompatible version, but since
that can be handled by auto-detection, add the controller to the
devicetree now. Only PWM seems to be available, there is no RTC
in that controller.

Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
---
 arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts b/arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts
index caa279608803..c26bc5e10593 100644
--- a/arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts
+++ b/arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts
@@ -97,8 +97,11 @@ &i2c1 {
 	pinctrl-1 = <&pinctrl_i2c1_sleep>;
 	status = "okay";
 
-	/* TODO: embedded controller at 0x43 (driver missing) */
-
+	ec: embedded-controller@43 {
+		compatible = "netronix,ntxec";
+		reg = <0x43>;
+		#pwm-cells = <2>;
+	};
 };
 
 &i2c2 {
-- 
2.29.2


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

* Re: [PATCH] ARM: dts: imx6sl-tolino-shine2hd: Add Netronix embedded controller
  2021-01-25 19:08   ` [PATCH] ARM: dts: imx6sl-tolino-shine2hd: " Andreas Kemnade
@ 2021-01-25 20:26     ` Jonathan Neuschäfer
  2021-03-03  7:59     ` Shawn Guo
  1 sibling, 0 replies; 20+ messages in thread
From: Jonathan Neuschäfer @ 2021-01-25 20:26 UTC (permalink / raw)
  To: Andreas Kemnade
  Cc: robh+dt, shawnguo, s.hauer, kernel, festevam, linux-imx,
	devicetree, linux-arm-kernel, linux-kernel, j.neuschaefer

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

On Mon, Jan 25, 2021 at 08:08:04PM +0100, Andreas Kemnade wrote:
> For now, the driver detects an incompatible version, but since
> that can be handled by auto-detection, add the controller to the
> devicetree now. Only PWM seems to be available, there is no RTC
> in that controller.
> 
> Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
> ---

Reviewed-by: Jonathan Neuschäfer <j.neuschaefer@gmx.net>

>  arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts b/arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts
> index caa279608803..c26bc5e10593 100644
> --- a/arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts
> +++ b/arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts
> @@ -97,8 +97,11 @@ &i2c1 {
>  	pinctrl-1 = <&pinctrl_i2c1_sleep>;
>  	status = "okay";
>  
> -	/* TODO: embedded controller at 0x43 (driver missing) */
> -
> +	ec: embedded-controller@43 {
> +		compatible = "netronix,ntxec";
> +		reg = <0x43>;
> +		#pwm-cells = <2>;
> +	};

Looks good.


Thanks,
Jonathan

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH v9 0/7] Netronix embedded controller driver for Kobo and Tolino ebook readers
  2021-01-24 21:41 [PATCH v9 0/7] Netronix embedded controller driver for Kobo and Tolino ebook readers Jonathan Neuschäfer
                   ` (6 preceding siblings ...)
  2021-01-24 21:41 ` [PATCH v9 7/7] ARM: dts: imx50-kobo-aura: Add " Jonathan Neuschäfer
@ 2021-02-08 21:56 ` Andreas Kemnade
  2021-02-09 14:11   ` Lee Jones
  2021-03-01 10:28 ` [GIT PULL] Immutable branch between MFD, PWM and RTC due for the v5.13 merge window Lee Jones
  8 siblings, 1 reply; 20+ messages in thread
From: Andreas Kemnade @ 2021-02-08 21:56 UTC (permalink / raw)
  To: Jonathan Neuschäfer
  Cc: linux-kernel, Lee Jones, Rob Herring, Thierry Reding,
	Uwe Kleine-König, Alessandro Zummo, Alexandre Belloni,
	Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	NXP Linux Team, Sam Ravnborg, Linus Walleij, Heiko Stuebner,
	Stephan Gerhold, Lubomir Rintel, Mark Brown, allen,
	Mauro Carvalho Chehab, David S. Miller, devicetree, linux-pwm,
	linux-rtc, linux-arm-kernel, Heiko Stuebner, Josua Mayer,
	Arnd Bergmann, Daniel Palmer, Andy Shevchenko

On Sun, 24 Jan 2021 22:41:20 +0100
Jonathan Neuschäfer <j.neuschaefer@gmx.net> wrote:

> This patchset adds basic support for the embedded controller found on
> older ebook reader boards designed by/with the ODM Netronix Inc.[1] and
> sold by Kobo or Tolino, for example the Kobo Aura and the Tolino Shine.
> These drivers are based on information contained in the vendor kernel
> sources, but in order to all information in a single place, I documented
> the register interface of the EC on GitHub[2].
> 
> [1]: http://www.netronixinc.com/products.aspx?ID=1
> [2]: https://github.com/neuschaefer/linux/wiki/Netronix-MSP430-embedded-controller
> 
> v9:
> - Fixed a bug in the error handling of ntxec_probe,
>   Reported-by: kernel test robot <lkp@intel.com>
> - Added Thierry Reding's ACK to the PWM patch
> 
what is the fate of this one, looks like it got all acks from
maintainers.

Regards,
Andreas

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

* Re: [PATCH v9 0/7] Netronix embedded controller driver for Kobo and Tolino ebook readers
  2021-02-08 21:56 ` [PATCH v9 0/7] Netronix embedded controller driver for Kobo and Tolino ebook readers Andreas Kemnade
@ 2021-02-09 14:11   ` Lee Jones
  0 siblings, 0 replies; 20+ messages in thread
From: Lee Jones @ 2021-02-09 14:11 UTC (permalink / raw)
  To: Andreas Kemnade
  Cc: Jonathan Neuschäfer, linux-kernel, Rob Herring,
	Thierry Reding, Uwe Kleine-König, Alessandro Zummo,
	Alexandre Belloni, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, NXP Linux Team,
	Sam Ravnborg, Linus Walleij, Heiko Stuebner, Stephan Gerhold,
	Lubomir Rintel, Mark Brown, allen, Mauro Carvalho Chehab,
	David S. Miller, devicetree, linux-pwm, linux-rtc,
	linux-arm-kernel, Heiko Stuebner, Josua Mayer, Arnd Bergmann,
	Daniel Palmer, Andy Shevchenko

On Mon, 08 Feb 2021, Andreas Kemnade wrote:

> On Sun, 24 Jan 2021 22:41:20 +0100
> Jonathan Neuschäfer <j.neuschaefer@gmx.net> wrote:
> 
> > This patchset adds basic support for the embedded controller found on
> > older ebook reader boards designed by/with the ODM Netronix Inc.[1] and
> > sold by Kobo or Tolino, for example the Kobo Aura and the Tolino Shine.
> > These drivers are based on information contained in the vendor kernel
> > sources, but in order to all information in a single place, I documented
> > the register interface of the EC on GitHub[2].
> > 
> > [1]: http://www.netronixinc.com/products.aspx?ID=1
> > [2]: https://github.com/neuschaefer/linux/wiki/Netronix-MSP430-embedded-controller
> > 
> > v9:
> > - Fixed a bug in the error handling of ntxec_probe,
> >   Reported-by: kernel test robot <lkp@intel.com>
> > - Added Thierry Reding's ACK to the PWM patch
> > 
> what is the fate of this one, looks like it got all acks from
> maintainers.

I'll apply it when -rc1 is out.

-- 
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog

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

* [GIT PULL] Immutable branch between MFD, PWM and RTC due for the v5.13 merge window
  2021-01-24 21:41 [PATCH v9 0/7] Netronix embedded controller driver for Kobo and Tolino ebook readers Jonathan Neuschäfer
                   ` (7 preceding siblings ...)
  2021-02-08 21:56 ` [PATCH v9 0/7] Netronix embedded controller driver for Kobo and Tolino ebook readers Andreas Kemnade
@ 2021-03-01 10:28 ` Lee Jones
  2021-03-09 20:05   ` Lee Jones
  8 siblings, 1 reply; 20+ messages in thread
From: Lee Jones @ 2021-03-01 10:28 UTC (permalink / raw)
  To: Jonathan Neuschäfer
  Cc: linux-kernel, Rob Herring, Thierry Reding, Uwe Kleine-König,
	Alessandro Zummo, Alexandre Belloni, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, NXP Linux Team,
	Sam Ravnborg, Linus Walleij, Heiko Stuebner, Stephan Gerhold,
	Lubomir Rintel, Mark Brown, allen, Mauro Carvalho Chehab,
	David S. Miller, devicetree, linux-pwm, linux-rtc,
	linux-arm-kernel, Heiko Stuebner, Josua Mayer, Andreas Kemnade,
	Arnd Bergmann, Daniel Palmer, Andy Shevchenko

Enjoy!

The following changes since commit fe07bfda2fb9cdef8a4d4008a409bb02f35f1bd8:

  Linux 5.12-rc1 (2021-02-28 16:05:19 -0800)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd.git ib-mfd-pwm-rtc-v5.13

for you to fetch changes up to 80629611215d1c5d52ed3cf723fd6d24a5872504:

  MAINTAINERS: Add entry for Netronix embedded controller (2021-03-01 10:26:17 +0000)

----------------------------------------------------------------
Immutable branch between MFD, PWM and RTC due for the v5.13 merge window

----------------------------------------------------------------
Jonathan Neuschäfer (6):
      dt-bindings: Add vendor prefix for Netronix, Inc.
      dt-bindings: mfd: Add binding for Netronix embedded controller
      mfd: Add base driver for Netronix embedded controller
      pwm: ntxec: Add driver for PWM function in Netronix EC
      rtc: New driver for RTC in Netronix embedded controller
      MAINTAINERS: Add entry for Netronix embedded controller

 .../devicetree/bindings/mfd/netronix,ntxec.yaml    |  76 +++++++
 .../devicetree/bindings/vendor-prefixes.yaml       |   2 +
 MAINTAINERS                                        |   9 +
 drivers/mfd/Kconfig                                |  11 +
 drivers/mfd/Makefile                               |   1 +
 drivers/mfd/ntxec.c                                | 221 +++++++++++++++++++++
 drivers/pwm/Kconfig                                |   8 +
 drivers/pwm/Makefile                               |   1 +
 drivers/pwm/pwm-ntxec.c                            | 184 +++++++++++++++++
 drivers/rtc/Kconfig                                |   8 +
 drivers/rtc/Makefile                               |   1 +
 drivers/rtc/rtc-ntxec.c                            | 145 ++++++++++++++
 include/linux/mfd/ntxec.h                          |  37 ++++
 13 files changed, 704 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/mfd/netronix,ntxec.yaml
 create mode 100644 drivers/mfd/ntxec.c
 create mode 100644 drivers/pwm/pwm-ntxec.c
 create mode 100644 drivers/rtc/rtc-ntxec.c
 create mode 100644 include/linux/mfd/ntxec.h

-- 
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog

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

* Re: [PATCH v9 7/7] ARM: dts: imx50-kobo-aura: Add Netronix embedded controller
  2021-01-24 21:41 ` [PATCH v9 7/7] ARM: dts: imx50-kobo-aura: Add " Jonathan Neuschäfer
  2021-01-25 19:08   ` [PATCH] ARM: dts: imx6sl-tolino-shine2hd: " Andreas Kemnade
@ 2021-03-03  7:59   ` Shawn Guo
  1 sibling, 0 replies; 20+ messages in thread
From: Shawn Guo @ 2021-03-03  7:59 UTC (permalink / raw)
  To: Jonathan Neuschäfer
  Cc: linux-kernel, Lee Jones, Rob Herring, Thierry Reding,
	Uwe Kleine-König, Alessandro Zummo, Alexandre Belloni,
	Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	NXP Linux Team, Sam Ravnborg, Linus Walleij, Heiko Stuebner,
	Stephan Gerhold, Lubomir Rintel, Mark Brown, allen,
	Mauro Carvalho Chehab, David S. Miller, devicetree, linux-pwm,
	linux-rtc, linux-arm-kernel, Heiko Stuebner, Josua Mayer,
	Andreas Kemnade, Arnd Bergmann, Daniel Palmer, Andy Shevchenko

On Sun, Jan 24, 2021 at 10:41:27PM +0100, Jonathan Neuschäfer wrote:
> Enable the Netronix EC on the Kobo Aura ebook reader.
> 
> Several features are still missing:
>  - Frontlight/backlight. The vendor kernel drives the frontlight LED
>    using the PWM output of the EC and an additional boost pin that
>    increases the brightness.
>  - Battery monitoring
>  - Interrupts for RTC alarm and low-battery events
> 
> Signed-off-by: Jonathan Neuschäfer <j.neuschaefer@gmx.net>

Applied, thanks.

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

* Re: [PATCH] ARM: dts: imx6sl-tolino-shine2hd: Add Netronix embedded controller
  2021-01-25 19:08   ` [PATCH] ARM: dts: imx6sl-tolino-shine2hd: " Andreas Kemnade
  2021-01-25 20:26     ` Jonathan Neuschäfer
@ 2021-03-03  7:59     ` Shawn Guo
  1 sibling, 0 replies; 20+ messages in thread
From: Shawn Guo @ 2021-03-03  7:59 UTC (permalink / raw)
  To: Andreas Kemnade
  Cc: robh+dt, s.hauer, kernel, festevam, linux-imx, devicetree,
	linux-arm-kernel, linux-kernel, j.neuschaefer

On Mon, Jan 25, 2021 at 08:08:04PM +0100, Andreas Kemnade wrote:
> For now, the driver detects an incompatible version, but since
> that can be handled by auto-detection, add the controller to the
> devicetree now. Only PWM seems to be available, there is no RTC
> in that controller.
> 
> Signed-off-by: Andreas Kemnade <andreas@kemnade.info>

Applied, thanks.

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

* Re: [GIT PULL] Immutable branch between MFD, PWM and RTC due for the v5.13 merge window
  2021-03-01 10:28 ` [GIT PULL] Immutable branch between MFD, PWM and RTC due for the v5.13 merge window Lee Jones
@ 2021-03-09 20:05   ` Lee Jones
  2021-03-10 11:08     ` Lee Jones
  2021-03-10 11:39     ` Uwe Kleine-König
  0 siblings, 2 replies; 20+ messages in thread
From: Lee Jones @ 2021-03-09 20:05 UTC (permalink / raw)
  To: Jonathan Neuschäfer
  Cc: linux-kernel, Rob Herring, Thierry Reding, Uwe Kleine-König,
	Alessandro Zummo, Alexandre Belloni, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, NXP Linux Team,
	Sam Ravnborg, Linus Walleij, Heiko Stuebner, Stephan Gerhold,
	Lubomir Rintel, Mark Brown, allen, Mauro Carvalho Chehab,
	David S. Miller, devicetree, linux-pwm, linux-rtc,
	linux-arm-kernel, Heiko Stuebner, Josua Mayer, Andreas Kemnade,
	Arnd Bergmann, Daniel Palmer, Andy Shevchenko

On Mon, 01 Mar 2021, Lee Jones wrote:

> Enjoy!
> 
> The following changes since commit fe07bfda2fb9cdef8a4d4008a409bb02f35f1bd8:
> 
>   Linux 5.12-rc1 (2021-02-28 16:05:19 -0800)
> 
> are available in the Git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd.git ib-mfd-pwm-rtc-v5.13
> 
> for you to fetch changes up to 80629611215d1c5d52ed3cf723fd6d24a5872504:
> 
>   MAINTAINERS: Add entry for Netronix embedded controller (2021-03-01 10:26:17 +0000)
> 
> ----------------------------------------------------------------
> Immutable branch between MFD, PWM and RTC due for the v5.13 merge window
> 
> ----------------------------------------------------------------
> Jonathan Neuschäfer (6):
>       dt-bindings: Add vendor prefix for Netronix, Inc.
>       dt-bindings: mfd: Add binding for Netronix embedded controller
>       mfd: Add base driver for Netronix embedded controller
>       pwm: ntxec: Add driver for PWM function in Netronix EC
>       rtc: New driver for RTC in Netronix embedded controller
>       MAINTAINERS: Add entry for Netronix embedded controller
> 
>  .../devicetree/bindings/mfd/netronix,ntxec.yaml    |  76 +++++++
>  .../devicetree/bindings/vendor-prefixes.yaml       |   2 +
>  MAINTAINERS                                        |   9 +
>  drivers/mfd/Kconfig                                |  11 +
>  drivers/mfd/Makefile                               |   1 +
>  drivers/mfd/ntxec.c                                | 221 +++++++++++++++++++++
>  drivers/pwm/Kconfig                                |   8 +
>  drivers/pwm/Makefile                               |   1 +
>  drivers/pwm/pwm-ntxec.c                            | 184 +++++++++++++++++
>  drivers/rtc/Kconfig                                |   8 +
>  drivers/rtc/Makefile                               |   1 +
>  drivers/rtc/rtc-ntxec.c                            | 145 ++++++++++++++
>  include/linux/mfd/ntxec.h                          |  37 ++++
>  13 files changed, 704 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/mfd/netronix,ntxec.yaml
>  create mode 100644 drivers/mfd/ntxec.c
>  create mode 100644 drivers/pwm/pwm-ntxec.c
>  create mode 100644 drivers/rtc/rtc-ntxec.c
>  create mode 100644 include/linux/mfd/ntxec.h

FYI, if anyone has pulled this, they should probably rebase it onto
v5.12-rc2 and delete the v5.12-rc1 tag from their tree:

  https://lwn.net/Articles/848431/

-- 
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog

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

* Re: [GIT PULL] Immutable branch between MFD, PWM and RTC due for the v5.13 merge window
  2021-03-09 20:05   ` Lee Jones
@ 2021-03-10 11:08     ` Lee Jones
  2021-03-10 11:39     ` Uwe Kleine-König
  1 sibling, 0 replies; 20+ messages in thread
From: Lee Jones @ 2021-03-10 11:08 UTC (permalink / raw)
  To: Jonathan Neuschäfer
  Cc: linux-kernel, Rob Herring, Thierry Reding, Uwe Kleine-König,
	Alessandro Zummo, Alexandre Belloni, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, NXP Linux Team,
	Sam Ravnborg, Linus Walleij, Heiko Stuebner, Stephan Gerhold,
	Lubomir Rintel, Mark Brown, allen, Mauro Carvalho Chehab,
	David S. Miller, devicetree, linux-pwm, linux-rtc,
	linux-arm-kernel, Heiko Stuebner, Josua Mayer, Andreas Kemnade,
	Arnd Bergmann, Daniel Palmer, Andy Shevchenko

On Tue, 09 Mar 2021, Lee Jones wrote:

> On Mon, 01 Mar 2021, Lee Jones wrote:
> 
> > Enjoy!
> > 
> > The following changes since commit fe07bfda2fb9cdef8a4d4008a409bb02f35f1bd8:
> > 
> >   Linux 5.12-rc1 (2021-02-28 16:05:19 -0800)
> > 
> > are available in the Git repository at:
> > 
> >   git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd.git ib-mfd-pwm-rtc-v5.13
> > 
> > for you to fetch changes up to 80629611215d1c5d52ed3cf723fd6d24a5872504:
> > 
> >   MAINTAINERS: Add entry for Netronix embedded controller (2021-03-01 10:26:17 +0000)
> > 
> > ----------------------------------------------------------------
> > Immutable branch between MFD, PWM and RTC due for the v5.13 merge window
> > 
> > ----------------------------------------------------------------
> > Jonathan Neuschäfer (6):
> >       dt-bindings: Add vendor prefix for Netronix, Inc.
> >       dt-bindings: mfd: Add binding for Netronix embedded controller
> >       mfd: Add base driver for Netronix embedded controller
> >       pwm: ntxec: Add driver for PWM function in Netronix EC
> >       rtc: New driver for RTC in Netronix embedded controller
> >       MAINTAINERS: Add entry for Netronix embedded controller
> > 
> >  .../devicetree/bindings/mfd/netronix,ntxec.yaml    |  76 +++++++
> >  .../devicetree/bindings/vendor-prefixes.yaml       |   2 +
> >  MAINTAINERS                                        |   9 +
> >  drivers/mfd/Kconfig                                |  11 +
> >  drivers/mfd/Makefile                               |   1 +
> >  drivers/mfd/ntxec.c                                | 221 +++++++++++++++++++++
> >  drivers/pwm/Kconfig                                |   8 +
> >  drivers/pwm/Makefile                               |   1 +
> >  drivers/pwm/pwm-ntxec.c                            | 184 +++++++++++++++++
> >  drivers/rtc/Kconfig                                |   8 +
> >  drivers/rtc/Makefile                               |   1 +
> >  drivers/rtc/rtc-ntxec.c                            | 145 ++++++++++++++
> >  include/linux/mfd/ntxec.h                          |  37 ++++
> >  13 files changed, 704 insertions(+)
> >  create mode 100644 Documentation/devicetree/bindings/mfd/netronix,ntxec.yaml
> >  create mode 100644 drivers/mfd/ntxec.c
> >  create mode 100644 drivers/pwm/pwm-ntxec.c
> >  create mode 100644 drivers/rtc/rtc-ntxec.c
> >  create mode 100644 include/linux/mfd/ntxec.h
> 
> FYI, if anyone has pulled this, they should probably rebase it onto
> v5.12-rc2 and delete the v5.12-rc1 tag from their tree:
> 
>   https://lwn.net/Articles/848431/

In case you haven't pulled this in yet, I have created a new tag:

  ib-mfd-pwm-rtc-v5.13-1

-- 
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog

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

* Re: [GIT PULL] Immutable branch between MFD, PWM and RTC due for the v5.13 merge window
  2021-03-09 20:05   ` Lee Jones
  2021-03-10 11:08     ` Lee Jones
@ 2021-03-10 11:39     ` Uwe Kleine-König
  2021-03-10 11:54       ` Alexandre Belloni
  1 sibling, 1 reply; 20+ messages in thread
From: Uwe Kleine-König @ 2021-03-10 11:39 UTC (permalink / raw)
  To: Lee Jones
  Cc: Jonathan Neuschäfer, Alexandre Belloni, Heiko Stuebner,
	devicetree, Linus Walleij, Thierry Reding, Sam Ravnborg,
	linux-rtc, Arnd Bergmann, Mauro Carvalho Chehab, Fabio Estevam,
	Daniel Palmer, Andy Shevchenko, Andreas Kemnade, NXP Linux Team,
	linux-pwm, Stephan Gerhold, allen, Sascha Hauer, Lubomir Rintel,
	Mark Brown, linux-arm-kernel, Alessandro Zummo, linux-kernel,
	Rob Herring, Pengutronix Kernel Team, Heiko Stuebner,
	Josua Mayer, Shawn Guo, David S. Miller

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

Hello Lee,

On Tue, Mar 09, 2021 at 08:05:20PM +0000, Lee Jones wrote:
> On Mon, 01 Mar 2021, Lee Jones wrote:
> 
> > The following changes since commit fe07bfda2fb9cdef8a4d4008a409bb02f35f1bd8:
> > 
> >   Linux 5.12-rc1 (2021-02-28 16:05:19 -0800)
> > 
> > are available in the Git repository at:
> > 
> >   git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd.git ib-mfd-pwm-rtc-v5.13
> > 
> > for you to fetch changes up to 80629611215d1c5d52ed3cf723fd6d24a5872504:
> > 
> >   MAINTAINERS: Add entry for Netronix embedded controller (2021-03-01 10:26:17 +0000)
> > 
> > ----------------------------------------------------------------
> > Immutable branch between MFD, PWM and RTC due for the v5.13 merge window
> > 
> > ----------------------------------------------------------------
> > [...]
> 
> FYI, if anyone has pulled this, they should probably rebase it onto
> v5.12-rc2 and delete the v5.12-rc1 tag from their tree:
> 
>   https://lwn.net/Articles/848431/

I'm not directly affected, but I wonder: The idea of an immutable branch
is that the same history gets included in different trees. If now each
maintainer rebases individually the result isn't the same
history any more in each tree which somewhat defeats the idea of using
immutable branches.

IMHO there are two ways forward: Either someone (Lee again?) creates a
new pull request for this series rebased on -rc2; or we accept that
these few patches are based on -rc1. For the latter it would be
beneficial to merge the tag into a tree that is already based on -rc2.

Currently this branch makes it into next only via mfd[1].

A little bit of statistics for the interested: Between the broken commit
48d15436fde6 and its fix (caf6912f3f4a) there are 655 commits that are
broken (git rev-list --ancestry-path 48d15436fde6..caf6912f3f4a | wc
-l). We won't get rid of these. (Well unless Linus descides to rewrite
history which would surprise me.)

In current next (b01d57bfdc41c8f635b08b8a5af8a31217d46936) there are
3244 commits that include the broken commit 48d15436fde6
(git rev-list --ancestry-path 48d15436fde6..next/master | wc -l) and
only 1411 of them also include the fix
(git rev-list --ancestry-path caf6912f3f4a..next/master | wc -l). So
next currently introduces 3244 - 1411 - 655 = 1178 additional broken
commits. My feeling is that unless this number goes down considerably,
we don't have to recourse to special measures to fix the 6 commits in
this pull request and merging it based on -rc1-dontuse should be fine.

A list of merges into next that contain the problematic commit but not
its fix can be generated using

git rev-list --merges --first-parent linus/master..next/master | 
while read c; do 
	if git merge-base --is-ancestor 48d15436fde6 $c^2 && ! git merge-base --is-ancestor caf6912f3f4a $c^2; then
		git show -s --pretty=oneline "$c";
	fi;
done | nl

It currently shows 37 merges.

Best regards
Uwe

[1] git rev-list --merges --first-parent 80629611215d1c5d52ed3cf723fd6d24a5872504..next/master  | while read c; do if  git merge-base --is-ancestor 80629611215d1c5d52ed3cf723fd6d24a5872504 $c^2; then git show -s --pretty=oneline "$c"; fi; done


-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | https://www.pengutronix.de/ |

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

* Re: [GIT PULL] Immutable branch between MFD, PWM and RTC due for the v5.13 merge window
  2021-03-10 11:39     ` Uwe Kleine-König
@ 2021-03-10 11:54       ` Alexandre Belloni
  2021-03-12 18:42         ` Mark Brown
  0 siblings, 1 reply; 20+ messages in thread
From: Alexandre Belloni @ 2021-03-10 11:54 UTC (permalink / raw)
  To: Uwe Kleine-König
  Cc: Lee Jones, Jonathan Neuschäfer, Heiko Stuebner, devicetree,
	Linus Walleij, Thierry Reding, Sam Ravnborg, linux-rtc,
	Arnd Bergmann, Mauro Carvalho Chehab, Fabio Estevam,
	Daniel Palmer, Andy Shevchenko, Andreas Kemnade, NXP Linux Team,
	linux-pwm, Stephan Gerhold, allen, Sascha Hauer, Lubomir Rintel,
	Mark Brown, linux-arm-kernel, Alessandro Zummo, linux-kernel,
	Rob Herring, Pengutronix Kernel Team, Heiko Stuebner,
	Josua Mayer, Shawn Guo, David S. Miller

On 10/03/2021 12:39:59+0100, Uwe Kleine-König wrote:
> Hello Lee,
> 
> On Tue, Mar 09, 2021 at 08:05:20PM +0000, Lee Jones wrote:
> > On Mon, 01 Mar 2021, Lee Jones wrote:
> > 
> > > The following changes since commit fe07bfda2fb9cdef8a4d4008a409bb02f35f1bd8:
> > > 
> > >   Linux 5.12-rc1 (2021-02-28 16:05:19 -0800)
> > > 
> > > are available in the Git repository at:
> > > 
> > >   git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd.git ib-mfd-pwm-rtc-v5.13
> > > 
> > > for you to fetch changes up to 80629611215d1c5d52ed3cf723fd6d24a5872504:
> > > 
> > >   MAINTAINERS: Add entry for Netronix embedded controller (2021-03-01 10:26:17 +0000)
> > > 
> > > ----------------------------------------------------------------
> > > Immutable branch between MFD, PWM and RTC due for the v5.13 merge window
> > > 
> > > ----------------------------------------------------------------
> > > [...]
> > 
> > FYI, if anyone has pulled this, they should probably rebase it onto
> > v5.12-rc2 and delete the v5.12-rc1 tag from their tree:
> > 
> >   https://lwn.net/Articles/848431/
> 
> I'm not directly affected, but I wonder: The idea of an immutable branch
> is that the same history gets included in different trees. If now each
> maintainer rebases individually the result isn't the same
> history any more in each tree which somewhat defeats the idea of using
> immutable branches.
> 
> IMHO there are two ways forward: Either someone (Lee again?) creates a
> new pull request for this series rebased on -rc2; or we accept that
> these few patches are based on -rc1. For the latter it would be
> beneficial to merge the tag into a tree that is already based on -rc2.
> 

The solution is simply for the maintainers merging the immutable branch
to do that in a branch based on -rc2. Eg. I've rebased rtc-next on -rc2
(fast forward, I didn't have any patch). I can now merge this branch if
necessary, problem solved. If you can't rebased, nothing prevents you
from merging -rc2 in any branch.


-- 
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

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

* Re: [GIT PULL] Immutable branch between MFD, PWM and RTC due for the v5.13 merge window
  2021-03-10 11:54       ` Alexandre Belloni
@ 2021-03-12 18:42         ` Mark Brown
  0 siblings, 0 replies; 20+ messages in thread
From: Mark Brown @ 2021-03-12 18:42 UTC (permalink / raw)
  To: Alexandre Belloni
  Cc: Uwe Kleine-König, Lee Jones, Jonathan Neuschäfer,
	Heiko Stuebner, devicetree, Linus Walleij, Thierry Reding,
	Sam Ravnborg, linux-rtc, Arnd Bergmann, Mauro Carvalho Chehab,
	Fabio Estevam, Daniel Palmer, Andy Shevchenko, Andreas Kemnade,
	NXP Linux Team, linux-pwm, Stephan Gerhold, allen, Sascha Hauer,
	Lubomir Rintel, linux-arm-kernel, Alessandro Zummo, linux-kernel,
	Rob Herring, Pengutronix Kernel Team, Heiko Stuebner,
	Josua Mayer, Shawn Guo, David S. Miller

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

On Wed, Mar 10, 2021 at 12:54:08PM +0100, Alexandre Belloni wrote:
> On 10/03/2021 12:39:59+0100, Uwe Kleine-König wrote:

> > IMHO there are two ways forward: Either someone (Lee again?) creates a
> > new pull request for this series rebased on -rc2; or we accept that
> > these few patches are based on -rc1. For the latter it would be
> > beneficial to merge the tag into a tree that is already based on -rc2.

> The solution is simply for the maintainers merging the immutable branch
> to do that in a branch based on -rc2. Eg. I've rebased rtc-next on -rc2
> (fast forward, I didn't have any patch). I can now merge this branch if
> necessary, problem solved. If you can't rebased, nothing prevents you
> from merging -rc2 in any branch.

That doesn't exactly address the issue - the goal was to reduce the
number of commits that a bisect could hit which have the swapfile bug
but lack the fix.  How serious a few extra commits on a shared branch
really are is of course an open question though.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

end of thread, other threads:[~2021-03-12 18:44 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-24 21:41 [PATCH v9 0/7] Netronix embedded controller driver for Kobo and Tolino ebook readers Jonathan Neuschäfer
2021-01-24 21:41 ` [PATCH v9 1/7] dt-bindings: Add vendor prefix for Netronix, Inc Jonathan Neuschäfer
2021-01-24 21:41 ` [PATCH v9 2/7] dt-bindings: mfd: Add binding for Netronix embedded controller Jonathan Neuschäfer
2021-01-24 21:41 ` [PATCH v9 3/7] mfd: Add base driver " Jonathan Neuschäfer
2021-01-24 21:41 ` [PATCH v9 4/7] pwm: ntxec: Add driver for PWM function in Netronix EC Jonathan Neuschäfer
2021-01-24 21:41 ` [PATCH v9 5/7] rtc: New driver for RTC in Netronix embedded controller Jonathan Neuschäfer
2021-01-24 21:41 ` [PATCH v9 6/7] MAINTAINERS: Add entry for " Jonathan Neuschäfer
2021-01-24 21:41 ` [PATCH v9 7/7] ARM: dts: imx50-kobo-aura: Add " Jonathan Neuschäfer
2021-01-25 19:08   ` [PATCH] ARM: dts: imx6sl-tolino-shine2hd: " Andreas Kemnade
2021-01-25 20:26     ` Jonathan Neuschäfer
2021-03-03  7:59     ` Shawn Guo
2021-03-03  7:59   ` [PATCH v9 7/7] ARM: dts: imx50-kobo-aura: " Shawn Guo
2021-02-08 21:56 ` [PATCH v9 0/7] Netronix embedded controller driver for Kobo and Tolino ebook readers Andreas Kemnade
2021-02-09 14:11   ` Lee Jones
2021-03-01 10:28 ` [GIT PULL] Immutable branch between MFD, PWM and RTC due for the v5.13 merge window Lee Jones
2021-03-09 20:05   ` Lee Jones
2021-03-10 11:08     ` Lee Jones
2021-03-10 11:39     ` Uwe Kleine-König
2021-03-10 11:54       ` Alexandre Belloni
2021-03-12 18:42         ` Mark Brown

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).