drm/i915/dsi: transmit brightness command in HS state
authorWilliam Tseng <william.tseng@intel.com>
Wed, 10 Nov 2021 01:02:17 +0000 (09:02 +0800)
committerJani Nikula <jani.nikula@intel.com>
Thu, 11 Nov 2021 09:51:58 +0000 (11:51 +0200)
In Video Mode, if DSI transcoder is set to transmit packets
in LP Escape mode, screen flickering would be obseved when
brightness commands are continuously and quickly transmitted
to a panel.

The problem may be resolved by changing the mode to transmit
packets from Low Power to HS.

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

index f61ed82..7d23442 100644 (file)
@@ -71,6 +71,7 @@ static void dcs_set_backlight(const struct drm_connector_state *conn_state, u32
        u8 data[2] = {};
        enum port port;
        size_t len = panel->backlight.max > U8_MAX ? 2 : 1;
+       unsigned long mode_flags;
 
        if (len == 1) {
                data[0] = level;
@@ -81,8 +82,11 @@ static void dcs_set_backlight(const struct drm_connector_state *conn_state, u32
 
        for_each_dsi_port(port, intel_dsi->dcs_backlight_ports) {
                dsi_device = intel_dsi->dsi_hosts[port]->device;
+               mode_flags = dsi_device->mode_flags;
+               dsi_device->mode_flags &= ~MIPI_DSI_MODE_LPM;
                mipi_dsi_dcs_write(dsi_device, MIPI_DCS_SET_DISPLAY_BRIGHTNESS,
                                   &data, len);
+               dsi_device->mode_flags = mode_flags;
        }
 }