aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHartmut Knaack <knaack.h@gmx.de>2015-07-09 17:51:29 -0400
committerJonathan Cameron <jic23@kernel.org>2015-07-19 09:53:16 -0400
commit037e966f2d63896129220112644f32962af6d115 (patch)
tree54ee1dfff326d82657179b66261350c000a6b567
parentc5d0db0690ff0a963dc082e7645268c466bf9a84 (diff)
iio:light:stk3310: move device register to end of probe
iio_device_register should be the last operation during probe. Therefor move up interrupt setup code and while at it, change the check for invalid values of client->irq to be smaller than zero. Fixes: 3dd477acbdd1 ("iio: light: Add threshold interrupt support for STK3310") As the device_register makes the userspace interfaces of the device available it is possible for requests to come in before the probe sequence has finished. This can lead to unhandled interrupts and similar. Signed-off-by: Hartmut Knaack <knaack.h@gmx.de> Reviewed-by: Tiberiu Breana <tiberiu.a.breana@intel.com> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
-rw-r--r--drivers/iio/light/stk3310.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/drivers/iio/light/stk3310.c b/drivers/iio/light/stk3310.c
index c1a218236be5..e7e6e5a2b1f8 100644
--- a/drivers/iio/light/stk3310.c
+++ b/drivers/iio/light/stk3310.c
@@ -608,13 +608,7 @@ static int stk3310_probe(struct i2c_client *client,
608 if (ret < 0) 608 if (ret < 0)
609 return ret; 609 return ret;
610 610
611 ret = iio_device_register(indio_dev); 611 if (client->irq < 0)
612 if (ret < 0) {
613 dev_err(&client->dev, "device_register failed\n");
614 stk3310_set_state(data, STK3310_STATE_STANDBY);
615 }
616
617 if (client->irq <= 0)
618 client->irq = stk3310_gpio_probe(client); 612 client->irq = stk3310_gpio_probe(client);
619 613
620 if (client->irq >= 0) { 614 if (client->irq >= 0) {
@@ -629,6 +623,12 @@ static int stk3310_probe(struct i2c_client *client,
629 client->irq); 623 client->irq);
630 } 624 }
631 625
626 ret = iio_device_register(indio_dev);
627 if (ret < 0) {
628 dev_err(&client->dev, "device_register failed\n");
629 stk3310_set_state(data, STK3310_STATE_STANDBY);
630 }
631
632 return ret; 632 return ret;
633} 633}
634 634