From nobody Wed Apr 15 04:24:52 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A9AD3C43334 for ; Tue, 26 Jul 2022 10:34:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238690AbiGZKeT (ORCPT ); Tue, 26 Jul 2022 06:34:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60994 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238679AbiGZKeL (ORCPT ); Tue, 26 Jul 2022 06:34:11 -0400 Received: from mail-wr1-x436.google.com (mail-wr1-x436.google.com [IPv6:2a00:1450:4864:20::436]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B5B5D2CE33 for ; Tue, 26 Jul 2022 03:34:08 -0700 (PDT) Received: by mail-wr1-x436.google.com with SMTP id k11so19084639wrx.5 for ; Tue, 26 Jul 2022 03:34:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=sX02y36QBrkp9kgDyEIqIGdcUELPm4n2C98vuPR3rAo=; b=8NP5uWP/Vmdx9iyflkZuMZNiLv1NEdNpOHDeuRY+51ajKD1yPmytMsjhaZhwFeJIia /v/+KS+C6XcgPCjf8lfZ/WGBOx5OWI5aUX1issJEcTtKbqAYyyZ9hw+jQzrgeIVtv22c RrtcmWF4QgGnD3WHQdwNlCzQUiac524YlkMnKxDAIao6GXW8DrjSJkZaPXL6nCCXL310 R+3gVsBWT5ddlwlv9w5oXS1RmZcsC9z/MWoyyvhVeWuEtZegWUfJXiE8cHjlslquABgx Dgchehuxvlg+LIhwFMTIH5vzOchXVRONnXen9dIN/x4UnYiJIcmB3P0JNzYPnW9U6F9O kwGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=sX02y36QBrkp9kgDyEIqIGdcUELPm4n2C98vuPR3rAo=; b=Y1jDauLjqANtB9C+aziQLG1SzxHr31NWlYzwUmqCy4++43Tttt3ZFTcAeJJXy/LDb1 51VL6dOsdBYPVbbxSnM9hEA/OJ3X36wZyJyrOSTp1BiJ1sQHigc8tQrbCYNeqD/UtU+V t6Exz0LMH2ftzzPmKTKd8sPlbb+LiWv+Zt5fwnXaFmpGqKwSPS2QyywpRKz3FCkULTDj 9YBUNvld2s2K95V6Cx19s9c4aXcCb9OvjW6tz4DLp80ACldIO+AQ5rCQ9sBI662Y8Eq5 AG3s7ExGVzCTi25h1jtXbdV6oVH4RHGOu1nPbUcQtJ2jKAs4acNWmKW9EGFV4Fi/wVuD 3GuA== X-Gm-Message-State: AJIora+HD2dWWKwkOmspha+faILfwEPKIdk/At56M9i6A7JeXAhpCAGx gJbD1gt653UK2HPohtNo5U90oA== X-Google-Smtp-Source: AGRyM1ul+qIbbrgIHCviYDKTgD7feHbl5NubUU5VfC/P1faGv+vK9e6Eqa/0oYo53Du+/ym6Rv36hg== X-Received: by 2002:adf:f443:0:b0:21e:ac66:66a3 with SMTP id f3-20020adff443000000b0021eac6666a3mr1139988wrp.557.1658831647152; Tue, 26 Jul 2022 03:34:07 -0700 (PDT) Received: from localhost.localdomain (2a02-8440-4641-6f91-91b7-326a-5d27-a1c3.rev.sfr.net. [2a02:8440:4641:6f91:91b7:326a:5d27:a1c3]) by smtp.gmail.com with ESMTPSA id ay35-20020a05600c1e2300b003a2e42ae9a4sm20617121wmb.14.2022.07.26.03.34.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jul 2022 03:34:06 -0700 (PDT) From: Jerome Neanne To: lgirdwood@gmail.com, broonie@kernel.org, robh+dt@kernel.org, nm@ti.com, kristo@kernel.org Cc: khilman@baylibre.com, narmstrong@baylibre.com, msp@baylibre.com, j-keerthy@ti.com, lee.jones@linaro.org, jneanne@baylibre.com, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 01/11] DONOTMERGE: arm64: dts: ti: Add TI TPS65219 PMIC support for AM642 SK board. Date: Tue, 26 Jul 2022 12:33:45 +0200 Message-Id: <20220726103355.17684-2-jneanne@baylibre.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220726103355.17684-1-jneanne@baylibre.com> References: <20220726103355.17684-1-jneanne@baylibre.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add support fot the TI Power Management IC TPS65219 on the AM642 SKEVM board. Needed for driver testing but official board support pending. TI commitment is required before board upstream kick-off. Signed-off-by: Jerome Neanne --- arch/arm64/boot/dts/ti/k3-am642-sk.dts | 104 +++++++++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/arch/arm64/boot/dts/ti/k3-am642-sk.dts b/arch/arm64/boot/dts/t= i/k3-am642-sk.dts index 59f506cbd275..4daf55b9d61a 100644 --- a/arch/arm64/boot/dts/ti/k3-am642-sk.dts +++ b/arch/arm64/boot/dts/ti/k3-am642-sk.dts @@ -150,6 +150,20 @@ vin-supply =3D <&com8_ls_en>; gpio =3D <&main_gpio0 48 GPIO_ACTIVE_HIGH>; }; + + vsel_sd_nddr: gpio-regulator { + compatible =3D "regulator-gpio"; + pinctrl-names =3D "default"; + pinctrl-0 =3D <&vsel_sd_nddr_pins_default>; + regulator-name =3D "tps65219-LDO1-SEL-SD"; + regulator-min-microvolt =3D <1800000>; + regulator-max-microvolt =3D <3300000>; + regulator-boot-on; + vin-supply =3D <&ldo1_reg>; + gpios =3D <&main_gpio0 45 GPIO_ACTIVE_HIGH>; + states =3D <1800000 0x0>, + <3300000 0x1>; + }; }; =20 &main_pmx0 { @@ -172,6 +186,13 @@ >; }; =20 + main_i2c0_pins_default: main-i2c0-pins-default { + pinctrl-single,pins =3D < + AM64X_IOPAD(0x0260, PIN_INPUT_PULLUP, 0) /* (A18) I2C0_SCL */ + AM64X_IOPAD(0x0264, PIN_INPUT_PULLUP, 0) /* (B18) I2C0_SDA */ + >; + }; + main_i2c1_pins_default: main-i2c1-pins-default { pinctrl-single,pins =3D < AM64X_IOPAD(0x0268, PIN_INPUT_PULLUP, 0) /* (C18) I2C1_SCL */ @@ -258,6 +279,12 @@ AM64X_IOPAD(0x00bc, PIN_INPUT, 7) /* (U8) GPIO0_46 */ >; }; + + vsel_sd_nddr_pins_default: vsel-sd-nddr-pins-default { + pinctrl-single,pins =3D < + AM64X_IOPAD(0x00b8, PIN_INPUT, 7) /* (Y7) PRG1_PRU0_GPO0.GPIO0_45 */ + >; + }; }; =20 &mcu_uart0 { @@ -301,6 +328,83 @@ status =3D "disabled"; }; =20 +&main_i2c0 { + pinctrl-names =3D "default"; + pinctrl-0 =3D <&main_i2c0_pins_default>; + clock-frequency =3D <400000>; + status =3D "okay"; + + tps65219: pmic@30 { + compatible =3D "ti,tps65219"; + reg =3D <0x30>; + system-power-controller; + + buck1-supply =3D <&vcc_3v3_sys>; + buck2-supply =3D <&vcc_3v3_sys>; + buck3-supply =3D <&vcc_3v3_sys>; + ldo1-supply =3D <&vcc_3v3_sys>; + ldo2-supply =3D <&buck2_reg>; + ldo3-supply =3D <&vcc_3v3_sys>; + ldo4-supply =3D <&vcc_3v3_sys>; + + regulators { + buck1_reg: buck1 { + regulator-name =3D "VDD_CORE"; + regulator-min-microvolt =3D <750000>; + regulator-max-microvolt =3D <1000000>; + regulator-boot-on; + regulator-always-on; + }; + + buck2_reg: buck2 { + regulator-name =3D "VCC1V8"; + regulator-min-microvolt =3D <1800000>; + regulator-max-microvolt =3D <1800000>; + regulator-boot-on; + regulator-always-on; + }; + + buck3_reg: buck3 { + regulator-name =3D "VDD_LPDDR4"; + regulator-min-microvolt =3D <1100000>; + regulator-max-microvolt =3D <1100000>; + regulator-boot-on; + regulator-always-on; + }; + + ldo1_reg: ldo1 { + regulator-name =3D "VDDSHV_SD_IO_PMIC"; + regulator-min-microvolt =3D <1000000>; + regulator-max-microvolt =3D <3300000>; + regulator-allow-bypass; + }; + + ldo2_reg: ldo2 { + regulator-name =3D "VDDAR_CORE"; + regulator-min-microvolt =3D <850000>; + regulator-max-microvolt =3D <850000>; + regulator-boot-on; + regulator-always-on; + }; + + ldo3_reg: ldo3 { + regulator-name =3D "VDDA_1V8"; + regulator-min-microvolt =3D <1800000>; + regulator-max-microvolt =3D <1800000>; + regulator-boot-on; + regulator-always-on; + }; + + ldo4_reg: ldo4 { + regulator-name =3D "VDD_PHY_2V5"; + regulator-min-microvolt =3D <2500000>; + regulator-max-microvolt =3D <2500000>; + regulator-boot-on; + regulator-always-on; + }; + }; + }; +}; &main_i2c1 { pinctrl-names =3D "default"; pinctrl-0 =3D <&main_i2c1_pins_default>; --=20 2.17.1 From nobody Wed Apr 15 04:24:52 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A6ED1C433EF for ; Tue, 26 Jul 2022 10:34:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238721AbiGZKeZ (ORCPT ); Tue, 26 Jul 2022 06:34:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:32772 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238686AbiGZKeL (ORCPT ); Tue, 26 Jul 2022 06:34:11 -0400 Received: from mail-wr1-x42f.google.com (mail-wr1-x42f.google.com [IPv6:2a00:1450:4864:20::42f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CC62531DE3 for ; Tue, 26 Jul 2022 03:34:10 -0700 (PDT) Received: by mail-wr1-x42f.google.com with SMTP id d8so19446428wrp.6 for ; Tue, 26 Jul 2022 03:34:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=vs2EUHmxru/gTR6halos1Ywp4+4Ho+TIZLu6GPo9CWs=; b=prNXGV7iA98CLi7EMiN9IozmhPsLKVpTUggFQNl6g7BRP11xWMQ+0nZT/FO5kkXMQV K/FjNyqGJYOzsMrGlHAK48WCuJl9uFUaG0BJ0/Dzph95hUbtsqvYwcPBUF+ugio3aXUb p58HzTKaQODXJUENFXRt1MMY0SacepHCZPTVnl3VqoYOTmJcwzHr3M9M8bAkQs9IBTq3 4mraQ23IORToSV05s64Dkfeo8ZBZNrdxDIHsfXy3xBR4NolOPNUDUFV9xbdXwI2gNZWF qGx6TDfrIaLzSp+0uL5oEDBmwAXkSvMmhqBjUwQe8BBsVERoTuSzCukvRmhQHfVk8Uf6 OB/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=vs2EUHmxru/gTR6halos1Ywp4+4Ho+TIZLu6GPo9CWs=; b=XXPKzshkPc8/1yb98M+cq4/nvgl14jLtL0GvcqvOtGJ4bEcxOO7LQ4uiJjTpnRPFwI /eZdDEKAnc6BwSC7HGsaz3gUSbSFg7wxMOSHyMdEDNdx7VKm9Znk47DwDCq1wkbkP3zC 68tW6bzI0C9Gj6sHRkZQePXloulxNzShFj/TUiysyIXuJISOFy1wjDrJczIs8pNRs206 B4xCUusHAi2t4B5aEXoEg49gU9+MCnEvG0bDVeAQO11Q7G9EBvhXTwyNgvWlsW1+fr1c YC1YvXc96ZBRPUqgc5J1NzPLx9N13Z83oK9BkaJDKKr78A3GuIk0Nfsw0xoDlPPG1Re5 WCUw== X-Gm-Message-State: AJIora92H+MbI87bglEluYsFVJhdLrCwqI1r00tDH56cBAttHukrvoaB UUIq5msA0MxzvH4NtbG5xZtj9Q== X-Google-Smtp-Source: AGRyM1sv5g+DyuIviwXBexLxKFaqokT4ggkp0H0ZNkKAAr36TnXyvJ+DvG7l4QUOyD8cPrWwVg9kpw== X-Received: by 2002:adf:f7c7:0:b0:21e:4aab:1641 with SMTP id a7-20020adff7c7000000b0021e4aab1641mr10057612wrq.166.1658831649322; Tue, 26 Jul 2022 03:34:09 -0700 (PDT) Received: from localhost.localdomain (2a02-8440-4641-6f91-91b7-326a-5d27-a1c3.rev.sfr.net. [2a02:8440:4641:6f91:91b7:326a:5d27:a1c3]) by smtp.gmail.com with ESMTPSA id ay35-20020a05600c1e2300b003a2e42ae9a4sm20617121wmb.14.2022.07.26.03.34.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jul 2022 03:34:08 -0700 (PDT) From: Jerome Neanne To: lgirdwood@gmail.com, broonie@kernel.org, robh+dt@kernel.org, nm@ti.com, kristo@kernel.org Cc: khilman@baylibre.com, narmstrong@baylibre.com, msp@baylibre.com, j-keerthy@ti.com, lee.jones@linaro.org, jneanne@baylibre.com, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 02/11] DONOTMERGE: arm64: dts: ti: Add pinmux and irq mapping for TPS65219 external interrupts Date: Tue, 26 Jul 2022 12:33:46 +0200 Message-Id: <20220726103355.17684-3-jneanne@baylibre.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220726103355.17684-1-jneanne@baylibre.com> References: <20220726103355.17684-1-jneanne@baylibre.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Interrupt occurring on PMIC TPS65219 is propagated to SOC through EXTINTn pin connected to gic500 interrupt controller Needed for driver testing but official board support pending. TI commitment is required before board upstream kick-off. Signed-off-by: Jerome Neanne --- arch/arm64/boot/dts/ti/k3-am642-sk.dts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/arch/arm64/boot/dts/ti/k3-am642-sk.dts b/arch/arm64/boot/dts/t= i/k3-am642-sk.dts index 4daf55b9d61a..7a84223406f5 100644 --- a/arch/arm64/boot/dts/ti/k3-am642-sk.dts +++ b/arch/arm64/boot/dts/ti/k3-am642-sk.dts @@ -285,6 +285,12 @@ AM64X_IOPAD(0x00b8, PIN_INPUT, 7) /* (Y7) PRG1_PRU0_GPO0.GPIO0_45 */ >; }; + + pmic_irq_pins_default: pmic-irq-pins-default { + pinctrl-single,pins =3D < + AM64X_IOPAD(0x0278, PIN_INPUT, 0) /* (C19) EXTINTn */ + >; + }; }; =20 &mcu_uart0 { @@ -338,6 +344,12 @@ compatible =3D "ti,tps65219"; reg =3D <0x30>; system-power-controller; + pinctrl-names =3D "default"; + pinctrl-0 =3D <&pmic_irq_pins_default>; + interrupt-parent =3D <&gic500>; + interrupts =3D ; + interrupt-controller; + #interrupt-cells =3D <1>; =20 buck1-supply =3D <&vcc_3v3_sys>; buck2-supply =3D <&vcc_3v3_sys>; --=20 2.17.1 From nobody Wed Apr 15 04:24:52 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6743BC433EF for ; Tue, 26 Jul 2022 10:34:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238743AbiGZKea (ORCPT ); Tue, 26 Jul 2022 06:34:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:32806 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238713AbiGZKeQ (ORCPT ); Tue, 26 Jul 2022 06:34:16 -0400 Received: from mail-wr1-x431.google.com (mail-wr1-x431.google.com [IPv6:2a00:1450:4864:20::431]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CFC3D2C661 for ; Tue, 26 Jul 2022 03:34:14 -0700 (PDT) Received: by mail-wr1-x431.google.com with SMTP id k12so1811112wrm.13 for ; Tue, 26 Jul 2022 03:34:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=dVpUn1ya8DZAmfEkPodqRgTC7Rp5n0FnEcoh5sI/x9E=; b=598pyo7Pho0sXAWSrhHI/4pPNNR42w1FdwJKoS11KfZ8OGo1qnHif44ryBqVmJYqI/ JExhDmtPEQjbR0QpepvVfSVrQwsMKTn3VjGGn8rc1wF5bAU7xgd/sdmSbDl0oE3Oz//5 MTWOZhosTtqYpOyDPAz8NyDNNFtnTK9aZ0bxICn2BPhOfyD2+R073sTL6qydQuDG06Eb yjgkSkRh3kuf06kojrmmGN/ejF1s/JkOKyVPpoTeEza1zNtJSYVWThFc1Pln7nP0pjgV NiMC1EyeoA5SDe6E4lZLBfFvQ28Tu2h4XVfKAE0vcz2k1Ds5lHwEScoQwIh2dPcSXSCg 0lYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=dVpUn1ya8DZAmfEkPodqRgTC7Rp5n0FnEcoh5sI/x9E=; b=NKkZrVjQvYrbiowaAaPFgNLdTZRFR7yI++mki20/MIdXap8L6wKQVd3tgvH3IMczGy j4ZPQObYAywWiqMzk/MxKT5vmYGe+UrW5BEtDeaI0xK07nqtAwJDrOBsLygBRWKu02Z9 fwnYvVdnKxdJbmoQhPzbMxOtzoNrdxyxLR0T9ohJY9UCbxVd1UIkkagm50yMFrbso9os I4IBTahQSlZvjePKErX2qHy+PO7m/Ed6GsFS3AtXjfYpDHVxrbxK8KnkEBjtTRnH71NP +ks/TG9vxzIekkID+mOiYUKQsbfzvRX/aqVZlhhM9kcU+QyzUoo6iRI6qH2dr79j2Zl6 RY1A== X-Gm-Message-State: AJIora/oLaq1SM6h+z+gZ0IFMKo8QHEA3cyBT/iXiWW4CYCR4FAhjSCZ r0UCU8SXLuPR71xq2IzERXVlPw== X-Google-Smtp-Source: AGRyM1uO7T50XsgowPKwutHFpPO1yqrdBIf0BIORNhJdo+xEZAG3b7hTHiB8/txL1HC5YOjr1eK+kQ== X-Received: by 2002:a05:6000:144d:b0:21d:8109:701d with SMTP id v13-20020a056000144d00b0021d8109701dmr9986486wrx.443.1658831654383; Tue, 26 Jul 2022 03:34:14 -0700 (PDT) Received: from localhost.localdomain (2a02-8440-4641-6f91-91b7-326a-5d27-a1c3.rev.sfr.net. [2a02:8440:4641:6f91:91b7:326a:5d27:a1c3]) by smtp.gmail.com with ESMTPSA id ay35-20020a05600c1e2300b003a2e42ae9a4sm20617121wmb.14.2022.07.26.03.34.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jul 2022 03:34:13 -0700 (PDT) From: Jerome Neanne To: lgirdwood@gmail.com, broonie@kernel.org, robh+dt@kernel.org, nm@ti.com, kristo@kernel.org Cc: khilman@baylibre.com, narmstrong@baylibre.com, msp@baylibre.com, j-keerthy@ti.com, lee.jones@linaro.org, jneanne@baylibre.com, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 03/11] DONOTMERGE: arm64: dts: ti: k3-am642-sk: Enable tps65219 power-button Date: Tue, 26 Jul 2022 12:33:47 +0200 Message-Id: <20220726103355.17684-4-jneanne@baylibre.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220726103355.17684-1-jneanne@baylibre.com> References: <20220726103355.17684-1-jneanne@baylibre.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Markus Schneider-Pargmann This board uses the pin as a power-button, enable it. Needed for driver testing but official board support pending. TI commitment is required before board upstream kick-off. Signed-off-by: Markus Schneider-Pargmann Signed-off-by: Jerome Neanne --- arch/arm64/boot/dts/ti/k3-am642-sk.dts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/arch/arm64/boot/dts/ti/k3-am642-sk.dts b/arch/arm64/boot/dts/t= i/k3-am642-sk.dts index 7a84223406f5..d789fb7c2162 100644 --- a/arch/arm64/boot/dts/ti/k3-am642-sk.dts +++ b/arch/arm64/boot/dts/ti/k3-am642-sk.dts @@ -348,8 +348,7 @@ pinctrl-0 =3D <&pmic_irq_pins_default>; interrupt-parent =3D <&gic500>; interrupts =3D ; - interrupt-controller; - #interrupt-cells =3D <1>; + power-button; =20 buck1-supply =3D <&vcc_3v3_sys>; buck2-supply =3D <&vcc_3v3_sys>; --=20 2.17.1 From nobody Wed Apr 15 04:24:52 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 68F2CC433EF for ; Tue, 26 Jul 2022 10:34:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238693AbiGZKei (ORCPT ); Tue, 26 Jul 2022 06:34:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:32890 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238688AbiGZKeT (ORCPT ); Tue, 26 Jul 2022 06:34:19 -0400 Received: from mail-wm1-x330.google.com (mail-wm1-x330.google.com [IPv6:2a00:1450:4864:20::330]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 17C4B2CE33 for ; Tue, 26 Jul 2022 03:34:18 -0700 (PDT) Received: by mail-wm1-x330.google.com with SMTP id b6so8455904wmq.5 for ; Tue, 26 Jul 2022 03:34:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=QHCyTIRLNQ/OUCi6dUmgrM3Y9T7C/9FW0O1buPIAQjQ=; b=pA1UDfyauG57hX/HGYq50O3qF4ZqTy08+zbcjw8u8c4qDSHkTJ+6BJM+9VWl8+AphZ oDyXdcynfiaFvrEdQTFhrQjmu/Wwny4Hj4Eo8Fv5w4DQwxIOAuRnNaQKO3j2s/7f3ZBb NMcXv1c11TEo+cy/mdOJVQW/bFR3tXzZ8j2ppnARrT+7fqNfac9BrTvrL4zbbXoT5BC9 ZqFk3OflRvCalb9kAFWBLy+sFJ1rgA/+Mojk/wNvgbEca7lH3DmKPDOgJVL+KUvhNciv xfjyUL/r6/O4nDey6GZffovNPpJQn25YCnw1VLk4mu7WUkBCZxJxz6nnrr9gI4EnnFy+ VYUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=QHCyTIRLNQ/OUCi6dUmgrM3Y9T7C/9FW0O1buPIAQjQ=; b=Pats1/6QsnVg909TnydhARX/A2TkT6IQgzf/dG/rlOtQeY+IYY7riLLxDy91a8cEMF O4TnLNYC+kOZOItj/Lb7ukZw+RO0OSdmlroc1b/Q23FBAI+wqARdL4mRn4OETCygsWFz N731uIptxQsrGIlUyB0Hhrdq2KrWrnYiomqWiRH3lTX9M9lXj2Wz8QWQC4sMK4JjKe2G Z72TJ2XWFWuZpFSGhWktbMMk1cGKS8E5Bk03FzlwoQ+r0cMWxuovo20WnueDhncF6GEI qUcOmI5PQgOYOBzMoQRdeZYm223lHDzFKhI5Qcadbbv2ogQxRlTz9aRozVPsbFOlDL+j p2kw== X-Gm-Message-State: AJIora8zUjaqVXCzTgpqOQHy8mIssfeTp8wzZgykmeMvPjd7gdZkNIyV ZI/6z4fjSr2ClUOhuorkpF2pjA== X-Google-Smtp-Source: AGRyM1uMtX6RJnHdH3iRbZ+Uud9uMoY67ZHIhhGq7kUhKKWqF6rPmysZgFIbC3VBsgLjO0q2FORd6A== X-Received: by 2002:a05:600c:1552:b0:3a3:2e4c:bd0a with SMTP id f18-20020a05600c155200b003a32e4cbd0amr20435408wmg.82.1658831656595; Tue, 26 Jul 2022 03:34:16 -0700 (PDT) Received: from localhost.localdomain (2a02-8440-4641-6f91-91b7-326a-5d27-a1c3.rev.sfr.net. [2a02:8440:4641:6f91:91b7:326a:5d27:a1c3]) by smtp.gmail.com with ESMTPSA id ay35-20020a05600c1e2300b003a2e42ae9a4sm20617121wmb.14.2022.07.26.03.34.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jul 2022 03:34:16 -0700 (PDT) From: Jerome Neanne To: lgirdwood@gmail.com, broonie@kernel.org, robh+dt@kernel.org, nm@ti.com, kristo@kernel.org Cc: khilman@baylibre.com, narmstrong@baylibre.com, msp@baylibre.com, j-keerthy@ti.com, lee.jones@linaro.org, jneanne@baylibre.com, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 04/11] MAINTAINERS: OMAP2+ support, add tps65218-pwrbutton Date: Tue, 26 Jul 2022 12:33:48 +0200 Message-Id: <20220726103355.17684-5-jneanne@baylibre.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220726103355.17684-1-jneanne@baylibre.com> References: <20220726103355.17684-1-jneanne@baylibre.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Markus Schneider-Pargmann The entry for the pwrbutton driver seems to be missing. Add it to the list for OMAP2+ SUPPORT. Signed-off-by: Markus Schneider-Pargmann Signed-off-by: Jerome Neanne --- MAINTAINERS | 1 + 1 file changed, 1 insertion(+) diff --git a/MAINTAINERS b/MAINTAINERS index 64379c699903..67850b321cbb 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -14704,6 +14704,7 @@ F: arch/arm/mach-omap2/ F: arch/arm/plat-omap/ F: drivers/bus/ti-sysc.c F: drivers/i2c/busses/i2c-omap.c +F: drivers/input/misc/tps65218-pwrbutton.c F: drivers/irqchip/irq-omap-intc.c F: drivers/mfd/*omap*.c F: drivers/mfd/menelaus.c --=20 2.17.1 From nobody Wed Apr 15 04:24:52 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id AD7F2C43334 for ; Tue, 26 Jul 2022 10:34:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238687AbiGZKel (ORCPT ); Tue, 26 Jul 2022 06:34:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33008 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238708AbiGZKeW (ORCPT ); Tue, 26 Jul 2022 06:34:22 -0400 Received: from mail-wm1-x32d.google.com (mail-wm1-x32d.google.com [IPv6:2a00:1450:4864:20::32d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5820A32463 for ; Tue, 26 Jul 2022 03:34:20 -0700 (PDT) Received: by mail-wm1-x32d.google.com with SMTP id v5so8471066wmj.0 for ; Tue, 26 Jul 2022 03:34:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=nRm7T586IVqER+nWuPPvT9TSOI3c0IELRytvLb2fip8=; b=yYbOfeWar4cPz1aldKgI/l5Fuqhd97saimvxx5OLwWFhyjQI2SWcLMn9cBRDnipWzC xrinAzal1HMa6WGyS9Qcpux+ziThsZiCZSRmIn/Pu/+Sis6kvN7/PkDJ9pTRJHBnPcBS kpG/T6nrr3YgX0BFlCXX1OXhf4x+HGgzAIOrbzRnHxLjmmoAx1a9HGfRhnewVZzPK68E BzD+0ZPEqRg5vRBwjYgh4UQB7HpFxmNAxM+95Vd+WAM2DhjkbiE3iKmJl75Q3JLPrMSt sp6i8vWzeVGvbkz1qL+7ucSsD/X69imOlx5BjLZ8xIm+dPOSsd2MvDpeyDLZSMbu+Txx 3ckQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=nRm7T586IVqER+nWuPPvT9TSOI3c0IELRytvLb2fip8=; b=hwzyAdoKXk3gV5BayVKItIMmYUs2nUAD7pPYnLmASX6X/xlImRxAanp9mDkV/tFLKX 5K3zTeo61LyaHF47USJvCLyQ88csAhfq2Azzszo6bvTHeR2d40G5ze+uyCajUFlZIaJr BdtkKbpY1EOy5Be8lAsAtVzO06BGR8zqBoaAwLqU9itMgPeGDm2lT+6YsEDHwKQwI4+/ tStDJb+a3ZrKUZPJYFzNmyY7J1dznUjNKHbf7zuTTFRTghJiXxbfqlXTw/atjO7F4wpp d2Pwy9UA4s2jGr3q1eQfNTNqQ+ztNB3gyzXlnouu+zhTXAAV49oraMQu8u5AD+mx7z7m s0FA== X-Gm-Message-State: AJIora+AAf3eZCnPWarnYQH4zZ8JXyelyN4ZwvNLPsQ1LeNtTcjMthBz LdEP+2w2JGNymMcdVaWTyxLLkepnJw6VAw== X-Google-Smtp-Source: AGRyM1sqivGj8DnM+Fj6hXaxmJwGXtnnK/mSa3hSHfmCVeHHutSIuqZdoraER/IjTl+HeJI0K/53Ng== X-Received: by 2002:a1c:f317:0:b0:3a2:df38:9877 with SMTP id q23-20020a1cf317000000b003a2df389877mr23958396wmq.124.1658831658864; Tue, 26 Jul 2022 03:34:18 -0700 (PDT) Received: from localhost.localdomain (2a02-8440-4641-6f91-91b7-326a-5d27-a1c3.rev.sfr.net. [2a02:8440:4641:6f91:91b7:326a:5d27:a1c3]) by smtp.gmail.com with ESMTPSA id ay35-20020a05600c1e2300b003a2e42ae9a4sm20617121wmb.14.2022.07.26.03.34.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jul 2022 03:34:18 -0700 (PDT) From: Jerome Neanne To: lgirdwood@gmail.com, broonie@kernel.org, robh+dt@kernel.org, nm@ti.com, kristo@kernel.org Cc: khilman@baylibre.com, narmstrong@baylibre.com, msp@baylibre.com, j-keerthy@ti.com, lee.jones@linaro.org, jneanne@baylibre.com, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 05/11] regulator: dt-bindings: Add TI TPS65219 PMIC bindings Date: Tue, 26 Jul 2022 12:33:49 +0200 Message-Id: <20220726103355.17684-6-jneanne@baylibre.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220726103355.17684-1-jneanne@baylibre.com> References: <20220726103355.17684-1-jneanne@baylibre.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add TPS65219 PMIC bindings using json-schema. Describe required properties and regname-supply. regname-supply is required when bypass mode is used for a regulator. Describes regulator topology. Interrupts support. Add a power-button property to configure the EN/PB/VSENSE pin as a powerbutton: TPS65219 has a multipurpose pin called EN/PB/VSENSE that can be either: - EN in which case it functions as an enable pin. - VSENSE which compares the voltages and triggers an automatic on/off request. - PB in which case it can be configured to trigger an interrupt to the SoC. ti,power-button reflects the last one of those options where the board has a button wired to the pin and triggers an interrupt on pressing it. Signed-off-by: Markus Schneider-Pargmann Signed-off-by: Jerome Neanne --- .../bindings/regulator/ti,tps65219.yaml | 164 ++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 Documentation/devicetree/bindings/regulator/ti,tps65219= .yaml diff --git a/Documentation/devicetree/bindings/regulator/ti,tps65219.yaml b= /Documentation/devicetree/bindings/regulator/ti,tps65219.yaml new file mode 100644 index 000000000000..8fca4db6c64c --- /dev/null +++ b/Documentation/devicetree/bindings/regulator/ti,tps65219.yaml @@ -0,0 +1,164 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/regulator/ti,tps65219.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: TI tps65219 Power Management Integrated Circuit regulators + +maintainers: + - Jerome Neanne + +description: | + Regulator nodes should be named to buck and ldo. + +properties: + compatible: + enum: + - ti,tps65219 + + reg: + maxItems: 1 + + system-power-controller: + type: boolean + description: Optional property that indicates that this device is + controlling system power. + + interrupts: + description: Short-circuit, over-current, under-voltage for regulators= , PB interrupts. + maxItems: 1 + + interrupt-controller: true + + '#interrupt-cells': + description: Specifies the PIN numbers and Flags, as defined in + include/dt-bindings/interrupt-controller/irq.h + const: 1 + + power-button: + type: boolean + description: Optional property that sets the EN/PB/VSENSE pin to be a + power-button. + +patternProperties: + "^buck[1-3]-supply$": + description: Input supply phandle of one regulator. + + "^ldo[1-4]-supply$": + description: Input supply phandle of one regulator. + + regulators: + type: object + description: | + list of regulators provided by this controller + + patternProperties: + "^ldo[1-4]$": + type: object + $ref: regulator.yaml# + description: + Properties for single LDO regulator. + + unevaluatedProperties: false + + "^buck[1-3]$": + type: object + $ref: regulator.yaml# + description: + Properties for single BUCK regulator. + + unevaluatedProperties: false + + additionalProperties: false + +required: + - compatible + - reg + - interrupts + - regulators + +additionalProperties: false + +examples: + - | + #include + i2c { + #address-cells =3D <1>; + #size-cells =3D <0>; + + tps65219: pmic@30 { + compatible =3D "ti,tps65219"; + reg =3D <0x30>; + buck1-supply =3D <&vcc_3v3_sys>; + buck2-supply =3D <&vcc_3v3_sys>; + buck3-supply =3D <&vcc_3v3_sys>; + ldo1-supply =3D <&vcc_3v3_sys>; + ldo2-supply =3D <&buck2_reg>; + ldo3-supply =3D <&vcc_3v3_sys>; + ldo4-supply =3D <&vcc_3v3_sys>; + + pinctrl-0 =3D <&pmic_irq_pins_default>; + + interrupt-parent =3D <&gic500>; + interrupts =3D ; + interrupt-controller; + #interrupt-cells =3D <1>; + + regulators { + buck1_reg: buck1 { + regulator-name =3D "VDD_CORE"; + regulator-min-microvolt =3D <750000>; + regulator-max-microvolt =3D <750000>; + regulator-boot-on; + regulator-always-on; + }; + + buck2_reg: buck2 { + regulator-name =3D "VCC1V8"; + regulator-min-microvolt =3D <1800000>; + regulator-max-microvolt =3D <1800000>; + regulator-boot-on; + regulator-always-on; + }; + + buck3_reg: buck3 { + regulator-name =3D "VDD_LPDDR4"; + regulator-min-microvolt =3D <1100000>; + regulator-max-microvolt =3D <1100000>; + regulator-boot-on; + regulator-always-on; + }; + + ldo1_reg: ldo1 { + regulator-name =3D "VDDSHV_SD_IO_PMIC"; + regulator-min-microvolt =3D <33000000>; + regulator-max-microvolt =3D <33000000>; + }; + + ldo2_reg: ldo2 { + regulator-name =3D "VDDAR_CORE"; + regulator-min-microvolt =3D <850000>; + regulator-max-microvolt =3D <850000>; + regulator-boot-on; + regulator-always-on; + }; + + ldo3_reg: ldo3 { + regulator-name =3D "VDDA_1V8"; + regulator-min-microvolt =3D <18000000>; + regulator-max-microvolt =3D <18000000>; + regulator-boot-on; + regulator-always-on; + }; + + ldo4_reg: ldo4 { + regulator-name =3D "VDD_PHY_2V5"; + regulator-min-microvolt =3D <25000000>; + regulator-max-microvolt =3D <25000000>; + regulator-boot-on; + regulator-always-on; + }; + }; + }; + }; --=20 2.17.1 From nobody Wed Apr 15 04:24:52 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 630C7C433EF for ; Tue, 26 Jul 2022 10:34:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238781AbiGZKer (ORCPT ); Tue, 26 Jul 2022 06:34:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33006 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238684AbiGZKeY (ORCPT ); Tue, 26 Jul 2022 06:34:24 -0400 Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [IPv6:2a00:1450:4864:20::430]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E59C52CE0B for ; Tue, 26 Jul 2022 03:34:21 -0700 (PDT) Received: by mail-wr1-x430.google.com with SMTP id h9so19579894wrm.0 for ; Tue, 26 Jul 2022 03:34:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=kyMkAEb4DEqPwWXhiq/3V/hoZtSY0uf1U6kWK1YhtMk=; b=nl+p0OEAMwAhUvRQLpDmb2gEP7EfzxtBrApABr6Y4haoIlVfVde/myJhIzND11qqx/ V7uMUISxTFjv0cUz+MKXWXfRgUB0MtViHdybz4KnkFOKc2QQpSTN7MIrrO7VJFs5f3PY hXkAJ5EqRSIsZKFGOUnB1CDrl+PF1O/6j9m7+dDgpwBDRK7czFybgtovOfuQUfavTOmI JxPAuRhNba89NOzU/oWODs+ljRqUInS72ocxCIgWnbkSE6pb6imaoxHn8HirRda0E6eL Zet1bHEWdD4eeAJddl7/tqkI+avliueKlzutuR/b9c5Pa08AzRDjFxd0dc76ClvkHl/F D5Mg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=kyMkAEb4DEqPwWXhiq/3V/hoZtSY0uf1U6kWK1YhtMk=; b=N8fQZyrXbdYuY0ln6C868FTuwxaYXek/N6OsVPf3BevL7Fj91HeGvxaT0ReQvApLtJ nOy123Ju7BL3rqjoPqRx/DSyC62P1Yl1nV9Jr5biR1COs1ynPL+7+LzZvlFtMpc8Qro/ fSmUzfUjD1YO9yT7DNUm7t//C4gGyy16FZS/cXQekO4QponvulL5o75X1MefgYPtTODI kCv4quhATXw4kr+o2/rEtxTPl1RQWJye4wtfG12iHtX4QpA/tDEcGtu6nR0Bt1XcMqw6 iQ02XbwlsL2UBb9T+a7zxCuRIYnkSLtHMJ4nu+tkL95E52uvQIw83friOta3aHHvWJSw sDFA== X-Gm-Message-State: AJIora/PjArejtRnYxEuwgaL2mrQ5RKJJ0EAKrKbpjYomthbS+EAvZ0g YwihOyfn4E+tTexboxeq4Th0XQ== X-Google-Smtp-Source: AGRyM1v20YNqfzuunFgQ9KkBSCMsboIf4xUiFZe9+2YF8RKIw7SGj8vNBb9gsFX+3my/kq8A4kriRw== X-Received: by 2002:a5d:6b50:0:b0:21e:298c:caad with SMTP id x16-20020a5d6b50000000b0021e298ccaadmr10179355wrw.509.1658831661130; Tue, 26 Jul 2022 03:34:21 -0700 (PDT) Received: from localhost.localdomain (2a02-8440-4641-6f91-91b7-326a-5d27-a1c3.rev.sfr.net. [2a02:8440:4641:6f91:91b7:326a:5d27:a1c3]) by smtp.gmail.com with ESMTPSA id ay35-20020a05600c1e2300b003a2e42ae9a4sm20617121wmb.14.2022.07.26.03.34.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jul 2022 03:34:20 -0700 (PDT) From: Jerome Neanne To: lgirdwood@gmail.com, broonie@kernel.org, robh+dt@kernel.org, nm@ti.com, kristo@kernel.org Cc: khilman@baylibre.com, narmstrong@baylibre.com, msp@baylibre.com, j-keerthy@ti.com, lee.jones@linaro.org, jneanne@baylibre.com, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 06/11] mfd: drivers: Add TI TPS65219 PMIC support Date: Tue, 26 Jul 2022 12:33:50 +0200 Message-Id: <20220726103355.17684-7-jneanne@baylibre.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220726103355.17684-1-jneanne@baylibre.com> References: <20220726103355.17684-1-jneanne@baylibre.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The TPS65219 is a power management IC PMIC designed to supply a wide range of SoCs in both portable and stationary applications. Any SoC can control TPS65219 over a standard I2C interface. It contains the following components: - Regulators. - Over Temperature warning and Shut down. - GPIOs - Multi Function Pins (MFP) This patch adds support for tps65219 mfd device. At this time only the functionalities listed below are made available: - Regulators probe and functionalities - warm and cold reset support - SW shutdown support Signed-off-by: Jerome Neanne --- MAINTAINERS | 1 + drivers/mfd/Kconfig | 15 +++ drivers/mfd/Makefile | 1 + drivers/mfd/tps65219.c | 214 +++++++++++++++++++++++++++++ include/linux/mfd/tps65219.h | 251 +++++++++++++++++++++++++++++++++++ 5 files changed, 482 insertions(+) create mode 100644 drivers/mfd/tps65219.c create mode 100644 include/linux/mfd/tps65219.h diff --git a/MAINTAINERS b/MAINTAINERS index 67850b321cbb..1331c43fc6ce 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -14711,6 +14711,7 @@ F: drivers/mfd/menelaus.c F: drivers/mfd/palmas.c F: drivers/mfd/tps65217.c F: drivers/mfd/tps65218.c +F: drivers/mfd/tps65219.c F: drivers/mfd/tps65910.c F: drivers/mfd/twl-core.[ch] F: drivers/mfd/twl4030*.c diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig index 3b59456f5545..c66e56374a9a 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig @@ -1574,6 +1574,21 @@ config MFD_TPS65218 This driver can also be built as a module. If so, the module will be called tps65218. =20 +config MFD_TPS65219 + tristate "TI TPS65219 Power Management chips" + depends on I2C && OF + select MFD_CORE + select REGMAP_I2C + select REGMAP_IRQ + help + If you say yes here you get support for the TPS65219 series of + Power Management chips. + These include voltage regulators, gpio and other features + that are often used in portable devices. + + This driver can also be built as a module. If so, the module + will be called tps65219. + config MFD_TPS6586X bool "TI TPS6586x Power Management chips" depends on I2C=3Dy diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile index 858cacf659d6..a8ff3d6ea3ab 100644 --- a/drivers/mfd/Makefile +++ b/drivers/mfd/Makefile @@ -101,6 +101,7 @@ obj-$(CONFIG_TPS6507X) +=3D tps6507x.o obj-$(CONFIG_MFD_TPS65086) +=3D tps65086.o obj-$(CONFIG_MFD_TPS65217) +=3D tps65217.o obj-$(CONFIG_MFD_TPS65218) +=3D tps65218.o +obj-$(CONFIG_MFD_TPS65219) +=3D tps65219.o obj-$(CONFIG_MFD_TPS65910) +=3D tps65910.o obj-$(CONFIG_MFD_TPS65912) +=3D tps65912-core.o obj-$(CONFIG_MFD_TPS65912_I2C) +=3D tps65912-i2c.o diff --git a/drivers/mfd/tps65219.c b/drivers/mfd/tps65219.c new file mode 100644 index 000000000000..c3bf975ea6c7 --- /dev/null +++ b/drivers/mfd/tps65219.c @@ -0,0 +1,214 @@ +// SPDX-License-Identifier: GPL-2.0 +// +// Driver for TPS65219 Integrated power management chipsets +// +// Copyright (C) 2022 BayLibre Incorporated - https://www.baylibre.com/ +// +// This implementation derived from tps65218 authored by +// "J Keerthy " +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +static struct i2c_client *tps65219_i2c_client; + +/** + * tps65219_warm_reset: issue warm reset to SOC. + * + * @tps: Device to write to. + */ +static int tps65219_warm_reset(struct tps65219 *tps) +{ + dev_dbg(tps->dev, "warm reset"); + pr_flush(1000, true); + return regmap_update_bits(tps->regmap, TPS65219_REG_MFP_CTRL, + TPS65219_MFP_WARM_RESET_I2C_CTRL_MASK, + TPS65219_MFP_WARM_RESET_I2C_CTRL_MASK); +} + +/** + * tps65219_cold_reset: issue cold reset to SOC. + * + * @tps: Device to write to. + */ +static int tps65219_cold_reset(struct tps65219 *tps) +{ + dev_dbg(tps->dev, "cold reset"); + pr_flush(1000, true); + return regmap_update_bits(tps->regmap, TPS65219_REG_MFP_CTRL, + TPS65219_MFP_COLD_RESET_I2C_CTRL_MASK, + TPS65219_MFP_COLD_RESET_I2C_CTRL_MASK); +} + +/** + * tps65219_soft_shutdown: issue cold reset to SOC. + * + * @tps: Device to write to. + */ +static int tps65219_soft_shutdown(struct tps65219 *tps) +{ + dev_dbg(tps->dev, "software shutdown"); + pr_flush(1000, true); + return regmap_update_bits(tps->regmap, TPS65219_REG_MFP_CTRL, + TPS65219_MFP_I2C_OFF_REQ_MASK, + TPS65219_MFP_I2C_OFF_REQ_MASK); +} + +/** + * pmic_rst_restart: trig tps65219 reset to SOC. + * + * Trigged via notifier + */ +static int pmic_rst_restart(struct notifier_block *this, + unsigned long reboot_mode, void *cmd) +{ + struct tps65219 *tps; + + tps =3D container_of(this, struct tps65219, nb); + if (!tps) { + pr_err("%s: pointer to tps65219 is invalid\n", __func__); + return -ENODEV; + } + if (reboot_mode =3D=3D REBOOT_WARM) + tps65219_warm_reset(tps); + else + tps65219_cold_reset(tps); + return NOTIFY_DONE; +} + +static struct notifier_block pmic_rst_restart_nb =3D { + .notifier_call =3D pmic_rst_restart, + .priority =3D 200, +}; + +/** + * pmic_do_poweroff: trig tps65219 regulators power OFF sequence. + */ +static void pmic_do_poweroff(void) +{ + struct tps65219 *tps; + + tps =3D dev_get_drvdata(&tps65219_i2c_client->dev); + tps65219_soft_shutdown(tps); +} + +static const struct mfd_cell tps65219_cells[] =3D { + { .name =3D "tps65219-regulator", }, +}; + +static const struct regmap_config tps65219_regmap_config =3D { + .reg_bits =3D 8, + .val_bits =3D 8, + .max_register =3D TPS65219_REG_FACTORY_CONFIG_2, +}; + +static const struct of_device_id of_tps65219_match_table[] =3D { + { .compatible =3D "ti,tps65219", }, + {} +}; +MODULE_DEVICE_TABLE(of, of_tps65219_match_table); + +static int tps65219_probe(struct i2c_client *client, + const struct i2c_device_id *ids) +{ + struct tps65219 *tps; + int ret; + unsigned int chipid; + bool sys_pwr; + + tps =3D devm_kzalloc(&client->dev, sizeof(*tps), GFP_KERNEL); + if (!tps) + return -ENOMEM; + + i2c_set_clientdata(client, tps); + tps->dev =3D &client->dev; + tps->regmap =3D devm_regmap_init_i2c(client, &tps65219_regmap_config); + if (IS_ERR(tps->regmap)) { + ret =3D PTR_ERR(tps->regmap); + dev_err(tps->dev, "Failed to allocate register map: %d\n", + ret); + return ret; + } + + ret =3D regmap_read(tps->regmap, TPS65219_REG_TI_DEV_ID, &chipid); + if (ret) { + dev_err(tps->dev, "Failed to read device ID: %d\n", ret); + return ret; + } + + ret =3D devm_mfd_add_devices(tps->dev, PLATFORM_DEVID_AUTO, tps65219_cell= s, + ARRAY_SIZE(tps65219_cells), NULL, 0, + NULL); + if (ret) { + dev_err(tps->dev, "mfd_add_devices failed: %d\n", ret); + return ret; + } + + tps->nb =3D pmic_rst_restart_nb; + ret =3D register_restart_handler(&tps->nb); + if (ret) { + dev_err(tps->dev, "%s: cannot register restart handler, %d\n", + __func__, ret); + return -ENODEV; + } + + sys_pwr =3D of_property_read_bool(tps->dev->of_node, + "system-power-controller"); + + if (sys_pwr) { + if (pm_power_off) + dev_warn(tps->dev, "Setup as system-power-controller but pm_power_off f= unction already registered, overwriting\n"); + tps65219_i2c_client =3D client; + pm_power_off =3D &pmic_do_poweroff; + } + return ret; +} + +static int tps65219_remove(struct i2c_client *client) +{ + struct tps65219 *tps =3D i2c_get_clientdata(client); + + if (tps65219_i2c_client =3D=3D client) { + pm_power_off =3D NULL; + tps65219_i2c_client =3D NULL; + } + + return unregister_restart_handler(&tps->nb); +} + +static const struct i2c_device_id tps65219_id_table[] =3D { + { "tps65219", TPS65219 }, + { }, +}; +MODULE_DEVICE_TABLE(i2c, tps65219_id_table); + +static struct i2c_driver tps65219_driver =3D { + .driver =3D { + .name =3D "tps65219", + .of_match_table =3D of_tps65219_match_table, + }, + .probe =3D tps65219_probe, + .id_table =3D tps65219_id_table, + .remove =3D tps65219_remove, +}; + +module_i2c_driver(tps65219_driver); + +MODULE_AUTHOR("Jerome Neanne "); +MODULE_DESCRIPTION("TPS65219 chip family multi-function driver"); +MODULE_LICENSE("GPL"); diff --git a/include/linux/mfd/tps65219.h b/include/linux/mfd/tps65219.h new file mode 100644 index 000000000000..e9197ab8bc75 --- /dev/null +++ b/include/linux/mfd/tps65219.h @@ -0,0 +1,251 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * linux/mfd/tps65219.h + * + * Functions to access TPS65219 power management chip. + * + * Copyright (C) 2022 BayLibre Incorporated - https://www.baylibre.com/ + */ + +#ifndef __LINUX_MFD_TPS65219_H +#define __LINUX_MFD_TPS65219_H + +#include +#include +#include +#include +#include + +#define TPS65219_1V35 1350000 +#define TPS65219_1V8 1800000 + +/* TPS chip id list */ +#define TPS65219 0xF0 + +/* I2C ID for TPS65219 part */ +#define TPS65219_I2C_ID 0x24 + +/* All register addresses */ +#define TPS65219_REG_TI_DEV_ID 0x00 +#define TPS65219_REG_NVM_ID 0x01 +#define TPS65219_REG_ENABLE_CTRL 0x02 +#define TPS65219_REG_BUCKS_CONFIG 0x03 +#define TPS65219_REG_LDO4_VOUT 0x04 +#define TPS65219_REG_LDO3_VOUT 0x05 +#define TPS65219_REG_LDO2_VOUT 0x06 +#define TPS65219_REG_LDO1_VOUT 0x07 +#define TPS65219_REG_BUCK3_VOUT 0x8 +#define TPS65219_REG_BUCK2_VOUT 0x9 +#define TPS65219_REG_BUCK1_VOUT 0xA +#define TPS65219_REG_LDO4_SEQUENCE_SLOT 0xB +#define TPS65219_REG_LDO3_SEQUENCE_SLOT 0xC +#define TPS65219_REG_LDO2_SEQUENCE_SLOT 0xD +#define TPS65219_REG_LDO1_SEQUENCE_SLOT 0xE +#define TPS65219_REG_BUCK3_SEQUENCE_SLOT 0xF +#define TPS65219_REG_BUCK2_SEQUENCE_SLOT 0x10 +#define TPS65219_REG_BUCK1_SEQUENCE_SLOT 0x11 +#define TPS65219_REG_nRST_SEQUENCE_SLOT 0x12 +#define TPS65219_REG_GPIO_SEQUENCE_SLOT 0x13 +#define TPS65219_REG_GPO2_SEQUENCE_SLOT 0x14 +#define TPS65219_REG_GPO1_SEQUENCE_SLOT 0x15 +#define TPS65219_REG_POWER_UP_SLOT_DURATION_1 0x16 +#define TPS65219_REG_POWER_UP_SLOT_DURATION_2 0x17 +#define TPS65219_REG_POWER_UP_SLOT_DURATION_3 0x18 +#define TPS65219_REG_POWER_UP_SLOT_DURATION_4 0x19 +#define TPS65219_REG_POWER_DOWN_SLOT_DURATION_1 0x1A +#define TPS65219_REG_POWER_DOWN_SLOT_DURATION_2 0x1B +#define TPS65219_REG_POWER_DOWN_SLOT_DURATION_3 0x1C +#define TPS65219_REG_POWER_DOWN_SLOT_DURATION_4 0x1D +#define TPS65219_REG_GENERAL_CONFIG 0x1E +#define TPS65219_REG_MFP_1_CONFIG 0x1F +#define TPS65219_REG_MFP_2_CONFIG 0x20 +#define TPS65219_REG_STBY_1_CONFIG 0x21 +#define TPS65219_REG_STBY_2_CONFIG 0x22 +#define TPS65219_REG_OC_DEGL_CONFIG 0x23 +/* 'sub irq' MASK registers */ +#define TPS65219_REG_INT_MASK_UV 0x24 +#define TPS65219_REG_MASK_CONFIG 0x25 + +#define TPS65219_REG_I2C_ADDRESS_REG 0x26 +#define TPS65219_REG_USER_GENERAL_NVM_STORAGE 0x27 +#define TPS65219_REG_MANUFACTURING_VER 0x28 +#define TPS65219_REG_MFP_CTRL 0x29 +#define TPS65219_REG_DISCHARGE_CONFIG 0x2A +/* main irq registers */ +#define TPS65219_REG_INT_SOURCE 0x2B +/* 'sub irq' registers */ +#define TPS65219_REG_INT_LDO_3_4 0x2C +#define TPS65219_REG_INT_LDO_1_2 0x2D +#define TPS65219_REG_INT_BUCK_3 0x2E +#define TPS65219_REG_INT_BUCK_1_2 0x2F +#define TPS65219_REG_INT_SYSTEM 0x30 +#define TPS65219_REG_INT_RV 0x31 +#define TPS65219_REG_INT_TIMEOUT_RV_SD 0x32 +#define TPS65219_REG_INT_PB 0x33 + +#define TPS65219_REG_USER_NVM_CMD 0x34 +#define TPS65219_REG_POWER_UP_STATUS 0x35 +#define TPS65219_REG_SPARE_2 0x36 +#define TPS65219_REG_SPARE_3 0x37 +#define TPS65219_REG_FACTORY_CONFIG_2 0x41 + +/* Register field definitions */ +#define TPS65219_DEVID_REV_MASK GENMASK(7, 0) +#define TPS65219_BUCKS_LDOS_VOUT_VSET_MASK GENMASK(5, 0) +#define TPS65219_BUCKS_UV_THR_SEL_MASK BIT(6) +#define TPS65219_BUCKS_BW_SEL_MASK BIT(7) +#define LDO_BYP_SHIFT 6 +#define TPS65219_LDOS_BYP_CONFIG_MASK BIT(LDO_BYP_SHIFT) +#define TPS65219_LDOS_LSW_CONFIG_MASK BIT(7) +/* Regulators enable control */ +#define TPS65219_ENABLE_BUCK1_EN_MASK BIT(0) +#define TPS65219_ENABLE_BUCK2_EN_MASK BIT(1) +#define TPS65219_ENABLE_BUCK3_EN_MASK BIT(2) +#define TPS65219_ENABLE_LDO1_EN_MASK BIT(3) +#define TPS65219_ENABLE_LDO2_EN_MASK BIT(4) +#define TPS65219_ENABLE_LDO3_EN_MASK BIT(5) +#define TPS65219_ENABLE_LDO4_EN_MASK BIT(6) +/* power ON-OFF sequence slot */ +#define TPS65219_BUCKS_LDOS_SEQUENCE_OFF_SLOT_MASK GENMASK(3, 0) +#define TPS65219_BUCKS_LDOS_SEQUENCE_ON_SLOT_MASK GENMASK(7, 4) +/* TODO: Not needed, same mapping as TPS65219_ENABLE_REGNAME_EN, factorize= */ +#define TPS65219_STBY1_BUCK1_STBY_EN_MASK BIT(0) +#define TPS65219_STBY1_BUCK2_STBY_EN_MASK BIT(1) +#define TPS65219_STBY1_BUCK3_STBY_EN_MASK BIT(2) +#define TPS65219_STBY1_LDO1_STBY_EN_MASK BIT(3) +#define TPS65219_STBY1_LDO2_STBY_EN_MASK BIT(4) +#define TPS65219_STBY1_LDO3_STBY_EN_MASK BIT(5) +#define TPS65219_STBY1_LDO4_STBY_EN_MASK BIT(6) +/* STBY_2 config */ +#define TPS65219_STBY2_GPO1_STBY_EN_MASK BIT(0) +#define TPS65219_STBY2_GPO2_STBY_EN_MASK BIT(1) +#define TPS65219_STBY2_GPIO_STBY_EN_MASK BIT(2) +/* MFP Control */ +#define TPS65219_MFP_I2C_OFF_REQ_MASK BIT(0) +#define TPS65219_MFP_STBY_I2C_CTRL_MASK BIT(1) +#define TPS65219_MFP_COLD_RESET_I2C_CTRL_MASK BIT(2) +#define TPS65219_MFP_WARM_RESET_I2C_CTRL_MASK BIT(3) +#define TPS65219_MFP_GPIO_STATUS_MASK BIT(4) +/* MFP_1 Config */ +#define TPS65219_MFP_1_VSEL_DDR_SEL_MASK BIT(0) +#define TPS65219_MFP_1_VSEL_SD_POL_MASK BIT(1) +#define TPS65219_MFP_1_VSEL_RAIL_MASK BIT(2) +/* MFP_2 Config */ +#define TPS65219_MFP_2_MODE_STBY_MASK GENMASK(1, 0) +#define TPS65219_MFP_2_MODE_RESET_MASK BIT(2) +#define TPS65219_MFP_2_EN_PB_VSENSE_DEGL_MASK BIT(3) +#define TPS65219_MFP_2_EN_PB_VSENSE_MASK GENMASK(5, 4) +#define TPS65219_MFP_2_WARM_COLD_RESET_MASK BIT(6) +#define TPS65219_MFP_2_PU_ON_FSD_MASK BIT(7) +#define TPS65219_MFP_2_EN 0 +#define TPS65219_MFP_2_PB BIT(4) +#define TPS65219_MFP_2_VSENSE BIT(5) +/* MASK_UV Config */ +#define TPS65219_REG_MASK_UV_LDO1_UV_MASK BIT(0) +#define TPS65219_REG_MASK_UV_LDO2_UV_MASK BIT(1) +#define TPS65219_REG_MASK_UV_LDO3_UV_MASK BIT(2) +#define TPS65219_REG_MASK_UV_LDO4_UV_MASK BIT(3) +#define TPS65219_REG_MASK_UV_BUCK1_UV_MASK BIT(4) +#define TPS65219_REG_MASK_UV_BUCK2_UV_MASK BIT(5) +#define TPS65219_REG_MASK_UV_BUCK3_UV_MASK BIT(6) +#define TPS65219_REG_MASK_UV_RETRY_MASK BIT(7) +/* MASK Config */ +// SENSOR_N_WARM_MASK already defined in Thermal +#define TPS65219_REG_MASK_INT_FOR_RV_MASK BIT(4) +#define TPS65219_REG_MASK_EFFECT_MASK GENMASK(2, 1) +#define TPS65219_REG_MASK_INT_FOR_PB_MASK BIT(7) +/* UnderVoltage - Short to GND - OverCurrent*/ +/* LDO3-4 */ +#define TPS65219_INT_LDO3_SCG_MASK BIT(0) +#define TPS65219_INT_LDO3_OC_MASK BIT(1) +#define TPS65219_INT_LDO3_UV_MASK BIT(2) +#define TPS65219_INT_LDO4_SCG_MASK BIT(3) +#define TPS65219_INT_LDO4_OC_MASK BIT(4) +#define TPS65219_INT_LDO4_UV_MASK BIT(5) +/* LDO1-2 */ +#define TPS65219_INT_LDO1_SCG_MASK BIT(0) +#define TPS65219_INT_LDO1_OC_MASK BIT(1) +#define TPS65219_INT_LDO1_UV_MASK BIT(2) +#define TPS65219_INT_LDO2_SCG_MASK BIT(3) +#define TPS65219_INT_LDO2_OC_MASK BIT(4) +#define TPS65219_INT_LDO2_UV_MASK BIT(5) +/* BUCK3 */ +#define TPS65219_INT_BUCK3_SCG_MASK BIT(0) +#define TPS65219_INT_BUCK3_OC_MASK BIT(1) +#define TPS65219_INT_BUCK3_NEG_OC_MASK BIT(2) +#define TPS65219_INT_BUCK3_UV_MASK BIT(3) +/* BUCK1-2 */ +#define TPS65219_INT_BUCK1_SCG_MASK BIT(0) +#define TPS65219_INT_BUCK1_OC_MASK BIT(1) +#define TPS65219_INT_BUCK1_NEG_OC_MASK BIT(2) +#define TPS65219_INT_BUCK1_UV_MASK BIT(3) +#define TPS65219_INT_BUCK2_SCG_MASK BIT(4) +#define TPS65219_INT_BUCK2_OC_MASK BIT(5) +#define TPS65219_INT_BUCK2_NEG_OC_MASK BIT(6) +#define TPS65219_INT_BUCK2_UV_MASK BIT(7) +/* Thermal Sensor */ +#define TPS65219_INT_SENSOR_3_WARM_MASK BIT(0) +#define TPS65219_INT_SENSOR_2_WARM_MASK BIT(1) +#define TPS65219_INT_SENSOR_1_WARM_MASK BIT(2) +#define TPS65219_INT_SENSOR_0_WARM_MASK BIT(3) +#define TPS65219_INT_SENSOR_3_HOT_MASK BIT(4) +#define TPS65219_INT_SENSOR_2_HOT_MASK BIT(5) +#define TPS65219_INT_SENSOR_1_HOT_MASK BIT(6) +#define TPS65219_INT_SENSOR_0_HOT_MASK BIT(7) +/* Residual Voltage */ +#define TPS65219_INT_BUCK1_RV_MASK BIT(0) +#define TPS65219_INT_BUCK2_RV_MASK BIT(1) +#define TPS65219_INT_BUCK3_RV_MASK BIT(2) +#define TPS65219_INT_LDO1_RV_MASK BIT(3) +#define TPS65219_INT_LDO2_RV_MASK BIT(4) +#define TPS65219_INT_LDO3_RV_MASK BIT(5) +#define TPS65219_INT_LDO4_RV_MASK BIT(6) +/* Residual Voltage ShutDown */ +#define TPS65219_INT_BUCK1_RV_SD_MASK BIT(0) +#define TPS65219_INT_BUCK2_RV_SD_MASK BIT(1) +#define TPS65219_INT_BUCK3_RV_SD_MASK BIT(2) +#define TPS65219_INT_LDO1_RV_SD_MASK BIT(3) +#define TPS65219_INT_LDO2_RV_SD_MASK BIT(4) +#define TPS65219_INT_LDO3_RV_SD_MASK BIT(5) +#define TPS65219_INT_LDO4_RV_SD_MASK BIT(6) +#define TPS65219_INT_TIMEOUT_MASK BIT(7) +/* Power Button */ +#define TPS65219_INT_PB_FALLING_EDGE_DET_MASK BIT(0) +#define TPS65219_INT_PB_RISING_EDGE_DET_MASK BIT(1) +#define TPS65219_INT_PB_REAL_TIME_STATUS_MASK BIT(2) + +enum tps65219_regulator_id { + /* DCDC's */ + TPS65219_BUCK_1, + TPS65219_BUCK_2, + TPS65219_BUCK_3, + /* LDOs */ + TPS65219_LDO_1, + TPS65219_LDO_2, + TPS65219_LDO_3, + TPS65219_LDO_4, +}; + +#define TPS65219_MAX_REG_ID TPS65219_LDO_4 + +/* Number of step-down converters available */ +#define TPS65219_NUM_DCDC 3 +/* Number of LDO voltage regulators available */ +#define TPS65219_NUM_LDO 4 +/* Number of total regulators available */ +#define TPS65219_NUM_REGULATOR (TPS65219_NUM_DCDC + TPS65219_NUM_LDO) + +/** + * struct tps65219 - tps65219 sub-driver chip access routines + * + * Device data may be used to access the TPS65219 chip + */ +struct tps65219 { + struct device *dev; + unsigned int id; + struct regulator_desc desc[TPS65219_NUM_REGULATOR]; + struct regmap *regmap; + struct notifier_block nb; +}; + +#endif /* __LINUX_MFD_TPS65219_H */ --=20 2.17.1 From nobody Wed Apr 15 04:24:52 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 11BFFC43334 for ; Tue, 26 Jul 2022 10:35:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238832AbiGZKfB (ORCPT ); Tue, 26 Jul 2022 06:35:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33034 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238674AbiGZKek (ORCPT ); Tue, 26 Jul 2022 06:34:40 -0400 Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [IPv6:2a00:1450:4864:20::430]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E3F94326C2 for ; Tue, 26 Jul 2022 03:34:25 -0700 (PDT) Received: by mail-wr1-x430.google.com with SMTP id v13so11759667wru.12 for ; Tue, 26 Jul 2022 03:34:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=olXIWZ2Y25qhRcMeiaJUKmc3CzNTJ/CvhLDT0bUM6Tk=; b=FiLi9zlrmIbKuJFM49oYxVQlKC/3afAlPF9HR1B0/o/u3Ym3ABoChDGFYHkbHi1sGQ HIJv4ubyimnsEqWV1sceHHTDZO8xt2VbS9hOGYyBjH33+q5OMw8FqA4DXbmMEhxZTkOd CMvgjENDL4Ffen4Iw3RWIFWDbnbohg4Rj/1vbXi5nXmMHF2D/TWPbts2WKBabY+Yr2yP ViAq/B3PGcGzhC0VAcTZRAbWHijx1eSyHf0ncPs747Q+ff7SK9jmQ4r3Y2z09lf3b8KJ GsN++2/cWMg7v0ptU7DAeTHaYtcUybRyi+M3g/o4S24jnD2dyDlrV9usrWm/bkrUwhkT cbbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=olXIWZ2Y25qhRcMeiaJUKmc3CzNTJ/CvhLDT0bUM6Tk=; b=vCS8cBaxO6YISx0aVUs/r0RtJ8sJVrQJ2SgoQ69hMJS8rh/23Z2KIclkYpDXdXkVPF JyaThCCN7XSd8g6Ra6oNOUru5V60x3HiSM0JbVEVm9EBW+5dQ+hrYCE8CBUL4/2NA5Fd FlgWFEv8d9oZ8VuoM2oO0RpX4AhB11hJPthITn3XOwCq1OWKInJwCodkpzT4dMHp5XPf 62x4YAuJBK1HswfhjPKV0aWHYRQAQHy136LZ/YpIEmL2mrBtf52VLbN1A2Ddr3S8bvPt 6c2gzpd/rv8cO/kcFrhrJEFYcAI6pr2kURwegmn80ucucezqQFQuWFh+lGheEMt1Ad1q LW8g== X-Gm-Message-State: AJIora8KwwqQJOQFPtK8g677LX56+3yIZxKmBswfpYmliLgQFUwFN/Kk xGIlARjdBSuVQ0Bp4q3CPmd10A== X-Google-Smtp-Source: AGRyM1u3YUYQNK17xVb1qsOaewmKsV2DoAmOGn58qdX/pipyOUFVc7ZELwh1Uewpjx4ZJJksancrYQ== X-Received: by 2002:a5d:598e:0:b0:21e:7348:69bf with SMTP id n14-20020a5d598e000000b0021e734869bfmr9259587wri.157.1658831663529; Tue, 26 Jul 2022 03:34:23 -0700 (PDT) Received: from localhost.localdomain (2a02-8440-4641-6f91-91b7-326a-5d27-a1c3.rev.sfr.net. [2a02:8440:4641:6f91:91b7:326a:5d27:a1c3]) by smtp.gmail.com with ESMTPSA id ay35-20020a05600c1e2300b003a2e42ae9a4sm20617121wmb.14.2022.07.26.03.34.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jul 2022 03:34:23 -0700 (PDT) From: Jerome Neanne To: lgirdwood@gmail.com, broonie@kernel.org, robh+dt@kernel.org, nm@ti.com, kristo@kernel.org Cc: khilman@baylibre.com, narmstrong@baylibre.com, msp@baylibre.com, j-keerthy@ti.com, lee.jones@linaro.org, jneanne@baylibre.com, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 07/11] mfd: drivers: Add interrupts support to TI TPS65219 PMIC Date: Tue, 26 Jul 2022 12:33:51 +0200 Message-Id: <20220726103355.17684-8-jneanne@baylibre.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220726103355.17684-1-jneanne@baylibre.com> References: <20220726103355.17684-1-jneanne@baylibre.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add TPS65219 support for interrupts through regmap_irq_chip Signed-off-by: Jerome Neanne --- drivers/mfd/tps65219.c | 217 ++++++++++++++++++++++++++++++++++- include/linux/mfd/tps65219.h | 113 ++++++++++++++++++ 2 files changed, 328 insertions(+), 2 deletions(-) diff --git a/drivers/mfd/tps65219.c b/drivers/mfd/tps65219.c index c3bf975ea6c7..7366f251c21d 100644 --- a/drivers/mfd/tps65219.c +++ b/drivers/mfd/tps65219.c @@ -107,8 +107,73 @@ static void pmic_do_poweroff(void) tps65219_soft_shutdown(tps); } =20 -static const struct mfd_cell tps65219_cells[] =3D { - { .name =3D "tps65219-regulator", }, +static const struct resource tps65219_pwrbutton_resources[] =3D { + DEFINE_RES_IRQ_NAMED(TPS65219_INT_PB_FALLING_EDGE_DETECT, "falling"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_PB_RISING_EDGE_DETECT, "rising"), +}; + +static const struct resource tps65219_regulator_resources[] =3D { + DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO3_SCG, "LDO3_SCG"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO3_OC, "LDO3_OC"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO3_UV, "LDO3_UV"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO4_SCG, "LDO4_SCG"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO4_OC, "LDO4_OC"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO4_UV, "LDO4_UV"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO1_SCG, "LDO1_SCG"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO1_OC, "LDO1_OC"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO1_UV, "LDO1_UV"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO2_SCG, "LDO2_SCG"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO2_OC, "LDO2_OC"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO2_UV, "LDO2_UV"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_SCG, "BUCK3_SCG"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_OC, "BUCK3_OC"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_NEG_OC, "BUCK3_NEG_OC"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_UV, "BUCK3_UV"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_SCG, "BUCK1_SCG"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_OC, "BUCK1_OC"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_NEG_OC, "BUCK1_NEG_OC"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_UV, "BUCK1_UV"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_SCG, "BUCK2_SCG"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_OC, "BUCK2_OC"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_NEG_OC, "BUCK2_NEG_OC"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_UV, "BUCK2_UV"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_RV, "BUCK1_RV"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_RV, "BUCK2_RV"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_RV, "BUCK3_RV"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO1_RV, "LDO1_RV"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO2_RV, "LDO2_RV"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO3_RV, "LDO3_RV"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO4_RV, "LDO4_RV"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK1_RV_SD, "BUCK1_RV_SD"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK2_RV_SD, "BUCK2_RV_SD"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_BUCK3_RV_SD, "BUCK3_RV_SD"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO1_RV_SD, "LDO1_RV_SD"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO2_RV_SD, "LDO2_RV_SD"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO3_RV_SD, "LDO3_RV_SD"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_LDO4_RV_SD, "LDO4_RV_SD"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_TIMEOUT, "TIMEOUT"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_3_WARM, "SENSOR_3_WARM"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_2_WARM, "SENSOR_2_WARM"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_1_WARM, "SENSOR_1_WARM"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_0_WARM, "SENSOR_0_WARM"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_3_HOT, "SENSOR_3_HOT"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_2_HOT, "SENSOR_2_HOT"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_1_HOT, "SENSOR_1_HOT"), + DEFINE_RES_IRQ_NAMED(TPS65219_INT_SENSOR_0_HOT, "SENSOR_0_HOT"), +}; + +#define TPS65219_MAX_CELLS 2 + +static const struct mfd_cell tps65219_regulator_cell =3D { + .name =3D "tps65219-regulator", + .resources =3D tps65219_regulator_resources, + .num_resources =3D ARRAY_SIZE(tps65219_regulator_resources), +}; + +static const struct mfd_cell tps65219_pwrbutton_cell =3D { + .name =3D "tps65219-pwrbutton", + .resources =3D tps65219_pwrbutton_resources, + .num_resources =3D ARRAY_SIZE(tps65219_pwrbutton_resources), }; =20 static const struct regmap_config tps65219_regmap_config =3D { @@ -117,6 +182,147 @@ static const struct regmap_config tps65219_regmap_con= fig =3D { .max_register =3D TPS65219_REG_FACTORY_CONFIG_2, }; =20 +/* + * Mapping of main IRQ register bits to sub-IRQ register offsets so that w= e can + * access corect sub-IRQ registers based on bits that are set in main IRQ + * register. + */ +/* Timeout Residual Voltage Shutdown */ +static unsigned int bit0_offsets[] =3D {TPS65219_TO_RV_POS}; +static unsigned int bit1_offsets[] =3D {TPS65219_RV_POS}; /* Residual Volt= age */ +static unsigned int bit2_offsets[] =3D {TPS65219_SYS_POS}; /* System */ +static unsigned int bit3_offsets[] =3D {TPS65219_BUCK_1_2_POS}; /* Buck 1-= 2 */ +static unsigned int bit4_offsets[] =3D {TPS65219_BUCK_3_POS}; /* Buck 3 */ +static unsigned int bit5_offsets[] =3D {TPS65219_LDO_1_2_POS}; /* LDO 1-2 = */ +static unsigned int bit6_offsets[] =3D {TPS65219_LDO_3_4_POS}; /* LDO 3-4 = */ +static unsigned int bit7_offsets[] =3D {TPS65219_PB_POS}; /* Power Button = */ + +static struct regmap_irq_sub_irq_map tps65219_sub_irq_offsets[] =3D { + REGMAP_IRQ_MAIN_REG_OFFSET(bit0_offsets), + REGMAP_IRQ_MAIN_REG_OFFSET(bit1_offsets), + REGMAP_IRQ_MAIN_REG_OFFSET(bit2_offsets), + REGMAP_IRQ_MAIN_REG_OFFSET(bit3_offsets), + REGMAP_IRQ_MAIN_REG_OFFSET(bit4_offsets), + REGMAP_IRQ_MAIN_REG_OFFSET(bit5_offsets), + REGMAP_IRQ_MAIN_REG_OFFSET(bit6_offsets), + REGMAP_IRQ_MAIN_REG_OFFSET(bit7_offsets), +}; + +static struct regmap_irq tps65219_irqs[] =3D { + REGMAP_IRQ_REG(TPS65219_INT_LDO3_SCG, TPS65219_LDO_3_4_POS, + TPS65219_INT_LDO3_SCG_MASK), + REGMAP_IRQ_REG(TPS65219_INT_LDO3_OC, + TPS65219_LDO_3_4_POS, TPS65219_INT_LDO3_OC_MASK), + REGMAP_IRQ_REG(TPS65219_INT_LDO3_UV, TPS65219_LDO_3_4_POS, + TPS65219_INT_LDO3_UV_MASK), + REGMAP_IRQ_REG(TPS65219_INT_LDO4_SCG, TPS65219_LDO_3_4_POS, + TPS65219_INT_LDO4_SCG_MASK), + REGMAP_IRQ_REG(TPS65219_INT_LDO4_OC, TPS65219_LDO_3_4_POS, + TPS65219_INT_LDO4_OC_MASK), + REGMAP_IRQ_REG(TPS65219_INT_LDO4_UV, TPS65219_LDO_3_4_POS, + TPS65219_INT_LDO4_UV_MASK), + REGMAP_IRQ_REG(TPS65219_INT_LDO1_SCG, + TPS65219_LDO_1_2_POS, TPS65219_INT_LDO1_SCG_MASK), + REGMAP_IRQ_REG(TPS65219_INT_LDO1_OC, TPS65219_LDO_1_2_POS, + TPS65219_INT_LDO1_OC_MASK), + REGMAP_IRQ_REG(TPS65219_INT_LDO1_UV, TPS65219_LDO_1_2_POS, + TPS65219_INT_LDO1_UV_MASK), + REGMAP_IRQ_REG(TPS65219_INT_LDO2_SCG, TPS65219_LDO_1_2_POS, + TPS65219_INT_LDO2_SCG_MASK), + REGMAP_IRQ_REG(TPS65219_INT_LDO2_OC, TPS65219_LDO_1_2_POS, + TPS65219_INT_LDO2_OC_MASK), + REGMAP_IRQ_REG(TPS65219_INT_LDO2_UV, TPS65219_LDO_1_2_POS, + TPS65219_INT_LDO2_UV_MASK), + REGMAP_IRQ_REG(TPS65219_INT_BUCK3_SCG, TPS65219_BUCK_3_POS, + TPS65219_INT_BUCK3_SCG_MASK), + REGMAP_IRQ_REG(TPS65219_INT_BUCK3_OC, TPS65219_BUCK_3_POS, + TPS65219_INT_BUCK3_OC_MASK), + REGMAP_IRQ_REG(TPS65219_INT_BUCK3_NEG_OC, TPS65219_BUCK_3_POS, + TPS65219_INT_BUCK3_NEG_OC_MASK), + REGMAP_IRQ_REG(TPS65219_INT_BUCK3_UV, TPS65219_BUCK_3_POS, + TPS65219_INT_BUCK3_UV_MASK), + REGMAP_IRQ_REG(TPS65219_INT_BUCK2_SCG, TPS65219_BUCK_1_2_POS, + TPS65219_INT_BUCK2_SCG_MASK), + REGMAP_IRQ_REG(TPS65219_INT_BUCK2_OC, TPS65219_BUCK_1_2_POS, + TPS65219_INT_BUCK2_OC_MASK), + REGMAP_IRQ_REG(TPS65219_INT_BUCK2_NEG_OC, TPS65219_BUCK_1_2_POS, + TPS65219_INT_BUCK2_NEG_OC_MASK), + REGMAP_IRQ_REG(TPS65219_INT_BUCK2_UV, TPS65219_BUCK_1_2_POS, + TPS65219_INT_BUCK2_UV_MASK), + REGMAP_IRQ_REG(TPS65219_INT_BUCK1_SCG, TPS65219_BUCK_1_2_POS, + TPS65219_INT_BUCK1_SCG_MASK), + REGMAP_IRQ_REG(TPS65219_INT_BUCK1_OC, TPS65219_BUCK_1_2_POS, + TPS65219_INT_BUCK1_OC_MASK), + REGMAP_IRQ_REG(TPS65219_INT_BUCK1_NEG_OC, TPS65219_BUCK_1_2_POS, + TPS65219_INT_BUCK1_NEG_OC_MASK), + REGMAP_IRQ_REG(TPS65219_INT_BUCK1_UV, TPS65219_BUCK_1_2_POS, + TPS65219_INT_BUCK1_UV_MASK), + REGMAP_IRQ_REG(TPS65219_INT_SENSOR_3_WARM, + TPS65219_SYS_POS, TPS65219_INT_SENSOR_3_WARM_MASK), + REGMAP_IRQ_REG(TPS65219_INT_SENSOR_2_WARM, TPS65219_SYS_POS, + TPS65219_INT_SENSOR_2_WARM_MASK), + REGMAP_IRQ_REG(TPS65219_INT_SENSOR_1_WARM, TPS65219_SYS_POS, + TPS65219_INT_SENSOR_1_WARM_MASK), + REGMAP_IRQ_REG(TPS65219_INT_SENSOR_0_WARM, TPS65219_SYS_POS, + TPS65219_INT_SENSOR_0_WARM_MASK), + REGMAP_IRQ_REG(TPS65219_INT_SENSOR_3_HOT, TPS65219_SYS_POS, + TPS65219_INT_SENSOR_3_HOT_MASK), + REGMAP_IRQ_REG(TPS65219_INT_SENSOR_2_HOT, TPS65219_SYS_POS, + TPS65219_INT_SENSOR_2_HOT_MASK), + REGMAP_IRQ_REG(TPS65219_INT_SENSOR_1_HOT, TPS65219_SYS_POS, + TPS65219_INT_SENSOR_1_HOT_MASK), + REGMAP_IRQ_REG(TPS65219_INT_SENSOR_0_HOT, TPS65219_SYS_POS, + TPS65219_INT_SENSOR_0_HOT_MASK), + REGMAP_IRQ_REG(TPS65219_INT_BUCK1_RV, TPS65219_RV_POS, + TPS65219_INT_BUCK1_RV_MASK), + REGMAP_IRQ_REG(TPS65219_INT_BUCK2_RV, TPS65219_RV_POS, + TPS65219_INT_BUCK2_RV_MASK), + REGMAP_IRQ_REG(TPS65219_INT_BUCK3_RV, TPS65219_RV_POS, + TPS65219_INT_BUCK3_RV_MASK), + REGMAP_IRQ_REG(TPS65219_INT_LDO1_RV, TPS65219_RV_POS, + TPS65219_INT_LDO1_RV_MASK), + REGMAP_IRQ_REG(TPS65219_INT_LDO2_RV, TPS65219_RV_POS, + TPS65219_INT_LDO2_RV_MASK), + REGMAP_IRQ_REG(TPS65219_INT_LDO3_RV, TPS65219_RV_POS, + TPS65219_INT_LDO3_RV_MASK), + REGMAP_IRQ_REG(TPS65219_INT_LDO4_RV, TPS65219_RV_POS, + TPS65219_INT_LDO4_RV_MASK), + REGMAP_IRQ_REG(TPS65219_INT_BUCK1_RV_SD, + TPS65219_TO_RV_POS, TPS65219_INT_BUCK1_RV_SD_MASK), + REGMAP_IRQ_REG(TPS65219_INT_BUCK2_RV_SD, + TPS65219_TO_RV_POS, TPS65219_INT_BUCK2_RV_SD_MASK), + REGMAP_IRQ_REG(TPS65219_INT_BUCK3_RV_SD, TPS65219_TO_RV_POS, + TPS65219_INT_BUCK3_RV_SD_MASK), + REGMAP_IRQ_REG(TPS65219_INT_LDO1_RV_SD, TPS65219_TO_RV_POS, + TPS65219_INT_LDO1_RV_SD_MASK), + REGMAP_IRQ_REG(TPS65219_INT_LDO2_RV_SD, TPS65219_TO_RV_POS, + TPS65219_INT_LDO2_RV_SD_MASK), + REGMAP_IRQ_REG(TPS65219_INT_LDO3_RV_SD, + TPS65219_TO_RV_POS, TPS65219_INT_LDO3_RV_SD_MASK), + REGMAP_IRQ_REG(TPS65219_INT_LDO4_RV_SD, TPS65219_TO_RV_POS, + TPS65219_INT_LDO4_RV_SD_MASK), + REGMAP_IRQ_REG(TPS65219_INT_TIMEOUT, TPS65219_TO_RV_POS, + TPS65219_INT_TIMEOUT_MASK), + REGMAP_IRQ_REG(TPS65219_INT_PB_FALLING_EDGE_DETECT, + TPS65219_PB_POS, TPS65219_INT_PB_FALLING_EDGE_DET_MASK), + REGMAP_IRQ_REG(TPS65219_INT_PB_RISING_EDGE_DETECT, TPS65219_PB_POS, + TPS65219_INT_PB_RISING_EDGE_DET_MASK), +}; + +static struct regmap_irq_chip tps65219_irq_chip =3D { + .name =3D "tps65219_irq", + .main_status =3D TPS65219_REG_INT_SOURCE, + .num_main_regs =3D 1, + .num_main_status_bits =3D 8, + .irqs =3D tps65219_irqs, + .num_irqs =3D ARRAY_SIZE(tps65219_irqs), + .status_base =3D TPS65219_REG_INT_LDO_3_4, + .ack_base =3D TPS65219_REG_INT_LDO_3_4, + .clear_ack =3D 1, + .num_regs =3D 8, + .sub_reg_offsets =3D &tps65219_sub_irq_offsets[0], +}; + static const struct of_device_id of_tps65219_match_table[] =3D { { .compatible =3D "ti,tps65219", }, {} @@ -137,6 +343,7 @@ static int tps65219_probe(struct i2c_client *client, =20 i2c_set_clientdata(client, tps); tps->dev =3D &client->dev; + tps->irq =3D client->irq; tps->regmap =3D devm_regmap_init_i2c(client, &tps65219_regmap_config); if (IS_ERR(tps->regmap)) { ret =3D PTR_ERR(tps->regmap); @@ -145,6 +352,12 @@ static int tps65219_probe(struct i2c_client *client, return ret; } =20 + ret =3D devm_regmap_add_irq_chip(&client->dev, tps->regmap, tps->irq, + IRQF_ONESHOT, 0, &tps65219_irq_chip, + &tps->irq_data); + if (ret) + return ret; + ret =3D regmap_read(tps->regmap, TPS65219_REG_TI_DEV_ID, &chipid); if (ret) { dev_err(tps->dev, "Failed to read device ID: %d\n", ret); diff --git a/include/linux/mfd/tps65219.h b/include/linux/mfd/tps65219.h index e9197ab8bc75..8cecaf9bc682 100644 --- a/include/linux/mfd/tps65219.h +++ b/include/linux/mfd/tps65219.h @@ -214,6 +214,104 @@ #define TPS65219_INT_PB_RISING_EDGE_DET_MASK BIT(1) #define TPS65219_INT_PB_REAL_TIME_STATUS_MASK BIT(2) =20 +/* Masks for main IRQ register bits */ +enum { + TPS65219_INT_TIMEOUT_RV_SD, +#define TPS65219_INT_TIMEOUT_RV_SD_MASK BIT(TPS65219_INT_TIMEOUT_RV_SD) + TPS65219_INT_RV, +#define TPS65219_INT_RV_MASK BIT(TPS65219_INT_RV) + TPS65219_INT_SYSTEM, +#define TPS65219_INT_SYSTEM_MASK BIT(TPS65219_INT_SYSTEM) + TPS65219_INT_BUCK_1_2, +#define TPS65219_INT_BUCK_1_2_MASK BIT(TPS65219_INT_BUCK_1_2) + TPS65219_INT_BUCK_3, +#define TPS65219_INT_BUCK_3_MASK BIT(TPS65219_INT_BUCK_3) + TPS65219_INT_LDO_1_2, +#define TPS65219_INT_LDO_1_2_MASK BIT(TPS65219_INT_LDO_1_2) + TPS65219_INT_LDO_3_4, +#define TPS65219_INT_LDO_3_4_MASK BIT(TPS65219_LDO_3_4) + TPS65219_INT_PB, +#define TPS65219_INT_PB_MASK BIT(TPS65219_INT_PB) +}; + +/* Timeout Residual Voltage Shutdown */ +#define TPS65219_TO_RV_POS 6 +/* Residual Voltage */ +#define TPS65219_RV_POS 5 +/* System */ +#define TPS65219_SYS_POS 4 +/* Buck 1-2 */ +#define TPS65219_BUCK_1_2_POS 3 +/* Buck 3 */ +#define TPS65219_BUCK_3_POS 2 +/* LDO 1-2 */ +#define TPS65219_LDO_1_2_POS 1 +/* LDO 3-4 */ +#define TPS65219_LDO_3_4_POS 0 +/* Power Button */ +#define TPS65219_PB_POS 7 + +/* IRQs */ +enum { + /* LDO3-4 register IRQs */ + TPS65219_INT_LDO3_SCG, + TPS65219_INT_LDO3_OC, + TPS65219_INT_LDO3_UV, + TPS65219_INT_LDO4_SCG, + TPS65219_INT_LDO4_OC, + TPS65219_INT_LDO4_UV, + /* LDO1-2 */ + TPS65219_INT_LDO1_SCG, + TPS65219_INT_LDO1_OC, + TPS65219_INT_LDO1_UV, + TPS65219_INT_LDO2_SCG, + TPS65219_INT_LDO2_OC, + TPS65219_INT_LDO2_UV, + /* BUCK3 */ + TPS65219_INT_BUCK3_SCG, + TPS65219_INT_BUCK3_OC, + TPS65219_INT_BUCK3_NEG_OC, + TPS65219_INT_BUCK3_UV, + /* BUCK1-2 */ + TPS65219_INT_BUCK1_SCG, + TPS65219_INT_BUCK1_OC, + TPS65219_INT_BUCK1_NEG_OC, + TPS65219_INT_BUCK1_UV, + TPS65219_INT_BUCK2_SCG, + TPS65219_INT_BUCK2_OC, + TPS65219_INT_BUCK2_NEG_OC, + TPS65219_INT_BUCK2_UV, + /* Thermal Sensor */ + TPS65219_INT_SENSOR_3_WARM, + TPS65219_INT_SENSOR_2_WARM, + TPS65219_INT_SENSOR_1_WARM, + TPS65219_INT_SENSOR_0_WARM, + TPS65219_INT_SENSOR_3_HOT, + TPS65219_INT_SENSOR_2_HOT, + TPS65219_INT_SENSOR_1_HOT, + TPS65219_INT_SENSOR_0_HOT, + /* Residual Voltage */ + TPS65219_INT_BUCK1_RV, + TPS65219_INT_BUCK2_RV, + TPS65219_INT_BUCK3_RV, + TPS65219_INT_LDO1_RV, + TPS65219_INT_LDO2_RV, + TPS65219_INT_LDO3_RV, + TPS65219_INT_LDO4_RV, + /* Residual Voltage ShutDown */ + TPS65219_INT_BUCK1_RV_SD, + TPS65219_INT_BUCK2_RV_SD, + TPS65219_INT_BUCK3_RV_SD, + TPS65219_INT_LDO1_RV_SD, + TPS65219_INT_LDO2_RV_SD, + TPS65219_INT_LDO3_RV_SD, + TPS65219_INT_LDO4_RV_SD, + TPS65219_INT_TIMEOUT, + /* Power Button */ + TPS65219_INT_PB_FALLING_EDGE_DETECT, + TPS65219_INT_PB_RISING_EDGE_DETECT, +}; + enum tps65219_regulator_id { /* DCDC's */ TPS65219_BUCK_1, @@ -235,6 +333,19 @@ enum tps65219_regulator_id { /* Number of total regulators available */ #define TPS65219_NUM_REGULATOR (TPS65219_NUM_DCDC + TPS65219_NUM_LDO) =20 +/* Define the TPS65219 IRQ numbers */ +enum tps65219_irqs { + /* INT source registers */ + TPS65219_TO_RV_SD_SET_IRQ, + TPS65219_RV_SET_IRQ, + TPS65219_SYS_SET_IRQ, + TPS65219_BUCK_1_2_SET_IRQ, + TPS65219_BUCK_3_SET_IRQ, + TPS65219_LDO_1_2_SET_IRQ, + TPS65219_LDO_3_4_SET_IRQ, + TPS65219_PB_SET_IRQ, +}; + /** * struct tps65219 - tps65219 sub-driver chip access routines * @@ -243,6 +354,8 @@ enum tps65219_regulator_id { struct tps65219 { struct device *dev; unsigned int id; + int irq; + struct regmap_irq_chip_data *irq_data; struct regulator_desc desc[TPS65219_NUM_REGULATOR]; struct regmap *regmap; struct notifier_block nb; --=20 2.17.1 From nobody Wed Apr 15 04:24:52 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9E39EC43334 for ; Tue, 26 Jul 2022 10:35:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238741AbiGZKfF (ORCPT ); Tue, 26 Jul 2022 06:35:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33220 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238775AbiGZKel (ORCPT ); Tue, 26 Jul 2022 06:34:41 -0400 Received: from mail-wr1-x431.google.com (mail-wr1-x431.google.com [IPv6:2a00:1450:4864:20::431]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1607032478 for ; Tue, 26 Jul 2022 03:34:28 -0700 (PDT) Received: by mail-wr1-x431.google.com with SMTP id l15so15484644wro.11 for ; Tue, 26 Jul 2022 03:34:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=hS5D+tKbOtBBnrOkxwJ+MyP4haeEuYAKYGV01jemHh0=; b=tazKIxvSUmt6J8AlUGlpWsUbd1SkCcezN+LsSgrroc8Y6wJDPNvv93O2bwymIQSTBz s91p1uCClrS8RHDFvkBAPn9NKtl7r3P1/hitEiY4eMnl59fpTyVvn7uSW5ttsEsVRuo9 EgLuocfIZ5LGYgy1N//Y21EweNr7UM4yNe22Tq+zG6qTGULrA2QOpyM7C6U0ZHZEfNTR jaBRaSBY+m7t0gu1ZSyD52oJEvuVCkXj66EGaqnLROMGwZIsCEYvNFgd2DvwZSad8mhx SoloGOhX+r5BO1zfnYDLtO1AdAOfvKXRgSrWy5rajVT29NQCy8sZubLQmyEyfgUZQspx eGfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=hS5D+tKbOtBBnrOkxwJ+MyP4haeEuYAKYGV01jemHh0=; b=LLMc0dabF5/hwXgRWG0uHXzNOgjhYfS00TLD3hRQAMeU3ktI0slwP6XQoQKMgevUX0 7ZpQQObCKASPU86Jq6kHwCHE6AmogsroN/aWeirEKEk3GyU1TkkQawHF+M+TkhW27F7U 8wgRc6GbP1xdJLnD9b65JznTNleiNDQfPGnYRQAQc4SIIvlYSj2gruCLUqktiFPRsglW /l+CA3i1pcRnyF0GgOG2u6yhr3CGFesm/Vmk3kq5sa3NsM0/CUAbO7kqnlWJadbeBhhn p+KjHfsJj5gBtJxuk3IF3GSM6QWCszfV7/23OvfaGdnhn9NjDZEL4T8ltOOlCuWgX23A TFAQ== X-Gm-Message-State: AJIora+6cUlxN/jzgz3FRrj49KwW+AiEvLVbSIun1l22cJzISqIb8w5X hnBf6OEFM9SqvSQaIuRGbQ9uiA== X-Google-Smtp-Source: AGRyM1tq7HlxOzT1Cq9RfdORMGki4QGIyKxdZNlYeX0V4zEmHct8A4MmWKu17E7X6Vdx1RF/3wgeEQ== X-Received: by 2002:a5d:59a6:0:b0:21d:bc0b:d762 with SMTP id p6-20020a5d59a6000000b0021dbc0bd762mr10396083wrr.637.1658831666001; Tue, 26 Jul 2022 03:34:26 -0700 (PDT) Received: from localhost.localdomain (2a02-8440-4641-6f91-91b7-326a-5d27-a1c3.rev.sfr.net. [2a02:8440:4641:6f91:91b7:326a:5d27:a1c3]) by smtp.gmail.com with ESMTPSA id ay35-20020a05600c1e2300b003a2e42ae9a4sm20617121wmb.14.2022.07.26.03.34.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jul 2022 03:34:25 -0700 (PDT) From: Jerome Neanne To: lgirdwood@gmail.com, broonie@kernel.org, robh+dt@kernel.org, nm@ti.com, kristo@kernel.org Cc: khilman@baylibre.com, narmstrong@baylibre.com, msp@baylibre.com, j-keerthy@ti.com, lee.jones@linaro.org, jneanne@baylibre.com, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 08/11] mfd: tps65219: Add power-button support Date: Tue, 26 Jul 2022 12:33:52 +0200 Message-Id: <20220726103355.17684-9-jneanne@baylibre.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220726103355.17684-1-jneanne@baylibre.com> References: <20220726103355.17684-1-jneanne@baylibre.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Markus Schneider-Pargmann Using a power-button on the EN/PB/VSENSE pin of TPS65219 is optional, so this driver adds the mfd cell for tps65219-pwrbutton only if needed. Two interrupts are passed to the driver. Signed-off-by: Markus Schneider-Pargmann Signed-off-by: Jerome Neanne --- drivers/mfd/tps65219.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/drivers/mfd/tps65219.c b/drivers/mfd/tps65219.c index 7366f251c21d..e1c30a49bf08 100644 --- a/drivers/mfd/tps65219.c +++ b/drivers/mfd/tps65219.c @@ -335,7 +335,10 @@ static int tps65219_probe(struct i2c_client *client, struct tps65219 *tps; int ret; unsigned int chipid; + bool pwr_button; bool sys_pwr; + struct mfd_cell cells[TPS65219_MAX_CELLS]; + int nr_cells =3D 0; =20 tps =3D devm_kzalloc(&client->dev, sizeof(*tps), GFP_KERNEL); if (!tps) @@ -364,9 +367,16 @@ static int tps65219_probe(struct i2c_client *client, return ret; } =20 - ret =3D devm_mfd_add_devices(tps->dev, PLATFORM_DEVID_AUTO, tps65219_cell= s, - ARRAY_SIZE(tps65219_cells), NULL, 0, - NULL); + memcpy(&cells[nr_cells++], &tps65219_regulator_cell, + sizeof(tps65219_regulator_cell)); + pwr_button =3D of_property_read_bool(tps->dev->of_node, "power-button"); + if (pwr_button) + memcpy(&cells[nr_cells++], &tps65219_pwrbutton_cell, + sizeof(tps65219_pwrbutton_cell)); + + ret =3D devm_mfd_add_devices(tps->dev, PLATFORM_DEVID_AUTO, cells, + nr_cells, NULL, 0, + regmap_irq_get_domain(tps->irq_data)); if (ret) { dev_err(tps->dev, "mfd_add_devices failed: %d\n", ret); return ret; --=20 2.17.1 From nobody Wed Apr 15 04:24:52 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EBFFBC43334 for ; Tue, 26 Jul 2022 10:35:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238799AbiGZKfO (ORCPT ); Tue, 26 Jul 2022 06:35:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34292 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238754AbiGZKe6 (ORCPT ); Tue, 26 Jul 2022 06:34:58 -0400 Received: from mail-wr1-x431.google.com (mail-wr1-x431.google.com [IPv6:2a00:1450:4864:20::431]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CF596326FD for ; Tue, 26 Jul 2022 03:34:33 -0700 (PDT) Received: by mail-wr1-x431.google.com with SMTP id g2so11484055wru.3 for ; Tue, 26 Jul 2022 03:34:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=5NOFnzxrwNxKwC6k5V35ydP1rttIzu+0Gy8MgWnHtmE=; b=veLB3bFPgMnFUmsvabv5QNt9s61X2lCegKJ3mxrnWHem/lEmREjTTXgXPtwSjsCfkC yCsTteGhVozGle9kseFg3jWXI9jYLeql1tzwr/gTK5MvdXtLq3LhQNDKLJe0XpCKoJsw oCLRGGmBIEiwEVeESPoZM0KXmV6J8vuw0M77p9git4jAtCAxUQe77CSJZm8jlWQ/fu2o IaClDFzqomuj8OT0F50KxILc+eUQejcX6dSgfW+5CWQxy+xNXBBkQn6X3haQYIJ4hJXW maaeBYj+gpyApQhZv8aMR4RLS1RavbGoBHCyZ/lpECtZnDq6TFfO0Di2bEh0HVL6QjHd ymPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=5NOFnzxrwNxKwC6k5V35ydP1rttIzu+0Gy8MgWnHtmE=; b=NIomCed+QJ55IU6+y08tmqe1HNGWee8IoHvSRZooTHvts6KxqZNSaLJ8KMDXKIWpHv 8z6TaiXz7MjqoSszruPfHqgEkOe8ITYr4f6O6s1/iuTEvllMKtOPRwgydGx3+tEiOLlv dACATk7bujWku99zxBcSmXXO7MNLNUaIRxDqoOQp7bg/anB0MvmA2R0WKbzG8E+PHSvM RXuQgTe4Q6lOEPajV0rdxUqBIzFWzrhQ+WzRGBwM6/C9x/EsOWd9x+Q0p86LEj0W+O6I gvIdnCaRO8QKHuMs9fRDCyJb/2KQvZKrZ2hYpQDLlv2IGI/J5cRXMSbdcxbhtenXWUsd A6uQ== X-Gm-Message-State: AJIora89zfddgq70BXJi1lWG19DBTuBs9M5lbCZId8eaJuFujjQHSCud y3GftMGPXj/qTKElmM7IMKGxqA== X-Google-Smtp-Source: AGRyM1uyrj+NCUcQt3/2TSfhJyynGuxUMoOOcMtbzYFaRNNCYlpqQCBfSfMcixuPMnHaYkQqBb2E4A== X-Received: by 2002:a05:6000:178d:b0:21d:a3cc:54c8 with SMTP id e13-20020a056000178d00b0021da3cc54c8mr10080665wrg.602.1658831673194; Tue, 26 Jul 2022 03:34:33 -0700 (PDT) Received: from localhost.localdomain (2a02-8440-4641-6f91-91b7-326a-5d27-a1c3.rev.sfr.net. [2a02:8440:4641:6f91:91b7:326a:5d27:a1c3]) by smtp.gmail.com with ESMTPSA id ay35-20020a05600c1e2300b003a2e42ae9a4sm20617121wmb.14.2022.07.26.03.34.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jul 2022 03:34:32 -0700 (PDT) From: Jerome Neanne To: lgirdwood@gmail.com, broonie@kernel.org, robh+dt@kernel.org, nm@ti.com, kristo@kernel.org Cc: khilman@baylibre.com, narmstrong@baylibre.com, msp@baylibre.com, j-keerthy@ti.com, lee.jones@linaro.org, jneanne@baylibre.com, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 09/11] regulator: drivers: Add TI TPS65219 PMIC regulators support Date: Tue, 26 Jul 2022 12:33:53 +0200 Message-Id: <20220726103355.17684-10-jneanne@baylibre.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220726103355.17684-1-jneanne@baylibre.com> References: <20220726103355.17684-1-jneanne@baylibre.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The regulators set consists of 3 bucks DCDCs and 4 LDOs. The output voltages are configurable and are meant to supply power to the main processor and other components. Validation: Visual check: cat /sys/kernel/debug/regulator/regulator_summary Validation: userspace-consumer and virtual-regulator required to test further Enable/Disable: cat /sys/devices/platform/userspace-consumer-VDDSHV_SD_IO_PMIC/state echo disabled > /sys/devices/platform/ userspace-consumer-VDDSHV_SD_IO_PMIC/state echo enabled > /sys/devices/platform/ userspace-consumer-VDDSHV_SD_IO_PMIC/state Change voltage: cat /sys/devices/platform/regulator-virtual-ldo1/min_microvolts echo 1000000 > /sys/devices/platform/regulator-virtual-ldo1/ min_microvolts echo 3000000 > /sys/devices/platform/regulator-virtual-ldo1/ max_microvolts Signed-off-by: Jerome Neanne --- MAINTAINERS | 1 + drivers/regulator/Kconfig | 9 + drivers/regulator/Makefile | 1 + drivers/regulator/tps65219-regulator.c | 416 +++++++++++++++++++++++++ 4 files changed, 427 insertions(+) create mode 100644 drivers/regulator/tps65219-regulator.c diff --git a/MAINTAINERS b/MAINTAINERS index 1331c43fc6ce..c48663a59835 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -14721,6 +14721,7 @@ F: drivers/regulator/palmas-regulator*.c F: drivers/regulator/pbias-regulator.c F: drivers/regulator/tps65217-regulator.c F: drivers/regulator/tps65218-regulator.c +F: drivers/regulator/tps65219-regulator.c F: drivers/regulator/tps65910-regulator.c F: drivers/regulator/twl-regulator.c F: drivers/regulator/twl6030-regulator.c diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig index cbe0f96ca342..9b46c3465c46 100644 --- a/drivers/regulator/Kconfig +++ b/drivers/regulator/Kconfig @@ -1356,6 +1356,15 @@ config REGULATOR_TPS65218 voltage regulators. It supports software based voltage control for different voltage domains =20 +config REGULATOR_TPS65219 + tristate "TI TPS65219 Power regulators" + depends on MFD_TPS65219 && OF + help + This driver supports TPS65219 voltage regulator chips. + TPS65219 series of PMICs have 3 single phase BUCKs & 4 LDOs + voltage regulators. It supports software based voltage control + for different voltage domains. + config REGULATOR_TPS6524X tristate "TI TPS6524X Power regulators" depends on SPI diff --git a/drivers/regulator/Makefile b/drivers/regulator/Makefile index 8d3ee8b6d41d..f2e8509a8f89 100644 --- a/drivers/regulator/Makefile +++ b/drivers/regulator/Makefile @@ -159,6 +159,7 @@ obj-$(CONFIG_REGULATOR_TPS65086) +=3D tps65086-regulato= r.o obj-$(CONFIG_REGULATOR_TPS65090) +=3D tps65090-regulator.o obj-$(CONFIG_REGULATOR_TPS65217) +=3D tps65217-regulator.o obj-$(CONFIG_REGULATOR_TPS65218) +=3D tps65218-regulator.o +obj-$(CONFIG_REGULATOR_TPS65219) +=3D tps65219-regulator.o obj-$(CONFIG_REGULATOR_TPS6524X) +=3D tps6524x-regulator.o obj-$(CONFIG_REGULATOR_TPS6586X) +=3D tps6586x-regulator.o obj-$(CONFIG_REGULATOR_TPS65910) +=3D tps65910-regulator.o diff --git a/drivers/regulator/tps65219-regulator.c b/drivers/regulator/tps= 65219-regulator.c new file mode 100644 index 000000000000..7ba2594e437c --- /dev/null +++ b/drivers/regulator/tps65219-regulator.c @@ -0,0 +1,416 @@ +// SPDX-License-Identifier: GPL-2.0 +// +// tps65219-regulator.c +// +// Regulator driver for TPS65219 PMIC +// +// Copyright (C) 2022 BayLibre Incorporated - https://www.baylibre.com/ +// +// This implementation derived from tps65218 authored by +// "J Keerthy " +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct tps65219_regulator_irq_type { + const char *irq_name; + const char *regulator_name; + const char *event_name; + unsigned long event; +}; + +struct tps65219_regulator_irq_type tps65219_regulator_irq_types[] =3D { + { "LDO3_SCG", "LDO3", "short circuit to ground", REGULATOR_EVENT_REGULATI= ON_OUT }, + { "LDO3_OC", "LDO3", "overcurrent", REGULATOR_EVENT_OVER_CURRENT }, + { "LDO3_UV", "LDO3", "undervoltage", REGULATOR_EVENT_UNDER_VOLTAGE }, + { "LDO4_SCG", "LDO4", "short circuit to ground", REGULATOR_EVENT_REGULATI= ON_OUT }, + { "LDO4_OC", "LDO4", "overcurrent", REGULATOR_EVENT_OVER_CURRENT }, + { "LDO4_UV", "LDO4", "undervoltage", REGULATOR_EVENT_UNDER_VOLTAGE }, + { "LDO1_SCG", "LDO1", "short circuit to ground", REGULATOR_EVENT_REGULATI= ON_OUT }, + { "LDO1_OC", "LDO1", "overcurrent", REGULATOR_EVENT_OVER_CURRENT }, + { "LDO1_UV", "LDO1", "undervoltage", REGULATOR_EVENT_UNDER_VOLTAGE }, + { "LDO2_SCG", "LDO2", "short circuit to ground", REGULATOR_EVENT_REGULATI= ON_OUT }, + { "LDO2_OC", "LDO2", "overcurrent", REGULATOR_EVENT_OVER_CURRENT }, + { "LDO2_UV", "LDO2", "undervoltage", REGULATOR_EVENT_UNDER_VOLTAGE }, + { "BUCK3_SCG", "BUCK3", "short circuit to ground", REGULATOR_EVENT_REGULA= TION_OUT }, + { "BUCK3_OC", "BUCK3", "overcurrent", REGULATOR_EVENT_OVER_CURRENT }, + { "BUCK3_NEG_OC", "BUCK3", "negative overcurrent", REGULATOR_EVENT_OVER_C= URRENT }, + { "BUCK3_UV", "BUCK3", "undervoltage", REGULATOR_EVENT_UNDER_VOLTAGE }, + { "BUCK1_SCG", "BUCK1", "short circuit to ground", REGULATOR_EVENT_REGULA= TION_OUT }, + { "BUCK1_OC", "BUCK1", "overcurrent", REGULATOR_EVENT_OVER_CURRENT }, + { "BUCK1_NEG_OC", "BUCK1", "negative overcurrent", REGULATOR_EVENT_OVER_C= URRENT }, + { "BUCK1_UV", "BUCK1", "undervoltage", REGULATOR_EVENT_UNDER_VOLTAGE }, + { "BUCK2_SCG", "BUCK2", "short circuit to ground", REGULATOR_EVENT_REGULA= TION_OUT }, + { "BUCK2_OC", "BUCK2", "overcurrent", REGULATOR_EVENT_OVER_CURRENT }, + { "BUCK2_NEG_OC", "BUCK2", "negative overcurrent", REGULATOR_EVENT_OVER_C= URRENT }, + { "BUCK2_UV", "BUCK2", "undervoltage", REGULATOR_EVENT_UNDER_VOLTAGE }, + { "BUCK1_RV", "BUCK1", "residual voltage", REGULATOR_EVENT_OVER_VOLTAGE_W= ARN }, + { "BUCK2_RV", "BUCK2", "residual voltage", REGULATOR_EVENT_OVER_VOLTAGE_W= ARN }, + { "BUCK3_RV", "BUCK3", "residual voltage", REGULATOR_EVENT_OVER_VOLTAGE_W= ARN }, + { "LDO1_RV", "LDO1", "residual voltage", REGULATOR_EVENT_OVER_VOLTAGE_WAR= N }, + { "LDO2_RV", "LDO2", "residual voltage", REGULATOR_EVENT_OVER_VOLTAGE_WAR= N }, + { "LDO3_RV", "LDO3", "residual voltage", REGULATOR_EVENT_OVER_VOLTAGE_WAR= N }, + { "LDO4_RV", "LDO4", "residual voltage", REGULATOR_EVENT_OVER_VOLTAGE_WAR= N }, + { "BUCK1_RV_SD", "BUCK1", "residual voltage on shutdown", + REGULATOR_EVENT_OVER_VOLTAGE_WARN }, + { "BUCK2_RV_SD", "BUCK2", "residual voltage on shutdown", + REGULATOR_EVENT_OVER_VOLTAGE_WARN }, + { "BUCK3_RV_SD", "BUCK3", "residual voltage on shutdown", + REGULATOR_EVENT_OVER_VOLTAGE_WARN }, + { "LDO1_RV_SD", "LDO1", "residual voltage on shutdown", REGULATOR_EVENT_O= VER_VOLTAGE_WARN }, + { "LDO2_RV_SD", "LDO2", "residual voltage on shutdown", REGULATOR_EVENT_O= VER_VOLTAGE_WARN }, + { "LDO3_RV_SD", "LDO3", "residual voltage on shutdown", REGULATOR_EVENT_O= VER_VOLTAGE_WARN }, + { "LDO4_RV_SD", "LDO4", "residual voltage on shutdown", REGULATOR_EVENT_O= VER_VOLTAGE_WARN }, + { "SENSOR_3_WARM", "SENSOR3", "warm temperature", REGULATOR_EVENT_OVER_TE= MP_WARN}, + { "SENSOR_2_WARM", "SENSOR2", "warm temperature", REGULATOR_EVENT_OVER_TE= MP_WARN }, + { "SENSOR_1_WARM", "SENSOR1", "warm temperature", REGULATOR_EVENT_OVER_TE= MP_WARN }, + { "SENSOR_0_WARM", "SENSOR0", "warm temperature", REGULATOR_EVENT_OVER_TE= MP_WARN }, + { "SENSOR_3_HOT", "SENSOR3", "hot temperature", REGULATOR_EVENT_OVER_TEMP= }, + { "SENSOR_2_HOT", "SENSOR2", "hot temperature", REGULATOR_EVENT_OVER_TEMP= }, + { "SENSOR_1_HOT", "SENSOR1", "hot temperature", REGULATOR_EVENT_OVER_TEMP= }, + { "SENSOR_0_HOT", "SENSOR0", "hot temperature", REGULATOR_EVENT_OVER_TEMP= }, + { "TIMEOUT", "", "", REGULATOR_EVENT_ABORT_VOLTAGE_CHANGE }, +}; + +struct tps65219_regulator_irq_data { + struct device *dev; + struct tps65219_regulator_irq_type *type; + struct regulator_dev *rdev; +}; + +#define TPS65219_REGULATOR(_name, _of, _id, _type, _ops, _n, _vr, _vm, _er= , \ + _em, _cr, _cm, _lr, _nlr, _delay, _fuv, \ + _ct, _ncl, _bpm) \ + { \ + .name =3D _name, \ + .of_match =3D _of, \ + .regulators_node =3D of_match_ptr("regulators"), \ + .supply_name =3D _of, \ + .id =3D _id, \ + .ops =3D &(_ops), \ + .n_voltages =3D _n, \ + .type =3D _type, \ + .owner =3D THIS_MODULE, \ + .vsel_reg =3D _vr, \ + .vsel_mask =3D _vm, \ + .csel_reg =3D _cr, \ + .csel_mask =3D _cm, \ + .curr_table =3D _ct, \ + .n_current_limits =3D _ncl, \ + .enable_reg =3D _er, \ + .enable_mask =3D _em, \ + .volt_table =3D NULL, \ + .linear_ranges =3D _lr, \ + .n_linear_ranges =3D _nlr, \ + .ramp_delay =3D _delay, \ + .fixed_uV =3D _fuv, \ + .bypass_reg =3D _vr, \ + .bypass_mask =3D _bpm, \ + .bypass_val_on =3D 1, \ + } \ + +static const struct linear_range bucks_ranges[] =3D { + REGULATOR_LINEAR_RANGE(600000, 0x0, 0x1f, 25000), + REGULATOR_LINEAR_RANGE(1400000, 0x20, 0x33, 100000), + REGULATOR_LINEAR_RANGE(3400000, 0x34, 0x3f, 0), +}; + +static const struct linear_range ldos_1_2_ranges[] =3D { + REGULATOR_LINEAR_RANGE(600000, 0x0, 0x37, 50000), + REGULATOR_LINEAR_RANGE(3400000, 0x38, 0x3f, 0), +}; + +static const struct linear_range ldos_3_4_ranges[] =3D { + REGULATOR_LINEAR_RANGE(1200000, 0x0, 0xC, 0), + REGULATOR_LINEAR_RANGE(1250000, 0xD, 0x35, 50000), + REGULATOR_LINEAR_RANGE(3300000, 0x36, 0x3F, 0), +}; + +static int tps65219_set_mode(struct regulator_dev *dev, unsigned int mode) +{ + struct tps65219 *tps =3D rdev_get_drvdata(dev); + + switch (mode) { + case REGULATOR_MODE_NORMAL: + return regmap_set_bits(tps->regmap, TPS65219_REG_STBY_1_CONFIG, + dev->desc->enable_mask); + + case REGULATOR_MODE_STANDBY: + return regmap_clear_bits(tps->regmap, + TPS65219_REG_STBY_1_CONFIG, + dev->desc->enable_mask); + default: + return -EINVAL; + } +} + +static unsigned int tps65219_get_mode(struct regulator_dev *dev) +{ + struct tps65219 *tps =3D rdev_get_drvdata(dev); + unsigned int rid =3D rdev_get_id(dev); + int ret, value =3D 0; + + ret =3D regmap_read(tps->regmap, TPS65219_REG_STBY_1_CONFIG, &value); + if (ret) { + dev_dbg(tps->dev, "%s failed for regulator %s: %d ", + __func__, dev->desc->name, ret); + return ret; + } + value =3D (value & BIT(rid)) >> rid; + if (value) + return REGULATOR_MODE_STANDBY; + else + return REGULATOR_MODE_NORMAL; +} + +/* + * generic regulator_set_bypass_regmap does not fully match requirements + * TPS65219 Requires explicitly that regulator is disabled before switch + */ +static int tps65219_set_bypass(struct regulator_dev *dev, bool enable) +{ + struct tps65219 *tps =3D rdev_get_drvdata(dev); + unsigned int rid =3D rdev_get_id(dev); + int ret =3D 0; + + if (dev->desc->ops->enable) { + dev_err(tps->dev, + "%s LDO%d enabled, must be shut down to set bypass ", + __func__, rid); + return -EBUSY; + } + ret =3D regulator_set_bypass_regmap(dev, enable); + return ret; +} + +/* Operations permitted on BUCK1/2/3 */ +static const struct regulator_ops tps65219_bucks_ops =3D { + .is_enabled =3D regulator_is_enabled_regmap, + .enable =3D regulator_enable_regmap, + .disable =3D regulator_disable_regmap, + .set_mode =3D tps65219_set_mode, + .get_mode =3D tps65219_get_mode, + .get_voltage_sel =3D regulator_get_voltage_sel_regmap, + .set_voltage_sel =3D regulator_set_voltage_sel_regmap, + .list_voltage =3D regulator_list_voltage_linear_range, + .map_voltage =3D regulator_map_voltage_linear_range, + .set_voltage_time_sel =3D regulator_set_voltage_time_sel, + +}; + +/* Operations permitted on LDO1/2 */ +static const struct regulator_ops tps65219_ldos_1_2_ops =3D { + .is_enabled =3D regulator_is_enabled_regmap, + .enable =3D regulator_enable_regmap, + .disable =3D regulator_disable_regmap, + .set_mode =3D tps65219_set_mode, + .get_mode =3D tps65219_get_mode, + .get_voltage_sel =3D regulator_get_voltage_sel_regmap, + .set_voltage_sel =3D regulator_set_voltage_sel_regmap, + .list_voltage =3D regulator_list_voltage_linear_range, + .map_voltage =3D regulator_map_voltage_linear_range, + .set_bypass =3D tps65219_set_bypass, + .get_bypass =3D regulator_get_bypass_regmap, +}; + +/* Operations permitted on LDO3/4 */ +static const struct regulator_ops tps65219_ldos_3_4_ops =3D { + .is_enabled =3D regulator_is_enabled_regmap, + .enable =3D regulator_enable_regmap, + .disable =3D regulator_disable_regmap, + .set_mode =3D tps65219_set_mode, + .get_mode =3D tps65219_get_mode, + .get_voltage_sel =3D regulator_get_voltage_sel_regmap, + .set_voltage_sel =3D regulator_set_voltage_sel_regmap, + .list_voltage =3D regulator_list_voltage_linear_range, + .map_voltage =3D regulator_map_voltage_linear_range, +}; + +static const struct regulator_desc regulators[] =3D { + TPS65219_REGULATOR("BUCK1", "buck1", TPS65219_BUCK_1, + REGULATOR_VOLTAGE, tps65219_bucks_ops, 64, + TPS65219_REG_BUCK1_VOUT, + TPS65219_BUCKS_LDOS_VOUT_VSET_MASK, + TPS65219_REG_ENABLE_CTRL, + TPS65219_ENABLE_BUCK1_EN_MASK, 0, 0, bucks_ranges, + 3, 4000, 0, NULL, 0, 0), + TPS65219_REGULATOR("BUCK2", "buck2", TPS65219_BUCK_2, + REGULATOR_VOLTAGE, tps65219_bucks_ops, 64, + TPS65219_REG_BUCK2_VOUT, + TPS65219_BUCKS_LDOS_VOUT_VSET_MASK, + TPS65219_REG_ENABLE_CTRL, + TPS65219_ENABLE_BUCK2_EN_MASK, 0, 0, bucks_ranges, + 3, 4000, 0, NULL, 0, 0), + TPS65219_REGULATOR("BUCK3", "buck3", TPS65219_BUCK_3, + REGULATOR_VOLTAGE, tps65219_bucks_ops, 64, + TPS65219_REG_BUCK3_VOUT, + TPS65219_BUCKS_LDOS_VOUT_VSET_MASK, + TPS65219_REG_ENABLE_CTRL, + TPS65219_ENABLE_BUCK3_EN_MASK, 0, 0, bucks_ranges, + 3, 0, 0, NULL, 0, 0), + TPS65219_REGULATOR("LDO1", "ldo1", TPS65219_LDO_1, + REGULATOR_VOLTAGE, tps65219_ldos_1_2_ops, 64, + TPS65219_REG_LDO1_VOUT, + TPS65219_BUCKS_LDOS_VOUT_VSET_MASK, + TPS65219_REG_ENABLE_CTRL, + TPS65219_ENABLE_LDO1_EN_MASK, 0, 0, ldos_1_2_ranges, + 2, 0, 0, NULL, 0, TPS65219_LDOS_BYP_CONFIG_MASK), + TPS65219_REGULATOR("LDO2", "ldo2", TPS65219_LDO_2, + REGULATOR_VOLTAGE, tps65219_ldos_1_2_ops, 64, + TPS65219_REG_LDO2_VOUT, + TPS65219_BUCKS_LDOS_VOUT_VSET_MASK, + TPS65219_REG_ENABLE_CTRL, + TPS65219_ENABLE_LDO2_EN_MASK, 0, 0, ldos_1_2_ranges, + 2, 0, 0, NULL, 0, TPS65219_LDOS_BYP_CONFIG_MASK), + TPS65219_REGULATOR("LDO3", "ldo3", TPS65219_LDO_3, + REGULATOR_VOLTAGE, tps65219_ldos_3_4_ops, 64, + TPS65219_REG_LDO3_VOUT, + TPS65219_BUCKS_LDOS_VOUT_VSET_MASK, + TPS65219_REG_ENABLE_CTRL, + TPS65219_ENABLE_LDO3_EN_MASK, 0, 0, ldos_3_4_ranges, + 3, 0, 0, NULL, 0, 0), + TPS65219_REGULATOR("LDO4", "ldo4", TPS65219_LDO_4, + REGULATOR_VOLTAGE, tps65219_ldos_3_4_ops, 64, + TPS65219_REG_LDO4_VOUT, + TPS65219_BUCKS_LDOS_VOUT_VSET_MASK, + TPS65219_REG_ENABLE_CTRL, + TPS65219_ENABLE_LDO4_EN_MASK, 0, 0, ldos_3_4_ranges, + 3, 0, 0, NULL, 0, 0), +}; + +static irqreturn_t tps65219_regulator_irq_handler(int irq, void *data) +{ + struct tps65219_regulator_irq_data *irq_data =3D data; + + if (irq_data->type->event_name[0] =3D=3D '\0') { + /* This is the timeout interrupt no specific regulator */ + dev_err(irq_data->dev, + "System was put in shutdown due to timeout during an active or standby = transition.\n"); + return IRQ_HANDLED; + } + + regulator_notifier_call_chain(irq_data->rdev, + irq_data->type->event, NULL); + + dev_err(irq_data->dev, "Error IRQ trap %s for %s\n", + irq_data->type->event_name, irq_data->type->regulator_name); + return IRQ_HANDLED; +} + +static int tps65219_get_rdev_by_name(const char *regulator_name, + struct regulator_dev *rdevtbl[7], + struct regulator_dev *dev) +{ + int i; + + for (i =3D 0; i < ARRAY_SIZE(regulators); i++) { + if (strcmp(regulator_name, regulators[i].name) =3D=3D 0) { + dev =3D rdevtbl[i]; + return 0; + } + } + return -EINVAL; +} + +static int tps65219_regulator_probe(struct platform_device *pdev) +{ + struct tps65219 *tps =3D dev_get_drvdata(pdev->dev.parent); + struct regulator_dev *rdev; + struct regulator_config config =3D { }; + int i; + int error; + int irq; + struct tps65219_regulator_irq_data *irq_data; + struct tps65219_regulator_irq_type *irq_type; + struct regulator_dev *rdevtbl[7]; + + config.dev =3D tps->dev; + config.driver_data =3D tps; + config.regmap =3D tps->regmap; + + for (i =3D 0; i < ARRAY_SIZE(regulators); i++) { + dev_dbg(tps->dev, "%s regul i=3D %d START", __func__, i); + rdev =3D devm_regulator_register(&pdev->dev, ®ulators[i], + &config); + if (IS_ERR(rdev)) { + dev_err(tps->dev, "failed to register %s regulator\n", + pdev->name); + return PTR_ERR(rdev); + } + rdevtbl[i] =3D rdev; + dev_dbg(tps->dev, "%s regul i=3D %d COMPLETED", __func__, i); + } + + irq_data =3D devm_kmalloc(tps->dev, + ARRAY_SIZE(tps65219_regulator_irq_types) * + sizeof(struct tps65219_regulator_irq_data), + GFP_KERNEL); + if (!irq_data) + return -ENOMEM; + + for (i =3D 0; i < ARRAY_SIZE(tps65219_regulator_irq_types); ++i) { + irq_type =3D &tps65219_regulator_irq_types[i]; + + irq =3D platform_get_irq_byname(pdev, irq_type->irq_name); + if (irq < 0) { + dev_err(tps->dev, "Failed to get IRQ %s: %d\n", + irq_type->irq_name, irq); + return -EINVAL; + } + irq_data[i].dev =3D tps->dev; + irq_data[i].type =3D irq_type; + + tps65219_get_rdev_by_name(irq_type->regulator_name, rdevtbl, rdev); + if (rdev < 0) { + dev_err(tps->dev, "Failed to get rdev for %s\n", + irq_type->regulator_name); + return -EINVAL; + } + irq_data[i].rdev =3D rdev; + + error =3D devm_request_threaded_irq(tps->dev, irq, NULL, + tps65219_regulator_irq_handler, + IRQF_ONESHOT, + irq_type->irq_name, + &irq_data[i]); + if (error) { + dev_err(tps->dev, "failed to request %s IRQ %d: %d\n", + irq_type->irq_name, irq, error); + return error; + } + } + + return 0; +} + +static const struct platform_device_id tps65219_regulator_id_table[] =3D { + { "tps65219-regulator", }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(platform, tps65219_regulator_id_table); + +static struct platform_driver tps65219_regulator_driver =3D { + .driver =3D { + .name =3D "tps65219-pmic", + }, + .probe =3D tps65219_regulator_probe, + .id_table =3D tps65219_regulator_id_table, +}; + +module_platform_driver(tps65219_regulator_driver); + +MODULE_AUTHOR("Jerome Neanne "); +MODULE_DESCRIPTION("TPS65219 voltage regulator driver"); +MODULE_ALIAS("platform:tps65219-pmic"); +MODULE_LICENSE("GPL"); --=20 2.17.1 From nobody Wed Apr 15 04:24:52 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 678ECC43334 for ; Tue, 26 Jul 2022 10:35:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238833AbiGZKf1 (ORCPT ); Tue, 26 Jul 2022 06:35:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33220 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238769AbiGZKfA (ORCPT ); Tue, 26 Jul 2022 06:35:00 -0400 Received: from mail-wr1-x429.google.com (mail-wr1-x429.google.com [IPv6:2a00:1450:4864:20::429]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C1A1F32B9C for ; Tue, 26 Jul 2022 03:34:37 -0700 (PDT) Received: by mail-wr1-x429.google.com with SMTP id b26so19561720wrc.2 for ; Tue, 26 Jul 2022 03:34:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=fwuObdKhl0wLQFLoV4lp8AQBoHjI+xXslw/mDTvI834=; b=2lG15SUXNRpuWTuX61U9J/n+TUnAuUGlfFd/qj8NDMe3lvZ37kPgKJcFensoosksEj GNBQ0KLCk8BCBFjn448HCQekTzyHLd6fPUQGk35310E0Pd7QK1FoaexiV/QZ8Ypd8Ua4 f2xEA7nOSC4o+3nrBQVy0IFc3tD8+CXBmMRGo0jv17TKu6O3iaJJdt7U9kDtnb4zA7Pn YLcZ+8Sao8NtfbqcS0I53e7W3MrrYA+kzYIBDe0l4QJy5vpdNmm8GV7uoNKey4/2iQ/D G2mBmRjp1CmDcsR0jz3VZXmCcvYogb4pu0qBBMJgw+4O2lGrkl7X7HjZM7PO/cxqQ1Ra 86tQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=fwuObdKhl0wLQFLoV4lp8AQBoHjI+xXslw/mDTvI834=; b=OXx/JytOr+AoJU99qv2b3eEN3OcKVBvut6xw0Rl3XjAsBaGmfnop0vAHpY0eGr0WlJ lsMNGVWCo5qY/gWqHGaQEkHqtZDH5jZI4k5mQz4dXMzJnV+HfS/gHyTPTTql5MZGSE3z Cgokh9lvg2a6DZvpFJZrOrxmxATt6Cgy+Vsi8QX/SqtIhqU2eUmtKxdXDIn7xCTrnfRF NeiudbPbQnG7pQyyB3tc2tM7vopmE3kN1Pz+M+8Bb8smT6lIvOtw6C65ifIAd9X/x/U0 9gbEgAX4TRAknrlfV2rUrUpReV5uakAGlWF9gqj2TEtn9Pkrf502EKJGOxtryoyGc9ki HVSQ== X-Gm-Message-State: AJIora+KKPn/yvEdxcjtBbSziIx6mxfUnYY2iHyE7B+9hfU0DRJsdm3c 8QFf69W4vHtWsdrCLtQxmN0qXw== X-Google-Smtp-Source: AGRyM1uIsrF9Uxh1PqxZGkVpvGYfuw4smy6v7fQMgoay8Zm+u2Ky9KMD3ik7ez8/+xqVCVHbX9QAfA== X-Received: by 2002:a5d:6b50:0:b0:21e:298c:caad with SMTP id x16-20020a5d6b50000000b0021e298ccaadmr10180082wrw.509.1658831675918; Tue, 26 Jul 2022 03:34:35 -0700 (PDT) Received: from localhost.localdomain (2a02-8440-4641-6f91-91b7-326a-5d27-a1c3.rev.sfr.net. [2a02:8440:4641:6f91:91b7:326a:5d27:a1c3]) by smtp.gmail.com with ESMTPSA id ay35-20020a05600c1e2300b003a2e42ae9a4sm20617121wmb.14.2022.07.26.03.34.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jul 2022 03:34:35 -0700 (PDT) From: Jerome Neanne To: lgirdwood@gmail.com, broonie@kernel.org, robh+dt@kernel.org, nm@ti.com, kristo@kernel.org Cc: khilman@baylibre.com, narmstrong@baylibre.com, msp@baylibre.com, j-keerthy@ti.com, lee.jones@linaro.org, jneanne@baylibre.com, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 10/11] Input: Add tps65219 interrupt driven powerbutton Date: Tue, 26 Jul 2022 12:33:54 +0200 Message-Id: <20220726103355.17684-11-jneanne@baylibre.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220726103355.17684-1-jneanne@baylibre.com> References: <20220726103355.17684-1-jneanne@baylibre.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Markus Schneider-Pargmann TPS65219 has different interrupts compared to other TPS6521* chips. TPS65219 defines two interrupts for the powerbutton one for push and one for release. This driver is very simple in that it maps the push interrupt to a key input and the release interrupt to a key release. Signed-off-by: Markus Schneider-Pargmann Signed-off-by: Jerome Neanne --- MAINTAINERS | 1 + drivers/input/misc/Kconfig | 10 ++ drivers/input/misc/Makefile | 1 + drivers/input/misc/tps65219-pwrbutton.c | 150 ++++++++++++++++++++++++ 4 files changed, 162 insertions(+) create mode 100644 drivers/input/misc/tps65219-pwrbutton.c diff --git a/MAINTAINERS b/MAINTAINERS index c48663a59835..68959f75d607 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -14705,6 +14705,7 @@ F: arch/arm/plat-omap/ F: drivers/bus/ti-sysc.c F: drivers/i2c/busses/i2c-omap.c F: drivers/input/misc/tps65218-pwrbutton.c +F: drivers/input/misc/tps65219-pwrbutton.c F: drivers/irqchip/irq-omap-intc.c F: drivers/mfd/*omap*.c F: drivers/mfd/menelaus.c diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig index a18ab7358d8f..18d4a321e7ff 100644 --- a/drivers/input/misc/Kconfig +++ b/drivers/input/misc/Kconfig @@ -468,6 +468,16 @@ config INPUT_TPS65218_PWRBUTTON To compile this driver as a module, choose M here. The module will be called tps65218-pwrbutton. =20 +config INPUT_TPS65219_PWRBUTTON + tristate "TPS65219 Power button driver" + depends on MFD_TPS65219 + help + Say Y here if you want to enable power button reporting for + TPS65219 Power Management IC devices. + + To compile this driver as a module, choose M here. The module will + be called tps65219-pwrbutton. + config INPUT_AXP20X_PEK tristate "X-Powers AXP20X power button driver" depends on MFD_AXP20X diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile index 28dfc444f0a9..fe8f47402d12 100644 --- a/drivers/input/misc/Makefile +++ b/drivers/input/misc/Makefile @@ -78,6 +78,7 @@ obj-$(CONFIG_INPUT_SOC_BUTTON_ARRAY) +=3D soc_button_arra= y.o obj-$(CONFIG_INPUT_SPARCSPKR) +=3D sparcspkr.o obj-$(CONFIG_INPUT_STPMIC1_ONKEY) +=3D stpmic1_onkey.o obj-$(CONFIG_INPUT_TPS65218_PWRBUTTON) +=3D tps65218-pwrbutton.o +obj-$(CONFIG_INPUT_TPS65219_PWRBUTTON) +=3D tps65219-pwrbutton.o obj-$(CONFIG_INPUT_TWL4030_PWRBUTTON) +=3D twl4030-pwrbutton.o obj-$(CONFIG_INPUT_TWL4030_VIBRA) +=3D twl4030-vibra.o obj-$(CONFIG_INPUT_TWL6040_VIBRA) +=3D twl6040-vibra.o diff --git a/drivers/input/misc/tps65219-pwrbutton.c b/drivers/input/misc/t= ps65219-pwrbutton.c new file mode 100644 index 000000000000..48ced7b63ec3 --- /dev/null +++ b/drivers/input/misc/tps65219-pwrbutton.c @@ -0,0 +1,150 @@ +// SPDX-License-Identifier: GPL-2.0 +// +// Driver for TPS65219 Push Button +// +// Copyright (C) 2022 BayLibre Incorporated - https://www.baylibre.com/ +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct tps65219_pwrbutton { + struct device *dev; + struct input_dev *idev; + char phys[32]; +}; + +static irqreturn_t tps65219_pb_push_irq(int irq, void *_pwr) +{ + struct tps65219_pwrbutton *pwr =3D _pwr; + + input_report_key(pwr->idev, KEY_POWER, 1); + pm_wakeup_event(pwr->dev, 0); + input_sync(pwr->idev); + + return IRQ_HANDLED; +} + +static irqreturn_t tps65219_pb_release_irq(int irq, void *_pwr) +{ + struct tps65219_pwrbutton *pwr =3D _pwr; + + input_report_key(pwr->idev, KEY_POWER, 0); + input_sync(pwr->idev); + + return IRQ_HANDLED; +} + +static int tps65219_pb_probe(struct platform_device *pdev) +{ + struct tps65219 *tps =3D dev_get_drvdata(pdev->dev.parent); + struct device *dev =3D &pdev->dev; + struct tps65219_pwrbutton *pwr; + struct input_dev *idev; + int error; + int push_irq; + int release_irq; + + pwr =3D devm_kzalloc(dev, sizeof(*pwr), GFP_KERNEL); + if (!pwr) + return -ENOMEM; + + idev =3D devm_input_allocate_device(dev); + if (!idev) + return -ENOMEM; + + idev->name =3D pdev->name; + snprintf(pwr->phys, sizeof(pwr->phys), "%s/input0", + pdev->name); + idev->phys =3D pwr->phys; + idev->dev.parent =3D dev; + idev->id.bustype =3D BUS_I2C; + + input_set_capability(idev, EV_KEY, KEY_POWER); + + pwr->dev =3D dev; + pwr->idev =3D idev; + device_init_wakeup(dev, true); + + push_irq =3D platform_get_irq(pdev, 0); + if (push_irq < 0) + return -EINVAL; + + release_irq =3D platform_get_irq(pdev, 1); + if (release_irq < 0) + return -EINVAL; + + error =3D devm_request_threaded_irq(dev, push_irq, NULL, + tps65219_pb_push_irq, + IRQF_ONESHOT, + dev->init_name, pwr); + if (error) { + dev_err(dev, "failed to request push IRQ #%d: %d\n", push_irq, + error); + return error; + } + + error =3D devm_request_threaded_irq(dev, release_irq, NULL, + tps65219_pb_release_irq, + IRQF_ONESHOT, + dev->init_name, pwr); + if (error) { + dev_err(dev, "failed to request release IRQ #%d: %d\n", + release_irq, error); + return error; + } + + error =3D input_register_device(idev); + if (error) { + dev_err(dev, "Can't register power button: %d\n", error); + return error; + } + + /* Enable interrupts for the pushbutton */ + regmap_clear_bits(tps->regmap, TPS65219_REG_MASK_CONFIG, + TPS65219_REG_MASK_INT_FOR_PB_MASK); + + /* Set PB/EN/VSENSE pin to be a pushbutton */ + regmap_update_bits(tps->regmap, TPS65219_REG_MFP_2_CONFIG, + TPS65219_MFP_2_EN_PB_VSENSE_MASK, TPS65219_MFP_2_PB); + + return 0; +} + +static int tps65219_pb_remove(struct platform_device *pdev) +{ + struct tps65219 *tps =3D dev_get_drvdata(pdev->dev.parent); + + /* Disable interrupt for the pushbutton */ + return regmap_update_bits(tps->regmap, TPS65219_REG_MASK_CONFIG, + TPS65219_REG_MASK_INT_FOR_PB_MASK, + TPS65219_REG_MASK_INT_FOR_PB_MASK); +} + +static const struct platform_device_id tps65219_pwrbtn_id_table[] =3D { + { "tps65219-pwrbutton", }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(platform, tps65219_pwrbtn_id_table); + +static struct platform_driver tps65219_pb_driver =3D { + .probe =3D tps65219_pb_probe, + .remove =3D tps65219_pb_remove, + .driver =3D { + .name =3D "tps65219_pwrbutton", + }, + .id_table =3D tps65219_pwrbtn_id_table, +}; +module_platform_driver(tps65219_pb_driver); + +MODULE_DESCRIPTION("TPS65219 Power Button"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Markus Schneider-Pargmann X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id AA5BECCA489 for ; Tue, 26 Jul 2022 10:35:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238845AbiGZKfb (ORCPT ); Tue, 26 Jul 2022 06:35:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34400 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238826AbiGZKfB (ORCPT ); Tue, 26 Jul 2022 06:35:01 -0400 Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [IPv6:2a00:1450:4864:20::430]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1888D32BA7 for ; Tue, 26 Jul 2022 03:34:39 -0700 (PDT) Received: by mail-wr1-x430.google.com with SMTP id h9so19580816wrm.0 for ; Tue, 26 Jul 2022 03:34:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=q0bfqfMqQSJcpc1+aVCgnjanNpycrzNmDHTHeEFNbZk=; b=EmeuLyhmsZNzNUv7RzZOqLrwRAPQz1WuCf4Rl4rq9RMQLCx93o3CtNv86xX9ZEODAq Euc+LAFz041qUTdDZABB8xxgSZyj0Jb1S//oWrWNo3ur3Qr6YUWVP+iijN9+etDA24PX hS/X4tVLPMGD7iCSNh6Y/wDEac8JK7Aj9D8XnWNKpbJsBBRXuO+G/VyD5goeao5FjJPv +NA3MJfWj/uOl8Pe4OAkGJzeVgSiPI6X5vqMCr7AGeq/0ooXLgcbkMszyhVtTnSRbSSq 3Oe6UlAFnxASeB2zasE2H+vMGHM30nwPlICiEkXw9ftZ4uLM0UweOzznqrw/HpVsVpeT hwlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=q0bfqfMqQSJcpc1+aVCgnjanNpycrzNmDHTHeEFNbZk=; b=gaJdRtN1+RXeUc7zK5Iruo+Rg5Wwlu2WwWrZi+3voHM9bcidsVqGsPOVI26UPTM1U/ 7WYRAop7aj7IxYpYks4tiEqwlhD+Alm2pJ/+nIs5rjRuIWouzYi4vktVRWRzLULwGFZ4 9aalsoePArC8wKxAee66gPiSxqqABhECeZXekyigWItQcZH7MKNUvUJKjDJ8BUPomCiD ALGzt6mRiMeevat5YnRh1uhkl7FOrsJYXiPL77ARTM2n5yViz+ZfLSDy7JrfP1NF1/L8 sE2JUJeXP97VQEZO3exyX1bkif3/8nzKjqc6c5BYZV8eV6YG/kewuYIXq6II1KwE2D+l wOKQ== X-Gm-Message-State: AJIora8h+cFILLpCkt1vvQBIG5vTmy0w2A7ZMyaMcHXB/T3kJ1K+LGOy QuRHWr0xeLJ3Sqa3RKukEpiLlg== X-Google-Smtp-Source: AGRyM1vCxzqwtflK9GM5XrqDCoN/AwmG2s4vgIPxRslovpsQLPXrdBRWKD3WrqtRVVhpgfwSMvmLwg== X-Received: by 2002:a5d:594a:0:b0:21e:81a6:d713 with SMTP id e10-20020a5d594a000000b0021e81a6d713mr7678169wri.318.1658831678426; Tue, 26 Jul 2022 03:34:38 -0700 (PDT) Received: from localhost.localdomain (2a02-8440-4641-6f91-91b7-326a-5d27-a1c3.rev.sfr.net. [2a02:8440:4641:6f91:91b7:326a:5d27:a1c3]) by smtp.gmail.com with ESMTPSA id ay35-20020a05600c1e2300b003a2e42ae9a4sm20617121wmb.14.2022.07.26.03.34.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jul 2022 03:34:37 -0700 (PDT) From: Jerome Neanne To: lgirdwood@gmail.com, broonie@kernel.org, robh+dt@kernel.org, nm@ti.com, kristo@kernel.org Cc: khilman@baylibre.com, narmstrong@baylibre.com, msp@baylibre.com, j-keerthy@ti.com, lee.jones@linaro.org, jneanne@baylibre.com, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 11/11] arm64: defconfig: Add tps65219 as modules Date: Tue, 26 Jul 2022 12:33:55 +0200 Message-Id: <20220726103355.17684-12-jneanne@baylibre.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220726103355.17684-1-jneanne@baylibre.com> References: <20220726103355.17684-1-jneanne@baylibre.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This adds defconfig option to support TPS65219 PMIC, MFD, Regulators and power-button. Signed-off-by: Jerome Neanne --- arch/arm64/configs/defconfig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig index 7d1105343bc2..988397574e3c 100644 --- a/arch/arm64/configs/defconfig +++ b/arch/arm64/configs/defconfig @@ -412,6 +412,7 @@ CONFIG_TOUCHSCREEN_GOODIX=3Dm CONFIG_TOUCHSCREEN_EDT_FT5X06=3Dm CONFIG_INPUT_MISC=3Dy CONFIG_INPUT_PM8941_PWRKEY=3Dy +CONFIG_INPUT_TPS65219_PWRBUTTON=3Dm CONFIG_INPUT_PM8XXX_VIBRATOR=3Dm CONFIG_INPUT_PWM_BEEPER=3Dm CONFIG_INPUT_PWM_VIBRA=3Dm @@ -641,6 +642,7 @@ CONFIG_MFD_SPMI_PMIC=3Dy CONFIG_MFD_RK808=3Dy CONFIG_MFD_SEC_CORE=3Dy CONFIG_MFD_SL28CPLD=3Dy +CONFIG_MFD_TPS65219=3Dm CONFIG_MFD_ROHM_BD718XX=3Dy CONFIG_MFD_WCD934X=3Dm CONFIG_REGULATOR_FIXED_VOLTAGE=3Dy @@ -668,6 +670,7 @@ CONFIG_REGULATOR_QCOM_SPMI=3Dy CONFIG_REGULATOR_RK808=3Dy CONFIG_REGULATOR_S2MPS11=3Dy CONFIG_REGULATOR_TPS65132=3Dm +CONFIG_REGULATOR_TPS65219=3Dm CONFIG_REGULATOR_VCTRL=3Dm CONFIG_RC_CORE=3Dm CONFIG_RC_DECODERS=3Dy --=20 2.17.1