|
@@ -508,7 +508,7 @@ out:
|
|
|
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;
|
|
@@ -517,11 +517,11 @@ static int lp8727_parse_dt(struct device *dev)
|
|
|
|
|
|
/* 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);
|
|
|
|
|
@@ -535,29 +535,30 @@ static int lp8727_parse_dt(struct device *dev)
|
|
|
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);
|
|
@@ -566,7 +567,7 @@ static int lp8727_probe(struct i2c_client *cl, const struct i2c_device_id *id)
|
|
|
|
|
|
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);
|