drm/i915/dsi: refine send MIPI DCS command sequence
authorLee Shawn C <shawn.c.lee@intel.com>
Wed, 8 Sep 2021 11:56:04 +0000 (19:56 +0800)
committerVandita Kulkarni <vandita.kulkarni@intel.com>
Wed, 8 Sep 2021 14:04:39 +0000 (19:34 +0530)
According to chapter "Sending Commands to the Panel" in bspec #29738
and #49188. If driver try to send DCS long pakcet, we have to program
TX payload register at first. And configure TX header HW register later.
DSC long packet would not be sent properly if we don't follow this
sequence.

Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: Vandita Kulkarni <vandita.kulkarni@intel.com>
Cc: Cooper Chiou <cooper.chiou@intel.com>
Cc: William Tseng <william.tseng@intel.com>
Signed-off-by: Lee Shawn C <shawn.c.lee@intel.com>
Reviewed-by: Vandita Kulkarni <vandita.kulkarni@intel.com>
Signed-off-by: Vandita Kulkarni <vandita.kulkarni@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210908115607.9633-3-shawn.c.lee@intel.com
drivers/gpu/drm/i915/display/icl_dsi.c

index 44289003b709b0740c1edea89d66ef43c0e88bfc..060bc8fb0d3072d22b0a81a759e340c241d3b39d 100644 (file)
@@ -1831,11 +1831,6 @@ static ssize_t gen11_dsi_host_transfer(struct mipi_dsi_host *host,
        if (msg->flags & MIPI_DSI_MSG_USE_LPM)
                enable_lpdt = true;
 
-       /* send packet header */
-       ret  = dsi_send_pkt_hdr(intel_dsi_host, dsi_pkt, enable_lpdt);
-       if (ret < 0)
-               return ret;
-
        /* only long packet contains payload */
        if (mipi_dsi_packet_format_is_long(msg->type)) {
                ret = dsi_send_pkt_payld(intel_dsi_host, dsi_pkt);
@@ -1843,6 +1838,11 @@ static ssize_t gen11_dsi_host_transfer(struct mipi_dsi_host *host,
                        return ret;
        }
 
+       /* send packet header */
+       ret  = dsi_send_pkt_hdr(intel_dsi_host, dsi_pkt, enable_lpdt);
+       if (ret < 0)
+               return ret;
+
        //TODO: add payload receive code if needed
 
        ret = sizeof(dsi_pkt.header) + dsi_pkt.payload_length;