#include <linux/of_irq.h>
#include <linux/sched_clock.h>
#include <linux/module.h>
+#include <linux/reset.h>
#include "timer-starfive.h"
#define CLOCK_SOURCE_RATE 200
const char *name = NULL;
struct clk *clk;
struct clk *pclk;
+ struct reset_control *prst;
+ struct reset_control *rst;
struct starfive_clkevt *clkevt;
void __iomem *base;
pr_warn("pclk for %pOFn is present,"
"but could not be activated\n", np);
+ prst = of_reset_control_get(np, "apb_rst");
+ if (!IS_ERR(prst)) {
+ reset_control_assert(prst);
+ reset_control_deassert(prst);
+ }
+
count = of_irq_count(np);
if (count > NR_TIMERS || count <= 0) {
ret = -EINVAL;
"but could not be activated\n", np);
}
+ rst = of_reset_control_get(np, name);
+ if (!IS_ERR(rst)) {
+ clkevt->rst = rst;
+ reset_control_assert(rst);
+ reset_control_deassert(rst);
+ }
+
irq = irq_of_parse_and_map(np, index);
if (irq < 0) {
ret = -EINVAL;
register_err:
free_irq(clkevt->irq, &clkevt->evt);
irq_err:
+ if (!clkevt->rst) {
+ reset_control_assert(clkevt->rst);
+ reset_control_put(clkevt->rst);
+ }
if (!clkevt->clk) {
clk_disable_unprepare(clkevt->clk);
clk_put(clkevt->clk);