]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ENGR00170912 HDMI: system hang if set hdmi_mode video=mxcfb1
authorSandor Yu <R01008@freescale.com>
Thu, 5 Jan 2012 12:29:52 +0000 (20:29 +0800)
committerLothar Waßmann <LW@KARO-electronics.de>
Fri, 24 May 2013 06:33:46 +0000 (08:33 +0200)
System will hang at PHY PLL lock wating loop, if HDMI PHY is down.
Added timeout check for HDMI PHY PLL lock waiting.

Signed-off-by: Sandor Yu <R01008@freescale.com>
drivers/video/mxc_hdmi.c

index e73ec4508ca78ce4dc395f332506f53cb7ccfa96..24caf02f3217dbec152d972729e1a186c9dd28be 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011 Freescale Semiconductor, Inc.
+ * Copyright (C) 2011-2012 Freescale Semiconductor, Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -827,6 +827,7 @@ static int hdmi_phy_configure(struct mxc_hdmi *hdmi, unsigned char pRep,
                              unsigned char cRes, int cscOn)
 {
        u8 val;
+       u8 msec;
 
        dev_dbg(&hdmi->pdev->dev, "%s\n", __func__);
 
@@ -1055,15 +1056,17 @@ static int hdmi_phy_configure(struct mxc_hdmi *hdmi, unsigned char pRep,
        mxc_hdmi_phy_gen2_txpwron(1);
        mxc_hdmi_phy_gen2_pddq(0);
 
-       udelay(1000);
-
-       /* wait for the phy PLL to lock */
-       while ((hdmi_readb(HDMI_PHY_STAT0) & HDMI_PHY_TX_PHY_LOCK) == 0)
-               ;
-
-       /* Has the PHY PLL locked? */
-       if ((hdmi_readb(HDMI_PHY_STAT0) & HDMI_PHY_TX_PHY_LOCK) == 0)
-               return false;
+       /*Wait for PHY PLL lock */
+       msec = 4;
+       val = hdmi_readb(HDMI_PHY_STAT0) & HDMI_PHY_TX_PHY_LOCK;
+       while (val == 0) {
+               udelay(1000);
+               if (msec-- == 0) {
+                       dev_err(&hdmi->pdev->dev, "PHY PLL not locked\n");
+                       return false;
+               }
+               val = hdmi_readb(HDMI_PHY_STAT0) & HDMI_PHY_TX_PHY_LOCK;
+       }
 
        return true;
 }