diff options
Diffstat (limited to 'drivers/hwmon/sch5627.c')
| -rw-r--r-- | drivers/hwmon/sch5627.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/drivers/hwmon/sch5627.c b/drivers/hwmon/sch5627.c index 79b6dabe316..0cc99fd83e8 100644 --- a/drivers/hwmon/sch5627.c +++ b/drivers/hwmon/sch5627.c @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2010-2011 Hans de Goede <hdegoede@redhat.com> * + * Copyright (C) 2010-2012 Hans de Goede <hdegoede@redhat.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 * @@ -79,6 +79,7 @@ static const char * const SCH5627_IN_LABELS[SCH5627_NO_IN] = { struct sch5627_data { unsigned short addr; struct device *hwmon_dev; + struct sch56xx_watchdog_data *watchdog; u8 control; u8 temp_max[SCH5627_NO_TEMPS]; u8 temp_crit[SCH5627_NO_TEMPS]; @@ -152,7 +153,7 @@ abort: return ret; } -static int __devinit sch5627_read_limits(struct sch5627_data *data) +static int sch5627_read_limits(struct sch5627_data *data) { int i, val; @@ -453,22 +454,24 @@ static int sch5627_remove(struct platform_device *pdev) { struct sch5627_data *data = platform_get_drvdata(pdev); + if (data->watchdog) + sch56xx_watchdog_unregister(data->watchdog); + if (data->hwmon_dev) hwmon_device_unregister(data->hwmon_dev); sysfs_remove_group(&pdev->dev.kobj, &sch5627_group); - platform_set_drvdata(pdev, NULL); - kfree(data); return 0; } -static int __devinit sch5627_probe(struct platform_device *pdev) +static int sch5627_probe(struct platform_device *pdev) { struct sch5627_data *data; int err, build_code, build_id, hwmon_rev, val; - data = kzalloc(sizeof(struct sch5627_data), GFP_KERNEL); + data = devm_kzalloc(&pdev->dev, sizeof(struct sch5627_data), + GFP_KERNEL); if (!data) return -ENOMEM; @@ -574,6 +577,11 @@ static int __devinit sch5627_probe(struct platform_device *pdev) goto error; } + /* Note failing to register the watchdog is not a fatal error */ + data->watchdog = sch56xx_watchdog_register(&pdev->dev, data->addr, + (build_code << 24) | (build_id << 8) | hwmon_rev, + &data->update_lock, 1); + return 0; error: |
