aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMilo Kim <milo.kim@ti.com>2015-08-25 01:54:11 -0400
committerMark Brown <broonie@kernel.org>2015-08-25 14:36:15 -0400
commitd9ffae15f7b1933c71dfb7c5e8ef61296d2833d7 (patch)
treea98b28aad8c886efc226e357fb281beeb81f2cc0
parentbc0195aad0daa2ad5b0d76cce22b167bc3435590 (diff)
regulator: lp872x: use the private data instead of updating I2C device platform data
Currently, lp872x driver parses the DT and copies values into the 'cl->dev.platform_data' if 'of_node' exists. This may have architectural issue. Platform data is configurable through the DT or I2C board info inside the platform area. However, lp872x driver changes this configuration when it is loaded. The lp872x driver should get data from the platform side and use the private data, 'lp872x->pdata' instead of changing the original platform data. Signed-off-by: Milo Kim <milo.kim@ti.com> Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r--drivers/regulator/lp872x.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/regulator/lp872x.c b/drivers/regulator/lp872x.c
index 3de328ab41f3..9142c1adc70c 100644
--- a/drivers/regulator/lp872x.c
+++ b/drivers/regulator/lp872x.c
@@ -903,6 +903,7 @@ static struct lp872x_platform_data
903static int lp872x_probe(struct i2c_client *cl, const struct i2c_device_id *id) 903static int lp872x_probe(struct i2c_client *cl, const struct i2c_device_id *id)
904{ 904{
905 struct lp872x *lp; 905 struct lp872x *lp;
906 struct lp872x_platform_data *pdata;
906 int ret; 907 int ret;
907 const int lp872x_num_regulators[] = { 908 const int lp872x_num_regulators[] = {
908 [LP8720] = LP8720_NUM_REGULATORS, 909 [LP8720] = LP8720_NUM_REGULATORS,
@@ -910,8 +911,10 @@ static int lp872x_probe(struct i2c_client *cl, const struct i2c_device_id *id)
910 }; 911 };
911 912
912 if (cl->dev.of_node) 913 if (cl->dev.of_node)
913 cl->dev.platform_data = lp872x_populate_pdata_from_dt(&cl->dev, 914 pdata = lp872x_populate_pdata_from_dt(&cl->dev,
914 (enum lp872x_id)id->driver_data); 915 (enum lp872x_id)id->driver_data);
916 else
917 pdata = dev_get_platdata(&cl->dev);
915 918
916 lp = devm_kzalloc(&cl->dev, sizeof(struct lp872x), GFP_KERNEL); 919 lp = devm_kzalloc(&cl->dev, sizeof(struct lp872x), GFP_KERNEL);
917 if (!lp) 920 if (!lp)
@@ -927,7 +930,7 @@ static int lp872x_probe(struct i2c_client *cl, const struct i2c_device_id *id)
927 } 930 }
928 931
929 lp->dev = &cl->dev; 932 lp->dev = &cl->dev;
930 lp->pdata = dev_get_platdata(&cl->dev); 933 lp->pdata = pdata;
931 lp->chipid = id->driver_data; 934 lp->chipid = id->driver_data;
932 i2c_set_clientdata(cl, lp); 935 i2c_set_clientdata(cl, lp);
933 936