aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/iio/accel
diff options
context:
space:
mode:
authorIrina Tirdea <irina.tirdea@intel.com>2014-12-10 11:23:54 -0500
committerJonathan Cameron <jic23@kernel.org>2014-12-12 07:28:35 -0500
commit9d02daf738bf01b9d89d4de2b74ed3bc9bebbb40 (patch)
tree20ddb717eb9109d5fb475d846b098f9c06f97a45 /drivers/iio/accel
parentfbd123e913ed25ec861ce3be10725b5beb27ab48 (diff)
iio: accel: kxcjk-1013: power off device if probe fails
When the device is initialized in probe, it is also powered on. If there is an error after the initialization, the device will remain powered on. Power off the device in case probe fails after device initialization. Signed-off-by: Irina Tirdea <irina.tirdea@intel.com> Suggested-by: Daniel Baluta <daniel.baluta@intel.com> Reviewed-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Diffstat (limited to 'drivers/iio/accel')
-rw-r--r--drivers/iio/accel/kxcjk-1013.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/drivers/iio/accel/kxcjk-1013.c b/drivers/iio/accel/kxcjk-1013.c
index 0dc6ccfbee46..a5e7d30bc368 100644
--- a/drivers/iio/accel/kxcjk-1013.c
+++ b/drivers/iio/accel/kxcjk-1013.c
@@ -1240,21 +1240,25 @@ static int kxcjk1013_probe(struct i2c_client *client,
1240 KXCJK1013_IRQ_NAME, 1240 KXCJK1013_IRQ_NAME,
1241 indio_dev); 1241 indio_dev);
1242 if (ret) 1242 if (ret)
1243 return ret; 1243 goto err_poweroff;
1244 1244
1245 data->dready_trig = devm_iio_trigger_alloc(&client->dev, 1245 data->dready_trig = devm_iio_trigger_alloc(&client->dev,
1246 "%s-dev%d", 1246 "%s-dev%d",
1247 indio_dev->name, 1247 indio_dev->name,
1248 indio_dev->id); 1248 indio_dev->id);
1249 if (!data->dready_trig) 1249 if (!data->dready_trig) {
1250 return -ENOMEM; 1250 ret = -ENOMEM;
1251 goto err_poweroff;
1252 }
1251 1253
1252 data->motion_trig = devm_iio_trigger_alloc(&client->dev, 1254 data->motion_trig = devm_iio_trigger_alloc(&client->dev,
1253 "%s-any-motion-dev%d", 1255 "%s-any-motion-dev%d",
1254 indio_dev->name, 1256 indio_dev->name,
1255 indio_dev->id); 1257 indio_dev->id);
1256 if (!data->motion_trig) 1258 if (!data->motion_trig) {
1257 return -ENOMEM; 1259 ret = -ENOMEM;
1260 goto err_poweroff;
1261 }
1258 1262
1259 data->dready_trig->dev.parent = &client->dev; 1263 data->dready_trig->dev.parent = &client->dev;
1260 data->dready_trig->ops = &kxcjk1013_trigger_ops; 1264 data->dready_trig->ops = &kxcjk1013_trigger_ops;
@@ -1263,7 +1267,7 @@ static int kxcjk1013_probe(struct i2c_client *client,
1263 iio_trigger_get(indio_dev->trig); 1267 iio_trigger_get(indio_dev->trig);
1264 ret = iio_trigger_register(data->dready_trig); 1268 ret = iio_trigger_register(data->dready_trig);
1265 if (ret) 1269 if (ret)
1266 return ret; 1270 goto err_poweroff;
1267 1271
1268 data->motion_trig->dev.parent = &client->dev; 1272 data->motion_trig->dev.parent = &client->dev;
1269 data->motion_trig->ops = &kxcjk1013_trigger_ops; 1273 data->motion_trig->ops = &kxcjk1013_trigger_ops;
@@ -1312,6 +1316,8 @@ err_trigger_unregister:
1312 iio_trigger_unregister(data->dready_trig); 1316 iio_trigger_unregister(data->dready_trig);
1313 if (data->motion_trig) 1317 if (data->motion_trig)
1314 iio_trigger_unregister(data->motion_trig); 1318 iio_trigger_unregister(data->motion_trig);
1319err_poweroff:
1320 kxcjk1013_set_mode(data, STANDBY);
1315 1321
1316 return ret; 1322 return ret;
1317} 1323}