Merge "hwc: Add support for frame rate change on HDMI devices"
diff --git a/libcopybit/copybit.cpp b/libcopybit/copybit.cpp
index 2302d64..421f531 100644
--- a/libcopybit/copybit.cpp
+++ b/libcopybit/copybit.cpp
@@ -126,6 +126,8 @@
 static int get_format(int format) {
     switch (format) {
         case HAL_PIXEL_FORMAT_RGB_565:       return MDP_RGB_565;
+        case HAL_PIXEL_FORMAT_RGBA_5551:     return MDP_RGBA_5551;
+        case HAL_PIXEL_FORMAT_RGBA_4444:     return MDP_RGBA_4444;
         case HAL_PIXEL_FORMAT_RGBX_8888:     return MDP_RGBX_8888;
         case HAL_PIXEL_FORMAT_BGRX_8888:     return MDP_BGRX_8888;
         case HAL_PIXEL_FORMAT_RGB_888:       return MDP_RGB_888;
@@ -440,6 +442,8 @@
                 // we don't support plane alpha with RGBA formats
                 case HAL_PIXEL_FORMAT_RGBA_8888:
                 case HAL_PIXEL_FORMAT_BGRA_8888:
+                case HAL_PIXEL_FORMAT_RGBA_5551:
+                case HAL_PIXEL_FORMAT_RGBA_4444:
                     ALOGE ("%s : Unsupported Pixel format %d", __FUNCTION__,
                            src->format);
                     return -EINVAL;
diff --git a/libcopybit/copybit.h b/libcopybit/copybit.h
index dbb89f0..9a6de9b 100644
--- a/libcopybit/copybit.h
+++ b/libcopybit/copybit.h
@@ -48,6 +48,8 @@
     COPYBIT_FORMAT_RGB_888      = HAL_PIXEL_FORMAT_RGB_888,
     COPYBIT_FORMAT_RGB_565      = HAL_PIXEL_FORMAT_RGB_565,
     COPYBIT_FORMAT_BGRA_8888    = HAL_PIXEL_FORMAT_BGRA_8888,
+    COPYBIT_FORMAT_RGBA_5551    = HAL_PIXEL_FORMAT_RGBA_5551,
+    COPYBIT_FORMAT_RGBA_4444    = HAL_PIXEL_FORMAT_RGBA_4444,
     COPYBIT_FORMAT_YCbCr_422_SP = 0x10,
     COPYBIT_FORMAT_YCrCb_420_SP = 0x11,
 };
diff --git a/libcopybit/copybit_c2d.cpp b/libcopybit/copybit_c2d.cpp
index 7841bb7..23daa27 100644
--- a/libcopybit/copybit_c2d.cpp
+++ b/libcopybit/copybit_c2d.cpp
@@ -265,6 +265,8 @@
         case HAL_PIXEL_FORMAT_RGBA_8888:      return C2D_COLOR_FORMAT_8888_ARGB |
                                               C2D_FORMAT_SWAP_RB;
         case HAL_PIXEL_FORMAT_BGRA_8888:      return C2D_COLOR_FORMAT_8888_ARGB;
+        case HAL_PIXEL_FORMAT_RGBA_5551:      return C2D_COLOR_FORMAT_5551_RGBA;
+        case HAL_PIXEL_FORMAT_RGBA_4444:      return C2D_COLOR_FORMAT_4444_RGBA;
         case HAL_PIXEL_FORMAT_YCbCr_420_SP:   return C2D_COLOR_FORMAT_420_NV12;
         case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:return C2D_COLOR_FORMAT_420_NV12;
         case HAL_PIXEL_FORMAT_YCrCb_420_SP:   return C2D_COLOR_FORMAT_420_NV21;
@@ -403,7 +405,9 @@
         case HAL_PIXEL_FORMAT_RGBX_8888:
         case HAL_PIXEL_FORMAT_RGB_888:
         case HAL_PIXEL_FORMAT_RGB_565:
-        case HAL_PIXEL_FORMAT_BGRA_8888: {
+        case HAL_PIXEL_FORMAT_BGRA_8888:
+        case HAL_PIXEL_FORMAT_RGBA_5551:
+        case HAL_PIXEL_FORMAT_RGBA_4444: {
             return COPYBIT_SUCCESS;
         }
         default:
diff --git a/libgralloc/alloc_controller.cpp b/libgralloc/alloc_controller.cpp
index c361095..b13166d 100644
--- a/libgralloc/alloc_controller.cpp
+++ b/libgralloc/alloc_controller.cpp
@@ -141,6 +141,8 @@
                 bpp = 3;
                 break;
             case HAL_PIXEL_FORMAT_RGB_565:
+            case HAL_PIXEL_FORMAT_RGBA_5551:
+            case HAL_PIXEL_FORMAT_RGBA_4444:
                 bpp = 2;
                 break;
             default: break;
@@ -400,6 +402,8 @@
             size = alignedw * alignedh * 3;
             break;
         case HAL_PIXEL_FORMAT_RGB_565:
+        case HAL_PIXEL_FORMAT_RGBA_5551:
+        case HAL_PIXEL_FORMAT_RGBA_4444:
         case HAL_PIXEL_FORMAT_RAW_SENSOR:
             size = alignedw * alignedh * 2;
             break;
diff --git a/libhwcomposer/hwc_dump_layers.cpp b/libhwcomposer/hwc_dump_layers.cpp
index 0a92def..e717c26 100644
--- a/libhwcomposer/hwc_dump_layers.cpp
+++ b/libhwcomposer/hwc_dump_layers.cpp
@@ -331,6 +331,8 @@
                 tempSkBmpConfig = SkBitmap::kARGB_8888_Config;
                 break;
             case HAL_PIXEL_FORMAT_RGB_565:
+            case HAL_PIXEL_FORMAT_RGBA_5551:
+            case HAL_PIXEL_FORMAT_RGBA_4444:
                 tempSkBmpConfig = SkBitmap::kRGB_565_Config;
                 break;
             case HAL_PIXEL_FORMAT_RGB_888:
@@ -394,6 +396,12 @@
         case HAL_PIXEL_FORMAT_BGRA_8888:
             strlcpy(pixFormatStr, "BGRA_8888", sizeof(pixFormatStr));
             break;
+        case HAL_PIXEL_FORMAT_RGBA_5551:
+            strlcpy(pixFormatStr, "RGBA_5551", sizeof(pixFormatStr));
+            break;
+        case HAL_PIXEL_FORMAT_RGBA_4444:
+            strlcpy(pixFormatStr, "RGBA_4444", sizeof(pixFormatStr));
+            break;
         case HAL_PIXEL_FORMAT_YV12:
             strlcpy(pixFormatStr, "YV12", sizeof(pixFormatStr));
             break;
diff --git a/libhwcomposer/hwc_utils.cpp b/libhwcomposer/hwc_utils.cpp
index 3eec011..6a74625 100644
--- a/libhwcomposer/hwc_utils.cpp
+++ b/libhwcomposer/hwc_utils.cpp
@@ -1151,22 +1151,26 @@
 bool isRotatorSupportedFormat(private_handle_t *hnd) {
     // Following rotator src formats are supported by mdp driver
     // TODO: Add more formats in future, if mdp driver adds support
-    switch(hnd->format) {
-        case HAL_PIXEL_FORMAT_RGBA_8888:
-        case HAL_PIXEL_FORMAT_RGB_565:
-        case HAL_PIXEL_FORMAT_RGB_888:
-        case HAL_PIXEL_FORMAT_BGRA_8888:
-            return true;
-        default:
-            return false;
+    if(hnd != NULL) {
+        switch(hnd->format) {
+            case HAL_PIXEL_FORMAT_RGBA_8888:
+            case HAL_PIXEL_FORMAT_RGBA_5551:
+            case HAL_PIXEL_FORMAT_RGBA_4444:
+            case HAL_PIXEL_FORMAT_RGB_565:
+            case HAL_PIXEL_FORMAT_RGB_888:
+            case HAL_PIXEL_FORMAT_BGRA_8888:
+                return true;
+            default:
+                return false;
+        }
     }
     return false;
 }
 
 bool isRotationDoable(hwc_context_t *ctx, private_handle_t *hnd) {
-    // Rotate layers, if it is YUV type or rendered by CPU and not
+    // Rotate layers, if it is not secure display buffer and not
     // for the MDP versions below MDP5
-    if((isCPURendered(hnd) && isRotatorSupportedFormat(hnd) &&
+    if((!isSecureDisplayBuffer(hnd) && isRotatorSupportedFormat(hnd) &&
         !ctx->mMDP.version < qdutils::MDSS_V5)
                    || isYuvBuffer(hnd)) {
         return true;
diff --git a/libhwcomposer/hwc_utils.h b/libhwcomposer/hwc_utils.h
index b3d7047..3f903b1 100644
--- a/libhwcomposer/hwc_utils.h
+++ b/libhwcomposer/hwc_utils.h
@@ -467,10 +467,6 @@
     return (hnd && (private_handle_t::PRIV_FLAGS_TILE_RENDERED & hnd->flags));
 }
 
-static inline bool isCPURendered(const private_handle_t* hnd) {
-    return (hnd && (private_handle_t::PRIV_FLAGS_CPU_RENDERED & hnd->flags));
-}
-
 //Return true if buffer is marked locked
 static inline bool isBufferLocked(const private_handle_t* hnd) {
     return (hnd && (private_handle_t::PRIV_FLAGS_HWC_LOCK & hnd->flags));
diff --git a/liboverlay/overlayUtils.cpp b/liboverlay/overlayUtils.cpp
index cbd52ae..32b2013 100644
--- a/liboverlay/overlayUtils.cpp
+++ b/liboverlay/overlayUtils.cpp
@@ -93,6 +93,10 @@
             return MDP_RGB_888;
         case HAL_PIXEL_FORMAT_RGB_565:
             return MDP_RGB_565;
+        case HAL_PIXEL_FORMAT_RGBA_5551:
+            return MDP_RGBA_5551;
+        case HAL_PIXEL_FORMAT_RGBA_4444:
+            return MDP_RGBA_4444;
         case HAL_PIXEL_FORMAT_BGRA_8888:
             return MDP_BGRA_8888;
         case HAL_PIXEL_FORMAT_BGRX_8888:
@@ -126,9 +130,6 @@
             return MDP_Y_CBCR_H2V2_VENUS;
         default:
             //Unsupported by MDP
-            //---graphics.h--------
-            //HAL_PIXEL_FORMAT_RGBA_5551
-            //HAL_PIXEL_FORMAT_RGBA_4444
             //---gralloc_priv.h-----
             //HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO    = 0x7FA30C01
             //HAL_PIXEL_FORMAT_R_8                    = 0x10D
@@ -180,6 +181,10 @@
             return HAL_PIXEL_FORMAT_RGB_888;
         case MDP_RGB_565:
             return HAL_PIXEL_FORMAT_RGB_565;
+        case MDP_RGBA_5551:
+            return HAL_PIXEL_FORMAT_RGBA_5551;
+        case MDP_RGBA_4444:
+            return HAL_PIXEL_FORMAT_RGBA_4444;
         case MDP_BGRA_8888:
             return HAL_PIXEL_FORMAT_BGRA_8888;
         case MDP_Y_CR_CB_GH2V2:
diff --git a/liboverlay/overlayUtils.h b/liboverlay/overlayUtils.h
index 2b8e303..ff6d4ef 100644
--- a/liboverlay/overlayUtils.h
+++ b/liboverlay/overlayUtils.h
@@ -432,6 +432,8 @@
         case MDP_BGRA_8888:
         case MDP_RGBX_8888:
         case MDP_RGB_565:
+        case MDP_RGBA_4444:
+        case MDP_RGBA_5551:
             return true;
         default:
             return false;
@@ -443,6 +445,8 @@
     #define STR(f) #f;
     static const char* formats[MDP_IMGTYPE_LIMIT + 1] = {0};
     formats[MDP_RGB_565] = STR(MDP_RGB_565);
+    formats[MDP_RGBA_5551] = STR(MDP_RGBA_5551);
+    formats[MDP_RGBA_4444] = STR(MDP_RGBA_4444);
     formats[MDP_XRGB_8888] = STR(MDP_XRGB_8888);
     formats[MDP_Y_CBCR_H2V2] = STR(MDP_Y_CBCR_H2V2);
     formats[MDP_Y_CBCR_H2V2_ADRENO] = STR(MDP_Y_CBCR_H2V2_ADRENO);
diff --git a/libqdutils/mdp_version.cpp b/libqdutils/mdp_version.cpp
index 088f82b..e3d3131 100644
--- a/libqdutils/mdp_version.cpp
+++ b/libqdutils/mdp_version.cpp
@@ -57,7 +57,7 @@
 #define MDSS_MDP_HW_REV_103 0x10030000 //8084
 #endif
 #ifndef MDSS_MDP_HW_REV_104
-#define MDSS_MDP_HW_REV_104 0x10040000 //Next version
+#define MDSS_MDP_HW_REV_104 0x10040000 //Unused
 #endif
 #ifndef MDSS_MDP_HW_REV_105
 #define MDSS_MDP_HW_REV_105 0x10050000 //8994
@@ -66,13 +66,16 @@
 #define MDSS_MDP_HW_REV_106 0x10060000 //8x16
 #endif
 #ifndef MDSS_MDP_HW_REV_107
-#define MDSS_MDP_HW_REV_107 0x10070000 //Next version
+#define MDSS_MDP_HW_REV_107 0x10070000 //Unused
 #endif
 #ifndef MDSS_MDP_HW_REV_108
 #define MDSS_MDP_HW_REV_108 0x10080000 //8x39 & 8x36
 #endif
 #ifndef MDSS_MDP_HW_REV_109
-#define MDSS_MDP_HW_REV_109 0x10090000 //Next version
+#define MDSS_MDP_HW_REV_109 0x10090000 //8994 v2
+#endif
+#ifndef MDSS_MDP_HW_REV_110
+#define MDSS_MDP_HW_REV_110 0x100a0000 //Next version
 #endif
 #ifndef MDSS_MDP_HW_REV_200
 #define MDSS_MDP_HW_REV_200 0x20000000 //8092
@@ -470,8 +473,10 @@
 }
 
 bool MDPVersion::is8994() {
-    return (mMdpRev >= MDSS_MDP_HW_REV_105 and
-            mMdpRev < MDSS_MDP_HW_REV_106);
+    return ((mMdpRev >= MDSS_MDP_HW_REV_105 and
+            mMdpRev < MDSS_MDP_HW_REV_106) or
+            (mMdpRev >= MDSS_MDP_HW_REV_109 and
+            mMdpRev < MDSS_MDP_HW_REV_110));
 }
 
 bool MDPVersion::is8x16() {