drm/dp: Implement I2C_M_STOP for i2c-over-aux
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 28 Sep 2018 18:04:01 +0000 (21:04 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Tue, 22 Jan 2019 19:34:13 +0000 (21:34 +0200)
Consult the I2C_M_STOP flag to determine whether to set the MOT bit or
not. Makes it possible to send multiple messages in one go with
stop+start generated between the messages (as opposed nothing or
repstart depending on whether thr address/rw changed).

Not sure anyone has actual use for this but figured I'd handle it
since I started to look at that flag for MST remote i2c xfers.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180928180403.22499-3-ville.syrjala@linux.intel.com
Reviewed-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
drivers/gpu/drm/drm_dp_helper.c

index fc2a98a82250a0217c46a7877e296b7208ab9ce5..d4ecedccbb317771ecd6b0998cea80ca135d4208 100644 (file)
@@ -887,7 +887,8 @@ static void drm_dp_i2c_msg_set_request(struct drm_dp_aux_msg *msg,
 {
        msg->request = (i2c_msg->flags & I2C_M_RD) ?
                DP_AUX_I2C_READ : DP_AUX_I2C_WRITE;
-       msg->request |= DP_AUX_I2C_MOT;
+       if (!(i2c_msg->flags & I2C_M_STOP))
+               msg->request |= DP_AUX_I2C_MOT;
 }
 
 /*