Lines Matching refs:priv
44 static void gpio_wdt_disable(struct gpio_wdt_priv *priv) in gpio_wdt_disable() argument
46 gpio_set_value_cansleep(priv->gpio, !priv->active_low); in gpio_wdt_disable()
49 if (priv->hw_algo == HW_ALGO_TOGGLE) in gpio_wdt_disable()
50 gpio_direction_input(priv->gpio); in gpio_wdt_disable()
53 static void gpio_wdt_start_impl(struct gpio_wdt_priv *priv) in gpio_wdt_start_impl() argument
55 priv->state = priv->active_low; in gpio_wdt_start_impl()
56 gpio_direction_output(priv->gpio, priv->state); in gpio_wdt_start_impl()
57 priv->last_jiffies = jiffies; in gpio_wdt_start_impl()
58 mod_timer(&priv->timer, priv->last_jiffies + priv->hw_margin); in gpio_wdt_start_impl()
63 struct gpio_wdt_priv *priv = watchdog_get_drvdata(wdd); in gpio_wdt_start() local
65 gpio_wdt_start_impl(priv); in gpio_wdt_start()
66 priv->armed = true; in gpio_wdt_start()
73 struct gpio_wdt_priv *priv = watchdog_get_drvdata(wdd); in gpio_wdt_stop() local
75 priv->armed = false; in gpio_wdt_stop()
76 if (!priv->always_running) { in gpio_wdt_stop()
77 mod_timer(&priv->timer, 0); in gpio_wdt_stop()
78 gpio_wdt_disable(priv); in gpio_wdt_stop()
86 struct gpio_wdt_priv *priv = watchdog_get_drvdata(wdd); in gpio_wdt_ping() local
88 priv->last_jiffies = jiffies; in gpio_wdt_ping()
103 struct gpio_wdt_priv *priv = watchdog_get_drvdata(wdd); in gpio_wdt_hwping() local
105 if (priv->armed && time_after(jiffies, priv->last_jiffies + in gpio_wdt_hwping()
112 mod_timer(&priv->timer, jiffies + priv->hw_margin); in gpio_wdt_hwping()
114 switch (priv->hw_algo) { in gpio_wdt_hwping()
117 priv->state = !priv->state; in gpio_wdt_hwping()
118 gpio_set_value_cansleep(priv->gpio, priv->state); in gpio_wdt_hwping()
122 gpio_set_value_cansleep(priv->gpio, !priv->active_low); in gpio_wdt_hwping()
124 gpio_set_value_cansleep(priv->gpio, priv->active_low); in gpio_wdt_hwping()
132 struct gpio_wdt_priv *priv = container_of(nb, struct gpio_wdt_priv, in gpio_wdt_notify_sys() local
135 mod_timer(&priv->timer, 0); in gpio_wdt_notify_sys()
140 gpio_wdt_disable(priv); in gpio_wdt_notify_sys()
165 struct gpio_wdt_priv *priv; in gpio_wdt_probe() local
172 priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); in gpio_wdt_probe()
173 if (!priv) in gpio_wdt_probe()
176 priv->gpio = of_get_gpio_flags(pdev->dev.of_node, 0, &flags); in gpio_wdt_probe()
177 if (!gpio_is_valid(priv->gpio)) in gpio_wdt_probe()
178 return priv->gpio; in gpio_wdt_probe()
180 priv->active_low = flags & OF_GPIO_ACTIVE_LOW; in gpio_wdt_probe()
186 priv->hw_algo = HW_ALGO_TOGGLE; in gpio_wdt_probe()
189 priv->hw_algo = HW_ALGO_LEVEL; in gpio_wdt_probe()
190 f = priv->active_low ? GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW; in gpio_wdt_probe()
195 ret = devm_gpio_request_one(&pdev->dev, priv->gpio, f, in gpio_wdt_probe()
209 priv->hw_margin = msecs_to_jiffies(hw_margin / 2); in gpio_wdt_probe()
211 priv->always_running = of_property_read_bool(pdev->dev.of_node, in gpio_wdt_probe()
214 watchdog_set_drvdata(&priv->wdd, priv); in gpio_wdt_probe()
216 priv->wdd.info = &gpio_wdt_ident; in gpio_wdt_probe()
217 priv->wdd.ops = &gpio_wdt_ops; in gpio_wdt_probe()
218 priv->wdd.min_timeout = SOFT_TIMEOUT_MIN; in gpio_wdt_probe()
219 priv->wdd.max_timeout = SOFT_TIMEOUT_MAX; in gpio_wdt_probe()
221 if (watchdog_init_timeout(&priv->wdd, 0, &pdev->dev) < 0) in gpio_wdt_probe()
222 priv->wdd.timeout = SOFT_TIMEOUT_DEF; in gpio_wdt_probe()
224 setup_timer(&priv->timer, gpio_wdt_hwping, (unsigned long)&priv->wdd); in gpio_wdt_probe()
226 ret = watchdog_register_device(&priv->wdd); in gpio_wdt_probe()
230 priv->notifier.notifier_call = gpio_wdt_notify_sys; in gpio_wdt_probe()
231 ret = register_reboot_notifier(&priv->notifier); in gpio_wdt_probe()
235 if (priv->always_running) in gpio_wdt_probe()
236 gpio_wdt_start_impl(priv); in gpio_wdt_probe()
241 watchdog_unregister_device(&priv->wdd); in gpio_wdt_probe()
247 struct gpio_wdt_priv *priv = platform_get_drvdata(pdev); in gpio_wdt_remove() local
249 del_timer_sync(&priv->timer); in gpio_wdt_remove()
250 unregister_reboot_notifier(&priv->notifier); in gpio_wdt_remove()
251 watchdog_unregister_device(&priv->wdd); in gpio_wdt_remove()