Commit e38da7d3 authored by Henning Schild's avatar Henning Schild Committed by Lee Jones

watchdog: simatic-ipc-wdt: convert to use P2SB accessor

Since we have a common P2SB accessor in tree we may use it instead of
open coded variants.

Replace custom code by p2sb_bar() call.
Signed-off-by: default avatarHenning Schild <henning.schild@siemens.com>
Acked-by: default avatarGuenter Roeck <linux@roeck-us.net>
Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: default avatarLee Jones <lee@kernel.org>
parent 7b2db704
...@@ -1647,6 +1647,7 @@ config SIEMENS_SIMATIC_IPC_WDT ...@@ -1647,6 +1647,7 @@ config SIEMENS_SIMATIC_IPC_WDT
tristate "Siemens Simatic IPC Watchdog" tristate "Siemens Simatic IPC Watchdog"
depends on SIEMENS_SIMATIC_IPC depends on SIEMENS_SIMATIC_IPC
select WATCHDOG_CORE select WATCHDOG_CORE
select P2SB
help help
This driver adds support for several watchdogs found in Industrial This driver adds support for several watchdogs found in Industrial
PCs from Siemens. PCs from Siemens.
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/platform_data/x86/p2sb.h>
#include <linux/platform_data/x86/simatic-ipc-base.h> #include <linux/platform_data/x86/simatic-ipc-base.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/sizes.h> #include <linux/sizes.h>
...@@ -54,9 +55,9 @@ static struct resource io_resource_trigger = ...@@ -54,9 +55,9 @@ static struct resource io_resource_trigger =
DEFINE_RES_IO_NAMED(WD_TRIGGER_IOADR, SZ_1, DEFINE_RES_IO_NAMED(WD_TRIGGER_IOADR, SZ_1,
KBUILD_MODNAME " WD_TRIGGER_IOADR"); KBUILD_MODNAME " WD_TRIGGER_IOADR");
/* the actual start will be discovered with pci, 0 is a placeholder */ /* the actual start will be discovered with p2sb, 0 is a placeholder */
static struct resource mem_resource = static struct resource mem_resource =
DEFINE_RES_MEM_NAMED(0, SZ_4, "WD_RESET_BASE_ADR"); DEFINE_RES_MEM_NAMED(0, 0, "WD_RESET_BASE_ADR");
static u32 wd_timeout_table[] = {2, 4, 6, 8, 16, 32, 48, 64 }; static u32 wd_timeout_table[] = {2, 4, 6, 8, 16, 32, 48, 64 };
static void __iomem *wd_reset_base_addr; static void __iomem *wd_reset_base_addr;
...@@ -150,6 +151,7 @@ static int simatic_ipc_wdt_probe(struct platform_device *pdev) ...@@ -150,6 +151,7 @@ static int simatic_ipc_wdt_probe(struct platform_device *pdev)
struct simatic_ipc_platform *plat = pdev->dev.platform_data; struct simatic_ipc_platform *plat = pdev->dev.platform_data;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct resource *res; struct resource *res;
int ret;
switch (plat->devmode) { switch (plat->devmode) {
case SIMATIC_IPC_DEVICE_227E: case SIMATIC_IPC_DEVICE_227E:
...@@ -190,15 +192,14 @@ static int simatic_ipc_wdt_probe(struct platform_device *pdev) ...@@ -190,15 +192,14 @@ static int simatic_ipc_wdt_probe(struct platform_device *pdev)
if (plat->devmode == SIMATIC_IPC_DEVICE_427E) { if (plat->devmode == SIMATIC_IPC_DEVICE_427E) {
res = &mem_resource; res = &mem_resource;
/* get GPIO base from PCI */ ret = p2sb_bar(NULL, 0, res);
res->start = simatic_ipc_get_membase0(PCI_DEVFN(0x1f, 1)); if (ret)
if (res->start == 0) return ret;
return -ENODEV;
/* do the final address calculation */ /* do the final address calculation */
res->start = res->start + (GPIO_COMMUNITY0_PORT_ID << 16) + res->start = res->start + (GPIO_COMMUNITY0_PORT_ID << 16) +
PAD_CFG_DW0_GPP_A_23; PAD_CFG_DW0_GPP_A_23;
res->end += res->start; res->end = res->start + SZ_4 - 1;
wd_reset_base_addr = devm_ioremap_resource(dev, res); wd_reset_base_addr = devm_ioremap_resource(dev, res);
if (IS_ERR(wd_reset_base_addr)) if (IS_ERR(wd_reset_base_addr))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment