linux/drivers/gpu/drm/bridge
Romain Perier 187697a454 drm: dw_hdmi: Don't rely on the status of the bridge for updating HPD
Currently, the irq handler that monitors changes for HPD and RX_SENSE
relies on the status of the bridge for updating the status of the HPD.
The update is done only when the bridge is enabled.

However, on Rockchip platforms we have found use cases where it could be
a problem. When HDMI is being used, turning off/on the screen or
unplugging/re-plugging the cable, the following simplified code path
will happen:

- dw_hdmi_irq() will be triggered by an HPD event, as the bridge is on
hdmi->disabled is false, then the handler will update the rxsense flag
accordingly.
- dw_hdmi_update_power() will be invoked with the mode
DRM_FORCE_UNSPECIFIED and rxsense == 1, so dw_hdmi_poweroff() will be
called and the PHY will be desactivated (its pixel clocks and TMDS)

[...]

- dw_hdmi_bridge_disable() will be invoked, the bridge will be marked as
disabled.

- dw_hdmi_irq() will be triggered by an HPD event, as the bridge is
currently disabled the HPD status won't be updated, so hdmi->rxsense
won't be changed. Even if the data part of the PHY is disabled, this
information coming from the HDMI Transmitter is correct and should be
saved.

[...]

- dw_hdmi_bridge_enable() will be invoked, the bridge will be marked as
enabled.
- dw_hdmi_update_power() will be called. When hdmi->force is equal to
DRM_FORCE_UNSPECIFIED the function will rely on hdmi->rxsense. If this
field has not been updated by the irq handler, it will be false and
DRM_FORCE_ON won't be put to hdmi->force.

Consequently, most of the time dw_hdmi_poweron() won't be called in this
use case, TMDS won't be re-enabled the PHY won't be re-initialized,
resulting in a "Signal not found".

This commit fixes the issue by removing the check for "!hdmi->disabled".
As already explained, even if the PHY is partially disabled, information
coming from HDMI Transmitter about HPD should be saved for a later use.

Signed-off-by: Romain Perier <romain.perier@collabora.com>
Signed-off-by: Archit Taneja <architt@codeaurora.org>
Link: https://patchwork.freedesktop.org/patch/143602/
2017-03-27 11:50:48 +05:30
..
adv7511 drm/bridge: adv7511: Re-write the i2c address before EDID probing 2017-01-19 09:16:58 +05:30
analogix drm/bridge: analogix_dp: add helpers for capture of frame CRCs 2017-03-06 12:14:27 -05:00
synopsys drm: dw_hdmi: Don't rely on the status of the bridge for updating HPD 2017-03-27 11:50:48 +05:30
Kconfig drm: bridge: dw-hdmi: Move the driver to a separate directory. 2017-03-10 16:32:54 +05:30
Makefile drm: bridge: dw-hdmi: Move the driver to a separate directory. 2017-03-10 16:32:54 +05:30
analogix-anx78xx.c drm/bridge: Call drm_connector_cleanup directly 2016-10-05 15:20:36 +02:00
analogix-anx78xx.h drm/bridge: Add Analogix anx78xx support 2016-05-12 11:32:14 +02:00
dumb-vga-dac.c drm: bridge: vga-dac: Add adi,adv7123 compatible string 2017-03-05 19:01:44 +05:30
lvds-encoder.c drm: bridge: lvds-encoder: Add thine,thc63lvdm83d compatible string 2017-03-05 19:01:45 +05:30
megachips-stdpxxxx-ge-b850v3-fw.c drm/bridge: Drivers for megachips-stdpxxxx-ge-b850v3-fw (LVDS-DP++) 2017-03-05 18:45:36 +05:30
nxp-ptn3460.c drm: Make the connector .detect() callback optional 2016-12-01 10:05:53 -05:00
parade-ps8622.c drm: Make the connector .detect() callback optional 2016-12-01 10:05:53 -05:00
sii902x.c drm/bridge: Add sii902x driver 2016-06-20 15:55:49 +02:00
sil-sii8620.c drm/bridge/sii8620: add missing error handling in probe 2017-02-23 11:06:11 -05:00
sil-sii8620.h drm/bridge/sii8620: add HSIC initialization code 2017-02-02 15:15:30 +05:30
tc358767.c drm: Make the connector .detect() callback optional 2016-12-01 10:05:53 -05:00
ti-tfp410.c drm/bridge/tfp410: Make symbol tfp410_platform_driver static 2017-02-13 10:46:22 +05:30