diff options
Diffstat (limited to 'drivers/hwmon/sch5636.c')
| -rw-r--r-- | drivers/hwmon/sch5636.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/drivers/hwmon/sch5636.c b/drivers/hwmon/sch5636.c index 9d5236fb09b..547b5c952ef 100644 --- a/drivers/hwmon/sch5636.c +++ b/drivers/hwmon/sch5636.c @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2011 Hans de Goede <hdegoede@redhat.com> * + * Copyright (C) 2011-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 * @@ -67,6 +67,7 @@ static const u16 SCH5636_REG_FAN_VAL[SCH5636_NO_FANS] = { struct sch5636_data { unsigned short addr; struct device *hwmon_dev; + struct sch56xx_watchdog_data *watchdog; struct mutex update_lock; char valid; /* !=0 if following fields are valid */ @@ -384,6 +385,9 @@ static int sch5636_remove(struct platform_device *pdev) struct sch5636_data *data = platform_get_drvdata(pdev); int i; + if (data->watchdog) + sch56xx_watchdog_unregister(data->watchdog); + if (data->hwmon_dev) hwmon_device_unregister(data->hwmon_dev); @@ -398,19 +402,17 @@ static int sch5636_remove(struct platform_device *pdev) device_remove_file(&pdev->dev, &sch5636_fan_attr[i].dev_attr); - platform_set_drvdata(pdev, NULL); - kfree(data); - return 0; } -static int __devinit sch5636_probe(struct platform_device *pdev) +static int sch5636_probe(struct platform_device *pdev) { struct sch5636_data *data; int i, err, val, revision[2]; char id[4]; - data = kzalloc(sizeof(struct sch5636_data), GFP_KERNEL); + data = devm_kzalloc(&pdev->dev, sizeof(struct sch5636_data), + GFP_KERNEL); if (!data) return -ENOMEM; @@ -505,6 +507,11 @@ static int __devinit sch5636_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, + (revision[0] << 8) | revision[1], + &data->update_lock, 0); + return 0; error: |
