From patchwork Sun Nov 22 22:27:33 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: 1404554 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-rtc-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmx.net Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.a=rsa-sha256 header.s=badeba3b8450 header.b=JvnfmawM; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CfQ1w4Tc1z9sTL for ; Mon, 23 Nov 2020 09:29:24 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726363AbgKVW3G (ORCPT ); Sun, 22 Nov 2020 17:29:06 -0500 Received: from mout.gmx.net ([212.227.15.15]:48899 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725964AbgKVW3F (ORCPT ); Sun, 22 Nov 2020 17:29:05 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1606084094; bh=2b/jpxzeqaLVuVE3ul1wtEuNUT7aGevK/efjK6yAcks=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=JvnfmawMmfuCIV4LKLhQxhM96Kj5b7InDDOLQcng2Y5m1mt4RlnYYEu0HB0Qr/bTq HXrFzfeutrPo7i5tUAlyU1ZRAwKqWqS3Dulp1b+W9OnJf5QudFcmu+7KNrF/5POGJ6 czrrrnG+Ze4k6o06d55O+A6KTlP/+GlrL/ckul40= 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 1McY8d-1k6o4Z1SCz-00czgp; Sun, 22 Nov 2020 23:28:14 +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=C3=B6nig?= , 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 v4 1/7] dt-bindings: Add vendor prefix for Netronix, Inc. Date: Sun, 22 Nov 2020 23:27:33 +0100 Message-Id: <20201122222739.1455132-2-j.neuschaefer@gmx.net> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201122222739.1455132-1-j.neuschaefer@gmx.net> References: <20201122222739.1455132-1-j.neuschaefer@gmx.net> MIME-Version: 1.0 X-Provags-ID: V03:K1:zEN6Ybp/rxr6QJ2xW71Sa5SlULigJxIfPZ1yuxgJ91bOrAoGt6r iu96T4pbbhmNhaqw1k1kTVFjg2PcftrSc1SURH+riGe0F0O5/xdbYqWsJoPPHWioGTDLtzT fSApI0sLgNTyGyIlmLTmJ0PHgjFjdoFCc2fScHLEXhWq0HB3lQ1dWNjPDeOB5uxIoR/DHqY eJQZCPRblPeq7+mDdoSZA== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:EAr8dmh+WW0=:i8ty95oYQZxVuP3cZBWe2+ oqvYIC63s+H2yTkWTZLhKiMwyKgn2k6b0Fg8O7CZfQWlkfB19ChW2YM1U3DZ+pmTke3CU8cmf BIihbTuGu9t5CxjAD21Qx4DNbd6Sicc0UEJXsp9dgEHVv3M26x2N6rTjxrxDJZRNGckIEY+qY l2iaxED3Dzj/RozWZ4bebylZiOjGtiK4aotKX3XYYMD/Pdgbx89zEVTx2ElKm64Awd1rgXylZ Ke+vl+p9N9anXX/f3Br+KFESUYFLnRnPAAgB42Dn+7KFikwSk8YzrW3YJIvUwXdGgCerYRhPn 7KoP2xkDI+xYfgj4H4OEhk3CkoueqLwd54MNUu9JE6H8ebp/gV9mbnq6nRyJhECDP0r8DwNy4 HTEcvW+gExYPqqEgXLsznbor1adjo+ZPXSwdBhZW2H3Sj+5wGlbAKm+GcOEojRnKYrAEBDwHN 9lzsvEfi0+TEwRLyTve7lrcO0Y3mbGBP9b7zBIFxmiQc2LVBuxvhcW9tS/r9rtGsnpJdXzfVW dUv7NG8L5RoxYeU+wSiR6h786MB3cUjXMluyA84e+YVHswBD0NUgpntY0pCLL0TKyZQ+2vLML OdkkSfzy/PMztiqfRINqOf78pA+G0eoIXDJ7hQGFYavDPZfTYW3JmIqbIuG/u+VOW3hxx0OGn zBP+aKJmPeX0aYf9/IK53PNDgsdWVYp0cRT3FoO3jKyrTq3NyWRboqDMooZjfMH41YXVH4yNC R8Tzx8ocG+9VssTjwHQITB3a81i3jyvcnaRIBcC1YgX1hNmQ7URSBBbp7jLfLcAPCAcEXSwlD KM2xUkKMUyOTqVB15Eq5UmcxeVQIPSsgXAqan8qwNvy9496YuolOPm7UMEvHtRvC076bm5PPj 7EjfjXGDMfgjREO75nJA== Precedence: bulk List-ID: X-Mailing-List: linux-rtc@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: - 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 Sun Nov 22 22:27:34 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: 1404551 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-rtc-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmx.net Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.a=rsa-sha256 header.s=badeba3b8450 header.b=bE65ExyO; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CfQ1v3t5Jz9sTL for ; Mon, 23 Nov 2020 09:29:23 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725782AbgKVW3C (ORCPT ); Sun, 22 Nov 2020 17:29:02 -0500 Received: from mout.gmx.net ([212.227.15.19]:36037 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725932AbgKVW3B (ORCPT ); Sun, 22 Nov 2020 17:29:01 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1606084102; bh=FkEwDMxgZLTHim30OmXS5VuBshTlz294C3jIoXfipxY=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=bE65ExyOQVzCGTQGoUiRsYFa+BC58jhf5CA77gayyIG60/mU+uLCkFBV542x+TjtX hkKtnXO+oA3D611vtt+ln8tNXQ3/1dtl4+dC9zVSmwrSUnAT7b53fp9YHDzFB+Y8yb d9UhksvPcq/VBdoTrY8vmKfl/AZ00bN5PUO6hDfk= 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 1Mof5H-1jsUwx0sK9-00p84C; Sun, 22 Nov 2020 23:28:22 +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=C3=B6nig?= , 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 Subject: [PATCH v4 2/7] dt-bindings: mfd: Add binding for Netronix embedded controller Date: Sun, 22 Nov 2020 23:27:34 +0100 Message-Id: <20201122222739.1455132-3-j.neuschaefer@gmx.net> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201122222739.1455132-1-j.neuschaefer@gmx.net> References: <20201122222739.1455132-1-j.neuschaefer@gmx.net> MIME-Version: 1.0 X-Provags-ID: V03:K1:nF3kkwMmgt9OIwH8iqvES5UGpX6cz3/hWNyTI5w7mqGWydvJ8Mc 1noR+XyHeLXC6lce+wgyZqWWRXqc2XOIkXI79SqB1acVaKQKwdHqYjKF2Qo9pDvnlXgWT/y 4s6Yj25dYUbIkMCUG3xGzwz/inb8EGTFD4fPtPY3rRAOOe94PofEQ31pM8rCRvtdN1igAQd enBL8osT0OUNVofvLmm8Q== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:nEuwsUuSLow=:zQBob9Q6ol5V3Z8hqZvFGh pfluGE579FA+K3JHGdBPbVKQ95bS8GtltwPGupjqIeWGC6E6Bdt1e+cIJ8olKbIXT51WOk0OG 1riIRIcFwUm9V5B5687dvFyyW5jabp8LuEJxuGGvNOLLDrgYzj46aYXunZ6AOlAmSCLmlCSOx M4WG1NC+eLKTJIZZFFUuQ4Y5XIyBLmAWBYl1blBoKgan/olKILh3WvkrYmYyZsM9aJkJxr5Aw FgC+pVvdgp5T2AL6PnPQJvzKXhdJDjW1bENKw8Dp9FQaIWY1zo2A6u/jKREk2fEYxJdtU0/Pl /9sxqWtmEQmokSEIpisjwM/Z9PnvZpab4COSfvIvbkNxdijGu5svMNrMI1RyOEjXH+Qiha0om FnriutIxNoUduezogkG7kEJ7s211AnKaeEiJYJqsPUYEItjP/dBjmkAR+3OwKVurtUS1pTK8I V9IAbh7fTOtQAL0GGYI/UGQFzr179piHsuJ84L+Iv8gsCkJPSP6A0KPgnZNgh1jCYn8kzcsNW 6LibGm0dKX0SlRozcNsnKBEJ/zcZpykV/KtSfGZesfYmoR1GjND2BuA6X3H4oIONUIJG5BvXn hKspwPOJtxr7r7ukpzkWMMGO7Tpbd75pXFTpfwqegtZWFCl+/UBaXytiPi3UIns/nXggBVf6t Zeba9lYAP7CgHu49V+AbhXgYew261mlxN8qIaq+Q9TtQubT6IwbP/JSP5kvlznFHEKTVX87IN SIOYVRisi4lb9NmECLisrR3XbxImAkZYUYynI6ixMmvXu3N9c6lRFq799Ef8Y69b+MBiz9SoA sRdUHQT0d52mvq9n+xPXv0sdHfEDdGDtqjYMNDxqqKTWPzPzB3QJ352kmx3+f6xpwXi1Mx/QX 8JV1vjxGxCspwAlCwF2A== Precedence: bulk List-ID: X-Mailing-List: linux-rtc@vger.kernel.org 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 Reviewed-by: Rob Herring --- 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: - https://lore.kernel.org/lkml/20200905133230.1014581-3-j.neuschaefer@gmx.net/ - 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 -- 2.29.2 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 + +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 + 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"; + }; From patchwork Sun Nov 22 22:27:35 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: 1404561 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-rtc-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmx.net Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.a=rsa-sha256 header.s=badeba3b8450 header.b=EOhrIuGe; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CfQ2Q2qsSz9sRK for ; Mon, 23 Nov 2020 09:29:50 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726655AbgKVW33 (ORCPT ); Sun, 22 Nov 2020 17:29:29 -0500 Received: from mout.gmx.net ([212.227.15.18]:34205 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725964AbgKVW33 (ORCPT ); Sun, 22 Nov 2020 17:29:29 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1606084110; bh=ptKxSnvbPu7mzfzNnTpUljzEhBKOkg5WFE4E9XtZ6IM=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=EOhrIuGelkoO1E+Sof/2tlOsxZ5sAD8MJY24Kk2K+r4GDWT4D9uM01ilX4bb3jCXG E6C0C/HA39Uv7vWuqWWvpPEOr5bMpzza+ARjB5tGASlZOItSfmAImF7V/GQCC5pAJh 9EEHxKX4eg8icE0e4qs42y/OLuFmhrvwUz0qF6U8= 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 1N5GDv-1kHhKl17zB-011B9d; Sun, 22 Nov 2020 23:28:30 +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=C3=B6nig?= , 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 v4 3/7] mfd: Add base driver for Netronix embedded controller Date: Sun, 22 Nov 2020 23:27:35 +0100 Message-Id: <20201122222739.1455132-4-j.neuschaefer@gmx.net> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201122222739.1455132-1-j.neuschaefer@gmx.net> References: <20201122222739.1455132-1-j.neuschaefer@gmx.net> MIME-Version: 1.0 X-Provags-ID: V03:K1:Qjv6sPbqePxrndCTGpz82CeR38vaZ4Lprz9CLyqSXi5Ao8Oy8LK Ux+PC0XyrrOGwBfRhojD1TFgYeG9BI3djYyVuxW3R3m4THDMCltPJJ27dvU4UQQJWcY6no6 7MAvxXpmnviFzwcxi+fk9z+ZUQOdW78NoXncNsRgS+tuajs93vEMYCa9Uy8dnlU1x0QYkaB N3VLNRvBBRVD1CZ9U4tXw== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:nQo58NLdqA0=:2jU6Q9xpWJwyIEb/uJjP6W d+YI0Xm6+2X7wAy3z7CcgpIBe8ovkDNKji0OOp10WqlkS+XzbYAac59Pl3S6IwP2UuqDYi5le 9W+iEoMeBDI/7IxaxJt+OosBEjCaJXk1xQI1lSOn6JyP6iMHxucO04AF0QO0W8keN2cjdmJ1y O+c/wcdqifAYTOd9jwS19yHIgSE+b0duZBL3O/aZl6rgTF+JUTE8vPHrkfEWmMFR1amK7PTIb YuB4efTf10pY/lWehLv/izeUPLVKqdzj2TxUMkKt+Jneh0ozq4tarN2+yP40AMSdJx0CtzGhT OPJ1+F9HW5bQTT7C9x1GgjKTAwDWUpQfoZdoMqSWwPa6vNlZu3BgPlRydWQXCW3fEfxIncii3 QsR8ztrzgk/SZVZz7yVhUyOfYXmXdkbFKgv3gkACwtZtA8egXk7cZR/96jVaLKn2GJ/F6HxFz ubu/DTt44vO21VcTFHOvTR+um7ZT+Wqr5DGMgAX+2STL9/KlEndcoKq9mzyiNkte4Si9E9boz FDQWlUOjAPJyu7EYTY6F/aWRWf/Umq/djoK/fk1Y+A3vOimtSIcoIEaMHrAAxYHHA+UYe+p2e kyGOcmlN7SQ4MNmLJmGvOtNY8eSC1uCAme9i/WxEH76Lmzndp4mOFMJjFqSZZ69NY3glXFh6E faqp8UyZjuqHDHTVmGCfuH8pDgsSBZoazWdYU4Id19OTETf80JccXPkTyfc+6IIokT9RfnmkX r8UanKk+wAXMpWz6ijiSyXmsrIpp+fGKC8tmCv9fkqd4ebJTeefzJiqzRgO9ezj4wLiTx+4JB qgRJm/zkbDrraED6eK0KJvvCFlyS7G2aata/zw7FiUnx+L9PllbFIMEL0e13PhYeY0M2tRQOL Kziq6l28UPpWf3ulnA0g== Precedence: bulk List-ID: X-Mailing-List: linux-rtc@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 --- 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: - 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 Sun Nov 22 22:27:36 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: 1404564 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-rtc-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmx.net Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.a=rsa-sha256 header.s=badeba3b8450 header.b=il21FU6N; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CfQG80Xwrz9sTL for ; Mon, 23 Nov 2020 09:40:00 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726246AbgKVWjj (ORCPT ); Sun, 22 Nov 2020 17:39:39 -0500 Received: from mout.gmx.net ([212.227.17.21]:33403 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725782AbgKVWji (ORCPT ); Sun, 22 Nov 2020 17:39:38 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1606084722; bh=57r1xFqwCJIDRPuJ/P+J2+bFfyswaMLpxJDG6pNT6Us=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=il21FU6NF3dQ4rt6xiuQbnpb4ct4m5PMoflxM5Wuy2FeerQEKr56SV1CUJV6VCG+3 FTd6R44Z/tYqsBVuaZczEwSoGXUU0JCM3zSe6pe/T2N2to3641x3kbjr+asB/4A9Yx wAknJwZ6XnaXMATvFWoJ61RjMNPaGyD2NgYxIxew= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from longitude ([37.201.214.162]) by mail.gmx.com (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MmDEm-1jynY22wJk-00iAMf; Sun, 22 Nov 2020 23:38:42 +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=C3=B6nig?= , 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 v4 4/7] pwm: ntxec: Add driver for PWM function in Netronix EC Date: Sun, 22 Nov 2020 23:27:36 +0100 Message-Id: <20201122222739.1455132-5-j.neuschaefer@gmx.net> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201122222739.1455132-1-j.neuschaefer@gmx.net> References: <20201122222739.1455132-1-j.neuschaefer@gmx.net> MIME-Version: 1.0 X-Provags-ID: V03:K1:EE1AT1+Tqq9NOJEAKqjynManQRn7SWiapiXMkOZaDjPer7g1vLD +b7hMCkvGaVCfpS1E1m/QFWG61Fj7LvKlsV9H0K/IkFpAbkMPqBqDdhfPUzsP5NzpU5zD+g ho1KX0G+QSiz+XMieZQsWQrQVYIdcNH/mvQje10Sn8J1aWZ02d0KQGMP5rHtev4Iky8QO0Q 2aiLHV3Pa3ggEuVEuISQQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:iFDVfCBf8eE=:4yNeNHof8H7GxJsk6MPrJc W/Dp9uZnYGIchuA2N8vPOvZufdQpfXya+qwEqWlfPNoQXVikNkaG1nloDGJ3EsxLUKeSF9+1m JbaFgbhFxcJxA8xbwx4W9yacR0OEfLQzO2QOroqC4jdo3tEOCXGfwnV2MCQLNaLfK87x54xWD rfOvBtyY/xplsst3xQnhedvr2Wz632vSOi+TWZ8EvBPGNi4AjuG9MK3QUbZcpz8TAkz75axEQ qHfZV+iBh9ZWjuH+262oMvkMVLO/z7v6AZdbiBVrQmtUtRrGVHFbvaMB6E1Cw7t0cPLQVLSCq gEKd9DbfGtlLNzEYTFc1rLSUp3QUOiHZh5/m5SZb+l2vmy0KA5CdlnG2x7fmBUu/MZ2J2AGRe eTj//sJx4h+thdavIhDiTXn6owNrs9/azXl+R9i2/Y8M+6URaZdehbgQxdppEMQBYMcsbTtW5 bYhRIdTn7+S6VGtJ8quDKfkYtQfZcJHe6OZsLqrHD0AleR5xDuxCpSDWzV4lcNiRJfmu1uu+K B/kFIRWLgPyoOdhgDedfdj5bvOp9MvM3JdGnf3xgyo+1rpUkgfFeG22CBiYucmaM4iVsVcezX izAb/gO6tYwfuppCWUUjR5JRTxzz4iIXwfJrppNRpwK9r+O5WQymYMkNjsm2kFUhyAxod9yA1 cdbtVe9YBUn9B1bISxGAS49CyvecEUi6YMI2PoK8P1+C8w/PdeoeRl+3wELJnHLO4RbzJ/cRV QtI1WMT3Ut3wAAbpGKP68fc62lEjmADX/vmbohQ10PLGzxpfVQ2kYv4j9cDp/jUGIN7n+oEFh tkXwOINAh4K3AvKyxWFjidypMcNi37LYos0sOUElC/JJgDKrEuBepyAAO4wkA9a8LOwNQCNOZ O60HONLsgD0UTcihTWKw== Precedence: bulk List-ID: X-Mailing-List: linux-rtc@vger.kernel.org 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 --- 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: - https://lore.kernel.org/lkml/20200924192455.2484005-5-j.neuschaefer@gmx.net/ - 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: - https://lore.kernel.org/lkml/20200905133230.1014581-6-j.neuschaefer@gmx.net/ - 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 | 166 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 175 insertions(+) create mode 100644 drivers/pwm/pwm-ntxec.c -- 2.29.2 diff --git a/drivers/pwm/Kconfig b/drivers/pwm/Kconfig index 63be5362fd3a5..815f329ed5b46 100644 --- a/drivers/pwm/Kconfig +++ b/drivers/pwm/Kconfig @@ -350,6 +350,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 cbdcd55d69eef..1deb29e6ae8e5 100644 --- a/drivers/pwm/Makefile +++ b/drivers/pwm/Makefile @@ -32,6 +32,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..4f4f736d71aba --- /dev/null +++ b/drivers/pwm/pwm-ntxec.c @@ -0,0 +1,166 @@ +// 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 + * + * 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. + */ + +#include +#include +#include +#include +#include +#include + +struct ntxec_pwm { + struct device *dev; + struct ntxec *ec; + struct pwm_chip chip; +}; + +static struct ntxec_pwm *pwmchip_to_priv(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_apply(struct pwm_chip *chip, struct pwm_device *pwm_dev, + const struct pwm_state *state) +{ + struct ntxec_pwm *priv = pwmchip_to_priv(pwm_dev->chip); + unsigned int duty = state->duty_cycle; + unsigned int period = state->period; + int res = 0; + + if (state->polarity != PWM_POLARITY_NORMAL) + return -EINVAL; + + if (period > MAX_PERIOD_NS) { + period = MAX_PERIOD_NS; + + if (duty > period) + duty = period; + } + + period /= TIME_BASE_NS; + duty /= TIME_BASE_NS; + + res = regmap_write(priv->ec->regmap, NTXEC_REG_PERIOD_HIGH, ntxec_reg8(period >> 8)); + if (res) + return res; + + res = regmap_write(priv->ec->regmap, NTXEC_REG_PERIOD_LOW, ntxec_reg8(period)); + if (res) + return res; + + res = regmap_write(priv->ec->regmap, NTXEC_REG_DUTY_HIGH, ntxec_reg8(duty >> 8)); + if (res) + return res; + + res = regmap_write(priv->ec->regmap, NTXEC_REG_DUTY_LOW, ntxec_reg8(duty)); + if (res) + return res; + + /* + * 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. + */ + if (state->enabled && duty != 0) { + 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 struct pwm_ops ntxec_pwm_ops = { + .apply = ntxec_pwm_apply, + .owner = THIS_MODULE, +}; + +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; + + 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 "); +MODULE_DESCRIPTION("PWM driver for Netronix EC"); +MODULE_LICENSE("GPL"); +MODULE_ALIAS("platform:ntxec-pwm"); From patchwork Sun Nov 22 22:27:37 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: 1404570 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-rtc-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmx.net Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.a=rsa-sha256 header.s=badeba3b8450 header.b=WwrbWWw2; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CfQGD2d6qz9sVC for ; Mon, 23 Nov 2020 09:40:04 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726923AbgKVWjz (ORCPT ); Sun, 22 Nov 2020 17:39:55 -0500 Received: from mout.gmx.net ([212.227.17.21]:58411 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725782AbgKVWjz (ORCPT ); Sun, 22 Nov 2020 17:39:55 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1606084736; bh=jXZYKt1n1DuufO0ZGjj1ddg8RrIBzQlHWAXXJJOO2C4=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=WwrbWWw2xo8f38fkc8ed6Wb6KdUbpX/izzoGcvBzBWG9Zi0sIwrEpRfH9REIejDHL FUgZhJP7BWbWzlZuhqpfJUShYH6WE3ocOouKXxWj1NmU64o0oXwEPOLU1beMqfjL6b l5QO5e+x3qiXs1vlgoHG1Cxdt4uVHbak6O4onYJk= 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 1MzQkK-1kKmMS1ojg-00vPHa; Sun, 22 Nov 2020 23:38:56 +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=C3=B6nig?= , 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 v4 5/7] rtc: New driver for RTC in Netronix embedded controller Date: Sun, 22 Nov 2020 23:27:37 +0100 Message-Id: <20201122222739.1455132-6-j.neuschaefer@gmx.net> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201122222739.1455132-1-j.neuschaefer@gmx.net> References: <20201122222739.1455132-1-j.neuschaefer@gmx.net> MIME-Version: 1.0 X-Provags-ID: V03:K1:JltiIA9UG40wJKVmGENJpHVueJ0cA0GAUhJzig+CGAhKfmZ5IQQ s9ZvOHiCpfO/OrkveJV3Y2em2dEOBi1nE4sEUMa9q8nN8JsPYCMPRhz0lKt0BvxSoySxeu3 wbWbbUJ+m7NcadF+dFHwLO0xaFwsnryxDtsNFocxpZv8BO5TOEv7LErcSAfEa3o2BzXYlBZ gFn1wYPs1tJv6d1fdwMjw== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:71rcezld2ys=:T2Xofc9LQyO6Cvtzg/2F1v 6dB23r4qU0Z10lf/0CB8HIJX9f49j34zINJcDJ6Fv+QueVVyk2iBwvVMYa19+xL3SyJ/ljo80 8141IdnvEZ1mQ1uIzYPRMIcWiUKw91BWlen5KTh6fP3N47cttlhUN1/nea5zWKR9wEfq5hCrJ rfprsRq7dV02k+bnsqj1OWeG6Ju2CW508BEqQn05gJhSPbs66NlE0fgCWHsmoYqTLpEeC6h2p szJkIjhaya/UfwvQbPHlMTBf5m+0WtazryByrQdanAIRo3hEqBUwV9aQSoVzok080H2yDlwBg K00a5dSr8wy/AM2gRyJUC56C6nAypUqXRdIQ1T4dzJenuAdaFedClKymCg816ge8CkVIGNJAo fLp2x0RKG8Fk4lb32tTCvi8jtp/kWqwSyDmx+9Vo10BxcJfi2Sc9l3bwwH6e9vacV0OwgpL1b HSqwUiU7ZSstfneCbycTj6Xe/gO+zWdlCSOLF5DxuDVa6AWogKGiC5Yu12S/R0gjyk21A1xol t3A7m2WyUcAzWfRfQQJzFrWQ9wcGlKDjh49jdTExC+mp2yvinuhZ2KpJhg/k+EFblxuVKeUV8 GHVEdYckcL9FIRMusOr/AdPxMuu6mV1tej62zqXxwiKXmpD+IV2w9ZjBkADpC/QIpY8l82Dgg olSzjm1JFs5gic5pQl4VaxXk21YLzblJ/YhoKUTwTnVY5AV60NpraUuiHgWz58P8IiWIK1U3X LYWHiE7dik17fR2eEHmve1/SnYhl1bWSMvBj2819BejnVEKECNX+TyUVpPbThO2GeSkztROWZ cwzU3tMQCODSyU14WeF3t5j0p2iI5/QUAy+j3lOz95fQTUMJ0mX8u5G87lnp1dyawTZMQk8+n IZDK2npODIi9K/2YMCGw== Precedence: bulk List-ID: X-Mailing-List: linux-rtc@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 --- 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: - 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 | 158 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 167 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..dad5aba2852f1 --- /dev/null +++ b/drivers/rtc/rtc-ntxec.c @@ -0,0 +1,158 @@ +// 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); + int res = 0; + + /* + * 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. + */ + res = regmap_write(rtc->ec->regmap, NTXEC_REG_WRITE_SECOND, ntxec_reg8(0)); + if (res) + return res; + + res = regmap_write(rtc->ec->regmap, NTXEC_REG_WRITE_YEAR, ntxec_reg8(tm->tm_year - 100)); + if (res) + return res; + + res = regmap_write(rtc->ec->regmap, NTXEC_REG_WRITE_MONTH, ntxec_reg8(tm->tm_mon + 1)); + if (res) + return res; + + res = regmap_write(rtc->ec->regmap, NTXEC_REG_WRITE_DAY, ntxec_reg8(tm->tm_mday)); + if (res) + return res; + + res = regmap_write(rtc->ec->regmap, NTXEC_REG_WRITE_HOUR, ntxec_reg8(tm->tm_hour)); + if (res) + return res; + + res = regmap_write(rtc->ec->regmap, NTXEC_REG_WRITE_MINUTE, ntxec_reg8(tm->tm_min)); + if (res) + return res; + + return regmap_write(rtc->ec->regmap, NTXEC_REG_WRITE_SECOND, ntxec_reg8(tm->tm_sec)); +} + +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 Sun Nov 22 22:27:38 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: 1404567 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-rtc-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmx.net Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.a=rsa-sha256 header.s=badeba3b8450 header.b=jqOQno30; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CfQGB0CRTz9sVJ for ; Mon, 23 Nov 2020 09:40:02 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727016AbgKVWjs (ORCPT ); Sun, 22 Nov 2020 17:39:48 -0500 Received: from mout.gmx.net ([212.227.17.20]:53467 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726781AbgKVWjs (ORCPT ); Sun, 22 Nov 2020 17:39:48 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1606084743; bh=TwTXmICFzYAmTOHiZEt5ZI/UPPTORMtHYQaQQ0Nwy74=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=jqOQno30nk5O3lm0TqTj1PVXroG/P9rLYX60tQmUfFuUehCnfyJ8f7s7u/bwn+Oee lbk6Mp/272ca30SVIchkvOdK7xkIU7dkDk54x6jDC50m1maOVHUjqCacHBXMwIQZYi cETLbymyqpclY/rdKyho0E7QENN99PTcRPmnHGNI= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from longitude ([37.201.214.162]) by mail.gmx.com (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1Mn2aN-1jzd7A08ZD-00k5Zw; Sun, 22 Nov 2020 23:39:03 +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=C3=B6nig?= , 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 v4 6/7] MAINTAINERS: Add entry for Netronix embedded controller Date: Sun, 22 Nov 2020 23:27:38 +0100 Message-Id: <20201122222739.1455132-7-j.neuschaefer@gmx.net> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201122222739.1455132-1-j.neuschaefer@gmx.net> References: <20201122222739.1455132-1-j.neuschaefer@gmx.net> MIME-Version: 1.0 X-Provags-ID: V03:K1:7m+8C/IVVqK0Q1ljY43DVWLQAvl5vN2s7HxeLIgsIRon1jAyFZV iwwWYfTVEkJk3wmq9XUw+d+d/EjaWA4aIM48vfFMAL0dgYeJAdAvKmBrK8MsBy3qGhWiVW5 O8BTpdLTqOoOTu+0/3889Lz2Vyx5E3mghu7ZVtSSNUtxoQVqIz4d6Ly1EMlRRqkBilr+eiV 7xXNGWFk52QmJJseZtMkw== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:HhrMhAcY/vA=:DoOMzHUUWh8eLJf0nIDwZy BDxBfzloMHFt2l1oyumXpx0fX+ELNkE107J8DMat6VTQ7GkQscsvcTK/igsS5qF70C7KGyr8Y xYIlRFFt94/hgzAanqlPl3QEhHS0/BQ0aJVyZT/yC/HqNwkyxZr2to19KOvfMPODxGt4yn2s1 GCD3SZFIRSrcOsgw6FFZA7QZpNGFWC1sw29jxd/L5CluVgstWY82tvtjk3pC8czcP5uHe6eC1 rKuBDUNESQS6Ka3vnrJnsqn82I8KeqqcOxcj6gyuDtW0vzqzWyI/Lu8nYYam5zwXrGI4ivaae n4Jc32WWetlO0KcBdHJ8gW9tKnGpllT2Edg3hiCPXwOBDuCUrAnn+f2x82gQfgDfCyVkAWoEm zyn3ptGjKOwCITb1rubZdoMo0qfYsRmoLELN1YBLJ2RErGslatjNUVLSA6CLkwSqjR8XNnNtH mrfnmK7btSvXVs6DdUv49PyVEjqPULy39F9RSlUPlBpoMQ8ZZ+K9r/EY422LK248ljjTQF6wY OcTpHoKmAkHW8MDxdBbqOGA/KVfxwmdPFt4w+1Yf/m+6k3fqx/ZWvvFhAzhP6+9L4EWiwdMRq 3HoCWE8ncAChBmWERy7p8AFhjrnKcxOhDy+PNxARkromSRTrA9kfuslae9A5SeIIRUnA9wFMz h48ket/fYu53Xc7kYOlO33saUNbgS1ScVv2fcf5PLnhAzi5Cc85Pt/nbgHyebn8tVTaRNX4EM Q7t2/E/HGx2HLIMbFOKfXce3CawDwubjKiAVru0ODzgXLD+QoaEXMRgGb8RiY/hbiGKT+Pb9t RtZIWmwn27GsXTwetBNyUXfEAh+UAWuySsQcRD68YGylTalMlL0hzgor8u36YQdjTYnhMg68h VOlHrVjUS04/0hEyJ4Tg== Precedence: bulk List-ID: X-Mailing-List: linux-rtc@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: - 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 e451dcce054f0..ea4a6c7cfb8dd 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -12100,6 +12100,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 From patchwork Mon Nov 23 00:09:13 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: 1404575 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-rtc-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmx.net Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.a=rsa-sha256 header.s=badeba3b8450 header.b=V6QOdxEi; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4CfSGd2FzNz9sTL for ; Mon, 23 Nov 2020 11:10:33 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726779AbgKWAKL (ORCPT ); Sun, 22 Nov 2020 19:10:11 -0500 Received: from mout.gmx.net ([212.227.15.19]:34297 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726287AbgKWAKL (ORCPT ); Sun, 22 Nov 2020 19:10:11 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1606090163; bh=TIuVy2yYea4meeUQk6HAaV69tfQRHqFlxaHQ7pmQGAQ=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=V6QOdxEioDA9smqYYMyBF3ctrQLuW/uTbMCOmVy/PMdsblquhHN4odXn4czaZna7F x4rm+hKLDy2cwHEXKQzaJryHm2dJ9mHRwAAJ0nCzUTAG/2iyWrEqmbf9Ma7zzjVans TUnE8sW4ZOgnDI0k7VxIl9Ir12i9wYRrvBPDsFAE= 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 1Mplc7-1jtZ2F4AJR-00q8Xg; Mon, 23 Nov 2020 01:09:23 +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=C3=B6nig?= , 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 v4 7/7] ARM: dts: imx50-kobo-aura: Add Netronix embedded controller Date: Mon, 23 Nov 2020 01:09:13 +0100 Message-Id: <20201123000913.1506944-1-j.neuschaefer@gmx.net> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201122222739.1455132-1-j.neuschaefer@gmx.net> References: <20201122222739.1455132-1-j.neuschaefer@gmx.net> MIME-Version: 1.0 X-Provags-ID: V03:K1:uLvaOtwI9plaURv1O6GufQthB1uZzTJiP2EgUwf1AYpCa+pmgnb zzyFdg8ayPJrfMmtGlXjR9sNu2TWGnE8ZbHGG0tuhGtbWUiz+0aO+XnPw4Kiw6gO7Hiy4ea Lf6Fk6wYSok+Dyl+GWKTgdjJlUjmK0aZSvuQI/qNkQgy1WprFT99pQqk6pxRyy3fzpWSmKo 1bbqjlOZbLD67lpSLjn1A== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:abVzIFyQpNU=:QxZxYx4estxtNikpjhXwTf Ig1RjLRQThLpRFES6t+D5aZFvysbUZCfNpwLGHa3sDV6+Utd0OdN1JuiaAiryCSsrhIoJjDed rGJOeqZawRCxpngYSc4rXQ4d9vdG69cEoiTMOYB42X4wvR9Ll2bsNCKUsvzQSmjXvimF/90nG T3Lb50DzmVrIPN4Y3gkA6+9FRrEBjTVP8vRr3yQqE3Ann6aKxPV7zwoWBBW1fDecqJ6XC5OyR 1Pp+c/JBKP0TcTf3s+tsnU9pQvCQvPGKFvF2gmsxQ0ZfUrlxIZosca651b7Ac1XBgJaBuLW0b TPQZfFVAe2UxHouIlBW5WWAB03hEp5VnG+/PzPqgZ2VoxQ24HHY4zKJSYqOAEoW2IreQnT3Cv wlIcYG8zCPnLkkvQ5uRyceuboo9aJcjQX49o7B3Bp78QtzjhSHA3L7BcppHFBZ+rkBBHrhl91 yUv5Ig43se2VJIcNzU9S9CPHO3MVjrAPgjUOzVmcR0QFyaon9QQr066Be0d5Le7TWYzKA/khm ZlNBQvDUvQOY/CDnFLSvM+QOpltpYV+5wG7hSOIhLWMy8tSr2Mqn7jNEzG1263WOWd1EkC3+1 RHCtnW3rN2B2rdb9qkk0BGAzJ7THJXbqvOmb00edrokVZwtZrWrZMxCbqiHfR7FFNxccfcWwl tdeKuBOSHeDeUuyABibHbIHauMUEDqkhyANfJtLRM5IFD3VOMDm3gmlYxU+Ii3uZDOVnsub7h IM3ebfybW9lLG8ylYpyvLLASeUD9pCgrpT/CcPT93N8g5aRZaQ3LGhE482Dh47kx8a6Jr2t/9 ZYyvlOVrVTsIV2CrunTFY00kn7QIQICWCZc4QpwVWSv4Cg7Rz6H3O5/Ib43wgzm/TeM90bqOR IutSw/tRhbIlt5dclFnw== Precedence: bulk List-ID: X-Mailing-List: linux-rtc@vger.kernel.org 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 --- v4: - Add 'grp' suffix to pinctrl node v3: - https://lore.kernel.org/lkml/20200925050818.2512375-1-j.neuschaefer@gmx.net/ - Remove interrupt-controller property from embedded-controller node - subnodes of embedded-controller node in to the main node v2: - https://lore.kernel.org/lkml/20200905144503.1067124-3-j.neuschaefer@gmx.net/ - 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(-) -- 2.29.2 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