struct adp5520_bl *data;
        int ret = 0;
 
-       data = kzalloc(sizeof(*data), GFP_KERNEL);
+       data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
        if (data == NULL)
                return -ENOMEM;
 
 
        if (data->pdata  == NULL) {
                dev_err(&pdev->dev, "missing platform data\n");
-               kfree(data);
                return -ENODEV;
        }
 
                                       &adp5520_bl_ops, &props);
        if (IS_ERR(bl)) {
                dev_err(&pdev->dev, "failed to register backlight\n");
-               kfree(data);
                return PTR_ERR(bl);
        }
 
        if (ret) {
                dev_err(&pdev->dev, "failed to register sysfs\n");
                backlight_device_unregister(bl);
-               kfree(data);
        }
 
        platform_set_drvdata(pdev, bl);
                                &adp5520_bl_attr_group);
 
        backlight_device_unregister(bl);
-       kfree(data);
 
        return 0;
 }