irqreturn_t mdss_mdp_isr(int irq, void *ptr) { u32 isr, mask; isr = MDSS_MDP_REG_READ(MDSS_MDP_REG_INTR_STATUS); pr_debug("isr=%x\n", isr); if (isr == 0) goto done; mask = MDSS_MDP_REG_READ(MDSS_MDP_REG_INTR_EN); MDSS_MDP_REG_WRITE(MDSS_MDP_REG_INTR_CLEAR, isr); isr &= mask; if (isr == 0) goto done; if (isr & MDSS_MDP_INTR_PING_PONG_0_DONE) mdss_mdp_intr_done(MDP_INTR_PING_PONG_0); if (isr & MDSS_MDP_INTR_PING_PONG_1_DONE) mdss_mdp_intr_done(MDP_INTR_PING_PONG_1); if (isr & MDSS_MDP_INTR_PING_PONG_2_DONE) mdss_mdp_intr_done(MDP_INTR_PING_PONG_2); if (isr & MDSS_MDP_INTR_INTF_0_VSYNC) mdss_mdp_intr_done(MDP_INTR_VSYNC_INTF_0); if (isr & MDSS_MDP_INTR_INTF_1_VSYNC) mdss_mdp_intr_done(MDP_INTR_VSYNC_INTF_1); if (isr & MDSS_MDP_INTR_INTF_2_VSYNC) mdss_mdp_intr_done(MDP_INTR_VSYNC_INTF_2); if (isr & MDSS_MDP_INTR_INTF_3_VSYNC) mdss_mdp_intr_done(MDP_INTR_VSYNC_INTF_3); if (isr & MDSS_MDP_INTR_WB_0_DONE) mdss_mdp_intr_done(MDP_INTR_WB_0); if (isr & MDSS_MDP_INTR_WB_1_DONE) mdss_mdp_intr_done(MDP_INTR_WB_1); if (isr & MDSS_MDP_INTR_WB_2_DONE) mdss_mdp_intr_done(MDP_INTR_WB_2); done: return IRQ_HANDLED; }
irqreturn_t mdss_mdp_isr(int irq, void *ptr) { u32 isr, mask, hist_isr, hist_mask; isr = MDSS_MDP_REG_READ(MDSS_MDP_REG_INTR_STATUS); if (isr == 0) goto mdp_isr_done; mask = MDSS_MDP_REG_READ(MDSS_MDP_REG_INTR_EN); MDSS_MDP_REG_WRITE(MDSS_MDP_REG_INTR_CLEAR, isr); pr_debug("%s: isr=%x mask=%x\n", __func__, isr, mask); isr &= mask; if (isr == 0) goto mdp_isr_done; if (isr & MDSS_MDP_INTR_INTF_0_UNDERRUN) mdss_mdp_intr_done(MDP_INTR_UNDERRUN_INTF_0); if (isr & MDSS_MDP_INTR_INTF_1_UNDERRUN) mdss_mdp_intr_done(MDP_INTR_UNDERRUN_INTF_1); if (isr & MDSS_MDP_INTR_INTF_2_UNDERRUN) mdss_mdp_intr_done(MDP_INTR_UNDERRUN_INTF_2); if (isr & MDSS_MDP_INTR_INTF_3_UNDERRUN) mdss_mdp_intr_done(MDP_INTR_UNDERRUN_INTF_3); if (isr & MDSS_MDP_INTR_PING_PONG_0_DONE) mdss_mdp_intr_done(MDP_INTR_PING_PONG_0); if (isr & MDSS_MDP_INTR_PING_PONG_1_DONE) mdss_mdp_intr_done(MDP_INTR_PING_PONG_1); if (isr & MDSS_MDP_INTR_PING_PONG_2_DONE) mdss_mdp_intr_done(MDP_INTR_PING_PONG_2); if (isr & MDSS_MDP_INTR_PING_PONG_0_RD_PTR) mdss_mdp_intr_done(MDP_INTR_PING_PONG_0_RD_PTR); if (isr & MDSS_MDP_INTR_PING_PONG_1_RD_PTR) mdss_mdp_intr_done(MDP_INTR_PING_PONG_1_RD_PTR); if (isr & MDSS_MDP_INTR_PING_PONG_2_RD_PTR) mdss_mdp_intr_done(MDP_INTR_PING_PONG_2_RD_PTR); if (isr & MDSS_MDP_INTR_INTF_0_VSYNC) mdss_mdp_intr_done(MDP_INTR_VSYNC_INTF_0); if (isr & MDSS_MDP_INTR_INTF_1_VSYNC) mdss_mdp_intr_done(MDP_INTR_VSYNC_INTF_1); if (isr & MDSS_MDP_INTR_INTF_2_VSYNC) mdss_mdp_intr_done(MDP_INTR_VSYNC_INTF_2); if (isr & MDSS_MDP_INTR_INTF_3_VSYNC) mdss_mdp_intr_done(MDP_INTR_VSYNC_INTF_3); if (isr & MDSS_MDP_INTR_WB_0_DONE) mdss_mdp_intr_done(MDP_INTR_WB_0); if (isr & MDSS_MDP_INTR_WB_1_DONE) mdss_mdp_intr_done(MDP_INTR_WB_1); if (isr & MDSS_MDP_INTR_WB_2_DONE) mdss_mdp_intr_done(MDP_INTR_WB_2); mdp_isr_done: hist_isr = MDSS_MDP_REG_READ(MDSS_MDP_REG_HIST_INTR_STATUS); if (hist_isr == 0) goto hist_isr_done; hist_mask = MDSS_MDP_REG_READ(MDSS_MDP_REG_HIST_INTR_EN); MDSS_MDP_REG_WRITE(MDSS_MDP_REG_HIST_INTR_CLEAR, hist_isr); hist_isr &= hist_mask; if (hist_isr == 0) goto hist_isr_done; mdss_mdp_hist_intr_done(hist_isr); hist_isr_done: return IRQ_HANDLED; }