.. | .. |
---|
13 | 13 | #include <linux/platform_device.h> |
---|
14 | 14 | #include <linux/watchdog.h> |
---|
15 | 15 | #include <linux/uaccess.h> |
---|
16 | | -#include <linux/gpio.h> |
---|
17 | 16 | |
---|
18 | 17 | #include <linux/mfd/wm831x/core.h> |
---|
19 | 18 | #include <linux/mfd/wm831x/pdata.h> |
---|
.. | .. |
---|
29 | 28 | struct watchdog_device wdt; |
---|
30 | 29 | struct wm831x *wm831x; |
---|
31 | 30 | struct mutex lock; |
---|
32 | | - int update_gpio; |
---|
33 | 31 | int update_state; |
---|
34 | 32 | }; |
---|
35 | 33 | |
---|
.. | .. |
---|
103 | 101 | |
---|
104 | 102 | mutex_lock(&driver_data->lock); |
---|
105 | 103 | |
---|
106 | | - if (driver_data->update_gpio) { |
---|
107 | | - gpio_set_value_cansleep(driver_data->update_gpio, |
---|
108 | | - driver_data->update_state); |
---|
109 | | - driver_data->update_state = !driver_data->update_state; |
---|
110 | | - ret = 0; |
---|
111 | | - goto out; |
---|
112 | | - } |
---|
113 | | - |
---|
114 | 104 | reg = wm831x_reg_read(wm831x, WM831X_WATCHDOG); |
---|
115 | 105 | |
---|
116 | 106 | if (!(reg & WM831X_WDOG_RST_SRC)) { |
---|
.. | .. |
---|
180 | 170 | |
---|
181 | 171 | static int wm831x_wdt_probe(struct platform_device *pdev) |
---|
182 | 172 | { |
---|
183 | | - struct wm831x *wm831x = dev_get_drvdata(pdev->dev.parent); |
---|
184 | | - struct wm831x_pdata *chip_pdata = dev_get_platdata(pdev->dev.parent); |
---|
| 173 | + struct device *dev = &pdev->dev; |
---|
| 174 | + struct wm831x *wm831x = dev_get_drvdata(dev->parent); |
---|
| 175 | + struct wm831x_pdata *chip_pdata = dev_get_platdata(dev->parent); |
---|
185 | 176 | struct wm831x_watchdog_pdata *pdata; |
---|
186 | 177 | struct wm831x_wdt_drvdata *driver_data; |
---|
187 | 178 | struct watchdog_device *wm831x_wdt; |
---|
.. | .. |
---|
198 | 189 | if (reg & WM831X_WDOG_DEBUG) |
---|
199 | 190 | dev_warn(wm831x->dev, "Watchdog is paused\n"); |
---|
200 | 191 | |
---|
201 | | - driver_data = devm_kzalloc(&pdev->dev, sizeof(*driver_data), |
---|
202 | | - GFP_KERNEL); |
---|
| 192 | + driver_data = devm_kzalloc(dev, sizeof(*driver_data), GFP_KERNEL); |
---|
203 | 193 | if (!driver_data) |
---|
204 | 194 | return -ENOMEM; |
---|
205 | 195 | |
---|
.. | .. |
---|
210 | 200 | |
---|
211 | 201 | wm831x_wdt->info = &wm831x_wdt_info; |
---|
212 | 202 | wm831x_wdt->ops = &wm831x_wdt_ops; |
---|
213 | | - wm831x_wdt->parent = &pdev->dev; |
---|
| 203 | + wm831x_wdt->parent = dev; |
---|
214 | 204 | watchdog_set_nowayout(wm831x_wdt, nowayout); |
---|
215 | 205 | watchdog_set_drvdata(wm831x_wdt, driver_data); |
---|
216 | 206 | |
---|
.. | .. |
---|
239 | 229 | reg |= pdata->secondary << WM831X_WDOG_SECACT_SHIFT; |
---|
240 | 230 | reg |= pdata->software << WM831X_WDOG_RST_SRC_SHIFT; |
---|
241 | 231 | |
---|
242 | | - if (pdata->update_gpio) { |
---|
243 | | - ret = devm_gpio_request_one(&pdev->dev, |
---|
244 | | - pdata->update_gpio, |
---|
245 | | - GPIOF_OUT_INIT_LOW, |
---|
246 | | - "Watchdog update"); |
---|
247 | | - if (ret < 0) { |
---|
248 | | - dev_err(wm831x->dev, |
---|
249 | | - "Failed to request update GPIO: %d\n", |
---|
250 | | - ret); |
---|
251 | | - return ret; |
---|
252 | | - } |
---|
253 | | - |
---|
254 | | - driver_data->update_gpio = pdata->update_gpio; |
---|
255 | | - |
---|
256 | | - /* Make sure the watchdog takes hardware updates */ |
---|
257 | | - reg |= WM831X_WDOG_RST_SRC; |
---|
258 | | - } |
---|
259 | | - |
---|
260 | 232 | ret = wm831x_reg_unlock(wm831x); |
---|
261 | 233 | if (ret == 0) { |
---|
262 | 234 | ret = wm831x_reg_write(wm831x, WM831X_WATCHDOG, reg); |
---|
.. | .. |
---|
268 | 240 | } |
---|
269 | 241 | } |
---|
270 | 242 | |
---|
271 | | - ret = devm_watchdog_register_device(&pdev->dev, &driver_data->wdt); |
---|
272 | | - if (ret != 0) { |
---|
273 | | - dev_err(wm831x->dev, "watchdog_register_device() failed: %d\n", |
---|
274 | | - ret); |
---|
275 | | - return ret; |
---|
276 | | - } |
---|
277 | | - |
---|
278 | | - return 0; |
---|
| 243 | + return devm_watchdog_register_device(dev, &driver_data->wdt); |
---|
279 | 244 | } |
---|
280 | 245 | |
---|
281 | 246 | static struct platform_driver wm831x_wdt_driver = { |
---|