All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lee Jones <lee@kernel.org>
To: Julien Panis <jpanis@baylibre.com>
Cc: robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org,
	corbet@lwn.net, hdegoede@redhat.com, eric.auger@redhat.com,
	jgg@ziepe.ca, razor@blackwall.org, suma.hegde@amd.com,
	stephen@networkplumber.org, arnd@arndb.de,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-doc@vger.kernel.org, eblanc@baylibre.com,
	jneanne@baylibre.com
Subject: Re: [PATCH v1 3/4] mfd: tps6594-esm: Add driver for TI TPS6594 ESM
Date: Fri, 3 Mar 2023 21:59:36 +0000	[thread overview]
Message-ID: <20230303215936.GS2420672@google.com> (raw)
In-Reply-To: <20230216114410.183489-4-jpanis@baylibre.com>

On Thu, 16 Feb 2023, Julien Panis wrote:

> This patch adds support for TPS6594 ESM (Error Signal Monitor).
> This device monitors the SoC error output signal at its nERR_SOC input pin.
> In error condition, ESM toggles its nRSTOUT_SOC pin to reset the SoC.

This is not an MFD driver.

Please move it somewhere more appropriate.
 
> Signed-off-by: Julien Panis <jpanis@baylibre.com>
> ---
>  drivers/mfd/Kconfig       |  10 +++
>  drivers/mfd/Makefile      |   1 +
>  drivers/mfd/tps6594-esm.c | 132 ++++++++++++++++++++++++++++++++++++++
>  3 files changed, 143 insertions(+)
>  create mode 100644 drivers/mfd/tps6594-esm.c
> 
> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
> index 3d2f5a10f54b..cbf7cfb70879 100644
> --- a/drivers/mfd/Kconfig
> +++ b/drivers/mfd/Kconfig
> @@ -1722,6 +1722,16 @@ config MFD_TPS6594_SPI
>  	  This driver can also be built as a module.  If so, the module
>  	  will be called tps6594-spi.
>  
> +config MFD_TPS6594_ESM
> +	tristate "TI TPS6594 Error Signal Monitor support"
> +	depends on MFD_TPS6594
> +	help
> +	  Support ESM (Error Signal Monitor) on TPS6594 PMIC devices.
> +	  ESM is used typically to reboot the board in error condition.
> +
> +	  This driver can also be built as a module.  If so, the module
> +	  will be called tps6594-esm.
> +
>  config TWL4030_CORE
>  	bool "TI TWL4030/TWL5030/TWL6030/TPS659x0 Support"
>  	depends on I2C=y
> diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
> index d2cba7326b07..ae2d404cd6b8 100644
> --- a/drivers/mfd/Makefile
> +++ b/drivers/mfd/Makefile
> @@ -105,6 +105,7 @@ obj-$(CONFIG_MFD_TPS65912_SPI)  += tps65912-spi.o
>  obj-$(CONFIG_MFD_TPS6594)	+= tps6594-core.o
>  obj-$(CONFIG_MFD_TPS6594_I2C)	+= tps6594-i2c.o
>  obj-$(CONFIG_MFD_TPS6594_SPI)	+= tps6594-spi.o
> +obj-$(CONFIG_MFD_TPS6594_ESM)	+= tps6594-esm.o
>  obj-$(CONFIG_MENELAUS)		+= menelaus.o
>  
>  obj-$(CONFIG_TWL4030_CORE)	+= twl-core.o twl4030-irq.o twl6030-irq.o
> diff --git a/drivers/mfd/tps6594-esm.c b/drivers/mfd/tps6594-esm.c
> new file mode 100644
> index 000000000000..db242b50846f
> --- /dev/null
> +++ b/drivers/mfd/tps6594-esm.c
> @@ -0,0 +1,132 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * ESM (Error Signal Monitor) driver for TI TPS6594/TPS6593/LP8764X PMICs
> + *
> + * Copyright (C) 2022 BayLibre Incorporated - https://www.baylibre.com/
> + */
> +
> +#include <linux/interrupt.h>
> +#include <linux/module.h>
> +#include <linux/platform_device.h>
> +#include <linux/pm_runtime.h>
> +#include <linux/regmap.h>
> +
> +#include <linux/mfd/tps6594.h>
> +
> +static irqreturn_t tps6594_esm_isr(int irq, void *dev_id)
> +{
> +	struct platform_device *pdev = dev_id;
> +	int i;
> +
> +	for (i = 0 ; i < pdev->num_resources ; i++) {
> +		if (irq == platform_get_irq_byname(pdev, pdev->resource[i].name)) {
> +			dev_err(pdev->dev.parent, "%s error detected\n", pdev->resource[i].name);
> +			return IRQ_HANDLED;
> +		}
> +	}
> +
> +	return IRQ_NONE;
> +}
> +
> +static int tps6594_esm_probe(struct platform_device *pdev)
> +{
> +	struct tps6594 *tps = dev_get_drvdata(pdev->dev.parent);
> +	struct device *dev = &pdev->dev;
> +	int irq;
> +	int ret;
> +	int i;
> +
> +	for (i = 0 ; i < pdev->num_resources ; i++) {
> +		irq = platform_get_irq_byname(pdev, pdev->resource[i].name);
> +		if (irq < 0)
> +			return dev_err_probe(dev, irq, "Failed to get %s irq\n",
> +					     pdev->resource[i].name);
> +
> +		ret = devm_request_threaded_irq(dev, irq, NULL,
> +						tps6594_esm_isr, IRQF_ONESHOT,
> +						pdev->resource[i].name, pdev);
> +		if (ret)
> +			return dev_err_probe(dev, ret, "Failed to request irq\n");
> +	}
> +
> +	ret = regmap_set_bits(tps->regmap, TPS6594_REG_ESM_SOC_MODE_CFG,
> +			      TPS6594_BIT_ESM_SOC_EN | TPS6594_BIT_ESM_SOC_ENDRV);
> +	if (ret)
> +		return dev_err_probe(dev, ret, "Failed to configure ESM\n");
> +
> +	ret = regmap_set_bits(tps->regmap, TPS6594_REG_ESM_SOC_START_REG,
> +			      TPS6594_BIT_ESM_SOC_START);
> +	if (ret)
> +		return dev_err_probe(dev, ret, "Failed to start ESM\n");
> +
> +	pm_runtime_enable(dev);
> +	pm_runtime_get_sync(dev);
> +
> +	return 0;
> +}
> +
> +static int tps6594_esm_remove(struct platform_device *pdev)
> +{
> +	struct tps6594 *tps = dev_get_drvdata(pdev->dev.parent);
> +	struct device *dev = &pdev->dev;
> +	int ret;
> +
> +	ret = regmap_clear_bits(tps->regmap, TPS6594_REG_ESM_SOC_START_REG,
> +				TPS6594_BIT_ESM_SOC_START);
> +	if (ret) {
> +		dev_err(dev, "Failed to stop ESM\n");
> +		goto out;
> +	}
> +
> +	ret = regmap_clear_bits(tps->regmap, TPS6594_REG_ESM_SOC_MODE_CFG,
> +				TPS6594_BIT_ESM_SOC_EN | TPS6594_BIT_ESM_SOC_ENDRV);
> +	if (ret)
> +		dev_err(dev, "Failed to unconfigure ESM\n");
> +
> +out:
> +	pm_runtime_put_sync(dev);
> +	pm_runtime_disable(dev);
> +
> +	return ret;
> +}
> +
> +static int tps6594_esm_suspend(struct device *dev)
> +{
> +	struct tps6594 *tps = dev_get_drvdata(dev->parent);
> +	int ret;
> +
> +	ret = regmap_clear_bits(tps->regmap, TPS6594_REG_ESM_SOC_START_REG,
> +				TPS6594_BIT_ESM_SOC_START);
> +
> +	pm_runtime_put_sync(dev);
> +
> +	return ret;
> +}
> +
> +static int tps6594_esm_resume(struct device *dev)
> +{
> +	struct tps6594 *tps = dev_get_drvdata(dev->parent);
> +
> +	pm_runtime_get_sync(dev);
> +
> +	return regmap_set_bits(tps->regmap, TPS6594_REG_ESM_SOC_START_REG,
> +			       TPS6594_BIT_ESM_SOC_START);
> +}
> +
> +static DEFINE_SIMPLE_DEV_PM_OPS(tps6594_esm_pm_ops, tps6594_esm_suspend, tps6594_esm_resume);
> +
> +static struct platform_driver tps6594_esm_driver = {
> +	.driver	= {
> +		.name = "tps6594-esm",
> +		.pm = pm_sleep_ptr(&tps6594_esm_pm_ops),
> +	},
> +	.probe = tps6594_esm_probe,
> +	.remove = tps6594_esm_remove,
> +};
> +
> +module_platform_driver(tps6594_esm_driver);
> +
> +MODULE_ALIAS("platform:tps6594-esm");
> +MODULE_AUTHOR("Julien Panis <jpanis@baylibre.com>");
> +MODULE_DESCRIPTION("TPS6594 Error Signal Monitor Driver");
> +MODULE_LICENSE("GPL");
> -- 
> 2.37.3
> 

-- 
Lee Jones [李琼斯]

  reply	other threads:[~2023-03-03 22:22 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-16 11:44 [PATCH v1 0/4] TI TPS6594 PMIC support (Core, ESM, PFSM) Julien Panis
2023-02-16 11:44 ` [PATCH v1 1/4] dt-bindings: mfd: Add DT bindings for TI TPS6594 PMIC Julien Panis
2023-02-17  9:06   ` Krzysztof Kozlowski
2023-02-17 12:10     ` Julien Panis
2023-02-21 11:17       ` Krzysztof Kozlowski
2023-02-21 14:49         ` Julien Panis
2023-02-21 15:01           ` Krzysztof Kozlowski
2023-02-21 15:18             ` Julien Panis
2023-02-22  8:40               ` Krzysztof Kozlowski
2023-02-16 11:44 ` [PATCH v1 2/4] mfd: tps6594: Add driver " Julien Panis
2023-03-03 15:03   ` Lee Jones
2023-03-06 16:41     ` Julien Panis
2023-02-16 11:44 ` [PATCH v1 3/4] mfd: tps6594-esm: Add driver for TI TPS6594 ESM Julien Panis
2023-03-03 21:59   ` Lee Jones [this message]
2023-02-16 11:44 ` [PATCH v1 4/4] mfd: tps6594-pfsm: Add driver for TI TPS6594 PFSM Julien Panis
2023-03-03 22:00   ` Lee Jones

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230303215936.GS2420672@google.com \
    --to=lee@kernel.org \
    --cc=arnd@arndb.de \
    --cc=corbet@lwn.net \
    --cc=devicetree@vger.kernel.org \
    --cc=eblanc@baylibre.com \
    --cc=eric.auger@redhat.com \
    --cc=hdegoede@redhat.com \
    --cc=jgg@ziepe.ca \
    --cc=jneanne@baylibre.com \
    --cc=jpanis@baylibre.com \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=razor@blackwall.org \
    --cc=robh+dt@kernel.org \
    --cc=stephen@networkplumber.org \
    --cc=suma.hegde@amd.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.