if (!pdata)
                return -EINVAL;
 
-       leds_data = kzalloc(sizeof(struct netxbig_led_data) * pdata->num_leds,
-                           GFP_KERNEL);
+       leds_data = devm_kzalloc(&pdev->dev,
+               sizeof(struct netxbig_led_data) * pdata->num_leds, GFP_KERNEL);
        if (!leds_data)
                return -ENOMEM;
 
        ret = gpio_ext_init(pdata->gpio_ext);
        if (ret < 0)
-               goto err_free_data;
+               return ret;
 
        for (i = 0; i < pdata->num_leds; i++) {
                ret = create_netxbig_led(pdev, &leds_data[i], &pdata->leds[i]);
                delete_netxbig_led(&leds_data[i]);
 
        gpio_ext_free(pdata->gpio_ext);
-err_free_data:
-       kfree(leds_data);
-
        return ret;
 }
 
                delete_netxbig_led(&leds_data[i]);
 
        gpio_ext_free(pdata->gpio_ext);
-       kfree(leds_data);
 
        return 0;
 }