diff options
-rw-r--r-- | drivers/iio/magnetometer/mag3110.c | 18 |
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 | ||
322 | static const unsigned long mag3110_scan_masks[] = {0x7, 0xf, 0}; | 322 | static const unsigned long mag3110_scan_masks[] = {0x7, 0xf, 0}; |
323 | 323 | ||
324 | static 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 | |||
324 | static int mag3110_probe(struct i2c_client *client, | 330 | static 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 | ||
375 | buffer_cleanup: | 381 | buffer_cleanup: |
376 | iio_triggered_buffer_cleanup(indio_dev); | 382 | iio_triggered_buffer_cleanup(indio_dev); |
383 | standby_on_error: | ||
384 | mag3110_standby(iio_priv(indio_dev)); | ||
377 | return ret; | 385 | return ret; |
378 | } | 386 | } |
379 | 387 | ||
380 | static 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 | |||
386 | static int mag3110_remove(struct i2c_client *client) | 388 | static 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); |