diff options
author | Liu Ying <b17645@freescale.com> | 2009-11-10 13:37:30 -0500 |
---|---|---|
committer | Alejandro Gonzalez <alex.gonzalez@digi.com> | 2010-02-12 17:19:32 +0100 |
commit | f50dee220c487b485844912aa1902baa21098f34 (patch) | |
tree | 7c0496c6ab18e501f4b39b67146e773ca671fa76 /drivers/mxc/ipu3/ipu_common.c | |
parent | 03e58d2b2f40f23fb9d729f679812b94e05aa4eb (diff) |
ENGR00118147 IPUv3 FB:Synchronize DP local alpha update with sdc FB
Synchronize DP local alpha update with sdc framebuffer in pan display.
Signed-off-by: Liu Ying <b17645@freescale.com>
Diffstat (limited to 'drivers/mxc/ipu3/ipu_common.c')
-rw-r--r-- | drivers/mxc/ipu3/ipu_common.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/drivers/mxc/ipu3/ipu_common.c b/drivers/mxc/ipu3/ipu_common.c index e654eeea92a2..b7ad5c2a242a 100644 --- a/drivers/mxc/ipu3/ipu_common.c +++ b/drivers/mxc/ipu3/ipu_common.c @@ -1130,16 +1130,21 @@ int32_t ipu_select_buffer(ipu_channel_t channel, ipu_buffer_t type, uint32_t bufNum) { uint32_t dma_chan = channel_2_dma(channel, type); + uint32_t reg; if (dma_chan == IDMA_CHAN_INVALID) return -EINVAL; if (bufNum == 0) { /*Mark buffer 0 as ready. */ - __raw_writel(idma_mask(dma_chan), IPU_CHA_BUF0_RDY(dma_chan)); + reg = __raw_readl(IPU_CHA_BUF0_RDY(dma_chan)); + __raw_writel(idma_mask(dma_chan) | reg, + IPU_CHA_BUF0_RDY(dma_chan)); } else { /*Mark buffer 1 as ready. */ - __raw_writel(idma_mask(dma_chan), IPU_CHA_BUF1_RDY(dma_chan)); + reg = __raw_readl(IPU_CHA_BUF1_RDY(dma_chan)); + __raw_writel(idma_mask(dma_chan) | reg, + IPU_CHA_BUF1_RDY(dma_chan)); } if (channel == MEM_VDI_PRP_VF_MEM) _ipu_vdi_toggle_top_field_man(); @@ -1163,13 +1168,16 @@ int32_t ipu_select_multi_vdi_buffer(uint32_t bufNum) idma_mask(channel_2_dma(MEM_VDI_PRP_VF_MEM_P, IPU_INPUT_BUFFER))| idma_mask(dma_chan)| idma_mask(channel_2_dma(MEM_VDI_PRP_VF_MEM_N, IPU_INPUT_BUFFER)); + uint32_t reg; if (bufNum == 0) { /*Mark buffer 0 as ready. */ - __raw_writel(mask_bit, IPU_CHA_BUF0_RDY(dma_chan)); + reg = __raw_readl(IPU_CHA_BUF0_RDY(dma_chan)); + __raw_writel(mask_bit | reg, IPU_CHA_BUF0_RDY(dma_chan)); } else { /*Mark buffer 1 as ready. */ - __raw_writel(mask_bit, IPU_CHA_BUF1_RDY(dma_chan)); + reg = __raw_readl(IPU_CHA_BUF0_RDY(dma_chan)); + __raw_writel(mask_bit | reg, IPU_CHA_BUF1_RDY(dma_chan)); } _ipu_vdi_toggle_top_field_man(); return 0; |