| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * Ralink RT288x/RT3xxx/MT76xx built-in hardware watchdog timer |
|---|
| 3 | 4 | * |
|---|
| .. | .. |
|---|
| 5 | 6 | * Copyright (C) 2013 John Crispin <john@phrozen.org> |
|---|
| 6 | 7 | * |
|---|
| 7 | 8 | * This driver was based on: drivers/watchdog/softdog.c |
|---|
| 8 | | - * |
|---|
| 9 | | - * This program is free software; you can redistribute it and/or modify it |
|---|
| 10 | | - * under the terms of the GNU General Public License version 2 as published |
|---|
| 11 | | - * by the Free Software Foundation. |
|---|
| 12 | 9 | */ |
|---|
| 13 | 10 | |
|---|
| 14 | 11 | #include <linux/clk.h> |
|---|
| .. | .. |
|---|
| 141 | 138 | |
|---|
| 142 | 139 | static int rt288x_wdt_probe(struct platform_device *pdev) |
|---|
| 143 | 140 | { |
|---|
| 144 | | - struct resource *res; |
|---|
| 141 | + struct device *dev = &pdev->dev; |
|---|
| 145 | 142 | int ret; |
|---|
| 146 | 143 | |
|---|
| 147 | | - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
|---|
| 148 | | - rt288x_wdt_base = devm_ioremap_resource(&pdev->dev, res); |
|---|
| 144 | + rt288x_wdt_base = devm_platform_ioremap_resource(pdev, 0); |
|---|
| 149 | 145 | if (IS_ERR(rt288x_wdt_base)) |
|---|
| 150 | 146 | return PTR_ERR(rt288x_wdt_base); |
|---|
| 151 | 147 | |
|---|
| 152 | | - rt288x_wdt_clk = devm_clk_get(&pdev->dev, NULL); |
|---|
| 148 | + rt288x_wdt_clk = devm_clk_get(dev, NULL); |
|---|
| 153 | 149 | if (IS_ERR(rt288x_wdt_clk)) |
|---|
| 154 | 150 | return PTR_ERR(rt288x_wdt_clk); |
|---|
| 155 | 151 | |
|---|
| 156 | | - rt288x_wdt_reset = devm_reset_control_get_exclusive(&pdev->dev, NULL); |
|---|
| 152 | + rt288x_wdt_reset = devm_reset_control_get_exclusive(dev, NULL); |
|---|
| 157 | 153 | if (!IS_ERR(rt288x_wdt_reset)) |
|---|
| 158 | 154 | reset_control_deassert(rt288x_wdt_reset); |
|---|
| 159 | 155 | |
|---|
| .. | .. |
|---|
| 161 | 157 | |
|---|
| 162 | 158 | rt288x_wdt_dev.bootstatus = rt288x_wdt_bootcause(); |
|---|
| 163 | 159 | rt288x_wdt_dev.max_timeout = (0xfffful / rt288x_wdt_freq); |
|---|
| 164 | | - rt288x_wdt_dev.parent = &pdev->dev; |
|---|
| 160 | + rt288x_wdt_dev.parent = dev; |
|---|
| 165 | 161 | |
|---|
| 166 | 162 | watchdog_init_timeout(&rt288x_wdt_dev, rt288x_wdt_dev.max_timeout, |
|---|
| 167 | | - &pdev->dev); |
|---|
| 163 | + dev); |
|---|
| 168 | 164 | watchdog_set_nowayout(&rt288x_wdt_dev, nowayout); |
|---|
| 169 | 165 | |
|---|
| 170 | | - ret = watchdog_register_device(&rt288x_wdt_dev); |
|---|
| 166 | + watchdog_stop_on_reboot(&rt288x_wdt_dev); |
|---|
| 167 | + ret = devm_watchdog_register_device(dev, &rt288x_wdt_dev); |
|---|
| 171 | 168 | if (!ret) |
|---|
| 172 | | - dev_info(&pdev->dev, "Initialized\n"); |
|---|
| 169 | + dev_info(dev, "Initialized\n"); |
|---|
| 173 | 170 | |
|---|
| 174 | 171 | return 0; |
|---|
| 175 | | -} |
|---|
| 176 | | - |
|---|
| 177 | | -static int rt288x_wdt_remove(struct platform_device *pdev) |
|---|
| 178 | | -{ |
|---|
| 179 | | - watchdog_unregister_device(&rt288x_wdt_dev); |
|---|
| 180 | | - |
|---|
| 181 | | - return 0; |
|---|
| 182 | | -} |
|---|
| 183 | | - |
|---|
| 184 | | -static void rt288x_wdt_shutdown(struct platform_device *pdev) |
|---|
| 185 | | -{ |
|---|
| 186 | | - rt288x_wdt_stop(&rt288x_wdt_dev); |
|---|
| 187 | 172 | } |
|---|
| 188 | 173 | |
|---|
| 189 | 174 | static const struct of_device_id rt288x_wdt_match[] = { |
|---|
| .. | .. |
|---|
| 194 | 179 | |
|---|
| 195 | 180 | static struct platform_driver rt288x_wdt_driver = { |
|---|
| 196 | 181 | .probe = rt288x_wdt_probe, |
|---|
| 197 | | - .remove = rt288x_wdt_remove, |
|---|
| 198 | | - .shutdown = rt288x_wdt_shutdown, |
|---|
| 199 | 182 | .driver = { |
|---|
| 200 | 183 | .name = KBUILD_MODNAME, |
|---|
| 201 | 184 | .of_match_table = rt288x_wdt_match, |
|---|