From nobody Wed Dec 17 08:19:19 2025 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 41205EB64D7 for ; Tue, 20 Jun 2023 20:03:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229941AbjFTUDm (ORCPT ); Tue, 20 Jun 2023 16:03:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43250 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229655AbjFTUDh (ORCPT ); Tue, 20 Jun 2023 16:03:37 -0400 Received: from mail-ej1-x629.google.com (mail-ej1-x629.google.com [IPv6:2a00:1450:4864:20::629]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 63DC61712 for ; Tue, 20 Jun 2023 13:03:35 -0700 (PDT) Received: by mail-ej1-x629.google.com with SMTP id a640c23a62f3a-988c495f35fso305226166b.1 for ; Tue, 20 Jun 2023 13:03:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687291414; x=1689883414; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=gZmsUFxfSaZd2TRggUEzbG3wsKi/JJu6iTKnfH0U/a8=; b=PL2aYv1XJTAb6SseiJmq0ugcTYxl5XsFYKBAptEfz4pni3OV9/VirDCoGuItpfae5S UN6RnvIKIZVu5ObsB1SDlUcMta0rykf+STCDgIkDgS6ANMNVflDAmKD9dZhEz0yoCYZc WMjrOGzhNROXyIJlLjMRmnOZO+VtEeffjVHgNQYRlNUK9EzND/e8XyZPhyuvyKDbYGKq FMOZd8VkLy0JQW/u6skoiclFJOobAtzPZ56PHAi71fB0QWV+DQh3LOxY5CF09IzMTzKa gkFnD9qSSsX/OIx99noI3P5iR+hUKYYk8LpNSCfQpB8tTZ/rw07OveSRU5PMO8Z4TCJ6 ZMog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687291414; x=1689883414; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=gZmsUFxfSaZd2TRggUEzbG3wsKi/JJu6iTKnfH0U/a8=; b=QHY/UdApj/YxRN07LGjol9usbrAar5txzxzbXvO0adfns1Mntagpf5+C4Uzp764eVl U5TGJCJMKabDkXdY/Lgedi92C+NiNQSryekc+EKCoVzIhsmaamxsyE9/C1xz5BUA/uwz HZVqzK4+GBTdQyfo4V7mP6dtUYaThpFU4VIIxqvgs+ndM450Y8E3O0n2hoM/CJS9o1gh BQiKduECMlATA6qgmCE7mPuZvyUAuhzXcfwSg4+ItmMKxFUScpxOG6uSf3+MQ4hEymi3 ni3/jiP17ISwXOhhyhgXfHO779dUDHfrmZgRbPyUe+Kzf17a71zLwVIBczZs/MyowNUB DuXQ== X-Gm-Message-State: AC+VfDwGd/wWOmeULx3tMUQ3mpnw1snIa586+8tHee+oP86sDRL5xM6w SFoRAC+fzao3DWW7StHrwoM= X-Google-Smtp-Source: ACHHUZ7aTIHGXPpWhLNVtsAjn6ed8yL6xIJFjalQn1soPkXbxGdxGfG1zuotGKg1J9ll8r7ltiLn9Q== X-Received: by 2002:a17:907:2689:b0:965:9602:1f07 with SMTP id bn9-20020a170907268900b0096596021f07mr12473108ejc.39.1687291413720; Tue, 20 Jun 2023 13:03:33 -0700 (PDT) Received: from [127.0.1.1] ([91.230.2.244]) by smtp.gmail.com with ESMTPSA id u21-20020a17090617d500b00977e0bcff1esm1947064eje.10.2023.06.20.13.03.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jun 2023 13:03:33 -0700 (PDT) From: Benjamin Bara Date: Tue, 20 Jun 2023 22:02:54 +0200 Subject: [PATCH RFC v4 01/13] regulator: da9063: fix null pointer deref with partial DT config MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20230419-dynamic-vmon-v4-1-4d3734e62ada@skidata.com> References: <20230419-dynamic-vmon-v4-0-4d3734e62ada@skidata.com> In-Reply-To: <20230419-dynamic-vmon-v4-0-4d3734e62ada@skidata.com> To: Liam Girdwood , Mark Brown Cc: support.opensource@diasemi.com, DLG-Adam.Ward.opensource@dm.renesas.com, Martin Fuzzey , linux-kernel@vger.kernel.org, Matti Vaittinen , Benjamin Bara X-Mailer: b4 0.12.2 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Benjamin Bara Skip checking the XVP constraints if the regulator has no DT node. This fixes a null pointer dereference. Fixes: b8717a80e6ee ("regulator: da9063: implement setter for voltage monit= oring") Reported-by: Martin Fuzzey Closes: https://lore.kernel.org/all/20230616143736.2946173-1-martin.fuzzey@= flowbird.group/ Signed-off-by: Benjamin Bara --- drivers/regulator/da9063-regulator.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/regulator/da9063-regulator.c b/drivers/regulator/da906= 3-regulator.c index c5dd77be558b..308ad63fcf78 100644 --- a/drivers/regulator/da9063-regulator.c +++ b/drivers/regulator/da9063-regulator.c @@ -1028,9 +1028,12 @@ static int da9063_regulator_probe(struct platform_de= vice *pdev) config.of_node =3D da9063_reg_matches[id].of_node; config.regmap =3D da9063->regmap; =20 - ret =3D da9063_check_xvp_constraints(&config); - if (ret) - return ret; + /* Only check constraints if DT node is available. */ + if (config.init_data) { + ret =3D da9063_check_xvp_constraints(&config); + if (ret) + return ret; + } =20 regl->rdev =3D devm_regulator_register(&pdev->dev, ®l->desc, &config); --=20 2.34.1 From nobody Wed Dec 17 08:19:19 2025 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 27042EB64D7 for ; Tue, 20 Jun 2023 20:03:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229954AbjFTUDq (ORCPT ); Tue, 20 Jun 2023 16:03:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43252 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229592AbjFTUDh (ORCPT ); Tue, 20 Jun 2023 16:03:37 -0400 Received: from mail-ej1-x635.google.com (mail-ej1-x635.google.com [IPv6:2a00:1450:4864:20::635]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 02F9D1716 for ; Tue, 20 Jun 2023 13:03:36 -0700 (PDT) Received: by mail-ej1-x635.google.com with SMTP id a640c23a62f3a-9889952ed18so424970766b.3 for ; Tue, 20 Jun 2023 13:03:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687291414; x=1689883414; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=3NURFoPzOpzPWAlV9sdcHGrSNeXHdcY9e57Q+SkpU0s=; b=QgWGEsbgpWllrg5VSzUBxjJ2pR7k0JX8MX5TF74RBzA4ImRC+S4vK8R/OqqbDS7t06 0xogVncHLgAYOXq60hXw2b5sAtXndJVw5+gnuD/pBbk1gHHxEB27R4STRIblWgC5ZsFn hXfT/oD/2VTExj07Zv+V5ZTZ2BJagyvD3GEubyn4gB68wmqpacsqPSZuEMYeg3qock58 Nc2qNglbdYRmRe35f5uVE2JU8dcTmD4qI53PBSOiT06Rp9ryvY9sO35U2ro2NmjEB+8w 94xcTd25Nu+JtB8H2HynJ7ZiHxG9tbrlm5jg73pl+Bo6XQuBSISYMYO82fceF7Q7jyGo mjZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687291414; x=1689883414; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3NURFoPzOpzPWAlV9sdcHGrSNeXHdcY9e57Q+SkpU0s=; b=DO5bk7O4Qzwubwq1LDnd9IUJIzxKc9t15zHjy6GcyHyaUtmBxD6oUR/a0+IXXi8kWK 2wuBfdjaCZ41EG9F5DWhtWSAuMsbnrz8E8pz4zsKH+lyfx8HmfxmZuej9jLkRNykJIoF kcrXwjMl0ko09By6v93sV2IQJ4VBHJoua1IfOV+MRKFeUgRs4Jqe8gBiY/yoJfwpEnTA a3LDf7XhkfiuRgdhZ7kSawRNSw0PQ1u+kf2TulCxHlC2RtLchRj1mdx4DsEQbVAbQFcv F9sq1NIxptEb9kt3MJhmIOK0yj3b2X9AP4ztNQjsyHInYs/gHEHn/2mItCOevqCKMH+p qQ7g== X-Gm-Message-State: AC+VfDzve+HfmwJ6QY2zlJky0mhSfHSjuHD6v96aJd13CAbznqzgC7Ta 0rjbC6jRL7YN8BQ6widXW3w= X-Google-Smtp-Source: ACHHUZ5x80xjwTf15LZ3yfmaApv6rMHkMnyFZVDBlWeWfwve8iE6aqaVoXg/qZvuRqXhaGGMyIaRxA== X-Received: by 2002:a17:907:844:b0:982:9dc1:a434 with SMTP id ww4-20020a170907084400b009829dc1a434mr12252052ejb.19.1687291414455; Tue, 20 Jun 2023 13:03:34 -0700 (PDT) Received: from [127.0.1.1] ([91.230.2.244]) by smtp.gmail.com with ESMTPSA id u21-20020a17090617d500b00977e0bcff1esm1947064eje.10.2023.06.20.13.03.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jun 2023 13:03:34 -0700 (PDT) From: Benjamin Bara Date: Tue, 20 Jun 2023 22:02:55 +0200 Subject: [PATCH RFC v4 02/13] regulator: add getter for active monitors MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20230419-dynamic-vmon-v4-2-4d3734e62ada@skidata.com> References: <20230419-dynamic-vmon-v4-0-4d3734e62ada@skidata.com> In-Reply-To: <20230419-dynamic-vmon-v4-0-4d3734e62ada@skidata.com> To: Liam Girdwood , Mark Brown Cc: support.opensource@diasemi.com, DLG-Adam.Ward.opensource@dm.renesas.com, Martin Fuzzey , linux-kernel@vger.kernel.org, Matti Vaittinen , Benjamin Bara X-Mailer: b4 0.12.2 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Benjamin Bara Add an op to get all active monitors of a regulator. This is useful to find out if any monitor is turned on, of which the device-tree is not aware of (e.g. by bootloader or OTP). Signed-off-by: Benjamin Bara Reviewed-by: Matti Vaittinen --- include/linux/regulator/driver.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/include/linux/regulator/driver.h b/include/linux/regulator/dri= ver.h index d3b4a3d4514a..9a9163cae769 100644 --- a/include/linux/regulator/driver.h +++ b/include/linux/regulator/driver.h @@ -25,6 +25,13 @@ struct regulator_config; struct regulator_init_data; struct regulator_enable_gpio; =20 +#define REGULATOR_MONITOR_NONE 0x0 +#define REGULATOR_MONITOR_OVER_CURRENT 0x1 +#define REGULATOR_MONITOR_OVER_VOLTAGE 0x2 +#define REGULATOR_MONITOR_UNDER_VOLTAGE 0x4 +#define REGULATOR_MONITOR_OVER_TEMPERATURE 0x8 +#define REGULATOR_MONITOR_ALL 0xF + enum regulator_status { REGULATOR_STATUS_OFF, REGULATOR_STATUS_ON, @@ -112,6 +119,8 @@ enum regulator_detection_severity { * @set_thermal_protection: Support enabling of and setting limits for over * temperature situation detection.Detection can be configured for same * severities as over current protection. Units of degree Kelvin. + * @get_active_protections: Get all enabled monitors of a regulator. OR'ed= val + * of REGULATOR_MONITOR_*. * * @set_active_discharge: Set active discharge enable/disable of regulator= s. * @@ -183,6 +192,7 @@ struct regulator_ops { int severity, bool enable); int (*set_thermal_protection)(struct regulator_dev *, int lim, int severity, bool enable); + int (*get_active_protections)(struct regulator_dev *dev, unsigned int *st= ate); int (*set_active_discharge)(struct regulator_dev *, bool enable); =20 /* enable/disable regulator */ --=20 2.34.1 From nobody Wed Dec 17 08:19:19 2025 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 421ABEB64D8 for ; Tue, 20 Jun 2023 20:03:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229802AbjFTUDu (ORCPT ); Tue, 20 Jun 2023 16:03:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43258 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229825AbjFTUDi (ORCPT ); Tue, 20 Jun 2023 16:03:38 -0400 Received: from mail-ej1-x62a.google.com (mail-ej1-x62a.google.com [IPv6:2a00:1450:4864:20::62a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C26181727 for ; Tue, 20 Jun 2023 13:03:36 -0700 (PDT) Received: by mail-ej1-x62a.google.com with SMTP id a640c23a62f3a-98802908fedso482697566b.1 for ; Tue, 20 Jun 2023 13:03:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687291415; x=1689883415; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=OJ7nRTavTjNVtBrEy1gn6F2ROiTuME9nRILwA8zx4J8=; b=OIu7UVO4EyAc5v1waVv43DlilrLBYhjbb+skdC6K2JfpHmGrlnzr104g6zjaOMD4kE NnYSk+nxWcRKX6+tC2O3AFb+aMcr4DNWLVi9PHHcbL8x309l41faPLMbNmNjWUCuvpVh F25cNeF0VMu3jWocbFNogYX4zAB6rPFtZ4lPHofSaNU9YeTCNEP/qbaR0WlB5RfkLAiZ 5S9mJNV+4v0G7oeRWsqooGCs2b6A8BTz+PnZrz73rjn+8xFd+WknPTtpqmedgtDrIt9/ zdGU2GBi+luPCjVxpVl0QU+VylfcGlRwkqVEBUNo8TU/JaI45W7e63kSkSceNwdWS17P KW1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687291415; x=1689883415; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=OJ7nRTavTjNVtBrEy1gn6F2ROiTuME9nRILwA8zx4J8=; b=Sme7OGva0K6HL7YCTKyqevC/DYYpS9x6hAoiZO/+TjvbAGhtOduy9UCvW0Lit+GyIw FxEdqrb10zq/r9DxsyFqo6bImzjdAnmRlqwzK1ctPWKi8MKYtTnBImdlZeDr5+bpRQUD NQRAoofMe1E/MfaLK0541TAdI0c98X9Mx/uttcXXF+A0dcNwSQTdMjU1TDwE2f5Zqm6g 8QKEqGT9QpGPxPq1x4TwSw1WFyMzNJoYokcMBReY61G8ykfbIWjjasR2qlhkdu4JChZu ssOEZn4agaG1CDAuWfKgghCc07H8/q/dtIXIUMfFjCluO2Jy2QEoFOO8OX5krW5CoO63 206A== X-Gm-Message-State: AC+VfDzcZxTwkhExmLPa/SEuJ2/iCi1QmZpbFQpyWrW7ISyyAWDmqCow cxTKRpeU9SBRvr9ttVZAGVo= X-Google-Smtp-Source: ACHHUZ6a1mglnPca8iH5MPxaYCuLh1LijlOIGdVT+73prLug3FucblKCBYb9wfn/QEr3y9QMhhlt6w== X-Received: by 2002:a17:907:72c2:b0:982:3bae:afda with SMTP id du2-20020a17090772c200b009823baeafdamr11567827ejc.45.1687291415224; Tue, 20 Jun 2023 13:03:35 -0700 (PDT) Received: from [127.0.1.1] ([91.230.2.244]) by smtp.gmail.com with ESMTPSA id u21-20020a17090617d500b00977e0bcff1esm1947064eje.10.2023.06.20.13.03.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jun 2023 13:03:34 -0700 (PDT) From: Benjamin Bara Date: Tue, 20 Jun 2023 22:02:56 +0200 Subject: [PATCH RFC v4 03/13] regulator: da9063: implement get_active_protections() MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20230419-dynamic-vmon-v4-3-4d3734e62ada@skidata.com> References: <20230419-dynamic-vmon-v4-0-4d3734e62ada@skidata.com> In-Reply-To: <20230419-dynamic-vmon-v4-0-4d3734e62ada@skidata.com> To: Liam Girdwood , Mark Brown Cc: support.opensource@diasemi.com, DLG-Adam.Ward.opensource@dm.renesas.com, Martin Fuzzey , linux-kernel@vger.kernel.org, Matti Vaittinen , Benjamin Bara X-Mailer: b4 0.12.2 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Benjamin Bara Implement the new get_active_protections() op. This helps to find out if a monitor is enabled and the DT is unaware of it. This could result to an invalid state, as the !PWR_OK state might be triggered if the regulator is turned off while the monitor stays active. Signed-off-by: Benjamin Bara --- drivers/regulator/da9063-regulator.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/drivers/regulator/da9063-regulator.c b/drivers/regulator/da906= 3-regulator.c index 308ad63fcf78..071b368f154f 100644 --- a/drivers/regulator/da9063-regulator.c +++ b/drivers/regulator/da9063-regulator.c @@ -207,6 +207,24 @@ static const unsigned int da9063_bmem_bio_merged_limit= s[] =3D { 4600000, 4800000, 5000000, 5200000, 5400000, 5600000, 5800000, 6000000 }; =20 +static int da9063_get_xvp(struct regulator_dev *rdev, unsigned int *state) +{ + struct da9063_regulator *regl =3D rdev_get_drvdata(rdev); + unsigned int val; + int ret; + + ret =3D regmap_field_read(regl->vmon, &val); + if (ret) + return ret; + + *state =3D REGULATOR_MONITOR_NONE; + if (val) + *state =3D REGULATOR_MONITOR_OVER_VOLTAGE | + REGULATOR_MONITOR_UNDER_VOLTAGE; + + return 0; +} + static int da9063_set_xvp(struct regulator_dev *rdev, int lim_uV, int seve= rity, bool enable) { struct da9063_regulator *regl =3D rdev_get_drvdata(rdev); @@ -580,6 +598,7 @@ static const struct regulator_ops da9063_buck_ops =3D { .set_suspend_mode =3D da9063_buck_set_suspend_mode, .set_over_voltage_protection =3D da9063_set_xvp, .set_under_voltage_protection =3D da9063_set_xvp, + .get_active_protections =3D da9063_get_xvp, }; =20 static const struct regulator_ops da9063_ldo_ops =3D { @@ -598,6 +617,7 @@ static const struct regulator_ops da9063_ldo_ops =3D { .set_suspend_mode =3D da9063_ldo_set_suspend_mode, .set_over_voltage_protection =3D da9063_set_xvp, .set_under_voltage_protection =3D da9063_set_xvp, + .get_active_protections =3D da9063_get_xvp, }; =20 /* Info of regulators for DA9063 */ --=20 2.34.1 From nobody Wed Dec 17 08:19:19 2025 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 120EEEB64D8 for ; Tue, 20 Jun 2023 20:03:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229523AbjFTUDy (ORCPT ); Tue, 20 Jun 2023 16:03:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43274 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229905AbjFTUDj (ORCPT ); Tue, 20 Jun 2023 16:03:39 -0400 Received: from mail-ej1-x631.google.com (mail-ej1-x631.google.com [IPv6:2a00:1450:4864:20::631]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 926AA10F0 for ; Tue, 20 Jun 2023 13:03:37 -0700 (PDT) Received: by mail-ej1-x631.google.com with SMTP id a640c23a62f3a-986d871a9beso666484466b.1 for ; Tue, 20 Jun 2023 13:03:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687291416; x=1689883416; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=pWvUB1XeUSFbOw9iH7XJZnU3aK4Y3VR9DMKZWeotTDY=; b=ayQ31QczW0g6Lq6i9ZJtw3LRZ6KLyK4/ZzfgMpgohPs40OQNe3HdC92u6ktY0Q+LAL hBmffXH8VzFi5hwnqVeYYr+KJyLKiJabxDOrWOO4RcJMQp9MjN0IdEWULQB12PbHFylX 0kTaD9wG++mA43Mk98zJ/8J7ekVFRbfWACp5X5kICz+IJvYDzFiJZb5vxcE57BitnyXz K1Du/QjOD2pW64+Dgib4JX3nWcOB6F6QKxe1uXOfR9totB3i55CeUeyG6swf3t44jiYX FyH9Fo8tsRyhsAAGIEE2rQHXDTwgvfKXkmr/B7sC1QrWvDy5HnIUURx2x9qhf/HHsQje 1QSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687291416; x=1689883416; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=pWvUB1XeUSFbOw9iH7XJZnU3aK4Y3VR9DMKZWeotTDY=; b=K1qzjvzl3AezYCbXQwxFLggGMoayzH5CewJxS/mSBg+H9VBG0qp1hYApodjVGvf6Mb cIeI7/xWcDX5jyyrln8jeADq75RBX2VVniy3I48YTSu1aOjcnSGEyGlF7bkSVR8MB9m0 5mz+E9fi6i2gZPzXu1hqTW8Ioqvo9bv7zCYEWA3FVKA6Eh76QHEKaI6bXJ6pUhrXqyXh E1B7hFUTm3vC/CfaRxlyEkt2Gf5xZv64gRb8mm3uZ/kyOg0K4/aNt8ouv7Zgv17x4LOK uQOgyvZQ4SYKRVmDyhEoDFoXctxbARudklL1CFPFKAekzno1wgAJQNqIUWa4cQ7ktSDr T0uA== X-Gm-Message-State: AC+VfDxpWCEEZGYSxIZXLJ2KuU5ozd0oDLuXVmWAAjui53tnazw+KtMH oAS7po4DSp7cEdxyX2deKbQ= X-Google-Smtp-Source: ACHHUZ5uEgYuFOd4F9lgEw6hWzA1f1XjTIEpLQc9yVH037uDzZk8UBT2bq+vcBaPewoyaABu2V619A== X-Received: by 2002:a17:906:db0d:b0:977:abac:9635 with SMTP id xj13-20020a170906db0d00b00977abac9635mr11491421ejb.20.1687291415948; Tue, 20 Jun 2023 13:03:35 -0700 (PDT) Received: from [127.0.1.1] ([91.230.2.244]) by smtp.gmail.com with ESMTPSA id u21-20020a17090617d500b00977e0bcff1esm1947064eje.10.2023.06.20.13.03.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jun 2023 13:03:35 -0700 (PDT) From: Benjamin Bara Date: Tue, 20 Jun 2023 22:02:57 +0200 Subject: [PATCH RFC v4 04/13] regulator: bd718x7: implement get_active_protections() MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20230419-dynamic-vmon-v4-4-4d3734e62ada@skidata.com> References: <20230419-dynamic-vmon-v4-0-4d3734e62ada@skidata.com> In-Reply-To: <20230419-dynamic-vmon-v4-0-4d3734e62ada@skidata.com> To: Liam Girdwood , Mark Brown Cc: support.opensource@diasemi.com, DLG-Adam.Ward.opensource@dm.renesas.com, Martin Fuzzey , linux-kernel@vger.kernel.org, Matti Vaittinen , Benjamin Bara X-Mailer: b4 0.12.2 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Benjamin Bara This is required as the mon_disable_reg_set_higher workaround property requires the ops to find out if it the monitor is set without the device-tree being aware of it. Signed-off-by: Benjamin Bara Reviewed-by: Matti Vaittinen --- drivers/regulator/bd718x7-regulator.c | 74 ++++++++++++++++++++++++++++---= ---- 1 file changed, 60 insertions(+), 14 deletions(-) diff --git a/drivers/regulator/bd718x7-regulator.c b/drivers/regulator/bd71= 8x7-regulator.c index b0b9938c20a1..fbf609d219fc 100644 --- a/drivers/regulator/bd718x7-regulator.c +++ b/drivers/regulator/bd718x7-regulator.c @@ -56,7 +56,7 @@ =20 #define BD718XX_OPS(name, _list_voltage, _map_voltage, _set_voltage_sel, \ _get_voltage_sel, _set_voltage_time_sel, _set_ramp_delay, \ - _set_uvp, _set_ovp) \ + _set_uvp, _set_ovp, _get_prot) \ static const struct regulator_ops name =3D { \ .enable =3D regulator_enable_regmap, \ .disable =3D regulator_disable_regmap, \ @@ -69,6 +69,7 @@ static const struct regulator_ops name =3D { \ .set_ramp_delay =3D (_set_ramp_delay), \ .set_under_voltage_protection =3D (_set_uvp), \ .set_over_voltage_protection =3D (_set_ovp), \ + .get_active_protections =3D (_get_prot), \ }; \ \ static const struct regulator_ops BD718XX_HWOPNAME(name) =3D { \ @@ -81,6 +82,7 @@ static const struct regulator_ops BD718XX_HWOPNAME(name) = =3D { \ .set_ramp_delay =3D (_set_ramp_delay), \ .set_under_voltage_protection =3D (_set_uvp), \ .set_over_voltage_protection =3D (_set_ovp), \ + .get_active_protections =3D (_get_prot), \ } \ =20 /* @@ -457,6 +459,23 @@ static int bd718x7_xvp_sanity_check(struct regulator_d= ev *rdev, int lim_uV, return 0; } =20 +static int bd717x7_get_ldo_prot(struct regulator_dev *rdev, unsigned int *= state) +{ + int ldo_offset =3D rdev->desc->id - BD718XX_LDO1; + int prot_bit =3D BD718XX_LDO1_VRMON80 << ldo_offset; + int ret; + + ret =3D regmap_test_bits(rdev->regmap, BD718XX_REG_MVRFLTMASK2, prot_bit); + if (ret < 0) + return ret; + + *state =3D REGULATOR_MONITOR_NONE; + if (ret) + *state =3D REGULATOR_MONITOR_UNDER_VOLTAGE; + + return 0; +} + static int bd718x7_set_ldo_uvp(struct regulator_dev *rdev, int lim_uV, int severity, bool enable) { @@ -519,6 +538,33 @@ static int bd718x7_get_buck_uvp_info(int id, int *reg,= int *bit) return 0; } =20 +static int bd717x7_get_buck_prot(struct regulator_dev *rdev, unsigned int = *state) +{ + int ret, reg, bit; + + ret =3D bd718x7_get_buck_uvp_info(rdev->desc->id, ®, &bit); + if (ret) + return ret; + ret =3D regmap_test_bits(rdev->regmap, reg, bit); + if (ret < 0) + return ret; + + *state =3D REGULATOR_MONITOR_NONE; + if (ret) + *state =3D REGULATOR_MONITOR_UNDER_VOLTAGE; + + ret =3D bd718x7_get_buck_ovp_info(rdev->desc->id, ®, &bit); + if (ret) + return ret; + ret =3D regmap_test_bits(rdev->regmap, reg, bit); + if (ret < 0) + return ret; + if (ret) + *state |=3D REGULATOR_MONITOR_OVER_VOLTAGE; + + return 0; +} + static int bd718x7_set_buck_uvp(struct regulator_dev *rdev, int lim_uV, int severity, bool enable) { @@ -566,7 +612,7 @@ BD718XX_OPS(bd718xx_pickable_range_ldo_ops, regulator_list_voltage_pickable_linear_range, NULL, bd718xx_set_voltage_sel_pickable_restricted, regulator_get_voltage_sel_pickable_regmap, NULL, NULL, - bd718x7_set_ldo_uvp, NULL); + bd718x7_set_ldo_uvp, NULL, bd717x7_get_ldo_prot); =20 /* BD71847 and BD71850 LDO 5 is by default OFF at RUN state */ static const struct regulator_ops bd718xx_ldo5_ops_hwstate =3D { @@ -582,27 +628,27 @@ BD718XX_OPS(bd718xx_pickable_range_buck_ops, regulator_set_voltage_sel_pickable_regmap, regulator_get_voltage_sel_pickable_regmap, regulator_set_voltage_time_sel, NULL, bd718x7_set_buck_uvp, - bd718x7_set_buck_ovp); + bd718x7_set_buck_ovp, bd717x7_get_buck_prot); =20 BD718XX_OPS(bd718xx_ldo_regulator_ops, regulator_list_voltage_linear_range, NULL, bd718xx_set_voltage_sel_restricted, regulator_get_voltage_sel_regmap, NULL, NULL, bd718x7_set_ldo_uvp, - NULL); + NULL, bd717x7_get_ldo_prot); =20 BD718XX_OPS(bd718xx_ldo_regulator_nolinear_ops, regulator_list_voltage_tab= le, NULL, bd718xx_set_voltage_sel_restricted, regulator_get_voltage_sel_regmap, NULL, NULL, bd718x7_set_ldo_uvp, - NULL); + NULL, bd717x7_get_ldo_prot); =20 BD718XX_OPS(bd718xx_buck_regulator_ops, regulator_list_voltage_linear_rang= e, NULL, regulator_set_voltage_sel_regmap, regulator_get_voltage_sel_regmap, regulator_set_voltage_time_sel, - NULL, bd718x7_set_buck_uvp, bd718x7_set_buck_ovp); + NULL, bd718x7_set_buck_uvp, bd718x7_set_buck_ovp, bd717x7_get_buck_pr= ot); =20 BD718XX_OPS(bd718xx_buck_regulator_nolinear_ops, regulator_list_voltage_ta= ble, regulator_map_voltage_ascend, regulator_set_voltage_sel_regmap, regulator_get_voltage_sel_regmap, regulator_set_voltage_time_sel, - NULL, bd718x7_set_buck_uvp, bd718x7_set_buck_ovp); + NULL, bd718x7_set_buck_uvp, bd718x7_set_buck_ovp, bd717x7_get_buck_pr= ot); =20 /* * OPS for BD71837 @@ -611,34 +657,34 @@ BD718XX_OPS(bd71837_pickable_range_ldo_ops, regulator_list_voltage_pickable_linear_range, NULL, bd71837_set_voltage_sel_pickable_restricted, regulator_get_voltage_sel_pickable_regmap, NULL, NULL, - bd718x7_set_ldo_uvp, NULL); + bd718x7_set_ldo_uvp, NULL, bd717x7_get_ldo_prot); =20 BD718XX_OPS(bd71837_pickable_range_buck_ops, regulator_list_voltage_pickable_linear_range, NULL, bd71837_set_voltage_sel_pickable_restricted, regulator_get_voltage_sel_pickable_regmap, regulator_set_voltage_time_sel, NULL, bd718x7_set_buck_uvp, - bd718x7_set_buck_ovp); + bd718x7_set_buck_ovp, bd717x7_get_buck_prot); =20 BD718XX_OPS(bd71837_ldo_regulator_ops, regulator_list_voltage_linear_range, NULL, rohm_regulator_set_voltage_sel_restricted, regulator_get_voltage_sel_regmap, NULL, NULL, bd718x7_set_ldo_uvp, - NULL); + NULL, bd717x7_get_ldo_prot); =20 BD718XX_OPS(bd71837_ldo_regulator_nolinear_ops, regulator_list_voltage_tab= le, NULL, rohm_regulator_set_voltage_sel_restricted, regulator_get_voltage_sel_regmap, NULL, NULL, bd718x7_set_ldo_uvp, - NULL); + NULL, bd717x7_get_ldo_prot); =20 BD718XX_OPS(bd71837_buck_regulator_ops, regulator_list_voltage_linear_rang= e, NULL, rohm_regulator_set_voltage_sel_restricted, regulator_get_voltage_sel_regmap, regulator_set_voltage_time_sel, - NULL, bd718x7_set_buck_uvp, bd718x7_set_buck_ovp); + NULL, bd718x7_set_buck_uvp, bd718x7_set_buck_ovp, bd717x7_get_buck_pr= ot); =20 BD718XX_OPS(bd71837_buck_regulator_nolinear_ops, regulator_list_voltage_ta= ble, regulator_map_voltage_ascend, rohm_regulator_set_voltage_sel_restrict= ed, regulator_get_voltage_sel_regmap, regulator_set_voltage_time_sel, - NULL, bd718x7_set_buck_uvp, bd718x7_set_buck_ovp); + NULL, bd718x7_set_buck_uvp, bd718x7_set_buck_ovp, bd717x7_get_buck_pr= ot); /* * BD71837 bucks 3 and 4 support defining their enable/disable state also * when buck enable state is under HW state machine control. In that case = the @@ -662,7 +708,7 @@ BD718XX_OPS(bd718xx_dvs_buck_regulator_ops, regulator_l= ist_voltage_linear_range, NULL, regulator_set_voltage_sel_regmap, regulator_get_voltage_sel_regmap, regulator_set_voltage_time_sel, regulator_set_ramp_delay_regmap, bd718x7_set_buck_uvp, - bd718x7_set_buck_ovp); + bd718x7_set_buck_ovp, bd717x7_get_buck_prot); =20 =20 =20 --=20 2.34.1 From nobody Wed Dec 17 08:19:19 2025 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 97870EB64D8 for ; Tue, 20 Jun 2023 20:03:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230046AbjFTUD5 (ORCPT ); Tue, 20 Jun 2023 16:03:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43276 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229912AbjFTUDj (ORCPT ); Tue, 20 Jun 2023 16:03:39 -0400 Received: from mail-ej1-x636.google.com (mail-ej1-x636.google.com [IPv6:2a00:1450:4864:20::636]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 520D21716 for ; Tue, 20 Jun 2023 13:03:38 -0700 (PDT) Received: by mail-ej1-x636.google.com with SMTP id a640c23a62f3a-988883b0d8fso453052466b.1 for ; Tue, 20 Jun 2023 13:03:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687291417; x=1689883417; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=9l13haq03wlXgATRrsgZ5ZfRpocQcq44XJv0jdOrYlg=; b=YGrQI43m4E54uNmB8Zafq03ZrTAyz1sh8TPap01+PcwlC+PBtufuWyGXxDQVAl0R9m dh8CNt76w0EfHjNLZUkwd646fMYpsJHpxsh8Af5V5Qul1Dsaw0sPM2zX9rAZ1JFm/y80 THL3iVO5trpVtfFw6yqoFxUu2aKvfMmU4LeggwCDi0clvCSA8PwZAJKXtIx+8CndXiAY RGM4dvWJwu8vtd9Ih2n40ZSbcW+K4BtJNubRBBX/jJSiz0AhtHycuaZlU53VguQs1Y54 ejYV9q98A3Gs0VKcmIoWVnOa1aUNj40/a6cTNva90u4xEk/YUXMRVXgLGCIrJyfkufyk g5ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687291417; x=1689883417; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9l13haq03wlXgATRrsgZ5ZfRpocQcq44XJv0jdOrYlg=; b=Anb5n0/qM9LEXhyg9Joo4dRDRCrWQOIEJ4Br/KlcbPJmAAVRHkjJ+QkTR7aWAl1QZd Ax7vqY3/7utkA7Fjz3hBXlmhI4hKc1UAn9tz8F19BdFca2Y3WwQI/ShkE50PUeLNOcCi amyI+gGYssYvU4Rynbuu/7PmPWvVeGOb4Echinhz9BcuX9D6Xs4wWbMUZuWEc8uwcvjv xE/r2m61YkyDKzYzSxCS/uJd08rNa3on+AAREOayJQrCWq3DgKsZuRfUT5SPWXthkDAl tS+ndGMuqwi/dqShEBHvEsn6ilfblNcxVE3sO80esTvYvZIxG0PoYjzM+yHS+nOClmR3 paqQ== X-Gm-Message-State: AC+VfDwVWbCctPOwLuymbqO6wmDkqwCMzcPNEwIVjmJCpx9/PpVaxhI7 9znRAb4/AjXqv5UmvXKzrwU= X-Google-Smtp-Source: ACHHUZ66/hxFe9ul2BHHokE+Qbhy1oveqY7SRuCqKme0IObB0TxNSnmpoaKNKYxXT4i67m6qpPEgOA== X-Received: by 2002:a17:907:969f:b0:947:335f:5a0d with SMTP id hd31-20020a170907969f00b00947335f5a0dmr12159426ejc.62.1687291416778; Tue, 20 Jun 2023 13:03:36 -0700 (PDT) Received: from [127.0.1.1] ([91.230.2.244]) by smtp.gmail.com with ESMTPSA id u21-20020a17090617d500b00977e0bcff1esm1947064eje.10.2023.06.20.13.03.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jun 2023 13:03:36 -0700 (PDT) From: Benjamin Bara Date: Tue, 20 Jun 2023 22:02:58 +0200 Subject: [PATCH RFC v4 05/13] regulator: introduce properties for monitoring workarounds MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20230419-dynamic-vmon-v4-5-4d3734e62ada@skidata.com> References: <20230419-dynamic-vmon-v4-0-4d3734e62ada@skidata.com> In-Reply-To: <20230419-dynamic-vmon-v4-0-4d3734e62ada@skidata.com> To: Liam Girdwood , Mark Brown Cc: support.opensource@diasemi.com, DLG-Adam.Ward.opensource@dm.renesas.com, Martin Fuzzey , linux-kernel@vger.kernel.org, Matti Vaittinen , Benjamin Bara X-Mailer: b4 0.12.2 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Benjamin Bara These are useful when the state of the regulator might change during runtime, but the monitors state (in hardware) are not implicitly changed with the change of the regulator state or mode (in hardware). Also, when the monitors should be disabled while ramping after a set_value() or when the regulator can enter a certain mode in which the monitoring does not result in a valid state. Signed-off-by: Benjamin Bara Reviewed-by: Matti Vaittinen --- include/linux/regulator/driver.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/include/linux/regulator/driver.h b/include/linux/regulator/dri= ver.h index 9a9163cae769..ce204ecd20e1 100644 --- a/include/linux/regulator/driver.h +++ b/include/linux/regulator/driver.h @@ -367,6 +367,19 @@ enum regulator_type { * the regulator was actually enabled. Max upto enable= _time. * * @of_map_mode: Maps a hardware mode defined in a DeviceTree to a standar= d mode + * + * @mon_disable_reg_disabled: Disables the regulator's monitors while it is + * disabled. Affected REGULATOR_MONITOR_* are O= R'ed. + * @mon_disable_reg_set_higher: Disables regulator's monitors while it is + * changing its value to a higher one. Affect= ed + * REGULATOR_MONITOR_* are OR'ed. + * @mon_disable_reg_set_lower: Disables regulator's monitors while it is + * changing its value to a lower one. Affected + * REGULATOR_MONITOR_* are OR'ed. + * @mon_unsupported_reg_modes: Disables regulator's monitors before an + * unsupported mode is entered. REGULATOR_MODE= _* are + * OR'ed. REGULATOR_MODE_INVALID means all mod= es can + * be monitored. */ struct regulator_desc { const char *name; @@ -441,6 +454,11 @@ struct regulator_desc { unsigned int poll_enabled_time; =20 unsigned int (*of_map_mode)(unsigned int mode); + + unsigned int mon_disable_reg_disabled; + unsigned int mon_disable_reg_set_higher; + unsigned int mon_disable_reg_set_lower; + unsigned int mon_unsupported_reg_modes; }; =20 /** --=20 2.34.1 From nobody Wed Dec 17 08:19:19 2025 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 35337EB64D7 for ; Tue, 20 Jun 2023 20:04:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230062AbjFTUD6 (ORCPT ); Tue, 20 Jun 2023 16:03:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43284 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229521AbjFTUDk (ORCPT ); Tue, 20 Jun 2023 16:03:40 -0400 Received: from mail-ej1-x62a.google.com (mail-ej1-x62a.google.com [IPv6:2a00:1450:4864:20::62a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 17C671726 for ; Tue, 20 Jun 2023 13:03:39 -0700 (PDT) Received: by mail-ej1-x62a.google.com with SMTP id a640c23a62f3a-98934f000a5so137592466b.2 for ; Tue, 20 Jun 2023 13:03:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687291417; x=1689883417; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=p8jfpdKH0fFzjA8Web6QRbnSKKAkYrL/UQcXZfCIDJU=; b=KBOjswneiJ+wctkMg8hkQH4cU9SDT9ijrERRYyhkTyXu6Bw+GLleNaeKrIY3DaQtkT L4ivG2jFZjppHpokA0mlmN28izpa7UDdWVU+w4B6Af5nhou+hIkXvRA2ht2+GrmAtL1e NGuN6H1XX0gcIOKgghYFZcOrKa9v1IlIsFggvYGbcdoO5yXQy5n6xMxjNaVYv3UIX4Hh 3RfG99THfkwCoRZMUgT+7tjCFG1i1vozp6FMHxxC13u/Hp4I25Ry3Sfrm22688JHzG6s lJxtaf9cm6dLCvdDNzTNtlAgoUjJF87Rx6sRnpsbNJlzfHM0xnFEbhcg047ggOEA/V3x U2vw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687291417; x=1689883417; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=p8jfpdKH0fFzjA8Web6QRbnSKKAkYrL/UQcXZfCIDJU=; b=S0ki4ONdmTqeCl7/ATZvwk9TNAIit7/Tf3icly0ek+QdeBdXsAMeY/6WmZoKJ4uzJZ 4YCF7ABvM9gv4P6cR0g7J2n1hPB1zMYyf0OcwvoDDeNvjAp+cfHo3uGR9Ap5zSoiA3la q3oj8zseny2yjsDu4VvN6H6a17+W8Z61EaFTLgvXm4CF4cTj7gEIpJX/ZhAfUcJ5h6hz fdAuWtkwjGPGUGAvaErUrRQv/RZhGQL7+pICE7PllyJKfORQs17WDwy/aEtLxOCYzsI+ 3NyMX/GX2dSeNc87DSGu53kGOAhWyoQ7jO9pqPflegEjPey7P1gbTkzJ6x5zgJZHF12W xyMg== X-Gm-Message-State: AC+VfDzeG63/gB3PXp+q7GEyiY0VOCgbCzgIPuiELaWdVT2EDq1/WPb+ lVBkNJKjVJniK1navXQZ/yo= X-Google-Smtp-Source: ACHHUZ6F29c4fsU8BMMP2TV7m1XjWd4RTw6VBgO6ETEP6Ez5JQuIfCNiIoT7iFjdAi0oY+drw4tEGg== X-Received: by 2002:a17:906:58ce:b0:988:ffb9:b944 with SMTP id e14-20020a17090658ce00b00988ffb9b944mr3756956ejs.29.1687291417474; Tue, 20 Jun 2023 13:03:37 -0700 (PDT) Received: from [127.0.1.1] ([91.230.2.244]) by smtp.gmail.com with ESMTPSA id u21-20020a17090617d500b00977e0bcff1esm1947064eje.10.2023.06.20.13.03.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jun 2023 13:03:37 -0700 (PDT) From: Benjamin Bara Date: Tue, 20 Jun 2023 22:02:59 +0200 Subject: [PATCH RFC v4 06/13] regulator: set required ops for monitoring workarounds MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20230419-dynamic-vmon-v4-6-4d3734e62ada@skidata.com> References: <20230419-dynamic-vmon-v4-0-4d3734e62ada@skidata.com> In-Reply-To: <20230419-dynamic-vmon-v4-0-4d3734e62ada@skidata.com> To: Liam Girdwood , Mark Brown Cc: support.opensource@diasemi.com, DLG-Adam.Ward.opensource@dm.renesas.com, Martin Fuzzey , linux-kernel@vger.kernel.org, Matti Vaittinen , Benjamin Bara X-Mailer: b4 0.12.2 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Benjamin Bara If the core should be able to handle the monitoring workarounds, certain regulator ops are required: - is_enabled() to decide whether a monitor should be turned off or not. - get_active_protections() to find out if the device-tree is missing active protections. - get_mode() if the regulator is in a mode where monitoring is not supported. Signed-off-by: Benjamin Bara Reviewed-by: Matti Vaittinen --- drivers/regulator/core.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index dc741ac156c3..ca5d6ba889dc 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -5540,6 +5540,40 @@ regulator_register(struct device *dev, goto rinse; } =20 + /* monitor workaround properties require ops to ensure functionality. */ + if (regulator_desc->mon_disable_reg_disabled || + regulator_desc->mon_disable_reg_set_higher || + regulator_desc->mon_disable_reg_set_lower || + regulator_desc->mon_unsupported_reg_modes) { + /* + * is_enabled() to make sure the monitors aren't disabled on + * disabled regulators. + */ + if (!regulator_desc->ops->is_enabled) { + ret =3D -EINVAL; + goto rinse; + } + + /* + * get_active_protections() to know if a regulator is monitored + * without the device-tree being aware of it. + */ + if (!regulator_desc->ops->get_active_protections) { + ret =3D -EINVAL; + goto rinse; + } + + /* + * mon_unsupported_reg_modes property requires get_mode() to get + * the old state in case a state switch is failing. + */ + if (regulator_desc->mon_unsupported_reg_modes && + !regulator_desc->ops->get_mode) { + ret =3D -EINVAL; + goto rinse; + } + } + rdev =3D kzalloc(sizeof(struct regulator_dev), GFP_KERNEL); if (rdev =3D=3D NULL) { ret =3D -ENOMEM; --=20 2.34.1 From nobody Wed Dec 17 08:19:19 2025 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 9DE63EB64D7 for ; Tue, 20 Jun 2023 20:04:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230072AbjFTUEF (ORCPT ); Tue, 20 Jun 2023 16:04:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43292 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229918AbjFTUDl (ORCPT ); Tue, 20 Jun 2023 16:03:41 -0400 Received: from mail-ed1-x52b.google.com (mail-ed1-x52b.google.com [IPv6:2a00:1450:4864:20::52b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D8F7F10F0 for ; Tue, 20 Jun 2023 13:03:39 -0700 (PDT) Received: by mail-ed1-x52b.google.com with SMTP id 4fb4d7f45d1cf-519f6e1a16cso6065336a12.2 for ; Tue, 20 Jun 2023 13:03:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687291418; x=1689883418; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=2RVAC+ZaZODWJ+QFQBc3rYxuHiijX92xEaSVhSFgl3o=; b=mrVUpP3jn3SF8dK4Gd4pciXBMZDMGoWleyLtt8d4i0veouLd5ObXCGZhqq0qS8tZpS LHWE09xVNGj7BeUgVg1UYLBLa4lOjz9ghVQBYCOY7kdssPocZuEhZhSJJqiTutcR+O6Z vN9HKSNk4gPyIkyxNnWbq2uJFBmV8gW5gUB1aYN18CiuCVB0t5Wao8I2tIidUiHi8Fni 4PqNZNU1aiYdWsD2fKEOljz6nx3GITQCBdjjZVoaAn6mDv4DKQ+G2rcTrhOL9pC/jI6T 4aT0I+e0AFcs8sGGZ293V7yhku4PsJOhO285z/DIhUbUQaWEeSKz000q+SYSJ9Er++bq xh6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687291418; x=1689883418; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2RVAC+ZaZODWJ+QFQBc3rYxuHiijX92xEaSVhSFgl3o=; b=V5/zO1qUNKCAK5KQxzZauKyd62VUapC23OfqWKofhkbXD5CChnvg3b64c/D0laybJd fx/GoykqkMtxVwyU/UZzYY5tx5p0kCc8rAITN/43D/oLWZnJjJj/Jttoix8FeAtIWSZP 6FZJvntduBuatk6F2iL6sJQj4LTl1neIfbaSJkwfAmQ9eYP6pysvJU3ZYS5Npsmj0HNj 1CvdEgu52nSGdMoPqKVFQuDC4k779IioTvKqYr6o/w2Y7payqoFH+kA33g8QUNBOaQdI IKupNQM7v3URvEoX2cSJ7s9VLBCwWMJRyvIsjKKYGgyR3uCX5ODK/LiMTrgmPNBfi33b pSSg== X-Gm-Message-State: AC+VfDyUm+sxOaEeLBUgrvK0RiMHnfWCGJ4lqxt7/zOhh2qgyuPfcSBm FnTJlfSzgG7XMiaEtoJ4zoH0LSfjLZ+jZQ== X-Google-Smtp-Source: ACHHUZ5bp7x5munn1VtEk7+2qSwrdlsaEXcT/zqtu43LDIo0364bHeI2Z5XRriP+opDt0q/EU4hBqg== X-Received: by 2002:a17:907:9453:b0:987:47b3:6e34 with SMTP id dl19-20020a170907945300b0098747b36e34mr8704687ejc.67.1687291418327; Tue, 20 Jun 2023 13:03:38 -0700 (PDT) Received: from [127.0.1.1] ([91.230.2.244]) by smtp.gmail.com with ESMTPSA id u21-20020a17090617d500b00977e0bcff1esm1947064eje.10.2023.06.20.13.03.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jun 2023 13:03:37 -0700 (PDT) From: Benjamin Bara Date: Tue, 20 Jun 2023 22:03:00 +0200 Subject: [PATCH RFC v4 07/13] regulator: find active protections during initialization MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20230419-dynamic-vmon-v4-7-4d3734e62ada@skidata.com> References: <20230419-dynamic-vmon-v4-0-4d3734e62ada@skidata.com> In-Reply-To: <20230419-dynamic-vmon-v4-0-4d3734e62ada@skidata.com> To: Liam Girdwood , Mark Brown Cc: support.opensource@diasemi.com, DLG-Adam.Ward.opensource@dm.renesas.com, Martin Fuzzey , linux-kernel@vger.kernel.org, Matti Vaittinen , Benjamin Bara X-Mailer: b4 0.12.2 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Benjamin Bara It can happen that monitors are activated before the kernel is started, e.g. by bootloader or by OTP. If monitoring workarounds are active on a regulator, the core shouldn't perform the state changes without applying the workaround to the regulator. Therefore, warn the user already during initialization that the device-tree should be adapted. Warning can be fixed by enabling (or disabling) monitoring in the DT, e.g.: regulator-uv-protection-microvolt =3D <1>; or regulator-ov-error-microvolt =3D <0>; Constraints regarding the monitoring of a regulator can usually be found in the docu. Signed-off-by: Benjamin Bara --- drivers/regulator/core.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index ca5d6ba889dc..9bddab17450e 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -1564,6 +1564,47 @@ static int set_machine_constraints(struct regulator_= dev *rdev) } } =20 + /* + * When the core is in charge of handling monitoring workarounds, + * it is essential to know if a monitor is already active during + * initialization. + */ + if (rdev->desc->mon_disable_reg_disabled || + rdev->desc->mon_disable_reg_set_higher || + rdev->desc->mon_disable_reg_set_lower || + rdev->desc->mon_unsupported_reg_modes) { + unsigned int monitor_state =3D REGULATOR_MONITOR_NONE; + + ret =3D ops->get_active_protections(rdev, &monitor_state); + if (ret) + return ret; + + if (!rdev->constraints->over_voltage_detection && + (monitor_state & REGULATOR_MONITOR_OVER_VOLTAGE)) { + rdev_err(rdev, "dt unaware of active %s monitor!\n", + "over-voltage"); + return -EINVAL; + } + if (!rdev->constraints->under_voltage_detection && + (monitor_state & REGULATOR_MONITOR_UNDER_VOLTAGE)) { + rdev_err(rdev, "dt unaware of active %s monitor!\n", + "under-voltage"); + return -EINVAL; + } + if (!rdev->constraints->over_current_detection && + (monitor_state & REGULATOR_MONITOR_OVER_CURRENT)) { + rdev_err(rdev, "dt unaware of active %s monitor!\n", + "over-current"); + return -EINVAL; + } + if (!rdev->constraints->over_temp_detection && + (monitor_state & REGULATOR_MONITOR_OVER_TEMPERATURE)) { + rdev_err(rdev, "dt unaware of active %s monitor!\n", + "over-temperature"); + return -EINVAL; + } + } + if (rdev->constraints->over_current_detection) ret =3D handle_notify_limits(rdev, ops->set_over_current_protection, --=20 2.34.1 From nobody Wed Dec 17 08:19:19 2025 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 453D7EB64D7 for ; Tue, 20 Jun 2023 20:04:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229626AbjFTUEJ (ORCPT ); Tue, 20 Jun 2023 16:04:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43304 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229931AbjFTUDm (ORCPT ); Tue, 20 Jun 2023 16:03:42 -0400 Received: from mail-ej1-x632.google.com (mail-ej1-x632.google.com [IPv6:2a00:1450:4864:20::632]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A2D741712 for ; Tue, 20 Jun 2023 13:03:40 -0700 (PDT) Received: by mail-ej1-x632.google.com with SMTP id a640c23a62f3a-98bcc533490so2192066b.0 for ; Tue, 20 Jun 2023 13:03:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687291419; x=1689883419; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=ts2CvJG3GQxySwikSNebm+mM4uY8v3kHsQNk6jHGEmI=; b=lxfFIdKlW14qiAG+usHGbXGl2NssFFvBXi/XeJMCcQeumGWXHpQVdJp5mPcSiC3V53 LJEYudCnt+mddDHLhig6Ck+uhC1fZdD+yusON4aHbVA15tT1aICoyzkU9uA8Ylg6xi8O jeU4cqmRnW85tdI4X3KLP0hwXtRe6Ytv1GfBkdZdIn1dasm9H5NAjFWavgBDuo7IUsWs NMROZbF57Lne63wzLAxqoSqq6p9Y90wOE7M6YzRedaU/FmasfD4m0gBPVXCnd4QaRLxN r3QUkznnSY5lb2tpdUyk/pxuIvTxtDdjJ0lq+/xefhn7tiU5GVMyXUx2W4lqEthGwITu V0Tg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687291419; x=1689883419; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ts2CvJG3GQxySwikSNebm+mM4uY8v3kHsQNk6jHGEmI=; b=FuWYKwdRd+pUjm7R33RFFa+K2zRrpaX22QRS9Xu7jwSasu94jWk2N7bcNVu5tmJUOi 56qLbWdqWVD0pjOIansUu7Bcs0CVROh1ojUId4LsWxhP008Suh5hn48IeNohUbxMbB1j bU72lM8YXHLzkSmw8i73bPRiAWyYEDWo33mpF9NF1dykFg3imrnzC5Jiq7Cf3UtOP58z i6sTWCNETd27qNb5yWynYahhPfI3HDYqdPfIrxFPnlFpgRK7y7AJRjDbvuZpKNSkbtly KWq7F5iRAd2VWVvWdj2bw4P71uRflL5HKx3ZKqfmCjHYNcKIzoXmUA51G7Y5PJ869Oqq 1Abg== X-Gm-Message-State: AC+VfDz8Pa9onKZnRcx8dVUYdnO5DKg6wrl6JOHcn0lyxLJZ9jmRFdD6 xJKp1cxf1Wc6pLBeHIBJ+zA= X-Google-Smtp-Source: ACHHUZ5LizFMA9UIa4WQfMs2hig/hFlMq4RxvMkJHSBLkvKpppVy2BgvwuZB87K0NBUngV2hhdN0Tw== X-Received: by 2002:a17:907:26c8:b0:94e:afa6:299f with SMTP id bp8-20020a17090726c800b0094eafa6299fmr13176803ejc.22.1687291419095; Tue, 20 Jun 2023 13:03:39 -0700 (PDT) Received: from [127.0.1.1] ([91.230.2.244]) by smtp.gmail.com with ESMTPSA id u21-20020a17090617d500b00977e0bcff1esm1947064eje.10.2023.06.20.13.03.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jun 2023 13:03:38 -0700 (PDT) From: Benjamin Bara Date: Tue, 20 Jun 2023 22:03:01 +0200 Subject: [PATCH RFC v4 08/13] regulator: move monitor handling into own function MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20230419-dynamic-vmon-v4-8-4d3734e62ada@skidata.com> References: <20230419-dynamic-vmon-v4-0-4d3734e62ada@skidata.com> In-Reply-To: <20230419-dynamic-vmon-v4-0-4d3734e62ada@skidata.com> To: Liam Girdwood , Mark Brown Cc: support.opensource@diasemi.com, DLG-Adam.Ward.opensource@dm.renesas.com, Martin Fuzzey , linux-kernel@vger.kernel.org, Matti Vaittinen , Benjamin Bara X-Mailer: b4 0.12.2 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Benjamin Bara Extract the current monitor handling into an own function and create helper for initialization, disabling and re-enabling of monitors. For reenabling the monitors, the current state and mode is considered to avoid entering an invalid state on regulators with enabled workarounds. Additionally, monitors of disabled regulators are not disabled before changing state. The mon_disable_reg_disabled property is still respected in this case, because turning off the monitor happens when the regulator is still enabled. Differ between initialization and normal "workaround handling" when an EOPNOTSUPP is returned. Signed-off-by: Benjamin Bara --- drivers/regulator/core.c | 234 +++++++++++++++++++++++++++++++++++--------= ---- 1 file changed, 178 insertions(+), 56 deletions(-) diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 9bddab17450e..873e53633698 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -1426,7 +1426,7 @@ static int notif_set_limit(struct regulator_dev *rdev, =20 static int handle_notify_limits(struct regulator_dev *rdev, int (*set)(struct regulator_dev *, int, int, bool), - struct notification_limit *limits) + const struct notification_limit *limits) { int ret =3D 0; =20 @@ -1451,6 +1451,180 @@ static int handle_notify_limits(struct regulator_de= v *rdev, =20 return ret; } + +static const struct notification_limit disable_limits =3D { + .prot =3D REGULATOR_NOTIF_LIMIT_DISABLE, + .err =3D REGULATOR_NOTIF_LIMIT_DISABLE, + .warn =3D REGULATOR_NOTIF_LIMIT_DISABLE, +}; + +static int monitors_set_state(struct regulator_dev *rdev, bool enable, + unsigned int mons) +{ + const struct regulation_constraints *reg_c =3D rdev->constraints; + const struct regulator_ops *ops =3D rdev->desc->ops; + int tmp, ret =3D 0; + + rdev_dbg(rdev, "%s: en: %d, mons: %x\n", __func__, enable, mons); + + /* only set the state if monitoring is activated in the device-tree. */ + if ((mons & REGULATOR_MONITOR_OVER_VOLTAGE) && reg_c->over_voltage_detect= ion) { + tmp =3D handle_notify_limits(rdev, ops->set_over_voltage_protection, + enable ? ®_c->over_voltage_limits + : &disable_limits); + if (tmp) { + if (tmp !=3D -EOPNOTSUPP) { + rdev_err(rdev, "failed to set over voltage limits %pe\n", + ERR_PTR(tmp)); + return tmp; + } + rdev_warn(rdev, + "IC does not support requested over voltage limits\n"); + ret =3D tmp; + } + } + if ((mons & REGULATOR_MONITOR_UNDER_VOLTAGE) && reg_c->under_voltage_dete= ction) { + tmp =3D handle_notify_limits(rdev, ops->set_under_voltage_protection, + enable ? ®_c->under_voltage_limits + : &disable_limits); + if (tmp) { + if (tmp !=3D -EOPNOTSUPP) { + rdev_err(rdev, "failed to set under voltage limits %pe\n", + ERR_PTR(tmp)); + return ret; + } + rdev_warn(rdev, + "IC does not support requested under voltage limits\n"); + ret =3D tmp; + } + } + if ((mons & REGULATOR_MONITOR_OVER_CURRENT) && reg_c->over_current_detect= ion) { + tmp =3D handle_notify_limits(rdev, ops->set_over_current_protection, + enable ? ®_c->over_curr_limits + : &disable_limits); + if (ret) { + if (tmp !=3D -EOPNOTSUPP) { + rdev_err(rdev, "failed to set over current limits: %pe\n", + ERR_PTR(tmp)); + return tmp; + } + rdev_warn(rdev, + "IC does not support requested over-current limits\n"); + ret =3D tmp; + } + } + if ((mons & REGULATOR_MONITOR_OVER_TEMPERATURE) && reg_c->over_temp_detec= tion) { + tmp =3D handle_notify_limits(rdev, ops->set_thermal_protection, + enable ? ®_c->temp_limits + : &disable_limits); + if (tmp) { + if (tmp !=3D -EOPNOTSUPP) { + rdev_err(rdev, "failed to set temperature limits %pe\n", + ERR_PTR(tmp)); + return tmp; + } + rdev_warn(rdev, + "IC does not support requested temperature limits\n"); + ret =3D tmp; + } + } + + return ret; +} + +/** + * monitors_disable - disables given monitors if the regulator is enabled + * @rdev: regulator source + * @mons: monitors to enable + */ +static int monitors_disable(struct regulator_dev *rdev, unsigned int mons) +{ + int reg_enabled; + + if (!mons) + return 0; + + reg_enabled =3D _regulator_is_enabled(rdev); + if (reg_enabled <=3D 0) + return reg_enabled; + + return monitors_set_state(rdev, false, mons); +} + +/** + * monitors_enable - enables given monitors + * @rdev: regulator source + * @mons: monitors to enable + * + * Enables monitors based on their workaround properties and the current s= tate + * or mode. + */ +static int monitors_enable(struct regulator_dev *rdev, unsigned int mons) +{ + const struct regulator_desc *desc =3D rdev->desc; + const struct regulator_ops *ops =3D desc->ops; + + /* don't enable monitors if regulator is in unsupported mode. */ + if (desc->mon_unsupported_reg_modes && + (desc->mon_unsupported_reg_modes & ops->get_mode(rdev))) + return 0; + + /* don't enable monitor on disabled regulator with workaround active. */ + if (mons & desc->mon_disable_reg_disabled) { + int reg_enabled =3D _regulator_is_enabled(rdev); + + if (reg_enabled < 0) + return reg_enabled; + if (!reg_enabled) + mons &=3D ~desc->mon_disable_reg_disabled; + } + + return monitors_set_state(rdev, true, mons); +} + +static int monitors_init(struct regulator_dev *rdev) +{ + unsigned int mons =3D REGULATOR_MONITOR_NONE; + int reg_enabled =3D _regulator_is_enabled(rdev); + int ret; + + /* + * Ensure that monitors of disabled regulators with respective + * workaround active are disabled during initialization. + */ + if (reg_enabled < 0) + return reg_enabled; + if (!reg_enabled && rdev->desc->mon_disable_reg_disabled) { + mons =3D rdev->desc->mon_disable_reg_disabled; + ret =3D monitors_set_state(rdev, false, mons); + } + + /* Ignore EOPNOTSUPP at initialization, but not during workarounds. */ + ret =3D monitors_enable(rdev, ~mons); + if (ret && ret !=3D -EOPNOTSUPP) + return ret; + + return 0; +} + +static int monitors_reenable(struct regulator_dev *rdev, unsigned int mons) +{ + int reg_enabled; + + if (!mons) + return 0; + + /* + * Monitors of disabled regulators are not turned off, therefore skip + * turning on. + */ + reg_enabled =3D _regulator_is_enabled(rdev); + if (reg_enabled <=3D 0) + return reg_enabled; + + return monitors_enable(rdev, mons); +} + /** * set_machine_constraints - sets regulator constraints * @rdev: regulator source @@ -1605,61 +1779,9 @@ static int set_machine_constraints(struct regulator_= dev *rdev) } } =20 - if (rdev->constraints->over_current_detection) - ret =3D handle_notify_limits(rdev, - ops->set_over_current_protection, - &rdev->constraints->over_curr_limits); - if (ret) { - if (ret !=3D -EOPNOTSUPP) { - rdev_err(rdev, "failed to set over current limits: %pe\n", - ERR_PTR(ret)); - return ret; - } - rdev_warn(rdev, - "IC does not support requested over-current limits\n"); - } - - if (rdev->constraints->over_voltage_detection) - ret =3D handle_notify_limits(rdev, - ops->set_over_voltage_protection, - &rdev->constraints->over_voltage_limits); - if (ret) { - if (ret !=3D -EOPNOTSUPP) { - rdev_err(rdev, "failed to set over voltage limits %pe\n", - ERR_PTR(ret)); - return ret; - } - rdev_warn(rdev, - "IC does not support requested over voltage limits\n"); - } - - if (rdev->constraints->under_voltage_detection) - ret =3D handle_notify_limits(rdev, - ops->set_under_voltage_protection, - &rdev->constraints->under_voltage_limits); - if (ret) { - if (ret !=3D -EOPNOTSUPP) { - rdev_err(rdev, "failed to set under voltage limits %pe\n", - ERR_PTR(ret)); - return ret; - } - rdev_warn(rdev, - "IC does not support requested under voltage limits\n"); - } - - if (rdev->constraints->over_temp_detection) - ret =3D handle_notify_limits(rdev, - ops->set_thermal_protection, - &rdev->constraints->temp_limits); - if (ret) { - if (ret !=3D -EOPNOTSUPP) { - rdev_err(rdev, "failed to set temperature limits %pe\n", - ERR_PTR(ret)); - return ret; - } - rdev_warn(rdev, - "IC does not support requested temperature limits\n"); - } + ret =3D monitors_init(rdev); + if (ret) + return ret; =20 if (rdev->constraints->active_discharge && ops->set_active_discharge) { bool ad_state =3D (rdev->constraints->active_discharge =3D=3D --=20 2.34.1 From nobody Wed Dec 17 08:19:19 2025 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 64B33EB64D8 for ; Tue, 20 Jun 2023 20:04:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230098AbjFTUEN (ORCPT ); Tue, 20 Jun 2023 16:04:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43310 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229932AbjFTUDm (ORCPT ); Tue, 20 Jun 2023 16:03:42 -0400 Received: from mail-ej1-x62b.google.com (mail-ej1-x62b.google.com [IPv6:2a00:1450:4864:20::62b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B07591716 for ; Tue, 20 Jun 2023 13:03:41 -0700 (PDT) Received: by mail-ej1-x62b.google.com with SMTP id a640c23a62f3a-9891c73e0fbso243942066b.1 for ; Tue, 20 Jun 2023 13:03:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687291420; x=1689883420; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=nNh4tw4QJvGCtMKo7byVsd1nt9V3Pw3QyW8v3QEj0hc=; b=ofP6NVaf+L5p5/BHd3ox/LW7NB1ATQc+i+qGcrkEMcZxDiaTCrAI5DB5GZ9bu3g/NQ +9kT6/X4Opxdn47yjcEafLximoKj21qnj3AYTTIlfzthr2G1LsV+2j8NSe31MczVtqFi tqJPNT+GcwNTdQBHztmDxE8MdZD17tVx7IO186wdIokDX0EjLIgiTlKFf44xzy/A3Zck mv7DvQr9cRS8gbYxRgueqpe1H7tIWTXWJwYWaTgSovDG97kR4d7wvJo1I4lYGFN9TNwf JRSRgYXib7w/3D7xeSxD+CJiB8vN5/Fp0BTXoPeDh1wxtjf4BR2XfqULClD+N+Ik+RyU Gc9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687291420; x=1689883420; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=nNh4tw4QJvGCtMKo7byVsd1nt9V3Pw3QyW8v3QEj0hc=; b=FR7CncsI1l04BlDXtpmctuPGGyreabKuwtyLtptV9/5tutBDKp5ht4ILBhlIrQ4VWK 6Ael0MHbsey3/Jbj9UBuHsRg1NeSZU/nSQc/iL+wQcvQycn9zAPsOHYZFsrFAxqhwTu3 ++ggabBjdru+B+4NPls2om17Sood1RRlp9yjldzaMuE0UKN36q0kSwMC+8d/jsC6y2qf Z54c9XWxyxmBO2j9H7FUYnnOz+f+KPCBvxgDX6c8/B9mVGoHEt5oxYohBmlTicyfLF1s jXXPvyHv3Z2AaLi+fhd0uLyzVySdzdt4iBVb9rmDKBWuMKy1OMymf8uQJdrYSDkZWJ3y v+Gw== X-Gm-Message-State: AC+VfDyNHlg1dmqMe3TALnZiaGshJ9k6j7StzLkUQa9J6pU7m7EzOL5Z fAOs4gviDeqyfB9wOh4X+PPiXJtxPSy2GA== X-Google-Smtp-Source: ACHHUZ50h/yflnso8/WOlipe9aYmBmM9XZHsqDe71S/Er+fciQjuAe/6adkucY4zWxMRHRm++JdBzQ== X-Received: by 2002:a17:907:1ca8:b0:973:84b0:b077 with SMTP id nb40-20020a1709071ca800b0097384b0b077mr12867396ejc.33.1687291420061; Tue, 20 Jun 2023 13:03:40 -0700 (PDT) Received: from [127.0.1.1] ([91.230.2.244]) by smtp.gmail.com with ESMTPSA id u21-20020a17090617d500b00977e0bcff1esm1947064eje.10.2023.06.20.13.03.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jun 2023 13:03:39 -0700 (PDT) From: Benjamin Bara Date: Tue, 20 Jun 2023 22:03:02 +0200 Subject: [PATCH RFC v4 09/13] regulator: implement mon_disable_reg_disabled MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20230419-dynamic-vmon-v4-9-4d3734e62ada@skidata.com> References: <20230419-dynamic-vmon-v4-0-4d3734e62ada@skidata.com> In-Reply-To: <20230419-dynamic-vmon-v4-0-4d3734e62ada@skidata.com> To: Liam Girdwood , Mark Brown Cc: support.opensource@diasemi.com, DLG-Adam.Ward.opensource@dm.renesas.com, Martin Fuzzey , linux-kernel@vger.kernel.org, Matti Vaittinen , Benjamin Bara X-Mailer: b4 0.12.2 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Benjamin Bara The mon_disable_reg_disabled property disables all dt-enabled monitors before a regulator is disabled. If an error occurs while disabling the regulator, the monitors are enabled again. Signed-off-by: Benjamin Bara --- drivers/regulator/core.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 873e53633698..b37dcafff407 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -2965,7 +2965,7 @@ static int _regulator_do_enable(struct regulator_dev = *rdev) =20 trace_regulator_enable_complete(rdev_get_name(rdev)); =20 - return 0; + return monitors_reenable(rdev, rdev->desc->mon_disable_reg_disabled); } =20 /** @@ -3124,8 +3124,13 @@ EXPORT_SYMBOL_GPL(regulator_enable); =20 static int _regulator_do_disable(struct regulator_dev *rdev) { + const struct regulator_desc *desc =3D rdev->desc; int ret; =20 + ret =3D monitors_disable(rdev, desc->mon_disable_reg_disabled); + if (ret) + return ret; + trace_regulator_disable(rdev_get_name(rdev)); =20 if (rdev->ena_pin) { @@ -3136,13 +3141,13 @@ static int _regulator_do_disable(struct regulator_d= ev *rdev) rdev->ena_gpio_state =3D 0; } =20 - } else if (rdev->desc->ops->disable) { - ret =3D rdev->desc->ops->disable(rdev); + } else if (desc->ops->disable) { + ret =3D desc->ops->disable(rdev); if (ret !=3D 0) return ret; } =20 - if (rdev->desc->off_on_delay) + if (desc->off_on_delay) rdev->last_off =3D ktime_get_boottime(); =20 trace_regulator_disable_complete(rdev_get_name(rdev)); @@ -3180,6 +3185,7 @@ static int _regulator_disable(struct regulator *regul= ator) _notifier_call_chain(rdev, REGULATOR_EVENT_ABORT_DISABLE, NULL); + monitors_reenable(rdev, rdev->desc->mon_disable_reg_disabled); return ret; } _notifier_call_chain(rdev, REGULATOR_EVENT_DISABLE, @@ -3246,6 +3252,7 @@ static int _regulator_force_disable(struct regulator_= dev *rdev) rdev_err(rdev, "failed to force disable: %pe\n", ERR_PTR(ret)); _notifier_call_chain(rdev, REGULATOR_EVENT_FORCE_DISABLE | REGULATOR_EVENT_ABORT_DISABLE, NULL); + monitors_reenable(rdev, rdev->desc->mon_disable_reg_disabled); return ret; } =20 @@ -6422,8 +6429,10 @@ static int regulator_late_cleanup(struct device *dev= , void *data) */ rdev_info(rdev, "disabling\n"); ret =3D _regulator_do_disable(rdev); - if (ret !=3D 0) + if (ret !=3D 0) { rdev_err(rdev, "couldn't disable: %pe\n", ERR_PTR(ret)); + monitors_reenable(rdev, rdev->desc->mon_disable_reg_disabled); + } } else { /* The intention is that in future we will * assume that full constraints are provided --=20 2.34.1 From nobody Wed Dec 17 08:19:19 2025 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 239C9EB64D7 for ; Tue, 20 Jun 2023 20:04:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230114AbjFTUEP (ORCPT ); Tue, 20 Jun 2023 16:04:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43340 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229943AbjFTUDo (ORCPT ); Tue, 20 Jun 2023 16:03:44 -0400 Received: from mail-ej1-x62f.google.com (mail-ej1-x62f.google.com [IPv6:2a00:1450:4864:20::62f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2C6AD1727 for ; Tue, 20 Jun 2023 13:03:43 -0700 (PDT) Received: by mail-ej1-x62f.google.com with SMTP id a640c23a62f3a-970028cfb6cso799400566b.1 for ; Tue, 20 Jun 2023 13:03:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687291421; x=1689883421; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=tdgC3Azugwc5mt6u8ZricLJq3eD0D+n/vIOu1NtFkBc=; b=DnJlOTx41PtsBrbI5U984ahVPuWCkueNZPSk9Zxln09q3PeoHA2BmfCZEhtTwmq+Tj 8a1eCl44BsJiOVrXmr/ht20CM88VMZlW/hB2fI9heD/t/qAAjj+J08bCcS+jn8lEAzwD rCDB+Ep9g/Bqz2+qpOIHMZ00vKNuuQ2KBhDo9oy+dWhghhlcemfkpecOSEi6mdYzTmqP pDTeCeHnpcHJDXax4Lt16gMbcN7qR4TmJnp1298ptSoi+xsMuv9BcmJ+PZ3H806qLUP8 toKFdkVNH6nfZ7y1+DIQRiMPQD6vt1a5v0ZbElUWWdmJtFfWyw9gyzHZZZMFDcMrBJpT 3zsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687291421; x=1689883421; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tdgC3Azugwc5mt6u8ZricLJq3eD0D+n/vIOu1NtFkBc=; b=A0fxpZgxQVnG+6N5k46tETD1YCgllG73EbRYgWgJ+EILV82Dz8109FxkgZz7bEeeZy lp4wDdpvtNfrgADn9530IX0CwWbm+yXkNZxx2Dv6ZPJuOQKh4Wmdd5hduOZ3iA/6StT0 IwqP68yG1DKf5QuH7GnH0tS3IZKVXg7trYLYqbo79saL4MnU11+SFCUkDCK3e2puTr1/ LcRDV62wCyyUkWyKcej7jLN3BBCYEhbY/TnkAIV4HoNh0EC9389F17X/xNf+wcAlDhMy r3RKhMi0vOxPdgslQovdBHbuwYA14qwWTYHSj8nbpWoUSoqceACjid996+cvGL296iV/ 2TSQ== X-Gm-Message-State: AC+VfDzlbQ93QKa+BGCb6hZJSoG+RLUIavIqMWEBk4a+aNE6uqm0+fyX dCnI5O8dwth4dC51BAeeK3w= X-Google-Smtp-Source: ACHHUZ4iJDFvUEsPGQNsNbgDXi+OZ8rpO0wa54IauUDFNxLrHa2lDYKEqoWapjwUOeaRn3wwDSxmqw== X-Received: by 2002:a17:906:d54f:b0:988:a632:774a with SMTP id cr15-20020a170906d54f00b00988a632774amr7089419ejc.27.1687291421516; Tue, 20 Jun 2023 13:03:41 -0700 (PDT) Received: from [127.0.1.1] ([91.230.2.244]) by smtp.gmail.com with ESMTPSA id u21-20020a17090617d500b00977e0bcff1esm1947064eje.10.2023.06.20.13.03.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jun 2023 13:03:40 -0700 (PDT) From: Benjamin Bara Date: Tue, 20 Jun 2023 22:03:03 +0200 Subject: [PATCH RFC v4 10/13] regulator: implement mon_disable_reg_set_{higher,lower} MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20230419-dynamic-vmon-v4-10-4d3734e62ada@skidata.com> References: <20230419-dynamic-vmon-v4-0-4d3734e62ada@skidata.com> In-Reply-To: <20230419-dynamic-vmon-v4-0-4d3734e62ada@skidata.com> To: Liam Girdwood , Mark Brown Cc: support.opensource@diasemi.com, DLG-Adam.Ward.opensource@dm.renesas.com, Martin Fuzzey , linux-kernel@vger.kernel.org, Matti Vaittinen , Benjamin Bara X-Mailer: b4 0.12.2 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Benjamin Bara The mon_disable_reg_set_{higher,lower} properties disable all dt-enabled monitors when the value of the regulator is changed to a higher or lower one. Signed-off-by: Benjamin Bara --- drivers/regulator/core.c | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index b37dcafff407..74b9c12d38e9 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -3643,6 +3643,7 @@ static int _regulator_call_set_voltage(struct regulat= or_dev *rdev, int min_uV, int max_uV, unsigned *selector) { + const struct regulator_desc *desc =3D rdev->desc; struct pre_voltage_change_data data; int ret; =20 @@ -3654,7 +3655,18 @@ static int _regulator_call_set_voltage(struct regula= tor_dev *rdev, if (ret & NOTIFY_STOP_MASK) return -EINVAL; =20 - ret =3D rdev->desc->ops->set_voltage(rdev, min_uV, max_uV, selector); + if (min_uV > data.old_uV || max_uV > data.old_uV) { + ret =3D monitors_disable(rdev, desc->mon_disable_reg_set_higher); + if (ret) + return ret; + } + if (min_uV < data.old_uV || max_uV < data.old_uV) { + ret =3D monitors_disable(rdev, desc->mon_disable_reg_set_lower); + if (ret) + return ret; + } + + ret =3D desc->ops->set_voltage(rdev, min_uV, max_uV, selector); if (ret >=3D 0) return ret; =20 @@ -3667,6 +3679,7 @@ static int _regulator_call_set_voltage(struct regulat= or_dev *rdev, static int _regulator_call_set_voltage_sel(struct regulator_dev *rdev, int uV, unsigned selector) { + const struct regulator_desc *desc =3D rdev->desc; struct pre_voltage_change_data data; int ret; =20 @@ -3678,7 +3691,18 @@ static int _regulator_call_set_voltage_sel(struct re= gulator_dev *rdev, if (ret & NOTIFY_STOP_MASK) return -EINVAL; =20 - ret =3D rdev->desc->ops->set_voltage_sel(rdev, selector); + if (uV > data.old_uV) { + ret =3D monitors_disable(rdev, desc->mon_disable_reg_set_higher); + if (ret) + return ret; + } + if (uV < data.old_uV) { + ret =3D monitors_disable(rdev, desc->mon_disable_reg_set_lower); + if (ret) + return ret; + } + + ret =3D desc->ops->set_voltage_sel(rdev, selector); if (ret >=3D 0) return ret; =20 @@ -3780,7 +3804,8 @@ static int _regulator_do_set_voltage(struct regulator= _dev *rdev, int best_val =3D 0; unsigned int selector; int old_selector =3D -1; - const struct regulator_ops *ops =3D rdev->desc->ops; + const struct regulator_desc *desc =3D rdev->desc; + const struct regulator_ops *ops =3D desc->ops; int old_uV =3D regulator_get_voltage_rdev(rdev); =20 trace_regulator_set_voltage(rdev_get_name(rdev), min_uV, max_uV); @@ -3819,7 +3844,7 @@ static int _regulator_do_set_voltage(struct regulator= _dev *rdev, selector =3D ret; if (old_selector =3D=3D selector) ret =3D 0; - else if (rdev->desc->vsel_step) + else if (desc->vsel_step) ret =3D _regulator_set_voltage_sel_step( rdev, best_val, selector); else @@ -3874,6 +3899,14 @@ static int _regulator_do_set_voltage(struct regulato= r_dev *rdev, out: trace_regulator_set_voltage_complete(rdev_get_name(rdev), best_val); =20 + /* if setting voltage failed, ignore monitoring error. */ + if (ret) + monitors_reenable(rdev, desc->mon_disable_reg_set_higher | + desc->mon_disable_reg_set_lower); + else + ret =3D monitors_reenable(rdev, desc->mon_disable_reg_set_higher | + desc->mon_disable_reg_set_lower); + return ret; } =20 --=20 2.34.1 From nobody Wed Dec 17 08:19:19 2025 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 3D80EEB64D7 for ; Tue, 20 Jun 2023 20:04:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230037AbjFTUEW (ORCPT ); Tue, 20 Jun 2023 16:04:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43428 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229967AbjFTUDr (ORCPT ); Tue, 20 Jun 2023 16:03:47 -0400 Received: from mail-ed1-x534.google.com (mail-ed1-x534.google.com [IPv6:2a00:1450:4864:20::534]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 251EB1985 for ; Tue, 20 Jun 2023 13:03:44 -0700 (PDT) Received: by mail-ed1-x534.google.com with SMTP id 4fb4d7f45d1cf-51a5eec783cso2940474a12.3 for ; Tue, 20 Jun 2023 13:03:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687291422; x=1689883422; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=bhgdg4E3TDsPGYojFdzrWAXjpzqjE4U2T6j3QbwzmRg=; b=BUdPTgPQ9aBRs7OgBGVW3mzGqrEDBrZd9omeMyypo9a6JXXCaFbCPz1bM82876+1xh IdDHeEGb1aL6at9MG4e5u8VewpP6jh0aumkA31H8fNLSmxo/f/u9gi5bdh7FVva6sRw7 FhoLZFh5kn2FABmEGnVpBNhCFx21+Is2EQhh6kMSoqrgUqKYTv5Z1v6WqAdkouo+X43T 0ev5vLpuy6KrT4Wq95jL+Uvfa/NYGKmoWEV5K2rg/zClW53vPpsntfjkwpRQSouZB0Md O4aO22oz8JvsKeAPjdsMxMXMWGiXj+seC1WT5pbh3A63TaFbl7rm791ZE2PLWFvm8Bm7 Wwjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687291422; x=1689883422; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=bhgdg4E3TDsPGYojFdzrWAXjpzqjE4U2T6j3QbwzmRg=; b=b6yXaNo36D4WIG/0Rl75AeYROFoxdIfTpDPYo4C4YthCj9RyQ9GhN4NPNt3xGUKI1S B+Nk59jWvIGtPWUtP7PbGqlU1gZWCUldRCNxzN2nppH5kPlWR1wDVOUQulo1pphlvLyp 64050THUVM8X3hJvC1DiNU5pPOW11XosHxcbk4BNJvp4ASdUN/4GtZG+cMZN8l5801G3 BP/EHMjHIzT/xO3om1bh3vFOtDQIW3B1dH8lNMzKWRemwqw4p/HHP+i3eQOFHPBoB3jJ HezjQqvvXkT83uU8qLbfVk3bwz+ST3PEo2flVszlgNhjkbHB49JhAIwLcI8grMLscEG+ pr8Q== X-Gm-Message-State: AC+VfDwH+JvC4izyAB/O9VQ8tFGtORyCHPcliAKu+5nUJvRqRSwMHExS WeCYpTNuatkzvuxPK0ADEJI= X-Google-Smtp-Source: ACHHUZ7n2toVmG7JNKrk0hJckH1nNmM0+5Mwlexgev19xhM0QWQYHR9f1tsL/zEtIjlx5InukNs/xA== X-Received: by 2002:a17:907:728b:b0:988:e0cd:99c4 with SMTP id dt11-20020a170907728b00b00988e0cd99c4mr4431959ejc.31.1687291422599; Tue, 20 Jun 2023 13:03:42 -0700 (PDT) Received: from [127.0.1.1] ([91.230.2.244]) by smtp.gmail.com with ESMTPSA id u21-20020a17090617d500b00977e0bcff1esm1947064eje.10.2023.06.20.13.03.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jun 2023 13:03:42 -0700 (PDT) From: Benjamin Bara Date: Tue, 20 Jun 2023 22:03:04 +0200 Subject: [PATCH RFC v4 11/13] regulator: implement mon_unsupported_reg_modes MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20230419-dynamic-vmon-v4-11-4d3734e62ada@skidata.com> References: <20230419-dynamic-vmon-v4-0-4d3734e62ada@skidata.com> In-Reply-To: <20230419-dynamic-vmon-v4-0-4d3734e62ada@skidata.com> To: Liam Girdwood , Mark Brown Cc: support.opensource@diasemi.com, DLG-Adam.Ward.opensource@dm.renesas.com, Martin Fuzzey , linux-kernel@vger.kernel.org, Matti Vaittinen , Benjamin Bara X-Mailer: b4 0.12.2 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Benjamin Bara The mon_unsupported_reg_modes property disables all dt-enabled monitors when the mode of the regulator is changed to an "unsupported" one. Signed-off-by: Benjamin Bara Reviewed-by: Matti Vaittinen --- drivers/regulator/core.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 74b9c12d38e9..ca768d0ddb1e 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -4816,8 +4816,21 @@ int regulator_set_mode(struct regulator *regulator, = unsigned int mode) if (ret < 0) goto out; =20 + if (mode & rdev->desc->mon_unsupported_reg_modes) { + ret =3D monitors_disable(rdev, REGULATOR_MONITOR_ALL); + if (ret) + goto out; + } + ret =3D rdev->desc->ops->set_mode(rdev, mode); + out: + /* if changing mode failed, ignore monitoring error. */ + if (ret) + monitors_reenable(rdev, REGULATOR_MONITOR_ALL); + else + ret =3D monitors_reenable(rdev, REGULATOR_MONITOR_ALL); + regulator_unlock(rdev); return ret; } --=20 2.34.1 From nobody Wed Dec 17 08:19:19 2025 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 CC913EB64D7 for ; Tue, 20 Jun 2023 20:04:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229985AbjFTUEZ (ORCPT ); Tue, 20 Jun 2023 16:04:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43412 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229993AbjFTUDu (ORCPT ); Tue, 20 Jun 2023 16:03:50 -0400 Received: from mail-ej1-x62b.google.com (mail-ej1-x62b.google.com [IPv6:2a00:1450:4864:20::62b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 367C7198B for ; Tue, 20 Jun 2023 13:03:45 -0700 (PDT) Received: by mail-ej1-x62b.google.com with SMTP id a640c23a62f3a-987a977f62aso439617866b.1 for ; Tue, 20 Jun 2023 13:03:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687291423; x=1689883423; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=GdVTCfsNXg8LTZXPz14qnscmv5nY+vHAf2QvMbjoj+U=; b=dYh/ldYpizW6Z+iNpo3MHB9LyNkpT+eBNFkvnRQ7X50qonDZ/hWNU/0sdFVbfBrgIE A4ZzuFYjTsj6E8hBiotwpP/h0UhVuE/kPMoz/A4G7hGszgqjMx6gypDfkAwoqcoavtnb ANnVLw2qNDkDS+f9N1NLyqyXzWgJmLYQCyq+afq/YUKYEEfuZ5SaoCO2x0oL9uzz5vnq l37GIILvK/MgV4xEIbpX2t+eqQzT8bEP7srhMF4JNDMXx2rBni+uzd0gG38gtY7llmtF 2g6y7ONtZaIh5sQjPcoXtq+xPMfKY0GoRYSwOtiD81J4IN1dD/CeEV/hcu4TDS3Aiwxj 19zA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687291423; x=1689883423; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=GdVTCfsNXg8LTZXPz14qnscmv5nY+vHAf2QvMbjoj+U=; b=eDDuI1Mzm9nYEzQYZ3LGR4UwzwfERLqdLpZY91XXdPWnMxu4nw4tbFXFFognRwS6ke mqivO5Typ76n4fL1lIxQ30hB0XilWDt+TDBIlxrAT4Y8hcYODtaWcyWZfOoyo5tuGNZl JSWr1ndI+WacoipUPxiizNoaQeeZFQTeQmoAK+agFv8KCGOlqCjo+YO0faJA0CJGxg90 QqtA3FnuI09GoWq5hp09X+uHS7hmulGbVJlG1wfpEOODX1yeu1nKsEbMedFRzO07tfWu zTrFapBjlMaph0Z77wc6uQkcdFnvunuQrCXIlJCaAvgSd/fcsx+/BxSOtjFttLcBsoDQ Dk1g== X-Gm-Message-State: AC+VfDxrkAnmBhT9vpL/qYjuKliqdloVScnQFlfGFAfWGEBycROVTA0S z0SFinajUWr0S9uwrjDHB58= X-Google-Smtp-Source: ACHHUZ5yPacE9C0ARwl9HK/paFV9JWBK0cBi0fi1mAjRDH5XBR77G0hzb5ZHCgGX5/o1iwejmzfDEA== X-Received: by 2002:a17:907:9814:b0:973:afe2:a01 with SMTP id ji20-20020a170907981400b00973afe20a01mr12341325ejc.75.1687291423271; Tue, 20 Jun 2023 13:03:43 -0700 (PDT) Received: from [127.0.1.1] ([91.230.2.244]) by smtp.gmail.com with ESMTPSA id u21-20020a17090617d500b00977e0bcff1esm1947064eje.10.2023.06.20.13.03.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jun 2023 13:03:43 -0700 (PDT) From: Benjamin Bara Date: Tue, 20 Jun 2023 22:03:05 +0200 Subject: [PATCH RFC v4 12/13] regulator: da9063: let the core handle the monitors MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20230419-dynamic-vmon-v4-12-4d3734e62ada@skidata.com> References: <20230419-dynamic-vmon-v4-0-4d3734e62ada@skidata.com> In-Reply-To: <20230419-dynamic-vmon-v4-0-4d3734e62ada@skidata.com> To: Liam Girdwood , Mark Brown Cc: support.opensource@diasemi.com, DLG-Adam.Ward.opensource@dm.renesas.com, Martin Fuzzey , linux-kernel@vger.kernel.org, Matti Vaittinen , Benjamin Bara X-Mailer: b4 0.12.2 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Benjamin Bara The monitors of the da9063 must be disabled while the respective regulator is disabled. Use the new property '.mon_disable_reg_disabled' to activate the handling in the core. Signed-off-by: Benjamin Bara --- drivers/regulator/da9063-regulator.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/regulator/da9063-regulator.c b/drivers/regulator/da906= 3-regulator.c index 071b368f154f..0e28ed15ebc3 100644 --- a/drivers/regulator/da9063-regulator.c +++ b/drivers/regulator/da9063-regulator.c @@ -1055,6 +1055,10 @@ static int da9063_regulator_probe(struct platform_de= vice *pdev) return ret; } =20 + /* da9063 requires disabled monitors while reg is disabled. */ + regl->desc.mon_disable_reg_disabled =3D REGULATOR_MONITOR_OVER_VOLTAGE | + REGULATOR_MONITOR_UNDER_VOLTAGE; + regl->rdev =3D devm_regulator_register(&pdev->dev, ®l->desc, &config); if (IS_ERR(regl->rdev)) { --=20 2.34.1 From nobody Wed Dec 17 08:19:19 2025 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 6123EEB64D8 for ; Tue, 20 Jun 2023 20:04:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230100AbjFTUE3 (ORCPT ); Tue, 20 Jun 2023 16:04:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43418 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230012AbjFTUDv (ORCPT ); Tue, 20 Jun 2023 16:03:51 -0400 Received: from mail-ed1-x534.google.com (mail-ed1-x534.google.com [IPv6:2a00:1450:4864:20::534]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B0D43198D for ; Tue, 20 Jun 2023 13:03:45 -0700 (PDT) Received: by mail-ed1-x534.google.com with SMTP id 4fb4d7f45d1cf-51a4088c4ebso4989442a12.1 for ; Tue, 20 Jun 2023 13:03:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687291424; x=1689883424; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=BQq2EI+ihZlqaxk7IrwVNFA0MwmNy58J0VwFGEoGeNE=; b=K+T1H1faLVz700R5vRfbWeOgw0OrDQIbk/RneTGqceF/79oUhiRyTDJJv9TZRzGQx6 Z23lRcrVUvxn0fwM8vxx3gt14jD4VJ9BU8Gch+mkyxzl5Pc3krW2i4SZ6YjJ3tncGf7E FsVkeNEbGiltGCh9x6hRKhJkZAOG4+jR3P2uQkbprmZQC1jzIJ//wOeQsJuQeyLbNEu7 FkZsRNnLQw/pUuiQ1ktkjA0HXs7HNqmu7YPCrLRXPrIEfzd6DUqo12kF/blHSbvmTPFs caIwyi0fGuZBlrJlkj2zAJL5JF0ny07pVOL4S8PiLHtXAs9d/wYmuo/sLbEooTcLh3Ob utkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687291424; x=1689883424; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BQq2EI+ihZlqaxk7IrwVNFA0MwmNy58J0VwFGEoGeNE=; b=F+Z2fitSBdge6pp3QsAQtFtkHlrHXklMtKFoWig43v8gOj0U16dh4kW57z0H1A0Dyl cuzYyHQfZnIUXfj4DJz/fAYTIvBhL0JkZpSyxC0G20Y703Nf6Gb3X6ZeIgo8XdiezpZ+ X0MF/qV4lxnPN6wHpB8iMZiPp7W57dwtZ6dCIkOQD66Qxrc5A1SRXu50CJ4Px25J/W2c kroJq1Dyqrq8KmDcybt2ueBOoZ1seNufMY1SV4qQbYHoEl/bS5OannGfVnd4fY7VjXHG GMvrLPcXmuHixdNfOLBNExJt2yNBka/z0VHHBp+idtbAfMJoHWPI+gCu5E4MnX/gikHp sddA== X-Gm-Message-State: AC+VfDyeEIARzOcVEZ8bSxWpozqZt44rUmEg7fOTVyevZyaxsbysRRam DgzD8jUV9m0yJ7OzgGBdjRI= X-Google-Smtp-Source: ACHHUZ7xii13Y1FDVmoLAPw0ZttIxWX4nTn0VmK7H6RI0EbsgMNqkZp80ZcD6i1eF+OE/w7OfXvLqQ== X-Received: by 2002:a17:907:320a:b0:965:d18b:f03a with SMTP id xg10-20020a170907320a00b00965d18bf03amr12155993ejb.58.1687291423903; Tue, 20 Jun 2023 13:03:43 -0700 (PDT) Received: from [127.0.1.1] ([91.230.2.244]) by smtp.gmail.com with ESMTPSA id u21-20020a17090617d500b00977e0bcff1esm1947064eje.10.2023.06.20.13.03.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jun 2023 13:03:43 -0700 (PDT) From: Benjamin Bara Date: Tue, 20 Jun 2023 22:03:06 +0200 Subject: [PATCH RFC v4 13/13] regulator: bd718x7: let the core handle the monitors MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20230419-dynamic-vmon-v4-13-4d3734e62ada@skidata.com> References: <20230419-dynamic-vmon-v4-0-4d3734e62ada@skidata.com> In-Reply-To: <20230419-dynamic-vmon-v4-0-4d3734e62ada@skidata.com> To: Liam Girdwood , Mark Brown Cc: support.opensource@diasemi.com, DLG-Adam.Ward.opensource@dm.renesas.com, Martin Fuzzey , linux-kernel@vger.kernel.org, Matti Vaittinen , Benjamin Bara X-Mailer: b4 0.12.2 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Benjamin Bara The monitors of the bd718x7 must be disabled while the respective regulator is switching to a higher voltage. Use the new property '.mon_disable_reg_set_higher' to activate the handling in the core. Signed-off-by: Benjamin Bara Acked-by: Matti Vaittinen --- drivers/regulator/bd718x7-regulator.c | 136 +++---------------------------= ---- 1 file changed, 10 insertions(+), 126 deletions(-) diff --git a/drivers/regulator/bd718x7-regulator.c b/drivers/regulator/bd71= 8x7-regulator.c index fbf609d219fc..251d098d088c 100644 --- a/drivers/regulator/bd718x7-regulator.c +++ b/drivers/regulator/bd718x7-regulator.c @@ -128,128 +128,6 @@ static int bd71837_get_buck34_enable_hwctrl(struct re= gulator_dev *rdev) return !!(BD718XX_BUCK_RUN_ON & val); } =20 -static void voltage_change_done(struct regulator_dev *rdev, unsigned int s= el, - unsigned int *mask) -{ - int ret; - - if (*mask) { - /* - * Let's allow scheduling as we use I2C anyways. We just need to - * guarantee minimum of 1ms sleep - it shouldn't matter if we - * exceed it due to the scheduling. - */ - msleep(1); - - ret =3D regmap_clear_bits(rdev->regmap, BD718XX_REG_MVRFLTMASK2, - *mask); - if (ret) - dev_err(&rdev->dev, - "Failed to re-enable voltage monitoring (%d)\n", - ret); - } -} - -static int voltage_change_prepare(struct regulator_dev *rdev, unsigned int= sel, - unsigned int *mask) -{ - int ret; - - *mask =3D 0; - if (rdev->desc->ops->is_enabled(rdev)) { - int now, new; - - now =3D rdev->desc->ops->get_voltage_sel(rdev); - if (now < 0) - return now; - - now =3D rdev->desc->ops->list_voltage(rdev, now); - if (now < 0) - return now; - - new =3D rdev->desc->ops->list_voltage(rdev, sel); - if (new < 0) - return new; - - /* - * If we increase LDO voltage when LDO is enabled we need to - * disable the power-good detection until voltage has reached - * the new level. According to HW colleagues the maximum time - * it takes is 1000us. I assume that on systems with light load - * this might be less - and we could probably use DT to give - * system specific delay value if performance matters. - * - * Well, knowing we use I2C here and can add scheduling delays - * I don't think it is worth the hassle and I just add fixed - * 1ms sleep here (and allow scheduling). If this turns out to - * be a problem we can change it to delay and make the delay - * time configurable. - */ - if (new > now) { - int tmp; - int prot_bit; - int ldo_offset =3D rdev->desc->id - BD718XX_LDO1; - - prot_bit =3D BD718XX_LDO1_VRMON80 << ldo_offset; - ret =3D regmap_read(rdev->regmap, BD718XX_REG_MVRFLTMASK2, - &tmp); - if (ret) { - dev_err(&rdev->dev, - "Failed to read voltage monitoring state\n"); - return ret; - } - - if (!(tmp & prot_bit)) { - /* We disable protection if it was enabled... */ - ret =3D regmap_set_bits(rdev->regmap, - BD718XX_REG_MVRFLTMASK2, - prot_bit); - /* ...and we also want to re-enable it */ - *mask =3D prot_bit; - } - if (ret) { - dev_err(&rdev->dev, - "Failed to stop voltage monitoring\n"); - return ret; - } - } - } - - return 0; -} - -static int bd718xx_set_voltage_sel_restricted(struct regulator_dev *rdev, - unsigned int sel) -{ - int ret; - int mask; - - ret =3D voltage_change_prepare(rdev, sel, &mask); - if (ret) - return ret; - - ret =3D regulator_set_voltage_sel_regmap(rdev, sel); - voltage_change_done(rdev, sel, &mask); - - return ret; -} - -static int bd718xx_set_voltage_sel_pickable_restricted( - struct regulator_dev *rdev, unsigned int sel) -{ - int ret; - int mask; - - ret =3D voltage_change_prepare(rdev, sel, &mask); - if (ret) - return ret; - - ret =3D regulator_set_voltage_sel_pickable_regmap(rdev, sel); - voltage_change_done(rdev, sel, &mask); - - return ret; -} - static int bd71837_set_voltage_sel_pickable_restricted( struct regulator_dev *rdev, unsigned int sel) { @@ -610,7 +488,7 @@ static int bd718x7_set_buck_ovp(struct regulator_dev *r= dev, int lim_uV, */ BD718XX_OPS(bd718xx_pickable_range_ldo_ops, regulator_list_voltage_pickable_linear_range, NULL, - bd718xx_set_voltage_sel_pickable_restricted, + regulator_set_voltage_sel_pickable_regmap, regulator_get_voltage_sel_pickable_regmap, NULL, NULL, bd718x7_set_ldo_uvp, NULL, bd717x7_get_ldo_prot); =20 @@ -618,7 +496,7 @@ BD718XX_OPS(bd718xx_pickable_range_ldo_ops, static const struct regulator_ops bd718xx_ldo5_ops_hwstate =3D { .is_enabled =3D never_enabled_by_hwstate, .list_voltage =3D regulator_list_voltage_pickable_linear_range, - .set_voltage_sel =3D bd718xx_set_voltage_sel_pickable_restricted, + .set_voltage_sel =3D regulator_set_voltage_sel_pickable_regmap, .get_voltage_sel =3D regulator_get_voltage_sel_pickable_regmap, .set_under_voltage_protection =3D bd718x7_set_ldo_uvp, }; @@ -631,12 +509,12 @@ BD718XX_OPS(bd718xx_pickable_range_buck_ops, bd718x7_set_buck_ovp, bd717x7_get_buck_prot); =20 BD718XX_OPS(bd718xx_ldo_regulator_ops, regulator_list_voltage_linear_range, - NULL, bd718xx_set_voltage_sel_restricted, + NULL, regulator_set_voltage_sel_regmap, regulator_get_voltage_sel_regmap, NULL, NULL, bd718x7_set_ldo_uvp, NULL, bd717x7_get_ldo_prot); =20 BD718XX_OPS(bd718xx_ldo_regulator_nolinear_ops, regulator_list_voltage_tab= le, - NULL, bd718xx_set_voltage_sel_restricted, + NULL, regulator_set_voltage_sel_regmap, regulator_get_voltage_sel_regmap, NULL, NULL, bd718x7_set_ldo_uvp, NULL, bd717x7_get_ldo_prot); =20 @@ -1818,6 +1696,12 @@ static int bd718xx_probe(struct platform_device *pde= v) else desc->ops =3D swops[i]; =20 + /* + * bd718x7 requires to disable a regulator's over voltage + * protection while it changes to a higher value. + */ + desc->mon_disable_reg_set_higher =3D REGULATOR_MONITOR_OVER_VOLTAGE; + rdev =3D devm_regulator_register(&pdev->dev, desc, &config); if (IS_ERR(rdev)) return dev_err_probe(&pdev->dev, PTR_ERR(rdev), --=20 2.34.1