.. | .. |
---|
90 | 90 | |
---|
91 | 91 | #ifdef CONFIG_BCM_KONA_WDT_DEBUG |
---|
92 | 92 | |
---|
93 | | -static int bcm_kona_wdt_dbg_show(struct seq_file *s, void *data) |
---|
| 93 | +static int bcm_kona_show(struct seq_file *s, void *data) |
---|
94 | 94 | { |
---|
95 | 95 | int ctl_val, cur_val; |
---|
96 | 96 | unsigned long flags; |
---|
.. | .. |
---|
130 | 130 | return 0; |
---|
131 | 131 | } |
---|
132 | 132 | |
---|
133 | | -static int bcm_kona_dbg_open(struct inode *inode, struct file *file) |
---|
134 | | -{ |
---|
135 | | - return single_open(file, bcm_kona_wdt_dbg_show, inode->i_private); |
---|
136 | | -} |
---|
137 | | - |
---|
138 | | -static const struct file_operations bcm_kona_dbg_operations = { |
---|
139 | | - .open = bcm_kona_dbg_open, |
---|
140 | | - .read = seq_read, |
---|
141 | | - .llseek = seq_lseek, |
---|
142 | | - .release = single_release, |
---|
143 | | -}; |
---|
| 133 | +DEFINE_SHOW_ATTRIBUTE(bcm_kona); |
---|
144 | 134 | |
---|
145 | 135 | static void bcm_kona_wdt_debug_init(struct platform_device *pdev) |
---|
146 | 136 | { |
---|
.. | .. |
---|
153 | 143 | wdt->debugfs = NULL; |
---|
154 | 144 | |
---|
155 | 145 | dir = debugfs_create_dir(BCM_KONA_WDT_NAME, NULL); |
---|
156 | | - if (IS_ERR_OR_NULL(dir)) |
---|
157 | | - return; |
---|
158 | 146 | |
---|
159 | | - if (debugfs_create_file("info", S_IFREG | S_IRUGO, dir, wdt, |
---|
160 | | - &bcm_kona_dbg_operations)) |
---|
161 | | - wdt->debugfs = dir; |
---|
162 | | - else |
---|
163 | | - debugfs_remove_recursive(dir); |
---|
| 147 | + debugfs_create_file("info", S_IFREG | S_IRUGO, dir, wdt, |
---|
| 148 | + &bcm_kona_fops); |
---|
| 149 | + wdt->debugfs = dir; |
---|
164 | 150 | } |
---|
165 | 151 | |
---|
166 | 152 | static void bcm_kona_wdt_debug_exit(struct platform_device *pdev) |
---|
167 | 153 | { |
---|
168 | 154 | struct bcm_kona_wdt *wdt = platform_get_drvdata(pdev); |
---|
169 | 155 | |
---|
170 | | - if (wdt && wdt->debugfs) { |
---|
| 156 | + if (wdt) |
---|
171 | 157 | debugfs_remove_recursive(wdt->debugfs); |
---|
172 | | - wdt->debugfs = NULL; |
---|
173 | | - } |
---|
174 | 158 | } |
---|
175 | 159 | |
---|
176 | 160 | #else |
---|
.. | .. |
---|
281 | 265 | .timeout = SECWDOG_MAX_COUNT >> SECWDOG_DEFAULT_RESOLUTION, |
---|
282 | 266 | }; |
---|
283 | 267 | |
---|
284 | | -static void bcm_kona_wdt_shutdown(struct platform_device *pdev) |
---|
285 | | -{ |
---|
286 | | - bcm_kona_wdt_stop(&bcm_kona_wdt_wdd); |
---|
287 | | -} |
---|
288 | | - |
---|
289 | 268 | static int bcm_kona_wdt_probe(struct platform_device *pdev) |
---|
290 | 269 | { |
---|
291 | 270 | struct device *dev = &pdev->dev; |
---|
292 | 271 | struct bcm_kona_wdt *wdt; |
---|
293 | | - struct resource *res; |
---|
294 | 272 | int ret; |
---|
295 | 273 | |
---|
296 | 274 | wdt = devm_kzalloc(dev, sizeof(*wdt), GFP_KERNEL); |
---|
.. | .. |
---|
299 | 277 | |
---|
300 | 278 | spin_lock_init(&wdt->lock); |
---|
301 | 279 | |
---|
302 | | - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
---|
303 | | - wdt->base = devm_ioremap_resource(dev, res); |
---|
| 280 | + wdt->base = devm_platform_ioremap_resource(pdev, 0); |
---|
304 | 281 | if (IS_ERR(wdt->base)) |
---|
305 | | - return -ENODEV; |
---|
| 282 | + return PTR_ERR(wdt->base); |
---|
306 | 283 | |
---|
307 | 284 | wdt->resolution = SECWDOG_DEFAULT_RESOLUTION; |
---|
308 | 285 | ret = bcm_kona_wdt_set_resolution_reg(wdt); |
---|
.. | .. |
---|
313 | 290 | |
---|
314 | 291 | platform_set_drvdata(pdev, wdt); |
---|
315 | 292 | watchdog_set_drvdata(&bcm_kona_wdt_wdd, wdt); |
---|
316 | | - bcm_kona_wdt_wdd.parent = &pdev->dev; |
---|
| 293 | + bcm_kona_wdt_wdd.parent = dev; |
---|
317 | 294 | |
---|
318 | 295 | ret = bcm_kona_wdt_set_timeout_reg(&bcm_kona_wdt_wdd, 0); |
---|
319 | 296 | if (ret) { |
---|
.. | .. |
---|
321 | 298 | return ret; |
---|
322 | 299 | } |
---|
323 | 300 | |
---|
324 | | - ret = watchdog_register_device(&bcm_kona_wdt_wdd); |
---|
325 | | - if (ret) { |
---|
326 | | - dev_err(dev, "Failed to register watchdog device"); |
---|
| 301 | + watchdog_stop_on_reboot(&bcm_kona_wdt_wdd); |
---|
| 302 | + watchdog_stop_on_unregister(&bcm_kona_wdt_wdd); |
---|
| 303 | + ret = devm_watchdog_register_device(dev, &bcm_kona_wdt_wdd); |
---|
| 304 | + if (ret) |
---|
327 | 305 | return ret; |
---|
328 | | - } |
---|
329 | 306 | |
---|
330 | 307 | bcm_kona_wdt_debug_init(pdev); |
---|
331 | 308 | dev_dbg(dev, "Broadcom Kona Watchdog Timer"); |
---|
.. | .. |
---|
336 | 313 | static int bcm_kona_wdt_remove(struct platform_device *pdev) |
---|
337 | 314 | { |
---|
338 | 315 | bcm_kona_wdt_debug_exit(pdev); |
---|
339 | | - bcm_kona_wdt_shutdown(pdev); |
---|
340 | | - watchdog_unregister_device(&bcm_kona_wdt_wdd); |
---|
341 | 316 | dev_dbg(&pdev->dev, "Watchdog driver disabled"); |
---|
342 | 317 | |
---|
343 | 318 | return 0; |
---|
.. | .. |
---|
356 | 331 | }, |
---|
357 | 332 | .probe = bcm_kona_wdt_probe, |
---|
358 | 333 | .remove = bcm_kona_wdt_remove, |
---|
359 | | - .shutdown = bcm_kona_wdt_shutdown, |
---|
360 | 334 | }; |
---|
361 | 335 | |
---|
362 | 336 | module_platform_driver(bcm_kona_wdt_driver); |
---|