aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGwendal Grignou <gwendal@chromium.org>2014-11-21 13:45:47 -0500
committerJonathan Cameron <jic23@kernel.org>2014-11-22 06:28:04 -0500
commit71222bf5412c78d96bf73d09475d3077ce0789f8 (patch)
tree6f9cec236e6ffc4b38f889cac81dfd36366d11a2
parent56ae98a20591fcb45c6161fc80cf213e47b8ac04 (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.c35
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
573static const struct i2c_device_id ak8975_id[] = { 566static const struct i2c_device_id ak8975_id[] = {
@@ -588,7 +581,7 @@ MODULE_DEVICE_TABLE(of, ak8975_of_match);
588static struct i2c_driver ak8975_driver = { 581static 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,