diff options
author | Ezequiel Garcia <ezequiel.garcia@free-electrons.com> | 2014-03-15 15:17:56 -0300 |
---|---|---|
committer | Wim Van Sebroeck <wim@iguana.be> | 2014-06-10 21:43:54 +0200 |
commit | aaaac9ec79b7c4e21741df35d2247a1187836129 (patch) | |
tree | 9aa06c2fb1f5e21a71d3585c3e3dcd48fadb161a /drivers/watchdog/orion_wdt.c | |
parent | 9ebf1855dbe0a170e45a2000d6f8e16d88b5fd7c (diff) | |
download | blackbird-op-linux-aaaac9ec79b7c4e21741df35d2247a1187836129.tar.gz blackbird-op-linux-aaaac9ec79b7c4e21741df35d2247a1187836129.zip |
watchdog: orion: Move the register ioremap'ing to its own function
Follow-up patches will extend the registers ioremap and request
to handle SoC-specific quirks on the RSTOUT register. Therefore,
in order to keep the code readable, this commit introduces a special
function for this.
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Acked-by: Jason Cooper <jason@lakedaemon.net>
Tested-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
Diffstat (limited to 'drivers/watchdog/orion_wdt.c')
-rw-r--r-- | drivers/watchdog/orion_wdt.c | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/drivers/watchdog/orion_wdt.c b/drivers/watchdog/orion_wdt.c index 9b3c41d18703..afa38314fb18 100644 --- a/drivers/watchdog/orion_wdt.c +++ b/drivers/watchdog/orion_wdt.c @@ -313,12 +313,32 @@ static const struct of_device_id orion_wdt_of_match_table[] = { }; MODULE_DEVICE_TABLE(of, orion_wdt_of_match_table); +static int orion_wdt_get_regs(struct platform_device *pdev, + struct orion_watchdog *dev) +{ + struct resource *res; + + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + if (!res) + return -ENODEV; + dev->reg = devm_ioremap(&pdev->dev, res->start, + resource_size(res)); + if (!dev->reg) + return -ENOMEM; + + dev->rstout = orion_wdt_ioremap_rstout(pdev, res->start & + INTERNAL_REGS_MASK); + if (!dev->rstout) + return -ENODEV; + + return 0; +} + static int orion_wdt_probe(struct platform_device *pdev) { struct orion_watchdog *dev; const struct of_device_id *match; unsigned int wdt_max_duration; /* (seconds) */ - struct resource *res; int ret, irq; dev = devm_kzalloc(&pdev->dev, sizeof(struct orion_watchdog), @@ -336,19 +356,9 @@ static int orion_wdt_probe(struct platform_device *pdev) dev->wdt.min_timeout = 1; dev->data = match->data; - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!res) - return -ENODEV; - - dev->reg = devm_ioremap(&pdev->dev, res->start, - resource_size(res)); - if (!dev->reg) - return -ENOMEM; - - dev->rstout = orion_wdt_ioremap_rstout(pdev, res->start & - INTERNAL_REGS_MASK); - if (!dev->rstout) - return -ENODEV; + ret = orion_wdt_get_regs(pdev, dev); + if (ret) + return ret; ret = dev->data->clock_init(pdev, dev); if (ret) { |