From: Benjamin Bara <bbara93@gmail.com>
To: lee@kernel.org
Cc: dmitry.osipenko@collabora.com, jonathanh@nvidia.com,
treding@nvidia.com, richard.leitner@linux.dev,
benjamin.bara@skidata.com, linux-tegra@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: [PATCH v2 2/2] mfd: tps6586x: register restart handler
Date: Mon, 20 Mar 2023 23:03:45 +0100 [thread overview]
Message-ID: <20230320220345.1463687-3-bbara93@gmail.com> (raw)
In-Reply-To: <20230320220345.1463687-1-bbara93@gmail.com>
From: Benjamin Bara <benjamin.bara@skidata.com>
The TPS658629-Q1 (unfortunately the only TPS6586x with public data sheet)
provides a SOFT RST bit in the SUPPLYENE reg to request a (cold) reboot.
Use it to implement and register a restart handler.
Tested on a TPS658640.
Signed-off-by: Benjamin Bara <benjamin.bara@skidata.com>
---
drivers/mfd/tps6586x.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/drivers/mfd/tps6586x.c b/drivers/mfd/tps6586x.c
index 4869155437cb..b46917231847 100644
--- a/drivers/mfd/tps6586x.c
+++ b/drivers/mfd/tps6586x.c
@@ -15,6 +15,7 @@
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/irqdomain.h>
+#include <linux/irqflags.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/mutex.h>
@@ -30,6 +31,7 @@
#include <linux/mfd/tps6586x.h>
#define TPS6586X_SUPPLYENE 0x14
+#define SOFT_RST_BIT BIT(0)
#define EXITSLREQ_BIT BIT(1)
#define SLEEP_MODE_BIT BIT(3)
@@ -470,6 +472,20 @@ static int tps6586x_power_off_handler(struct sys_off_data *data)
return tps6586x_set_bits(tps6586x_dev, TPS6586X_SUPPLYENE, SLEEP_MODE_BIT);
}
+static int tps6586x_restart_handler(struct sys_off_data *data)
+{
+ unsigned long flags;
+ struct device *tps6586x_dev = (struct device *)data->cb_data;
+
+ /* bring pmic into HARD REBOOT state, enforce atomic i2c xfer */
+ local_irq_save(flags);
+ tps6586x_set_bits(tps6586x_dev, TPS6586X_SUPPLYENE, SOFT_RST_BIT);
+ local_irq_restore(flags);
+
+ mdelay(500);
+ return 0;
+}
+
static void tps6586x_print_version(struct i2c_client *client, int version)
{
const char *name;
@@ -570,6 +586,13 @@ static int tps6586x_i2c_probe(struct i2c_client *client)
dev_err(&client->dev, "register power off handler failed: %d\n", ret);
goto err_add_devs;
}
+
+ ret = devm_register_restart_handler(&client->dev, &tps6586x_restart_handler,
+ &client->dev);
+ if (ret) {
+ dev_err(&client->dev, "register restart handler failed: %d\n", ret);
+ goto err_add_devs;
+ }
}
return 0;
--
2.34.1
next prev parent reply other threads:[~2023-03-20 22:04 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-20 22:03 [PATCH v2 0/2] mfd: tps6586x: register restart handler Benjamin Bara
2023-03-20 22:03 ` [PATCH v2 1/2] mfd: tps6586x: use devm-based power off handler Benjamin Bara
2023-03-21 2:17 ` Dmitry Osipenko
2023-03-20 22:03 ` Benjamin Bara [this message]
2023-03-21 2:07 ` [PATCH v2 2/2] mfd: tps6586x: register restart handler Dmitry Osipenko
2023-03-21 7:46 ` Jon Hunter
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=20230320220345.1463687-3-bbara93@gmail.com \
--to=bbara93@gmail.com \
--cc=benjamin.bara@skidata.com \
--cc=dmitry.osipenko@collabora.com \
--cc=jonathanh@nvidia.com \
--cc=lee@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=richard.leitner@linux.dev \
--cc=treding@nvidia.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.