linux (Allwinner): fix patch reverted with 6.0.3

In PR 7022 the upstream patch as below was reverted by
commit - 53503ffc7b05cc6686ee070413e384a1189a112a.
Reintroduce the upstream patch.

--

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c?h=v5.10.150&id=b70f8abc1a440be6802f27631ecb9acb0a158c66

Subject: [PATCH] WIP: drm/bridge: synopsys: Fix CEC not working after power-cyclying

This fixes standby -> power-on on Rockchip platform for, at least,
RK3288/RK3328/RK3399 where CEC wasn't working after powering on again.
It might differ for other phy implementations:
The whole HPD-detection part shoud be reworked and we should in general
avoid to rely in RX_SENSE phy status (at least for HDMI), since it differs
depending on sink's implementation.

--
This commit is contained in:
Rudi Heitbaum 2022-11-01 01:33:52 +00:00
parent a010760349
commit fcdb1299db

View File

@ -13,20 +13,14 @@ depending on sink's implementation.
Signed-off-by: Alex Bee <knaerzche@gmail.com> Signed-off-by: Alex Bee <knaerzche@gmail.com>
--- ---
drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 16 ++++++++-------- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 14 ++++++++------
1 file changed, 9 insertions(+), 8 deletions(-) 1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
index 84cc52858ffb..3c20ef3bd3c1 100644 index 92e621f2714f..7551e3ab77d6 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
@@ -3036,24 +3036,11 @@ static irqreturn_t dw_hdmi_irq(int irq, void *dev_id) @@ -3179,12 +3179,6 @@ static irqreturn_t dw_hdmi_irq(int irq, void *dev_id)
* ask the source to re-read the EDID.
*/
if (intr_stat &
- (HDMI_IH_PHY_STAT0_RX_SENSE | HDMI_IH_PHY_STAT0_HPD)) {
+ (HDMI_IH_PHY_STAT0_RX_SENSE | HDMI_IH_PHY_STAT0_HPD))
dw_hdmi_setup_rx_sense(hdmi,
phy_stat & HDMI_PHY_HPD, phy_stat & HDMI_PHY_HPD,
phy_stat & HDMI_PHY_RX_SENSE); phy_stat & HDMI_PHY_RX_SENSE);
@ -36,17 +30,10 @@ index 84cc52858ffb..3c20ef3bd3c1 100644
- mutex_unlock(&hdmi->cec_notifier_mutex); - mutex_unlock(&hdmi->cec_notifier_mutex);
- } - }
- -
- if (phy_stat & HDMI_PHY_HPD) if (phy_stat & HDMI_PHY_HPD)
- status = connector_status_connected; status = connector_status_connected;
-
- if (!(phy_stat & (HDMI_PHY_HPD | HDMI_PHY_RX_SENSE))) @@ -3201,6 +3195,14 @@ static irqreturn_t dw_hdmi_irq(int irq, void *dev_id)
- status = connector_status_disconnected;
- }
-
if (status != connector_status_unknown) {
dev_dbg(hdmi->dev, "EVENT=%s\n",
status == connector_status_connected ?
@@ -3061,6 +3054,14 @@ static irqreturn_t dw_hdmi_irq(int irq, void *dev_id)
drm_helper_hpd_irq_event(hdmi->bridge.dev); drm_helper_hpd_irq_event(hdmi->bridge.dev);
drm_bridge_hpd_notify(&hdmi->bridge, status); drm_bridge_hpd_notify(&hdmi->bridge, status);
} }