diff options
author | Gwendal Grignou <gwendal@chromium.org> | 2014-11-21 13:45:47 -0500 |
---|---|---|
committer | Jonathan Cameron <jic23@kernel.org> | 2014-11-22 06:28:04 -0500 |
commit | 71222bf5412c78d96bf73d09475d3077ce0789f8 (patch) | |
tree | 6f9cec236e6ffc4b38f889cac81dfd36366d11a2 | |
parent | 56ae98a20591fcb45c6161fc80cf213e47b8ac04 (diff) |
iio: ak8975: minor fixes
Fixes code duplication, return of function.
Check client->irq properly when setting up optional irq handler.
Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
Reviewed-by: Hartmut Knaack <knaack.h@gmx.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
-rw-r--r-- | drivers/iio/magnetometer/ak8975.c | 35 |
1 files changed, 14 insertions, 21 deletions
diff --git a/drivers/iio/magnetometer/ak8975.c b/drivers/iio/magnetometer/ak8975.c index bf5ef077e791..4e69480e67b5 100644 --- a/drivers/iio/magnetometer/ak8975.c +++ b/drivers/iio/magnetometer/ak8975.c | |||
@@ -64,10 +64,10 @@ | |||
64 | #define AK8975_REG_CNTL 0x0A | 64 | #define AK8975_REG_CNTL 0x0A |
65 | #define AK8975_REG_CNTL_MODE_SHIFT 0 | 65 | #define AK8975_REG_CNTL_MODE_SHIFT 0 |
66 | #define AK8975_REG_CNTL_MODE_MASK (0xF << AK8975_REG_CNTL_MODE_SHIFT) | 66 | #define AK8975_REG_CNTL_MODE_MASK (0xF << AK8975_REG_CNTL_MODE_SHIFT) |
67 | #define AK8975_REG_CNTL_MODE_POWER_DOWN 0 | 67 | #define AK8975_REG_CNTL_MODE_POWER_DOWN 0x00 |
68 | #define AK8975_REG_CNTL_MODE_ONCE 1 | 68 | #define AK8975_REG_CNTL_MODE_ONCE 0x01 |
69 | #define AK8975_REG_CNTL_MODE_SELF_TEST 8 | 69 | #define AK8975_REG_CNTL_MODE_SELF_TEST 0x08 |
70 | #define AK8975_REG_CNTL_MODE_FUSE_ROM 0xF | 70 | #define AK8975_REG_CNTL_MODE_FUSE_ROM 0x0F |
71 | 71 | ||
72 | #define AK8975_REG_RSVC 0x0B | 72 | #define AK8975_REG_RSVC 0x0B |
73 | #define AK8975_REG_ASTC 0x0C | 73 | #define AK8975_REG_ASTC 0x0C |
@@ -166,8 +166,8 @@ static int ak8975_setup_irq(struct ak8975_data *data) | |||
166 | irq = gpio_to_irq(data->eoc_gpio); | 166 | irq = gpio_to_irq(data->eoc_gpio); |
167 | 167 | ||
168 | rc = devm_request_irq(&client->dev, irq, ak8975_irq_handler, | 168 | rc = devm_request_irq(&client->dev, irq, ak8975_irq_handler, |
169 | IRQF_TRIGGER_RISING | IRQF_ONESHOT, | 169 | IRQF_TRIGGER_RISING | IRQF_ONESHOT, |
170 | dev_name(&client->dev), data); | 170 | dev_name(&client->dev), data); |
171 | if (rc < 0) { | 171 | if (rc < 0) { |
172 | dev_err(&client->dev, | 172 | dev_err(&client->dev, |
173 | "irq %d request failed, (gpio %d): %d\n", | 173 | "irq %d request failed, (gpio %d): %d\n", |
@@ -231,8 +231,12 @@ static int ak8975_setup(struct i2c_client *client) | |||
231 | AK8975_REG_CNTL_MODE_POWER_DOWN, | 231 | AK8975_REG_CNTL_MODE_POWER_DOWN, |
232 | AK8975_REG_CNTL_MODE_MASK, | 232 | AK8975_REG_CNTL_MODE_MASK, |
233 | AK8975_REG_CNTL_MODE_SHIFT); | 233 | AK8975_REG_CNTL_MODE_SHIFT); |
234 | if (ret < 0) { | ||
235 | dev_err(&client->dev, "Error in setting power-down mode\n"); | ||
236 | return ret; | ||
237 | } | ||
234 | 238 | ||
235 | if (data->eoc_gpio > 0 || client->irq) { | 239 | if (data->eoc_gpio > 0 || client->irq > 0) { |
236 | ret = ak8975_setup_irq(data); | 240 | ret = ak8975_setup_irq(data); |
237 | if (ret < 0) { | 241 | if (ret < 0) { |
238 | dev_err(&client->dev, | 242 | dev_err(&client->dev, |
@@ -241,11 +245,6 @@ static int ak8975_setup(struct i2c_client *client) | |||
241 | } | 245 | } |
242 | } | 246 | } |
243 | 247 | ||
244 | if (ret < 0) { | ||
245 | dev_err(&client->dev, "Error in setting power-down mode\n"); | ||
246 | return ret; | ||
247 | } | ||
248 | |||
249 | /* | 248 | /* |
250 | * Precalculate scale factor (in Gauss units) for each axis and | 249 | * Precalculate scale factor (in Gauss units) for each axis and |
251 | * store in the device data. | 250 | * store in the device data. |
@@ -550,24 +549,18 @@ static int ak8975_probe(struct i2c_client *client, | |||
550 | /* Perform some basic start-of-day setup of the device. */ | 549 | /* Perform some basic start-of-day setup of the device. */ |
551 | err = ak8975_setup(client); | 550 | err = ak8975_setup(client); |
552 | if (err < 0) { | 551 | if (err < 0) { |
553 | dev_err(&client->dev, "AK8975 initialization fails\n"); | 552 | dev_err(&client->dev, "%s initialization fails\n", name); |
554 | return err; | 553 | return err; |
555 | } | 554 | } |
556 | 555 | ||
557 | data->client = client; | ||
558 | mutex_init(&data->lock); | 556 | mutex_init(&data->lock); |
559 | data->eoc_gpio = eoc_gpio; | ||
560 | indio_dev->dev.parent = &client->dev; | 557 | indio_dev->dev.parent = &client->dev; |
561 | indio_dev->channels = ak8975_channels; | 558 | indio_dev->channels = ak8975_channels; |
562 | indio_dev->num_channels = ARRAY_SIZE(ak8975_channels); | 559 | indio_dev->num_channels = ARRAY_SIZE(ak8975_channels); |
563 | indio_dev->info = &ak8975_info; | 560 | indio_dev->info = &ak8975_info; |
564 | indio_dev->modes = INDIO_DIRECT_MODE; | 561 | indio_dev->modes = INDIO_DIRECT_MODE; |
565 | indio_dev->name = name; | 562 | indio_dev->name = name; |
566 | err = devm_iio_device_register(&client->dev, indio_dev); | 563 | return devm_iio_device_register(&client->dev, indio_dev); |
567 | if (err < 0) | ||
568 | return err; | ||
569 | |||
570 | return 0; | ||
571 | } | 564 | } |
572 | 565 | ||
573 | static const struct i2c_device_id ak8975_id[] = { | 566 | static const struct i2c_device_id ak8975_id[] = { |
@@ -588,7 +581,7 @@ MODULE_DEVICE_TABLE(of, ak8975_of_match); | |||
588 | static struct i2c_driver ak8975_driver = { | 581 | static struct i2c_driver ak8975_driver = { |
589 | .driver = { | 582 | .driver = { |
590 | .name = "ak8975", | 583 | .name = "ak8975", |
591 | .of_match_table = ak8975_of_match, | 584 | .of_match_table = of_match_ptr(ak8975_of_match), |
592 | .acpi_match_table = ACPI_PTR(ak_acpi_match), | 585 | .acpi_match_table = ACPI_PTR(ak_acpi_match), |
593 | }, | 586 | }, |
594 | .probe = ak8975_probe, | 587 | .probe = ak8975_probe, |