hwc: Writeback for ad is needed only for split displays.

Writeback for assertive display feature is needed only for
split displays and only if ro.qcom.ad is set to 2 by OEM.
This patch removes the unnecessary code and adds the relevant
conditional checks for split displays and property value

Change-Id: Ic36f28441d1a6e93132316b33fe1cf98a6e1efe4
diff --git a/libhwcomposer/hwc_ad.cpp b/libhwcomposer/hwc_ad.cpp
index 34c241d..c2ea4ee 100644
--- a/libhwcomposer/hwc_ad.cpp
+++ b/libhwcomposer/hwc_ad.cpp
@@ -124,14 +124,28 @@
     return ret;
 }
 
-AssertiveDisplay::AssertiveDisplay() :mWbFd(-1), mDoable(false),
-        mFeatureEnabled(false), mDest(overlay::utils::OV_INVALID) {
+AssertiveDisplay::AssertiveDisplay(hwc_context_t *ctx) : mWbFd(-1),
+        mDoable(false), mFeatureEnabled(false),
+        mDest(overlay::utils::OV_INVALID) {
     int fd = openWbFb();
     if(fd >= 0) {
+        //Values in ad node:
         //-1 means feature is disabled on device
         // 0 means feature exists but turned off, will be turned on by hwc
         // 1 means feature is turned on by hwc
-        if(adRead() >= 0) {
+        // Plus, we do this feature only on split primary displays.
+        // Plus, we do this feature only if ro.qcom.ad=2
+
+        char property[PROPERTY_VALUE_MAX];
+        const int ENABLED = 2;
+        int val = 0;
+
+        if(property_get("ro.qcom.ad", property, "0") > 0) {
+            val = atoi(property);
+        }
+
+        if(adRead() >= 0 && isDisplaySplit(ctx, HWC_DISPLAY_PRIMARY) &&
+                val == ENABLED) {
             ALOGD_IF(DEBUG, "Assertive display feature supported");
             mFeatureEnabled = true;
         }
diff --git a/libhwcomposer/hwc_ad.h b/libhwcomposer/hwc_ad.h
index 38b724d..c745b15 100644
--- a/libhwcomposer/hwc_ad.h
+++ b/libhwcomposer/hwc_ad.h
@@ -39,7 +39,7 @@
 
 class AssertiveDisplay {
 public:
-    AssertiveDisplay();
+    AssertiveDisplay(hwc_context_t *ctx);
     void markDoable(hwc_context_t *ctx, const hwc_display_contents_1_t* list);
     bool prepare(hwc_context_t *ctx, const hwc_rect_t& crop,
             const overlay::utils::Whf& whf,
diff --git a/libhwcomposer/hwc_mdpcomp.cpp b/libhwcomposer/hwc_mdpcomp.cpp
index 3e983f3..7ec99c1 100644
--- a/libhwcomposer/hwc_mdpcomp.cpp
+++ b/libhwcomposer/hwc_mdpcomp.cpp
@@ -1057,13 +1057,6 @@
         int fd = hnd->fd;
         uint32_t offset = hnd->offset;
 
-        if(ctx->mAD->isModeOn()) {
-            if(ctx->mAD->draw(ctx, fd, offset)) {
-                fd = ctx->mAD->getDstFd(ctx);
-                offset = ctx->mAD->getDstOffset(ctx);
-            }
-        }
-
         Rotator *rot = mCurrentFrame.mdpToLayer[mdpIndex].rot;
         if(rot) {
             if(!rot->queueBuffer(fd, offset))
diff --git a/libhwcomposer/hwc_utils.cpp b/libhwcomposer/hwc_utils.cpp
index bbed4f6..5ea79b5 100644
--- a/libhwcomposer/hwc_utils.cpp
+++ b/libhwcomposer/hwc_utils.cpp
@@ -171,7 +171,7 @@
     }
 
     MDPComp::init(ctx);
-    ctx->mAD = new AssertiveDisplay();
+    ctx->mAD = new AssertiveDisplay(ctx);
 
     ctx->vstate.enable = false;
     ctx->vstate.fakevsync = false;
@@ -1250,13 +1250,6 @@
     setMdpFlags(layer, mdpFlags, downscale, transform);
     trimLayer(ctx, dpy, transform, crop, dst);
 
-    //Will do something only if feature enabled and conditions suitable
-    //hollow call otherwise
-    if(ctx->mAD->prepare(ctx, crop, whf, hnd)) {
-        overlay::Writeback *wb = overlay::Writeback::getInstance();
-        whf.format = wb->getOutputFormat();
-    }
-
     if(isYuvBuffer(hnd) && //if 90 component or downscale, use rot
             ((transform & HWC_TRANSFORM_ROT_90) || downscale)) {
         *rot = ctx->mRotMgr->getNext();