summaryrefslogtreecommitdiff
path: root/drivers/mxc/ipu3
diff options
context:
space:
mode:
authorLiu Ying <b17645@freescale.com>2009-11-10 13:37:30 -0500
committerAlejandro Gonzalez <alex.gonzalez@digi.com>2010-02-12 17:19:32 +0100
commitf50dee220c487b485844912aa1902baa21098f34 (patch)
tree7c0496c6ab18e501f4b39b67146e773ca671fa76 /drivers/mxc/ipu3
parent03e58d2b2f40f23fb9d729f679812b94e05aa4eb (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')
-rw-r--r--drivers/mxc/ipu3/ipu_common.c16
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;