power->wall_desc.properties = wm831x_wall_props;
        power->wall_desc.num_properties = ARRAY_SIZE(wm831x_wall_props);
        power->wall_desc.get_property = wm831x_wall_get_prop;
-       power->wall = power_supply_register(&pdev->dev, &power->wall_desc,
-                                           NULL);
+       power->wall = devm_power_supply_register(&pdev->dev,
+                                                &power->wall_desc,
+                                                NULL);
        if (IS_ERR(power->wall)) {
                ret = PTR_ERR(power->wall);
                goto err;
        power->usb_desc.properties = wm831x_usb_props;
        power->usb_desc.num_properties = ARRAY_SIZE(wm831x_usb_props);
        power->usb_desc.get_property = wm831x_usb_get_prop;
-       power->usb = power_supply_register(&pdev->dev, &power->usb_desc, NULL);
+       power->usb = devm_power_supply_register(&pdev->dev,
+                                               &power->usb_desc,
+                                               NULL);
        if (IS_ERR(power->usb)) {
                ret = PTR_ERR(power->usb);
                goto err_wall;
                power->battery_desc.num_properties = ARRAY_SIZE(wm831x_bat_props);
                power->battery_desc.get_property = wm831x_bat_get_prop;
                power->battery_desc.use_for_apm = 1;
-               power->battery = power_supply_register(&pdev->dev,
-                                                      &power->battery_desc,
-                                                      NULL);
+               power->battery = devm_power_supply_register(&pdev->dev,
+                                                           &power->battery_desc,
+                                                           NULL);
                if (IS_ERR(power->battery)) {
                        ret = PTR_ERR(power->battery);
                        goto err_usb;
        irq = wm831x_irq(wm831x, platform_get_irq_byname(pdev, "SYSLO"));
        free_irq(irq, power);
 err_battery:
-       if (power->have_battery)
-               power_supply_unregister(power->battery);
 err_usb:
-       power_supply_unregister(power->usb);
 err_wall:
-       power_supply_unregister(power->wall);
 err:
        return ret;
 }
 
        irq = wm831x_irq(wm831x, platform_get_irq_byname(pdev, "SYSLO"));
        free_irq(irq, wm831x_power);
-
-       if (wm831x_power->have_battery)
-               power_supply_unregister(wm831x_power->battery);
-       power_supply_unregister(wm831x_power->wall);
-       power_supply_unregister(wm831x_power->usb);
 }
 
 static struct platform_driver wm831x_power_driver = {