struct sch5627_data {
        unsigned short addr;
-       struct sch56xx_watchdog_data *watchdog;
        u8 control;
        u8 temp_max[SCH5627_NO_TEMPS];
        u8 temp_crit[SCH5627_NO_TEMPS];
        .info = sch5627_info,
 };
 
-static int sch5627_remove(struct platform_device *pdev)
-{
-       struct sch5627_data *data = platform_get_drvdata(pdev);
-
-       if (data->watchdog)
-               sch56xx_watchdog_unregister(data->watchdog);
-
-       return 0;
-}
-
 static int sch5627_probe(struct platform_device *pdev)
 {
        struct sch5627_data *data;
                return PTR_ERR(hwmon_dev);
 
        /* 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);
+       sch56xx_watchdog_register(&pdev->dev, data->addr,
+                                 (build_code << 24) | (build_id << 8) | hwmon_rev,
+                                 &data->update_lock, 1);
 
        return 0;
 }
                .name   = DRVNAME,
        },
        .probe          = sch5627_probe,
-       .remove         = sch5627_remove,
 };
 
 module_platform_driver(sch5627_driver);
 
 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 */
        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);
 
        }
 
        /* 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);
+       sch56xx_watchdog_register(&pdev->dev, data->addr, (revision[0] << 8) | revision[1],
+                                 &data->update_lock, 0);
 
        return 0;
 
 
        .set_timeout    = watchdog_set_timeout,
 };
 
-struct sch56xx_watchdog_data *sch56xx_watchdog_register(struct device *parent,
-       u16 addr, u32 revision, struct mutex *io_lock, int check_enabled)
+void sch56xx_watchdog_register(struct device *parent, u16 addr, u32 revision,
+                              struct mutex *io_lock, int check_enabled)
 {
        struct sch56xx_watchdog_data *data;
        int err, control, output_enable;
        mutex_unlock(io_lock);
 
        if (control < 0)
-               return NULL;
+               return;
        if (output_enable < 0)
-               return NULL;
+               return;
        if (check_enabled && !(output_enable & SCH56XX_WDOG_OUTPUT_ENABLE)) {
                pr_warn("Watchdog not enabled by BIOS, not registering\n");
-               return NULL;
+               return;
        }
 
-       data = kzalloc(sizeof(struct sch56xx_watchdog_data), GFP_KERNEL);
+       data = devm_kzalloc(parent, sizeof(struct sch56xx_watchdog_data), GFP_KERNEL);
        if (!data)
-               return NULL;
+               return;
 
        data->addr = addr;
        data->io_lock = io_lock;
        data->watchdog_output_enable = output_enable;
 
        watchdog_set_drvdata(&data->wddev, data);
-       err = watchdog_register_device(&data->wddev);
+       err = devm_watchdog_register_device(parent, &data->wddev);
        if (err) {
                pr_err("Registering watchdog chardev: %d\n", err);
-               kfree(data);
-               return NULL;
+               devm_kfree(parent, data);
        }
-
-       return data;
 }
 EXPORT_SYMBOL(sch56xx_watchdog_register);
 
-void sch56xx_watchdog_unregister(struct sch56xx_watchdog_data *data)
-{
-       watchdog_unregister_device(&data->wddev);
-       kfree(data);
-}
-EXPORT_SYMBOL(sch56xx_watchdog_unregister);
-
 /*
  * platform dev find, add and remove functions
  */
 
 int sch56xx_read_virtual_reg12(u16 addr, u16 msb_reg, u16 lsn_reg,
                               int high_nibble);
 
-struct sch56xx_watchdog_data *sch56xx_watchdog_register(struct device *parent,
-       u16 addr, u32 revision, struct mutex *io_lock, int check_enabled);
+void sch56xx_watchdog_register(struct device *parent, u16 addr, u32 revision,
+                              struct mutex *io_lock, int check_enabled);
 void sch56xx_watchdog_unregister(struct sch56xx_watchdog_data *data);