drm/bridge: ps8640: Add software to support aux defer
authorJason Yen <jason.yen@paradetech.corp-partner.google.com>
Fri, 30 Sep 2022 04:25:06 +0000 (12:25 +0800)
committerDouglas Anderson <dianders@chromium.org>
Wed, 5 Oct 2022 15:09:52 +0000 (08:09 -0700)
This chip can not handle aux defer if the host directly program
its aux registers to access edid/dpcd. So we need let software
to handle the aux defer situation.

Signed-off-by: Jason Yen <jason.yen@paradetech.corp-partner.google.com>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Signed-off-by: Douglas Anderson <dianders@chromium.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20220930042506.2529522-1-jason.yen@paradetech.corp-partner.google.com
drivers/gpu/drm/bridge/parade-ps8640.c

index d7483c1..5be6562 100644 (file)
@@ -286,7 +286,6 @@ static ssize_t ps8640_aux_transfer_msg(struct drm_dp_aux *aux,
        }
 
        switch (data & SWAUX_STATUS_MASK) {
-       /* Ignore the DEFER cases as they are already handled in hardware */
        case SWAUX_STATUS_NACK:
        case SWAUX_STATUS_I2C_NACK:
                /*
@@ -303,6 +302,14 @@ static ssize_t ps8640_aux_transfer_msg(struct drm_dp_aux *aux,
        case SWAUX_STATUS_ACKM:
                len = data & SWAUX_M_MASK;
                break;
+       case SWAUX_STATUS_DEFER:
+       case SWAUX_STATUS_I2C_DEFER:
+               if (is_native_aux)
+                       msg->reply |= DP_AUX_NATIVE_REPLY_DEFER;
+               else
+                       msg->reply |= DP_AUX_I2C_REPLY_DEFER;
+               len = data & SWAUX_M_MASK;
+               break;
        case SWAUX_STATUS_INVALID:
                return -EOPNOTSUPP;
        case SWAUX_STATUS_TIMEOUT: