• Home
  • Raw
  • Download

Lines Matching +full:short +full:- +full:ping

1 // SPDX-License-Identifier: GPL-2.0+
3 * exar_wdt.c - Driver for the watchdog present in some
21 static const unsigned short sio_config_ports[] = { 0x2e, 0x4e };
60 unsigned short did;
61 unsigned short config_port;
81 static int exar_sio_enter(const unsigned short config_port, in exar_sio_enter()
85 return -EBUSY; in exar_sio_enter()
87 /* write the ENTER-KEY twice */ in exar_sio_enter()
94 static void exar_sio_exit(const unsigned short config_port) in exar_sio_exit()
100 static unsigned char exar_sio_read(const unsigned short config_port, in exar_sio_read()
107 static void exar_sio_write(const unsigned short config_port, in exar_sio_write()
114 static unsigned short exar_sio_read16(const unsigned short config_port, in exar_sio_read16()
125 static void exar_sio_select_wdt(const unsigned short config_port) in exar_sio_select_wdt()
132 unsigned short rt_base = priv->wdt_res.start; in exar_wdt_arm()
135 outb(priv->timeout, rt_base + WDT_VAL); in exar_wdt_arm()
136 outb(priv->timeout, rt_base + WDT_VAL); in exar_wdt_arm()
141 unsigned short rt_base = priv->wdt_res.start; in exar_wdt_disarm()
156 unsigned short rt_base = priv->wdt_res.start; in exar_wdt_start()
158 spin_lock(&priv->io_lock); in exar_wdt_start()
161 outb(priv->unit, rt_base + WDT_CTRL); in exar_wdt_start()
164 spin_unlock(&priv->io_lock); in exar_wdt_start()
172 spin_lock(&priv->io_lock); in exar_wdt_stop()
176 spin_unlock(&priv->io_lock); in exar_wdt_stop()
183 unsigned short rt_base = priv->wdt_res.start; in exar_wdt_keepalive()
185 spin_lock(&priv->io_lock); in exar_wdt_keepalive()
190 spin_unlock(&priv->io_lock); in exar_wdt_keepalive()
209 priv->unit = unit_min ? WDT_UNITS_MIN : WDT_UNITS_SEC; in exar_wdt_set_timeout()
210 priv->timeout = t; in exar_wdt_set_timeout()
212 wdog->timeout = unit_min ? t * 60 : t; in exar_wdt_set_timeout()
231 .ping = exar_wdt_keepalive,
241 ret = exar_sio_enter(priv->config_port, priv->enter_key); in exar_wdt_config()
245 exar_sio_select_wdt(priv->config_port); in exar_wdt_config()
246 exar_sio_write(priv->config_port, EXAR_WDT, conf); in exar_wdt_config()
248 exar_sio_exit(priv->config_port); in exar_wdt_config()
255 struct device *dev = &pdev->dev; in exar_wdt_probe()
256 struct wdt_priv *priv = dev->platform_data; in exar_wdt_probe()
257 struct watchdog_device *wdt_dev = &priv->wdt_dev; in exar_wdt_probe()
263 return -ENXIO; in exar_wdt_probe()
265 spin_lock_init(&priv->io_lock); in exar_wdt_probe()
267 wdt_dev->info = &exar_wdt_info; in exar_wdt_probe()
268 wdt_dev->ops = &exar_wdt_ops; in exar_wdt_probe()
269 wdt_dev->min_timeout = 1; in exar_wdt_probe()
270 wdt_dev->max_timeout = 255 * 60; in exar_wdt_probe()
291 priv->did, timeout, nowayout); in exar_wdt_probe()
296 static unsigned short __init exar_detect(const unsigned short config_port, in exar_detect()
298 unsigned short *rt_base) in exar_detect()
301 unsigned short base = 0; in exar_detect()
302 unsigned short vid, did; in exar_detect()
347 return -ENOMEM; in exar_wdt_register()
349 INIT_LIST_HEAD(&n->list); in exar_wdt_register()
351 scnprintf((char *)n->name, sizeof(n->name), DRV_NAME ".%d", idx); in exar_wdt_register()
352 priv->wdt_res.name = n->name; in exar_wdt_register()
354 n->pdev = platform_device_register_resndata(NULL, DRV_NAME, idx, in exar_wdt_register()
355 &priv->wdt_res, 1, in exar_wdt_register()
357 if (IS_ERR(n->pdev)) { in exar_wdt_register()
358 int err = PTR_ERR(n->pdev); in exar_wdt_register()
364 list_add_tail(&n->list, &pdev_list); in exar_wdt_register()
374 platform_device_unregister(n->pdev); in exar_wdt_unregister()
375 list_del(&n->list); in exar_wdt_unregister()
387 unsigned short did, rt_base = 0; in exar_wdt_init()
409 return -ENODEV; in exar_wdt_init()