@@ -1,5 +1,6 @@
// SPDX-License-Identifier: GPL-2.0
+#include <linux/delay.h>
#include <linux/gpio/consumer.h>
#include <linux/mod_devicetable.h>
#include <linux/module.h>
@@ -37,6 +38,17 @@ static int reset_gpio_deassert(struct reset_controller_dev *rc,
return 0;
}
+static int reset_gpio_reset(struct reset_controller_dev *rc, unsigned long id)
+{
+ struct reset_gpio_priv *priv = rc_to_reset_gpio(rc);
+
+ gpiod_set_value_cansleep(priv->reset, 1);
+ usleep_range(10, 20);
+ gpiod_set_value_cansleep(priv->reset, 0);
+
+ return 0;
+}
+
static int reset_gpio_status(struct reset_controller_dev *rc, unsigned long id)
{
struct reset_gpio_priv *priv = rc_to_reset_gpio(rc);
@@ -47,6 +59,7 @@ static int reset_gpio_status(struct reset_controller_dev *rc, unsigned long id)
static const struct reset_control_ops reset_gpio_ops = {
.assert = reset_gpio_assert,
.deassert = reset_gpio_deassert,
+ .reset = reset_gpio_reset,
.status = reset_gpio_status,
};
During the driver probe phase, many drivers leverage convenience wrapper APIs such as device_reset and device_reset_optional provided by the reset core driver. However, both of these APIs depend on the presence of a .reset callback within the reset controller's operations structure. Introducing the self-deasserting reset callback enhances flexibility for users and enables a more simple reset process during device initialization. Signed-off-by: Shenwei Wang <shenwei.wang@nxp.com> --- drivers/reset/reset-gpio.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)