[PATCH] drm/dp: Split dual mode DDC read

Imre Deak imre.deak at intel.com
Sun Nov 13 23:40:51 UTC 2016


Signed-off-by: Imre Deak <imre.deak at intel.com>
---
 drivers/gpu/drm/drm_dp_dual_mode_helper.c | 22 ++++++++++++++++------
 1 file changed, 16 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/drm_dp_dual_mode_helper.c b/drivers/gpu/drm/drm_dp_dual_mode_helper.c
index e025639..dbdb510 100644
--- a/drivers/gpu/drm/drm_dp_dual_mode_helper.c
+++ b/drivers/gpu/drm/drm_dp_dual_mode_helper.c
@@ -74,15 +74,25 @@ ssize_t drm_dp_dual_mode_read(struct i2c_adapter *adapter,
 			.buf = buffer,
 		},
 	};
+	int i;
 	int ret;
 
-	ret = i2c_transfer(adapter, msgs, ARRAY_SIZE(msgs));
-	if (ret < 0)
-		return ret;
-	if (ret != ARRAY_SIZE(msgs))
-		return -EPROTO;
+	if (!adapter->algo->master_xfer)
+		return -EOPNOTSUPP;
 
-	return 0;
+	i2c_lock_bus(adapter, I2C_LOCK_SEGMENT);
+	for (i = 0; i < ARRAY_SIZE(msgs); i++) {
+		ret = __i2c_transfer(adapter, msgs, 1);
+		if (ret < 0)
+			break;
+		if (ret != 1) {
+			ret = -EPROTO;
+			break;
+		}
+	}
+	i2c_unlock_bus(adapter, I2C_LOCK_SEGMENT);
+
+	return ret < 0 ? ret : 0;
 }
 EXPORT_SYMBOL(drm_dp_dual_mode_read);
 
-- 
2.5.0



More information about the Intel-gfx-trybot mailing list