greybus: ENODEV can be an expected error too
authorAlex Elder <elder@linaro.org>
Wed, 10 Dec 2014 20:50:48 +0000 (14:50 -0600)
committerGreg Kroah-Hartman <greg@kroah.com>
Wed, 10 Dec 2014 22:15:20 +0000 (17:15 -0500)
When probing for i2c devices, a read transfer operation can be used.
In this case, it is expected that some devices will not be found, so
ENODEV is an expected failure.  Don't issue a warning if the return
value is -ENODEV.

Note:  I anticipate we might have to be more precise in identifying
this specific case, but for now this eliminates a bogus warning when
probing i2c devices.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
drivers/staging/greybus/i2c-gb.c

index f63b60e..4ef6ea1 100644 (file)
@@ -276,6 +276,14 @@ static void gb_i2c_transfer_response(struct i2c_msg *msgs, u32 msg_count,
        }
 }
 
+/*
+ * Some i2c transfer operations return results that are expected.
+ */
+static bool gb_i2c_expected_transfer_error(int errno)
+{
+       return errno == -EAGAIN || errno == -ENODEV;
+}
+
 static int gb_i2c_transfer_operation(struct gb_i2c_device *gb_i2c_dev,
                                        struct i2c_msg *msgs, u32 msg_count)
 {
@@ -294,7 +302,7 @@ static int gb_i2c_transfer_operation(struct gb_i2c_device *gb_i2c_dev,
                response = operation->response->payload;
                gb_i2c_transfer_response(msgs, msg_count, response);
                ret = msg_count;
-       } else if (ret != -EAGAIN) {
+       } else if (!gb_i2c_expected_transfer_error(ret)) {
                pr_err("transfer operation failed (%d)\n", ret);
        }
        gb_operation_destroy(operation);