void mdss_dsi_irq_ctrl(struct mdss_dsi_ctrl_pdata *ctrl, int enable, int isr) { unsigned long flags; if (ctrl == NULL) { pr_err("%s: Invalid ctrl\n", __func__); return; } spin_lock_irqsave(&dsi_irq_lock, flags); if (enable) { if (ctrl->irq_cnt == 0) mdss_enable_irq(ctrl->mdss_hw); ctrl->irq_cnt++; } else { if (ctrl->irq_cnt) { ctrl->irq_cnt--; if (ctrl->irq_cnt == 0) { if (isr) mdss_disable_irq_nosync(ctrl->mdss_hw); else mdss_disable_irq(ctrl->mdss_hw); } } } pr_debug("%s: ctrl=%d enable=%d cnt=%d\n", __func__, ctrl->ndx, enable, ctrl->irq_cnt); spin_unlock_irqrestore(&dsi_irq_lock, flags); }
void mdss_dsi_disable_irq_nosync(struct mdss_dsi_ctrl_pdata *ctrl, u32 term) { spin_lock(&ctrl->irq_lock); if (!(ctrl->dsi_irq_mask & term)) { spin_unlock(&ctrl->irq_lock); return; } ctrl->dsi_irq_mask &= ~term; if (ctrl->dsi_irq_mask == 0) { mdss_disable_irq_nosync(ctrl->dsi_hw); pr_debug("%s: IRQ Disable, ndx=%d mask=%x term=%x\n", __func__, ctrl->ndx, (int)ctrl->dsi_irq_mask, (int)term); } spin_unlock(&ctrl->irq_lock); }
/* called from interrupt context */ void mdss_mdp_irq_disable_nosync(u32 intr_type, u32 intf_num) { u32 irq; irq = mdss_mdp_irq_mask(intr_type, intf_num); if (!(mdss_res->mdp_irq_mask & irq)) { pr_warn("MDSS MDP IRQ-%x is NOT set, mask=%x\n", irq, mdss_res->mdp_irq_mask); } else { mdss_res->mdp_irq_mask &= ~irq; MDSS_MDP_REG_WRITE(MDSS_MDP_REG_INTR_EN, mdss_res->mdp_irq_mask); if ((mdss_res->mdp_irq_mask == 0) && (mdss_res->mdp_hist_irq_mask == 0)) mdss_disable_irq_nosync(&mdss_mdp_hw); } }
/* * mdss_dsi_disale_irq_nosync() should be called * from interrupt context */ void mdss_dsi_disable_irq_nosync(struct mdss_dsi_ctrl_pdata *ctrl, u32 term) { spin_lock(&ctrl->irq_lock); #if defined (CONFIG_FB_MSM_MDSS_DSI_DBG) xlog(__func__, ctrl->ndx, term, ctrl->dsi_irq_mask, (u32)ctrl->dsi_hw, 0, 0xB); #endif if (!(ctrl->dsi_irq_mask & term)) { spin_unlock(&ctrl->irq_lock); return; } ctrl->dsi_irq_mask &= ~term; if (ctrl->dsi_irq_mask == 0) { mdss_disable_irq_nosync(ctrl->dsi_hw); pr_debug("%s: IRQ Disable, ndx=%d mask=%x term=%x\n", __func__, ctrl->ndx, (int)ctrl->dsi_irq_mask, (int)term); } #if defined (CONFIG_FB_MSM_MDSS_DSI_DBG) xlog(__func__, ctrl->ndx, term, ctrl->dsi_irq_mask, (u32)ctrl->dsi_hw, 0, 0xE); #endif spin_unlock(&ctrl->irq_lock); }