| From aee6f25e9c911323aa89a200e1bb160c1613ed3d Mon Sep 17 00:00:00 2001 |
| From: Hans de Goede <hdegoede@redhat.com> |
| Date: Thu, 25 Mar 2021 12:48:22 +0100 |
| Subject: drm/i915/display/vlv_dsi: Do not skip panel_pwr_cycle_delay when disabling the panel |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Hans de Goede <hdegoede@redhat.com> |
| |
| commit aee6f25e9c911323aa89a200e1bb160c1613ed3d upstream. |
| |
| After the recently added commit fe0f1e3bfdfe ("drm/i915: Shut down |
| displays gracefully on reboot"), the DSI panel on a Cherry Trail based |
| Predia Basic tablet would no longer properly light up after reboot. |
| |
| I've managed to reproduce this without rebooting by doing: |
| chvt 3; echo 1 > /sys/class/graphics/fb0/blank;\ |
| echo 0 > /sys/class/graphics/fb0/blank |
| |
| Which rapidly turns the panel off and back on again. |
| |
| The vlv_dsi.c code uses an intel_dsi_msleep() helper for the various delays |
| used for panel on/off, since starting with MIPI-sequences version >= 3 the |
| delays are already included inside the MIPI-sequences. |
| |
| The problems exposed by the "Shut down displays gracefully on reboot" |
| change, show that using this helper for the panel_pwr_cycle_delay is |
| not the right thing to do. This has not been noticed until now because |
| normally the panel never is cycled off and directly on again in quick |
| succession. |
| |
| Change the msleep for the panel_pwr_cycle_delay to a normal msleep() |
| call to avoid the panel staying black after a quick off + on cycle. |
| |
| Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> |
| Fixes: fe0f1e3bfdfe ("drm/i915: Shut down displays gracefully on reboot") |
| Signed-off-by: Hans de Goede <hdegoede@redhat.com> |
| Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> |
| Link: https://patchwork.freedesktop.org/patch/msgid/20210325114823.44922-1-hdegoede@redhat.com |
| (cherry picked from commit 2878b29fc25a0dac0e1c6c94177f07c7f94240f0) |
| Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/gpu/drm/i915/display/vlv_dsi.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/gpu/drm/i915/display/vlv_dsi.c |
| +++ b/drivers/gpu/drm/i915/display/vlv_dsi.c |
| @@ -992,14 +992,14 @@ static void intel_dsi_post_disable(struc |
| * FIXME As we do with eDP, just make a note of the time here |
| * and perform the wait before the next panel power on. |
| */ |
| - intel_dsi_msleep(intel_dsi, intel_dsi->panel_pwr_cycle_delay); |
| + msleep(intel_dsi->panel_pwr_cycle_delay); |
| } |
| |
| static void intel_dsi_shutdown(struct intel_encoder *encoder) |
| { |
| struct intel_dsi *intel_dsi = enc_to_intel_dsi(encoder); |
| |
| - intel_dsi_msleep(intel_dsi, intel_dsi->panel_pwr_cycle_delay); |
| + msleep(intel_dsi->panel_pwr_cycle_delay); |
| } |
| |
| static bool intel_dsi_get_hw_state(struct intel_encoder *encoder, |