return param;
 }
 
-static int lp8727_parse_dt(struct device *dev)
+static struct lp8727_platform_data *lp8727_parse_dt(struct device *dev)
 {
        struct device_node *np = dev->of_node;
        struct device_node *child;
 
        /* If charging parameter is not defined, just skip parsing the dt */
        if (of_get_child_count(np) == 0)
-               goto out;
+               return NULL;
 
        pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
        if (!pdata)
-               return -ENOMEM;
+               return ERR_PTR(-ENOMEM);
 
        of_property_read_u32(np, "debounce-ms", &pdata->debounce_msec);
 
                        pdata->usb = lp8727_parse_charge_pdata(dev, child);
        }
 
-       dev->platform_data = pdata;
-out:
-       return 0;
+       return pdata;
 }
 #else
-static int lp8727_parse_dt(struct device *dev)
+static struct lp8727_platform_data *lp8727_parse_dt(struct device *dev)
 {
-       return 0;
+       return NULL;
 }
 #endif
 
 static int lp8727_probe(struct i2c_client *cl, const struct i2c_device_id *id)
 {
        struct lp8727_chg *pchg;
+       struct lp8727_platform_data *pdata;
        int ret;
 
        if (!i2c_check_functionality(cl->adapter, I2C_FUNC_SMBUS_I2C_BLOCK))
                return -EIO;
 
        if (cl->dev.of_node) {
-               ret = lp8727_parse_dt(&cl->dev);
-               if (ret)
-                       return ret;
+               pdata = lp8727_parse_dt(&cl->dev);
+               if (IS_ERR(pdata))
+                       return PTR_ERR(pdata);
+       } else {
+               pdata = dev_get_platdata(&cl->dev);
        }
 
        pchg = devm_kzalloc(&cl->dev, sizeof(*pchg), GFP_KERNEL);
 
        pchg->client = cl;
        pchg->dev = &cl->dev;
-       pchg->pdata = cl->dev.platform_data;
+       pchg->pdata = pdata;
        i2c_set_clientdata(cl, pchg);
 
        mutex_init(&pchg->xfer_lock);