On Di, 2024-02-20 at 02:14 +0800, Yang Xiwen via B4 Relay wrote: > From: Yang Xiwen <forbidden405@xxxxxxxxxxx> > > According to the datasheet, the core has an WDOGRESn input signal that > needs to be deasserted before being operational. Implement it in the > driver. > > Signed-off-by: Yang Xiwen <forbidden405@xxxxxxxxxxx> > --- > drivers/watchdog/sp805_wdt.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/drivers/watchdog/sp805_wdt.c b/drivers/watchdog/sp805_wdt.c > index 2756ed54ca3d..b4bcfdeb39e6 100644 > --- a/drivers/watchdog/sp805_wdt.c > +++ b/drivers/watchdog/sp805_wdt.c > @@ -25,6 +25,7 @@ > #include <linux/moduleparam.h> > #include <linux/pm.h> > #include <linux/property.h> > +#include <linux/reset.h> > #include <linux/slab.h> > #include <linux/spinlock.h> > #include <linux/types.h> > @@ -59,6 +60,7 @@ > * @lock: spin lock protecting dev structure and io access > * @base: base address of wdt > * @clk: (optional) clock structure of wdt > + * @rst: (optional) reset control signal of wdt > * @rate: (optional) clock rate when provided via properties > * @adev: amba device structure of wdt > * @status: current status of wdt > @@ -69,6 +71,7 @@ struct sp805_wdt { > spinlock_t lock; > void __iomem *base; > struct clk *clk; > + struct reset_control *rst; This can be a local variable in sp805_wdt_probe(). > u64 rate; > struct amba_device *adev; > unsigned int load_val; > @@ -264,6 +267,12 @@ sp805_wdt_probe(struct amba_device *adev, const struct amba_id *id) > return -ENODEV; > } > > + wdt->rst = devm_reset_control_get_optional(&adev->dev, NULL); Please use devm_reset_control_get_optional_exclusive() directly. > + if (IS_ERR(wdt->rst)) > + return dev_err_probe(&adev->dev, PTR_ERR(wdt->rst), "Can not get reset\n"); > + > + reset_control_deassert(wdt->rst); > + > wdt->adev = adev; > wdt->wdd.info = &wdt_info; > wdt->wdd.ops = &wdt_ops; regards Philipp