mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 11:41:38 -04:00
mfd: watchdog: iTCO_wdt: Expose watchdog properties using platform data
Intel Sunrisepoint (Skylake PCH) has the iTCO watchdog accessible across the SMBus, unlike previous generations of PCH/ICH where it was on the LPC bus. Because it's on the SMBus, it doesn't make sense to pass around a 'struct lpc_ich_info', and leaking the type of bus into the iTCO watchdog driver is kind of backwards anyway. This change introduces a new 'struct itco_wdt_platform_data' for use inside the iTCO watchdog driver and by the upcoming Intel Sunrisepoint code, which neatly avoids having to include lpc_ich headers in the i801 i2c driver. This change is overdue because lpc_ich_info has already found its way into other TCO watchdog users, notably the intel_pmc_ipc driver where the watchdog actually isn't on the LPC bus as far as I can see. A simple translation layer is provided for converting from the existing 'struct lpc_ich_info' inside the lpc_ich mfd driver. Signed-off-by: Matt Fleming <[email protected]> Acked-by: Darren Hart <[email protected]> [drivers/x86 refactoring] Reviewed-by: Guenter Roeck <[email protected]> Signed-off-by: Lee Jones <[email protected]>
This commit is contained in:
parent
bc0195aad0
commit
420b54de25
5 changed files with 57 additions and 20 deletions
|
|
@ -66,8 +66,7 @@
|
|||
#include <linux/spinlock.h> /* For spin_lock/spin_unlock/... */
|
||||
#include <linux/uaccess.h> /* For copy_to_user/put_user/... */
|
||||
#include <linux/io.h> /* For inb/outb/... */
|
||||
#include <linux/mfd/core.h>
|
||||
#include <linux/mfd/lpc_ich.h>
|
||||
#include <linux/platform_data/itco_wdt.h>
|
||||
|
||||
#include "iTCO_vendor.h"
|
||||
|
||||
|
|
@ -418,9 +417,9 @@ static int iTCO_wdt_probe(struct platform_device *dev)
|
|||
{
|
||||
int ret = -ENODEV;
|
||||
unsigned long val32;
|
||||
struct lpc_ich_info *ich_info = dev_get_platdata(&dev->dev);
|
||||
struct itco_wdt_platform_data *pdata = dev_get_platdata(&dev->dev);
|
||||
|
||||
if (!ich_info)
|
||||
if (!pdata)
|
||||
goto out;
|
||||
|
||||
spin_lock_init(&iTCO_wdt_private.io_lock);
|
||||
|
|
@ -435,7 +434,7 @@ static int iTCO_wdt_probe(struct platform_device *dev)
|
|||
if (!iTCO_wdt_private.smi_res)
|
||||
goto out;
|
||||
|
||||
iTCO_wdt_private.iTCO_version = ich_info->iTCO_version;
|
||||
iTCO_wdt_private.iTCO_version = pdata->version;
|
||||
iTCO_wdt_private.dev = dev;
|
||||
iTCO_wdt_private.pdev = to_pci_dev(dev->dev.parent);
|
||||
|
||||
|
|
@ -501,7 +500,7 @@ static int iTCO_wdt_probe(struct platform_device *dev)
|
|||
}
|
||||
|
||||
pr_info("Found a %s TCO device (Version=%d, TCOBASE=0x%04llx)\n",
|
||||
ich_info->name, ich_info->iTCO_version, (u64)TCOBASE);
|
||||
pdata->name, pdata->version, (u64)TCOBASE);
|
||||
|
||||
/* Clear out the (probably old) status */
|
||||
if (iTCO_wdt_private.iTCO_version == 3) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue