aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/iio/magnetometer/mag3110.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/drivers/iio/magnetometer/mag3110.c b/drivers/iio/magnetometer/mag3110.c
index e3106b43ef48..261d517428e4 100644
--- a/drivers/iio/magnetometer/mag3110.c
+++ b/drivers/iio/magnetometer/mag3110.c
@@ -321,6 +321,12 @@ static const struct iio_info mag3110_info = {
321 321
322static const unsigned long mag3110_scan_masks[] = {0x7, 0xf, 0}; 322static const unsigned long mag3110_scan_masks[] = {0x7, 0xf, 0};
323 323
324static int mag3110_standby(struct mag3110_data *data)
325{
326 return i2c_smbus_write_byte_data(data->client, MAG3110_CTRL_REG1,
327 data->ctrl_reg1 & ~MAG3110_CTRL_AC);
328}
329
324static int mag3110_probe(struct i2c_client *client, 330static int mag3110_probe(struct i2c_client *client,
325 const struct i2c_device_id *id) 331 const struct i2c_device_id *id)
326{ 332{
@@ -360,12 +366,12 @@ static int mag3110_probe(struct i2c_client *client,
360 ret = i2c_smbus_write_byte_data(client, MAG3110_CTRL_REG2, 366 ret = i2c_smbus_write_byte_data(client, MAG3110_CTRL_REG2,
361 MAG3110_CTRL_AUTO_MRST_EN); 367 MAG3110_CTRL_AUTO_MRST_EN);
362 if (ret < 0) 368 if (ret < 0)
363 return ret; 369 goto standby_on_error;
364 370
365 ret = iio_triggered_buffer_setup(indio_dev, NULL, 371 ret = iio_triggered_buffer_setup(indio_dev, NULL,
366 mag3110_trigger_handler, NULL); 372 mag3110_trigger_handler, NULL);
367 if (ret < 0) 373 if (ret < 0)
368 return ret; 374 goto standby_on_error;
369 375
370 ret = iio_device_register(indio_dev); 376 ret = iio_device_register(indio_dev);
371 if (ret < 0) 377 if (ret < 0)
@@ -374,15 +380,11 @@ static int mag3110_probe(struct i2c_client *client,
374 380
375buffer_cleanup: 381buffer_cleanup:
376 iio_triggered_buffer_cleanup(indio_dev); 382 iio_triggered_buffer_cleanup(indio_dev);
383standby_on_error:
384 mag3110_standby(iio_priv(indio_dev));
377 return ret; 385 return ret;
378} 386}
379 387
380static int mag3110_standby(struct mag3110_data *data)
381{
382 return i2c_smbus_write_byte_data(data->client, MAG3110_CTRL_REG1,
383 data->ctrl_reg1 & ~MAG3110_CTRL_AC);
384}
385
386static int mag3110_remove(struct i2c_client *client) 388static int mag3110_remove(struct i2c_client *client)
387{ 389{
388 struct iio_dev *indio_dev = i2c_get_clientdata(client); 390 struct iio_dev *indio_dev = i2c_get_clientdata(client);