.cache_type = REGCACHE_MAPLE,
 };
 
+static void gpio_set_low_action(void *data)
+{
+       struct lp3952_led_array *priv = data;
+
+       gpiod_set_value(priv->enable_gpio, 0);
+}
+
 static int lp3952_probe(struct i2c_client *client)
 {
        int status;
                return status;
        }
 
+       status = devm_add_action(&client->dev, gpio_set_low_action, priv);
+       if (status)
+               return status;
+
        priv->regmap = devm_regmap_init_i2c(client, &lp3952_regmap);
        if (IS_ERR(priv->regmap)) {
                int err = PTR_ERR(priv->regmap);
        return 0;
 }
 
-static void lp3952_remove(struct i2c_client *client)
-{
-       struct lp3952_led_array *priv;
-
-       priv = i2c_get_clientdata(client);
-       lp3952_on_off(priv, LP3952_LED_ALL, false);
-       gpiod_set_value(priv->enable_gpio, 0);
-}
-
 static const struct i2c_device_id lp3952_id[] = {
        {LP3952_NAME, 0},
        {}
                        .name = LP3952_NAME,
        },
        .probe = lp3952_probe,
-       .remove = lp3952_remove,
        .id_table = lp3952_id,
 };