aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hwmon/sch5627.c
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2012-03-18 08:05:08 -0400
committerGuenter Roeck <guenter.roeck@ericsson.com>2012-03-20 09:42:05 -0400
commit312869ec935ab3bb67b7ba641a7d11230555aff5 (patch)
treecce1f87f557373a95c3cf44b792532f42cee728f /drivers/hwmon/sch5627.c
parent840e191dba36f51ae52db8a93849191af9e89098 (diff)
hwmon: (sch56xx) Add support for the integrated watchdog (v2)
Add support for the watchdog integrated into the SMSC SCH5627 and SCH5636 superio-s. Since the watchdog is part of the hwmon logical device and thus shares ioports with it, the watchdog driver is integrated into the existing hwmon drivers for these. Note that this version of the watchdog support for sch56xx superio-s implements the watchdog chardev interface itself, rather then relying on the recently added watchdog core / watchdog_dev. This is done because currently some needed functionality is missing from watchdog_dev, as soon as this functionality is added (which is being discussed on the linux-watchdog mailinglist), I'll convert this driver over to using watchdog_dev. Signed-off-by: Hans de Goede <hdegoede@redhat.com> [guenter.roeck@ericsson.com: Added missing linux/slab.h include] Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com>
Diffstat (limited to 'drivers/hwmon/sch5627.c')
-rw-r--r--drivers/hwmon/sch5627.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/hwmon/sch5627.c b/drivers/hwmon/sch5627.c
index 79b6dabe3161..8ec6dfbccb64 100644
--- a/drivers/hwmon/sch5627.c
+++ b/drivers/hwmon/sch5627.c
@@ -1,5 +1,5 @@
1/*************************************************************************** 1/***************************************************************************
2 * Copyright (C) 2010-2011 Hans de Goede <hdegoede@redhat.com> * 2 * Copyright (C) 2010-2012 Hans de Goede <hdegoede@redhat.com> *
3 * * 3 * *
4 * This program is free software; you can redistribute it and/or modify * 4 * This program is free software; you can redistribute it and/or modify *
5 * it under the terms of the GNU General Public License as published by * 5 * it under the terms of the GNU General Public License as published by *
@@ -79,6 +79,7 @@ static const char * const SCH5627_IN_LABELS[SCH5627_NO_IN] = {
79struct sch5627_data { 79struct sch5627_data {
80 unsigned short addr; 80 unsigned short addr;
81 struct device *hwmon_dev; 81 struct device *hwmon_dev;
82 struct sch56xx_watchdog_data *watchdog;
82 u8 control; 83 u8 control;
83 u8 temp_max[SCH5627_NO_TEMPS]; 84 u8 temp_max[SCH5627_NO_TEMPS];
84 u8 temp_crit[SCH5627_NO_TEMPS]; 85 u8 temp_crit[SCH5627_NO_TEMPS];
@@ -453,6 +454,9 @@ static int sch5627_remove(struct platform_device *pdev)
453{ 454{
454 struct sch5627_data *data = platform_get_drvdata(pdev); 455 struct sch5627_data *data = platform_get_drvdata(pdev);
455 456
457 if (data->watchdog)
458 sch56xx_watchdog_unregister(data->watchdog);
459
456 if (data->hwmon_dev) 460 if (data->hwmon_dev)
457 hwmon_device_unregister(data->hwmon_dev); 461 hwmon_device_unregister(data->hwmon_dev);
458 462
@@ -574,6 +578,11 @@ static int __devinit sch5627_probe(struct platform_device *pdev)
574 goto error; 578 goto error;
575 } 579 }
576 580
581 /* Note failing to register the watchdog is not a fatal error */
582 data->watchdog = sch56xx_watchdog_register(data->addr,
583 (build_code << 24) | (build_id << 8) | hwmon_rev,
584 &data->update_lock, 1);
585
577 return 0; 586 return 0;
578 587
579error: 588error: