These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / power / lp8727_charger.c
index 7e741f1..042fb3d 100644 (file)
@@ -508,23 +508,23 @@ 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;
        struct lp8727_platform_data *pdata;
        const char *type;
 
-       /* If charging parameter is not defined, just skip parsing the dt */
-       if (of_get_child_count(np) == 0)
-               goto out;
-
        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);
 
+       /* If charging parameter is not defined, just skip parsing the dt */
+       if (of_get_child_count(np) == 0)
+               return pdata;
+
        for_each_child_of_node(np, child) {
                of_property_read_string(child, "charger-type", &type);
 
@@ -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);