msm_fb: Provide support for ARGC and CSC for layer mixer 2
MDP 4.4 supports additional layer mixer (LM2) with ARGC and
CSC blocks. Extend existing ARGC and CSC functionality to additional
layer mixer (LM2).
Change-Id: Id9e5d0a80fcd9a6e3b6132b083d8a43450c0efa1
Signed-off-by: Pravin Tamkhane <pravint@codeaurora.org>
diff --git a/drivers/video/msm/mdp.c b/drivers/video/msm/mdp.c
index e749a44..2ca9296 100644
--- a/drivers/video/msm/mdp.c
+++ b/drivers/video/msm/mdp.c
@@ -177,6 +177,9 @@
case MDP_BLOCK_OVERLAY_1:
base = 0x18000;
break;
+ case MDP_BLOCK_OVERLAY_2:
+ base = (mdp_rev >= MDP_REV_44) ? 0x88000 : 0;
+ break;
default:
break;
}
diff --git a/drivers/video/msm/mdp4_util.c b/drivers/video/msm/mdp4_util.c
index b156d52..b2657cf 100644
--- a/drivers/video/msm/mdp4_util.c
+++ b/drivers/video/msm/mdp4_util.c
@@ -2413,6 +2413,9 @@
case MDP_BLOCK_OVERLAY_1:
base = 0x1A000;
break;
+ case MDP_BLOCK_OVERLAY_2:
+ base = (mdp_rev >= MDP_REV_44) ? 0x8A000 : 0x0;
+ break;
case MDP_BLOCK_VG_1:
base = 0x24000;
break;
@@ -2468,6 +2471,11 @@
output = config->csc_data.flags;
mask = 0x07;
break;
+ case MDP_BLOCK_OVERLAY_2:
+ base = 0x88200;
+ output = config->csc_data.flags;
+ mask = 0x07;
+ break;
default:
pr_err("%s - CSC block does not exist on MDP_BLOCK = %d\n",
__func__, config->block);
@@ -2779,13 +2787,11 @@
#define MDP_PCC_OFFSET 0xA000
#define MDP_DMA_GC_OFFSET 0x8800
-#define MDP_LM_0_GC_OFFSET 0x4800
-#define MDP_LM_1_GC_OFFSET 0x4880
-
+#define MDP_LM_GC_OFFSET 0x4800
#define MDP_DMA_P_OP_MODE_OFFSET 0x70
#define MDP_DMA_S_OP_MODE_OFFSET 0x28
-#define MDP_LM_OP_MODE_OFFSET 0x10
+#define MDP_LM_OP_MODE_OFFSET 0x14
#define DMA_PCC_R2_OFFSET 0x100
@@ -2886,6 +2892,10 @@
valid = (mdp_rev >= MDP_REV_42) ? 1 : 0;
break;
+ case MDP_BLOCK_OVERLAY_2:
+ valid = (mdp_rev >= MDP_REV_44) ? 1 : 0;
+ break;
+
default:
break;
}
@@ -3021,11 +3031,8 @@
case MDP_BLOCK_OVERLAY_0:
case MDP_BLOCK_OVERLAY_1:
- offset = (uint32_t *)(blockbase +
- (MDP_BLOCK_OVERLAY_0 == pgc_ptr->block ?
- MDP_LM_0_GC_OFFSET
- : MDP_LM_1_GC_OFFSET));
-
+ case MDP_BLOCK_OVERLAY_2:
+ offset = (uint32_t *)(blockbase + MDP_LM_GC_OFFSET);
pgc_enable_offset = (uint32_t *)(blockbase
+ MDP_LM_OP_MODE_OFFSET);
lshift_bits = 2;
diff --git a/include/linux/msm_mdp.h b/include/linux/msm_mdp.h
index 84c8bfe..a0af4b5 100644
--- a/include/linux/msm_mdp.h
+++ b/include/linux/msm_mdp.h
@@ -328,6 +328,7 @@
MDP_BLOCK_DMA_P,
MDP_BLOCK_DMA_S,
MDP_BLOCK_DMA_E,
+ MDP_BLOCK_OVERLAY_2,
MDP_BLOCK_MAX,
};