summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFahad Kunnathadi <fahad.k@linaro.org>2012-10-17 11:10:24 +0530
committerVishal Bhoj <vishal.bhoj@linaro.org>2012-10-18 15:59:06 +0000
commiteec5004d55d310a6960f86997c1cbf790e80b6ac (patch)
treee6e25f8a9754c75ffd026cc084e4070c355c2e8f
parentcbf57601d9d34aea344c98113af84ce6507d7219 (diff)
downloadnative-linaro_android_4.1.2.tar.gz
surfaceflinger: HDMI Samsung Soc Origen HDMI Enabling Codelinaro_android_4.1.2
This code enables HDMI in origen board. Change-Id: I9c95b9a0aa6ed9dae077cff59104e2f95efe9327 Signed-off-by: Fahad Kunnathadi <fahad.k@linaro.org>
-rw-r--r--services/surfaceflinger/Android.mk10
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp101
2 files changed, 111 insertions, 0 deletions
diff --git a/services/surfaceflinger/Android.mk b/services/surfaceflinger/Android.mk
index 6f7a7e1ffd..8a428df8e7 100644
--- a/services/surfaceflinger/Android.mk
+++ b/services/surfaceflinger/Android.mk
@@ -36,6 +36,10 @@ ifeq ($(TARGET_DISABLE_TRIPLE_BUFFERING), true)
LOCAL_CFLAGS += -DTARGET_DISABLE_TRIPLE_BUFFERING
endif
+ifeq ($(BOARD_HAVE_HDMI_SUPPORT),SAMSUNG_HDMI_SUPPORT)
+ LOCAL_CFLAGS += -DSAMSUNG_HDMI_SUPPORT
+endif
+
LOCAL_SHARED_LIBRARIES := \
libcutils \
libhardware \
@@ -46,6 +50,12 @@ LOCAL_SHARED_LIBRARIES := \
libui \
libgui
+ifeq ($(BOARD_HAVE_HDMI_SUPPORT),SAMSUNG_HDMI_SUPPORT)
+ LOCAL_C_INCLUDES += vendor/samsung/origen/proprietary/include
+ LOCAL_LDFLAGS += vendor/samsung/origen/proprietary/system/lib/libfimc.so
+ LOCAL_LDFLAGS += vendor/samsung/origen/proprietary/system/lib/libhdmi.so
+endif
+
# this is only needed for DDMS debugging
ifneq ($(TARGET_BUILD_PDK), true)
LOCAL_SHARED_LIBRARIES += libdvm libandroid_runtime
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 51fcce43e6..dc396573d3 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -64,11 +64,33 @@
#include <private/gui/SharedBufferStack.h>
#include <gui/BitTube.h>
+// true : HDMI cable is pluged in, false: HDMI cable is plugged out
+bool mHdmiCableInserted;
+
+#ifdef SAMSUNG_HDMI_SUPPORT
+#include "SecHdmi.h"
+#endif
+
#define EGL_VERSION_HW_ANDROID 0x3143
#define DISPLAY_COUNT 1
namespace android {
+
+#ifdef SAMSUNG_HDMI_SUPPORT
+extern "C" {
+
+extern bool blit2Hdmi();
+extern int SecHdmi_flush();
+extern int SecHdmi_connect(void);
+extern int SecHdmi_disconnect(void);
+extern int SecHdmi_destroy(void);
+extern void SecHdmi();
+extern int SecHdmi_create(void);
+extern void setHdmiStatus(uint32_t status);
+}
+#endif
+
// ---------------------------------------------------------------------------
const String16 sHardwareTest("android.permission.HARDWARE_TEST");
@@ -295,6 +317,16 @@ status_t SurfaceFlinger::readyToRun()
// put the origin in the left-bottom corner
glOrthof(0, w, 0, h, 0, 1); // l=0, r=w ; b=0, t=h
+#ifdef SAMSUNG_HDMI_SUPPORT
+ SecHdmi();
+ if(SecHdmi_create() == 0)
+ ALOGE("%s::mSecHdmi.create() fail \n", __func__);
+ else
+ {
+ // for it to connect
+ setHdmiStatus(1);
+ }
+#endif
// start the EventThread
mEventThread = new EventThread(this);
@@ -477,6 +509,14 @@ void SurfaceFlinger::postFramebuffer()
mLastSwapBufferTime = systemTime() - now;
mDebugInSwapBuffers = 0;
mSwapRegion.clear();
+
+#ifdef SAMSUNG_HDMI_SUPPORT
+ if(mHdmiCableInserted == true)
+ {
+ blit2Hdmi();
+ }
+#endif
+
}
void SurfaceFlinger::handleTransaction(uint32_t transactionFlags)
@@ -1166,6 +1206,67 @@ void SurfaceFlinger::setTransactionState(const Vector<ComposerState>& state,
}
}
+#ifdef SAMSUNG_HDMI_SUPPORT
+void setHdmiStatus(uint32_t status)
+{
+
+ bool hdmiCableInserted = (bool)status;
+
+ if(mHdmiCableInserted == hdmiCableInserted)
+ return;
+
+ if(hdmiCableInserted == true)
+ {
+ if(SecHdmi_connect() == 0)
+ {
+ hdmiCableInserted = false;
+ }
+ }
+ else
+ {
+ if(SecHdmi_disconnect() == 0)
+ {
+ ALOGE("%s::mSecHdmi.disconnect() fail\n", __func__);
+ }
+ }
+
+ mHdmiCableInserted = hdmiCableInserted;
+
+ if(mHdmiCableInserted == true)
+ {
+ blit2Hdmi();
+ }
+}
+
+void setHdmiMode(uint32_t mode)
+{
+}
+
+void setHdmiResolution(uint32_t resolution)
+{
+}
+
+void setHdmiHdcp(uint32_t hdcp_en)
+{
+}
+
+bool blit2Hdmi(void)
+{
+ if(mHdmiCableInserted == false)
+ {
+ ALOGE("mHdmiCableInserted == false fail");
+ return false;
+ }
+
+ if(SecHdmi_flush() == false)
+ {
+ ALOGE("%s::mSecHdmi.flush() fail\n", __func__);
+ }
+
+ return true;
+}
+
+#endif
sp<ISurface> SurfaceFlinger::createSurface(
ISurfaceComposerClient::surface_data_t* params,
const String8& name,