| .. | .. |
|---|
| 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); |
|---|