OSDN Git Service

i2c-msm-v2: allow i2c_adapter to retry on arbitration lost
authorDavid Lin <dtwlin@google.com>
Mon, 20 Mar 2017 17:40:20 +0000 (10:40 -0700)
committerArian <arian.kulmer@web.de>
Tue, 19 Nov 2019 14:36:08 +0000 (15:36 +0100)
In case of error on lost arbitration, the host should at least attempt
to retry in case if the bus error is transient (i.e., from signal
interference or misbehaved devices). Use the default 2s timeout setting.

Bug: 35439882

Change-Id: Id9bd5a5ea764405401588220a2d2bf0fd85111f7
Signed-off-by: David Lin <dtwlin@google.com>
drivers/i2c/busses/i2c-msm-v2.c
include/linux/i2c/i2c-msm-v2.h

index 870f698..31e4dc7 100644 (file)
@@ -2886,6 +2886,7 @@ static int i2c_msm_frmwrk_reg(struct platform_device *pdev,
        ctrl->adapter.nr = pdev->id;
        ctrl->adapter.dev.parent = &pdev->dev;
        ctrl->adapter.dev.of_node = pdev->dev.of_node;
+       ctrl->adapter.retries = I2C_MSM_MAX_RETRIES;
        ret = i2c_add_numbered_adapter(&ctrl->adapter);
        if (ret) {
                dev_err(ctrl->dev, "error i2c_add_adapter failed\n");
index 26cd526..cf695be 100644 (file)
@@ -37,6 +37,7 @@ enum msm_i2_debug_level {
 #define MASK_IS_SET_BOOL(val, mask) (MASK_IS_SET(val, mask) ? 1 : 0)
 #define KHz(freq) (1000 * freq)
 #define I2C_MSM_CLK_FAST_PLUS_FREQ  (1000000)
+#define I2C_MSM_MAX_RETRIES 5
 
 /* QUP Registers */
 enum {