}
 };
 
-static int rx51_lp5523_setup(void)
-{
-       return gpio_request_one(RX51_LP5523_CHIP_EN_GPIO, GPIOF_DIR_OUT,
-                       "lp5523_enable");
-}
-
-static void rx51_lp5523_release(void)
-{
-       gpio_free(RX51_LP5523_CHIP_EN_GPIO);
-}
-
-static void rx51_lp5523_enable(bool state)
-{
-       gpio_set_value(RX51_LP5523_CHIP_EN_GPIO, !!state);
-}
-
 static struct lp55xx_platform_data rx51_lp5523_platform_data = {
        .led_config             = rx51_lp5523_led_config,
        .num_channels           = ARRAY_SIZE(rx51_lp5523_led_config),
        .clock_mode             = LP55XX_CLOCK_AUTO,
-       .setup_resources        = rx51_lp5523_setup,
-       .release_resources      = rx51_lp5523_release,
-       .enable                 = rx51_lp5523_enable,
+       .enable_gpio            = RX51_LP5523_CHIP_EN_GPIO,
 };
 #endif
 
 
        .led_config     = &lp5521_pri_led[0],
        .num_channels   = 3,
        .clock_mode     = LP55XX_CLOCK_EXT,
+       .enable_gpio    = -1,
 };
 
 static struct lp55xx_led_config lp5521_sec_led[] = {
        .led_config     = &lp5521_sec_led[0],
        .num_channels   = 3,
        .clock_mode     = LP55XX_CLOCK_EXT,
+       .enable_gpio    = -1,
 };
 
 /* I2C0 devices only available on the first HREF/MOP500 */
 
 #include <linux/module.h>
 #include <linux/platform_data/leds-lp55xx.h>
 #include <linux/slab.h>
+#include <linux/gpio.h>
+#include <linux/of_gpio.h>
 
 #include "leds-lp55xx-common.h"
 
        if (!pdata || !cfg)
                return -EINVAL;
 
-       if (pdata->setup_resources) {
-               ret = pdata->setup_resources();
+       if (gpio_is_valid(pdata->enable_gpio)) {
+               ret = devm_gpio_request_one(dev, pdata->enable_gpio,
+                                           GPIOF_DIR_OUT, "lp5523_enable");
                if (ret < 0) {
-                       dev_err(dev, "setup resoure err: %d\n", ret);
+                       dev_err(dev, "could not acquire enable gpio (err=%d)\n",
+                               ret);
                        goto err;
                }
-       }
 
-       if (pdata->enable) {
-               pdata->enable(0);
+               gpio_set_value(pdata->enable_gpio, 0);
                usleep_range(1000, 2000); /* Keep enable down at least 1ms */
-               pdata->enable(1);
+               gpio_set_value(pdata->enable_gpio, 1);
                usleep_range(1000, 2000); /* 500us abs min. */
        }
 
        if (chip->clk)
                clk_disable_unprepare(chip->clk);
 
-       if (pdata->enable)
-               pdata->enable(0);
-
-       if (pdata->release_resources)
-               pdata->release_resources();
+       if (gpio_is_valid(pdata->enable_gpio))
+               gpio_set_value(pdata->enable_gpio, 0);
 }
 EXPORT_SYMBOL_GPL(lp55xx_deinit_device);
 
        of_property_read_string(np, "label", &pdata->label);
        of_property_read_u8(np, "clock-mode", &pdata->clock_mode);
 
+       pdata->enable_gpio = of_get_named_gpio(np, "enable-gpio", 0);
+
        /* LP8501 specific */
        of_property_read_u8(np, "pwr-sel", (u8 *)&pdata->pwr_sel);
 
 
        /* Clock configuration */
        u8 clock_mode;
 
-       /* Platform specific functions */
-       int (*setup_resources)(void);
-       void (*release_resources)(void);
-       void (*enable)(bool state);
+       /* optional enable GPIO */
+       int enable_gpio;
 
        /* Predefined pattern data */
        struct lp55xx_predef_pattern *patterns;