.attrs = ds1621_attributes,
        .is_visible = ds1621_attribute_visible
 };
-
-static const struct attribute_group *ds1621_groups[] = {
-       &ds1621_group,
-       NULL
-};
+__ATTRIBUTE_GROUPS(ds1621);
 
 static int ds1621_probe(struct i2c_client *client,
                        const struct i2c_device_id *id)
        /* Initialize the DS1621 chip */
        ds1621_init_client(data, client);
 
-       hwmon_dev = hwmon_device_register_with_groups(&client->dev,
-                                                     client->name, data,
-                                                     ds1621_groups);
+       hwmon_dev = devm_hwmon_device_register_with_groups(&client->dev,
+                                                          client->name, data,
+                                                          ds1621_groups);
        if (IS_ERR(hwmon_dev))
                return PTR_ERR(hwmon_dev);
 
-       i2c_set_clientdata(client, hwmon_dev);
-
-       return 0;
-}
-
-static int ds1621_remove(struct i2c_client *client)
-{
-       struct device *hwmon_dev = i2c_get_clientdata(client);
-
-       hwmon_device_unregister(hwmon_dev);
-
        return 0;
 }
 
                .name   = "ds1621",
        },
        .probe          = ds1621_probe,
-       .remove         = ds1621_remove,
        .id_table       = ds1621_id,
 };