Browse Source

disp: msm: dsi: clear pll unlock error bit before unmasking

Since PLL UNLOCK status bit is a sticky bit, ensure this bit
is cleared before unmasking PLL UNLOCK error.
Otherwise unnecessarily DSI controller will trigger error
interrupts for the stale status, the moment error is
unmasked.

Change-Id: I7b7aa63b5e508dde446a4469d9a6625a071dae00
Signed-off-by: Anand Tarakh <[email protected]>
Anand Tarakh 1 năm trước cách đây
mục cha
commit
958b7d3644
1 tập tin đã thay đổi với 6 bổ sung2 xóa
  1. 6 2
      msm/dsi/dsi_ctrl_hw_cmn.c

+ 6 - 2
msm/dsi/dsi_ctrl_hw_cmn.c

@@ -1774,10 +1774,11 @@ int dsi_ctrl_hw_cmn_ctrl_reset(struct dsi_ctrl_hw *ctrl,
 void dsi_ctrl_hw_cmn_mask_error_intr(struct dsi_ctrl_hw *ctrl, u32 idx, bool en)
 {
 	u32 reg = 0;
-	u32 fifo_status = 0, timeout_status = 0;
+	u32 fifo_status = 0, timeout_status = 0, pll_unlock_status = 0;
 	u32 overflow_clear = BIT(10) | BIT(18) | BIT(22) | BIT(26) | BIT(30);
 	u32 underflow_clear = BIT(19) | BIT(23) | BIT(27) | BIT(31);
 	u32 lp_rx_clear = BIT(4);
+	u32 pll_unlock_clear = BIT(16);
 
 	reg = DSI_R32(ctrl, 0x10c);
 
@@ -1822,8 +1823,11 @@ void dsi_ctrl_hw_cmn_mask_error_intr(struct dsi_ctrl_hw *ctrl, u32 idx, bool en)
 	if (idx & BIT(DSI_PLL_UNLOCK_ERR)) {
 		if (en)
 			reg |= BIT(28);
-		else
+		else {
 			reg &= ~BIT(28);
+			pll_unlock_status = DSI_R32(ctrl, DSI_CLK_STATUS);
+			DSI_W32(ctrl, DSI_CLK_STATUS, pll_unlock_status | pll_unlock_clear);
+		}
 	}
 
 	DSI_W32(ctrl, 0x10c, reg);