From patchwork Tue Dec 8 01:09:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?J=2E_Neusch=C3=A4fer?= X-Patchwork-Id: 339920 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CAE1BC2BB9A for ; Tue, 8 Dec 2020 01:13:17 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9F6F123AA9 for ; Tue, 8 Dec 2020 01:13:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726537AbgLHBNI (ORCPT ); Mon, 7 Dec 2020 20:13:08 -0500 Received: from mout.gmx.net ([212.227.17.21]:50343 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726147AbgLHBNH (ORCPT ); Mon, 7 Dec 2020 20:13:07 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1607389839; bh=pnWfE1q4e+S1NcScWWdH3l56DjjQYX0DB2eDmmG2Qmw=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=AKQ2iQ0qyuboRtIt3wsgQEUHoMTJK7lz8W8pTBEWLwy6qkvyOghWfRmaQj0f2Vb2A nkqAaMdN0O1K+7nnvck+SOrSmiRl76yu3a/VfLapbED0+DocT93LVNCbpmJIPfRJK5 gpeCjapk2bi1NGR6T4H4RXMyRfHU9Ap/5ej3oUmQ= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from longitude ([37.201.214.162]) by mail.gmx.com (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MJmGP-1kSrP415kP-00K6ae; Tue, 08 Dec 2020 02:10:39 +0100 From: =?utf-8?q?Jonathan_Neusch=C3=A4fer?= To: linux-kernel@vger.kernel.org Cc: Lee Jones , Rob Herring , =?utf-8?q?Jonathan_Neusch=C3=A4fer?= , Thierry Reding , =?utf-8?q?Uwe_Kleine-K?= =?utf-8?b?w7ZuaWc=?= , 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@vger.kernel.org, linux-pwm@vger.kernel.org, linux-rtc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Heiko Stuebner , Josua Mayer , Andreas Kemnade , Arnd Bergmann , Daniel Palmer , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Geert Uytterhoeven , Kuninori Morimoto Subject: [PATCH v6 1/7] dt-bindings: Add vendor prefix for Netronix, Inc. Date: Tue, 8 Dec 2020 02:09:54 +0100 Message-Id: <20201208011000.3060239-2-j.neuschaefer@gmx.net> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201208011000.3060239-1-j.neuschaefer@gmx.net> References: <20201208011000.3060239-1-j.neuschaefer@gmx.net> MIME-Version: 1.0 X-Provags-ID: V03:K1:jLNKQX72YE6HNCrjXmN3THj8hVdDQ5skL5MYyC79rsgWv1+w+CK rKbCb9+26R5YFuwL0WD3Sn8gAxZL+wn8+LkQ5Jc73cZL8Je13kNw9BG+eeAwId6ucIb3+53 VGzRydEuYZl64RcZEB7ZeGnFqofNJHOEXOhYy155ixfJmg330iknjH3oR0mouqnS72Y2VXq EAvLuMya4kPyfw9EnxCVA== X-UI-Out-Filterresults: notjunk:1; V03:K0:suINVp6qRSc=:Y4S+wKKlX+AzqPSZmgUBwl Kkm/Gce0T1WYUPv1AfdeNSpRsGxIzDyirh5F37k1Zl9xl/1E0/zr7cIcGeG8hVpgHm/P3/bc2 vcplii5VushZiy04TTpi+PHc6NfPxCJYHN4b3wSVrExqoC5bTIpoTTBGslUuJSHFN6wJTAqsD UUJGIKUw4qBk0G3OwTLODJJmgPmaQjL8Onk5CDektW0I0YXBJzojuBIkD8RMoGaKQL/tHoTKN pcNWdzArPK36Jam35dzntOpzZyfaKYW2CjZvXIwYVmcqKk8tBoG514Fh+tBKVPnp1gjknDl9H PECgsPPm6yo75HQKa8V1VGYwziKCxfPjvaaQmQzOf9HkF8wikspzIzTCy0rYiLSoNFBfXLgq8 e6vM49TxZ1RlCm1pjTihS7F1i/dmMG3cdAHhMHyTLd2tsJX419Kb1YSZe9kN+yPnexWLtXQAH vMusuE+cY0u73P47AR+b90wBIfuX6b6GACmKsSlhO3mdWg8Fd7MfGrvjANYFHNZr5UPNiq4Z+ ocr+u2LC3mIN6090uN3GUvIfzWDbHvDDwgQRh7B10v2RelDffMNkBPXaH+pT21prdGE/Q+/7O fZrQxG7BqOPDIwg1sxt76w7sTmarBJuq744+zlHMbVcP49d9mTVBV0fc6Qbdg//NMvo2rWfr4 H554fm8rI1YBwa7zqeMNU/fVnpAglU6KnKZHjAWHq6Nd/8kXgmqbo76rr1ElE8My3Fu1+1L0O hr6C24U2KYEUdHAcMFhiHl0hHH7nX28KQscgdAQMGuj5WAr5SYK94Du5S4O7RD3lcfnnNA/I1 7gflXmXX1HRQrccDqvGn/BOSNQrShzJI4u8l9Q/vG/b43NI2pFvYmGhejJy6NWU098jW0wVvJ Agob6qs2Z4H5+CMdv1oQ== Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org 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 Acked-by: Rob Herring --- v4-v6: - 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(+) -- 2.29.2 diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml index 2735be1a84709..cbf28f992b71e 100644 --- a/Documentation/devicetree/bindings/vendor-prefixes.yaml +++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml @@ -726,6 +726,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,.*": From patchwork Tue Dec 8 01:09:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?J=2E_Neusch=C3=A4fer?= X-Patchwork-Id: 339921 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-20.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4C54EC1B0D9 for ; Tue, 8 Dec 2020 01:13:17 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 23B0423A31 for ; Tue, 8 Dec 2020 01:13:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726413AbgLHBNB (ORCPT ); Mon, 7 Dec 2020 20:13:01 -0500 Received: from mout.gmx.net ([212.227.15.18]:33695 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726247AbgLHBM7 (ORCPT ); Mon, 7 Dec 2020 20:12:59 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1607389844; bh=HfmzY+mOEYx4C4wVfJ2StsJL7j0bNVmAjOXr6dVo5/c=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=aMgANgnK9vAnNX4PehxIppysmwT30VWuQQAjJbUvAtj5VuxGrrijyXGYpelUZjBj5 kzvOwggB+S6Sz+n5Ndi69bKZdT2UUNlZGTl9UP9ol6CPvw0/l/ccUM2ulaZ4ddG9Gy WMmD0RhS9bxX33UMhVYoMitxxvwsOPmr1Qe3nAtw= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from longitude ([37.201.214.162]) by mail.gmx.com (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1N1wlv-1k2MIP0egT-012KWP; Tue, 08 Dec 2020 02:10:44 +0100 From: =?utf-8?q?Jonathan_Neusch=C3=A4fer?= To: linux-kernel@vger.kernel.org Cc: Lee Jones , Rob Herring , =?utf-8?q?Jonathan_Neusch=C3=A4fer?= , Thierry Reding , =?utf-8?q?Uwe_Kleine-K?= =?utf-8?b?w7ZuaWc=?= , 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@vger.kernel.org, linux-pwm@vger.kernel.org, linux-rtc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Heiko Stuebner , Josua Mayer , Andreas Kemnade , Arnd Bergmann , Daniel Palmer , Andy Shevchenko Subject: [PATCH v6 3/7] mfd: Add base driver for Netronix embedded controller Date: Tue, 8 Dec 2020 02:09:56 +0100 Message-Id: <20201208011000.3060239-4-j.neuschaefer@gmx.net> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201208011000.3060239-1-j.neuschaefer@gmx.net> References: <20201208011000.3060239-1-j.neuschaefer@gmx.net> MIME-Version: 1.0 X-Provags-ID: V03:K1:ghjPRhXHk+XvkGKeAkpudi9GejhOfY34NX/uPYorrYSM2x1DUHL Jwuq0Tg31ezODZwxjD02Pw+A+Aa2e1P1AE2YZytlneG/6KgESmUukLvOuUcFSWoD7oPjhZo +5xlSfwqoY5ehSCf7cVsB8GbvldznLX15xhnk1xes7oxQSQOWltNcRFSzQsYvNcj0ZwwAHG b51syXXwbp5tvPaL+4oGw== X-UI-Out-Filterresults: notjunk:1; V03:K0:Dx5SIK4CN04=:QaSWBi+WFlMS8mXmNMiMxA WtVTQBs+LVTKTNhSC8HKSSqlbK4PXrgiOA5v2NSXZCmrTpkaffGqgfDANFkBww8mZr4JKzi5C GiXF28gQQ5LC2KWaYLNomiusGb6RGTOuAZ/LqERH763oYJWHExtsy6P3V6fQK9RE3BcXeGjka E/LZ73TtegG0SSmjJ6nJDCljW8EZfEoF8EUH9AKZ2wbkyuPtp201bLrr+kgpwnRqqdfr3gcaB uGGrmnogaqgZjeUrmhb/4aspw8OHWbBjOT2+SOGBPPD7OyOB3Bum5dmvFB4THjpXVaq34svKx NEE2XyiMKsQj9NY2gUKUn+ifErWVB9wSC2pOuG+he2lnfO/bwjqzW0ptbMobTKXvUtQLSUPct p63oovtyIGwUusVwlLrH7Qr7ntlolzfC++rqNUQ7b9nWxfGxYE2fxRsttirgfJlBXBXB2xlnt +YVqUSt71DIfEAiItX5ckZomTB13dMQekzIUFRmxrkxLFrA52EK4lIdapOz79Ektle8Yc/o0D y8WJeLWqgr3qLJJSIjh1M9Vor9Vye57F6FPW9hAHecqTTp5OlMzfGOqpCTs+Lgfbp9gtp4q1s QYAI2CXeljS4a2MFNc2sQrii9ow8WFQUWYoYffptBJZf9wzK2EKF3+WF3k4SArxD1J3Rogn3j X5HOBUTMKX2YLKmMIzTWkARspG08Fgs7U/VSeK4oPDUaxNuLY0sIWYig2Ts1BJTMpIKn2WL+V bzzvEYpUSFwTpylHBOL2iQ7zwRpUrYhxTUP1Wa5PcD6HKF5f2Y6nyXaEffRpU3IZHhdKR1f0f 4rdcW+hvGZ92ptWKH89QvigRB/3Aqu+gWAN6s3E+oNzejAx/bmhQN0dEwoJhms1lCVaciLXuD FADwhGWUAPBRLw0YserA== Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org 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 Acked-for-MFD-by: Lee Jones --- v6: - Add Lee Jones' ACK v5: - no changes v4: - https://lore.kernel.org/lkml/20201122222739.1455132-4-j.neuschaefer@gmx.net/ - 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: - https://lore.kernel.org/lkml/20200924192455.2484005-4-j.neuschaefer@gmx.net/ - 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: - https://lore.kernel.org/lkml/20200905133230.1014581-4-j.neuschaefer@gmx.net/ - 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 | 216 ++++++++++++++++++++++++++++++++++++++ include/linux/mfd/ntxec.h | 34 ++++++ 4 files changed, 262 insertions(+) create mode 100644 drivers/mfd/ntxec.c create mode 100644 include/linux/mfd/ntxec.h -- 2.29.2 diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig index 8b99a13669bfc..d96751f884dc6 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig @@ -990,6 +990,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 1780019d24748..815c99b84019e 100644 --- a/drivers/mfd/Makefile +++ b/drivers/mfd/Makefile @@ -218,6 +218,7 @@ obj-$(CONFIG_MFD_INTEL_MSIC) += intel_msic.o obj-$(CONFIG_MFD_INTEL_PMC_BXT) += intel_pmc_bxt.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..c1510711d7363 --- /dev/null +++ b/drivers/mfd/ntxec.c @@ -0,0 +1,216 @@ +// 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 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#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, ®map_config); + if (IS_ERR(ec->regmap)) { + dev_err(ec->dev, "Failed to set up regmap for device\n"); + return res; + } + + /* 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 0xd726: /* found in 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", }, + {} +}; + +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); diff --git a/include/linux/mfd/ntxec.h b/include/linux/mfd/ntxec.h new file mode 100644 index 0000000000000..b1de91f4fdcad --- /dev/null +++ b/include/linux/mfd/ntxec.h @@ -0,0 +1,34 @@ +/* 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 + +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; +} + +#endif From patchwork Tue Dec 8 01:09:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?J=2E_Neusch=C3=A4fer?= X-Patchwork-Id: 339916 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 20ADBC4361B for ; Tue, 8 Dec 2020 02:13:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D26CE23A57 for ; Tue, 8 Dec 2020 02:13:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727809AbgLHCNK (ORCPT ); Mon, 7 Dec 2020 21:13:10 -0500 Received: from mout.gmx.net ([212.227.15.18]:34417 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726830AbgLHCNK (ORCPT ); Mon, 7 Dec 2020 21:13:10 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1607393457; bh=F3QtjZZG93hHA6vRPJKE8IwnWeenHV4ItwEp0aN02oM=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=A8pr6+cN7UcqKm8MIbbVL/YVBiqwVGeSWa6NFTB80MWN0i6kwDsAKCnrTL+zb/qhL hjiy6KXg2jhbxk38iyIC7Ugnn+0+LWFSEsHcR5SS/tJoiYFUR3Ftz7SkRa/SJGLO/f z/DtsZpb4AF5398cMlsLHInROT21twXqofLbxoh8= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from longitude ([37.201.214.162]) by mail.gmx.com (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MjjCL-1kJQMs0Psp-00lDBu; Tue, 08 Dec 2020 03:10:57 +0100 From: =?utf-8?q?Jonathan_Neusch=C3=A4fer?= To: linux-kernel@vger.kernel.org Cc: Lee Jones , Rob Herring , =?utf-8?q?Jonathan_Neusch=C3=A4fer?= , Thierry Reding , =?utf-8?q?Uwe_Kleine-K?= =?utf-8?b?w7ZuaWc=?= , 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@vger.kernel.org, linux-pwm@vger.kernel.org, linux-rtc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Heiko Stuebner , Josua Mayer , Andreas Kemnade , Arnd Bergmann , Daniel Palmer , Andy Shevchenko Subject: [PATCH v6 5/7] rtc: New driver for RTC in Netronix embedded controller Date: Tue, 8 Dec 2020 02:09:58 +0100 Message-Id: <20201208011000.3060239-6-j.neuschaefer@gmx.net> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201208011000.3060239-1-j.neuschaefer@gmx.net> References: <20201208011000.3060239-1-j.neuschaefer@gmx.net> MIME-Version: 1.0 X-Provags-ID: V03:K1:sht59cd5i0srtO/cpZxBHhJuGkEEFFbVQJvUZwFZz3n/KIHtPvt yvetNFklqpjWwZS5aN7V0p+EFevvEjq2r3+buaaHnB0PRmm4PWj3eFRPSTB0FiIqe7fYq8r yagYGoU+542qE9GqAjNbpvU6bjTPW/VaK+eH2rnzUnEVlf38WqZ//Zp18Av1xmNUOodVoYQ XOnhfDcZiZVjZGRsWxQig== X-UI-Out-Filterresults: notjunk:1; V03:K0:bjPLcYvEBSU=:llMiPVdh3HdX1gZn2OzTPV LUJlYJKYnyJTRk8UyUNsaan4DanqNXX2vvDCtlf5yGLuyirGzCpiuQXAQanasMpF+dsw1m3J/ N5xyX4bZoUNuovqn0Bxt/rQrtPMAp9U6QBqdSPOayIj20mjeEK1pCfcEfk14hnm/5seqdiHfs nyPwrJWYkp2clq8VL9yk2nG3Kez46lBZdLiPQuUXE93d9le/HZ5rRpViX4U+fUhQEQwGToGIU FUetirHt3G6Ln9rs6YMEu6Obw9Tnhso7yOkF1MGrvVJm6TaezI2ikM7YlBRxzbhOy5DDVAW2G RtgWDBo87Na9YdtJBGlvIHvsaHKUtHhc4EXQxm/u8674iAolT3p4m5e+eGxuM1VcWiqrDDZKo +Y+BJnFdKaSVtKV4+cFd72zkEOYJ7LzrFFXAzDIxvjcVFqHnsoEvNus0Zo4owXhHQwPAsYQ8y XOEHIF2QiPWrjnT4l687nhGI/wIKtXkPiu0bjej63LF72GD4bgAFDB5nFf84EDvGuI+dfjrPK olRTZEq8eXvOK0ODSFpQeUrWkxBZSjdmoQCKlgleg8bjgUaEsY84Iv0GbcHiI/xTGK45VCq9M ueaWovJa3ZmusAiZMO2PgfZrzkPjDzGVkP6lREn2lmhjdjjYu+I9ZGa+qAjTx6ajJVreDOBH9 UREqEZHRxoWkbnviUD0x4gO68+AiWgkZ60gCRsdvfaC8ODgyzTSdEaMHXTZLwsiGtrjC/67WE tkWORYu8Ldb+qHqbRQif9NJ37RKhGu2aOfQO1q3TywGkkygeyQ56OPa1d/c7YCTOIJp5v/oTa iXmFzCOCkoNHFX39xMf8XWN/r0FsGiuTNw7LuRWllOdnlC2d7Dbgji08REs11IVb5Qjjs5Q3B xa1WZ8toatv1qnHigEfg== Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org 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 Acked-by: Alexandre Belloni --- v6: - no changes v5: - Add Alexandre Belloni's A-b - Use regmap_multi_reg_write v4: - https://lore.kernel.org/lkml/20201122222739.1455132-6-j.neuschaefer@gmx.net/ - 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: - https://lore.kernel.org/lkml/20200924192455.2484005-6-j.neuschaefer@gmx.net/ - 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: - https://lore.kernel.org/lkml/20200905133230.1014581-7-j.neuschaefer@gmx.net/ - 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 | 143 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 152 insertions(+) create mode 100644 drivers/rtc/rtc-ntxec.c -- 2.29.2 diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig index 65ad9d0b47ab1..fe009949728b3 100644 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig @@ -1311,6 +1311,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 bfb57464118d0..5f2a7582b2780 100644 --- a/drivers/rtc/Makefile +++ b/drivers/rtc/Makefile @@ -111,6 +111,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..c7cff7802895b --- /dev/null +++ b/drivers/rtc/rtc-ntxec.c @@ -0,0 +1,143 @@ +// 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 + */ + +#include +#include +#include +#include +#include +#include + +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; + + 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 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 "); +MODULE_DESCRIPTION("RTC driver for Netronix EC"); +MODULE_LICENSE("GPL"); +MODULE_ALIAS("platform:ntxec-rtc"); From patchwork Tue Dec 8 01:09:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?J=2E_Neusch=C3=A4fer?= X-Patchwork-Id: 339915 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 97555C2BBD4 for ; Tue, 8 Dec 2020 02:13:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6130323A55 for ; Tue, 8 Dec 2020 02:13:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727179AbgLHCNO (ORCPT ); Mon, 7 Dec 2020 21:13:14 -0500 Received: from mout.gmx.net ([212.227.17.21]:60517 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726830AbgLHCNN (ORCPT ); Mon, 7 Dec 2020 21:13:13 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1607393458; bh=WBl3UrUkR8LNzp1EKh9L7GsYc+XMH2QlTuD5DMeOSsI=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=c/gMM1JwkqA70r2eT8hu0Vm9AHadbAa4uktdnkzeVYuQeEOnSrXJgD+mxvVojzpEY SNf2B3GhVvtGK+ouAFOcWXGWrSz6Sp+UevQ+HU9swhV4Z3Zcr7+fQGXNx1He21DmLX GBblwFY7zGouMnTCnrJ9agL3m1r3GI+KIEm24/kQ= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from longitude ([37.201.214.162]) by mail.gmx.com (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MybGX-1jwrRn2A7J-00yuzK; Tue, 08 Dec 2020 03:10:58 +0100 From: =?utf-8?q?Jonathan_Neusch=C3=A4fer?= To: linux-kernel@vger.kernel.org Cc: Lee Jones , Rob Herring , =?utf-8?q?Jonathan_Neusch=C3=A4fer?= , Thierry Reding , =?utf-8?q?Uwe_Kleine-K?= =?utf-8?b?w7ZuaWc=?= , 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@vger.kernel.org, linux-pwm@vger.kernel.org, linux-rtc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Heiko Stuebner , Josua Mayer , Andreas Kemnade , Arnd Bergmann , Daniel Palmer , Andy Shevchenko Subject: [PATCH v6 6/7] MAINTAINERS: Add entry for Netronix embedded controller Date: Tue, 8 Dec 2020 02:09:59 +0100 Message-Id: <20201208011000.3060239-7-j.neuschaefer@gmx.net> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201208011000.3060239-1-j.neuschaefer@gmx.net> References: <20201208011000.3060239-1-j.neuschaefer@gmx.net> MIME-Version: 1.0 X-Provags-ID: V03:K1:KrRMGiDmIbt0sBNUbCS4VOY+FTc3iGce8A+/3NciAwGds7DAC4A HU5zyIPz1YAcGXB0yBjRqBhxui/w+mWKbFBZ7CkITOfBJrecikXxPJmbwLqtlZ+kPkvfXHC n5pKbaGyqjDghlbbuyP7lQSmHJ51Ni6/TDLtwizyQ5OUwiV93GAUZm2nntPH50tKinpixa/ oV4nXdDhbB9trdckJz6Ag== X-UI-Out-Filterresults: notjunk:1; V03:K0:M7CN/MeYUhE=:ZVQHiMlpAZY9664thIOZ+3 rVdlAFm00hd2Gt1Mo2SY1wLXnT3zjJH41VEZdt1hNbza93CIp6FKN+5eXOuc0qYYDke48jJmn P4ubYkj2I61CTn5W8yR6YUxQWOfPJbE1vunUwh6IZ8nYvybNmcY1KvtFan9OsAGfLjEX6kWSr vh+FnG57ORB4N5PlUM3ZQ//qylnd6puXa+rh6qZ4KDpuzvA3X26sNENoKeDYxoluwZokPd1l0 vTMFTvEOGRTlA9+y46bO5VhdH7DVqOb1I1j3FdW+IxiAVLf7zp287FQSD3Po4a6kYOPJzzFuU rJfqDGgIHbe0MdYUN2MPBSBYM2sKEuJ2mFQ8CIlqisMSfwYm+2vyFQA+DoWNc4/zHrMj+EOIy vzls3j1qvSWNH+U6tHRpuvx8jE6B+aROuoxEghc5gnzaGuj4iicblAL4Dxul10YNr7dMZbb+r RQqSyI3s4u2f5mkiBZg07T2I/9DGERGuIGlPNJGRClSOU2r3RQFPeB7CLtv+/85G9ZHkczSJP gI+j0eeJSPkLFrk76Wt2xU7lFStoe1QdBdOKzYioFFpGa3iU4eBcScFT/Rsplcv7lSynf3k2a uq8zNmOgoaet9+5NjOBT2hA9v/CQvSDZWV+HsyocU+6P6sDEXOH0FSJMEo/ZL94CFHT6/Wr87 MWoDOErflRMXAiAxcEVc9VGURa6c0/eZ7Cc98WiyuDhbN/71bRUnpSTuwPv9kpKCsmih93Fz9 ylBOFrsBSfJmzp7eYqI2ewl18ys9Dnd4AvMGNTlpuDl9+iTvibxscBJJaKOAyKopBoc+yiZoy GcrpMaVFcjoUtWgOpQ0HaTt/1LscM3ErYJyN5SFDGRZGzOVzhlUvMH5vVfJdBNHB0chSkinfa vH1/JmlYgqeehdJ90Xgw== Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Let's make sure I'll notice when there are patches for the NTXEC drivers. Signed-off-by: Jonathan Neuschäfer --- v4-v6: - no changes v3: - https://lore.kernel.org/lkml/20200924192455.2484005-7-j.neuschaefer@gmx.net/ - Remove pwm and rtc bindings v2: - https://lore.kernel.org/lkml/20200905144503.1067124-2-j.neuschaefer@gmx.net/ - No changes --- MAINTAINERS | 9 +++++++++ 1 file changed, 9 insertions(+) -- 2.29.2 diff --git a/MAINTAINERS b/MAINTAINERS index 2daa6ee673f7f..9eedf3c1e1e09 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -12087,6 +12087,15 @@ F: include/net/netrom.h F: include/uapi/linux/netrom.h F: net/netrom/ +NETRONIX EMBEDDED CONTROLLER +M: Jonathan Neuschäfer +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 R: Jakub Kicinski