hc
2024-05-14 bedbef8ad3e75a304af6361af235302bcc61d06b
kernel/drivers/watchdog/tangox_wdt.c
....@@ -108,10 +108,14 @@
108108 .restart = tangox_wdt_restart,
109109 };
110110
111
+static void tangox_clk_disable_unprepare(void *data)
112
+{
113
+ clk_disable_unprepare(data);
114
+}
115
+
111116 static int tangox_wdt_probe(struct platform_device *pdev)
112117 {
113118 struct tangox_wdt_device *dev;
114
- struct resource *res;
115119 u32 config;
116120 int err;
117121
....@@ -119,8 +123,7 @@
119123 if (!dev)
120124 return -ENOMEM;
121125
122
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
123
- dev->base = devm_ioremap_resource(&pdev->dev, res);
126
+ dev->base = devm_platform_ioremap_resource(pdev, 0);
124127 if (IS_ERR(dev->base))
125128 return PTR_ERR(dev->base);
126129
....@@ -131,12 +134,14 @@
131134 err = clk_prepare_enable(dev->clk);
132135 if (err)
133136 return err;
137
+ err = devm_add_action_or_reset(&pdev->dev,
138
+ tangox_clk_disable_unprepare, dev->clk);
139
+ if (err)
140
+ return err;
134141
135142 dev->clk_rate = clk_get_rate(dev->clk);
136
- if (!dev->clk_rate) {
137
- err = -EINVAL;
138
- goto err;
139
- }
143
+ if (!dev->clk_rate)
144
+ return -EINVAL;
140145
141146 dev->wdt.parent = &pdev->dev;
142147 dev->wdt.info = &tangox_wdt_info;
....@@ -170,29 +175,14 @@
170175
171176 watchdog_set_restart_priority(&dev->wdt, 128);
172177
173
- err = watchdog_register_device(&dev->wdt);
178
+ watchdog_stop_on_unregister(&dev->wdt);
179
+ err = devm_watchdog_register_device(&pdev->dev, &dev->wdt);
174180 if (err)
175
- goto err;
181
+ return err;
176182
177183 platform_set_drvdata(pdev, dev);
178184
179185 dev_info(&pdev->dev, "SMP86xx/SMP87xx watchdog registered\n");
180
-
181
- return 0;
182
-
183
- err:
184
- clk_disable_unprepare(dev->clk);
185
- return err;
186
-}
187
-
188
-static int tangox_wdt_remove(struct platform_device *pdev)
189
-{
190
- struct tangox_wdt_device *dev = platform_get_drvdata(pdev);
191
-
192
- tangox_wdt_stop(&dev->wdt);
193
- clk_disable_unprepare(dev->clk);
194
-
195
- watchdog_unregister_device(&dev->wdt);
196186
197187 return 0;
198188 }
....@@ -206,7 +196,6 @@
206196
207197 static struct platform_driver tangox_wdt_driver = {
208198 .probe = tangox_wdt_probe,
209
- .remove = tangox_wdt_remove,
210199 .driver = {
211200 .name = "tangox-wdt",
212201 .of_match_table = tangox_wdt_dt_ids,