diff options
Diffstat (limited to 'drivers/watchdog/da9055_wdt.c')
| -rw-r--r-- | drivers/watchdog/da9055_wdt.c | 67 |
1 files changed, 10 insertions, 57 deletions
diff --git a/drivers/watchdog/da9055_wdt.c b/drivers/watchdog/da9055_wdt.c index 575f37a965a4..9d5a2009466f 100644 --- a/drivers/watchdog/da9055_wdt.c +++ b/drivers/watchdog/da9055_wdt.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * System monitoring driver for DA9055 PMICs. * @@ -5,11 +6,6 @@ * * Author: David Dajun Chen <dchen@diasemi.com> * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * */ #include <linux/module.h> @@ -35,7 +31,6 @@ MODULE_PARM_DESC(nowayout, struct da9055_wdt_data { struct watchdog_device wdt; struct da9055 *da9055; - struct kref kref; }; static const struct { @@ -99,24 +94,6 @@ static int da9055_wdt_ping(struct watchdog_device *wdt_dev) DA9055_WATCHDOG_MASK, 1); } -static void da9055_wdt_release_resources(struct kref *r) -{ -} - -static void da9055_wdt_ref(struct watchdog_device *wdt_dev) -{ - struct da9055_wdt_data *driver_data = watchdog_get_drvdata(wdt_dev); - - kref_get(&driver_data->kref); -} - -static void da9055_wdt_unref(struct watchdog_device *wdt_dev) -{ - struct da9055_wdt_data *driver_data = watchdog_get_drvdata(wdt_dev); - - kref_put(&driver_data->kref, da9055_wdt_release_resources); -} - static int da9055_wdt_start(struct watchdog_device *wdt_dev) { return da9055_wdt_set_timeout(wdt_dev, wdt_dev->timeout); @@ -127,7 +104,7 @@ static int da9055_wdt_stop(struct watchdog_device *wdt_dev) return da9055_wdt_set_timeout(wdt_dev, 0); } -static struct watchdog_info da9055_wdt_info = { +static const struct watchdog_info da9055_wdt_info = { .options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING, .identity = "DA9055 Watchdog", }; @@ -138,23 +115,19 @@ static const struct watchdog_ops da9055_wdt_ops = { .stop = da9055_wdt_stop, .ping = da9055_wdt_ping, .set_timeout = da9055_wdt_set_timeout, - .ref = da9055_wdt_ref, - .unref = da9055_wdt_unref, }; static int da9055_wdt_probe(struct platform_device *pdev) { - struct da9055 *da9055 = dev_get_drvdata(pdev->dev.parent); + struct device *dev = &pdev->dev; + struct da9055 *da9055 = dev_get_drvdata(dev->parent); struct da9055_wdt_data *driver_data; struct watchdog_device *da9055_wdt; int ret; - driver_data = devm_kzalloc(&pdev->dev, sizeof(*driver_data), - GFP_KERNEL); - if (!driver_data) { - dev_err(da9055->dev, "Failed to allocate watchdog device\n"); + driver_data = devm_kzalloc(dev, sizeof(*driver_data), GFP_KERNEL); + if (!driver_data) return -ENOMEM; - } driver_data->da9055 = da9055; @@ -163,41 +136,21 @@ static int da9055_wdt_probe(struct platform_device *pdev) da9055_wdt->timeout = DA9055_DEF_TIMEOUT; da9055_wdt->info = &da9055_wdt_info; da9055_wdt->ops = &da9055_wdt_ops; + da9055_wdt->parent = dev; watchdog_set_nowayout(da9055_wdt, nowayout); watchdog_set_drvdata(da9055_wdt, driver_data); - kref_init(&driver_data->kref); - ret = da9055_wdt_stop(da9055_wdt); if (ret < 0) { - dev_err(&pdev->dev, "Failed to stop watchdog, %d\n", ret); - goto err; + dev_err(dev, "Failed to stop watchdog, %d\n", ret); + return ret; } - platform_set_drvdata(pdev, driver_data); - - ret = watchdog_register_device(&driver_data->wdt); - if (ret != 0) - dev_err(da9055->dev, "watchdog_register_device() failed: %d\n", - ret); - -err: - return ret; -} - -static int da9055_wdt_remove(struct platform_device *pdev) -{ - struct da9055_wdt_data *driver_data = platform_get_drvdata(pdev); - - watchdog_unregister_device(&driver_data->wdt); - kref_put(&driver_data->kref, da9055_wdt_release_resources); - - return 0; + return devm_watchdog_register_device(dev, &driver_data->wdt); } static struct platform_driver da9055_wdt_driver = { .probe = da9055_wdt_probe, - .remove = da9055_wdt_remove, .driver = { .name = "da9055-watchdog", }, |
