diff options
author | Fahad Kunnathadi <fahad.k@linaro.org> | 2012-10-17 11:10:24 +0530 |
---|---|---|
committer | Vishal Bhoj <vishal.bhoj@linaro.org> | 2012-10-18 15:59:06 +0000 |
commit | eec5004d55d310a6960f86997c1cbf790e80b6ac (patch) | |
tree | e6e25f8a9754c75ffd026cc084e4070c355c2e8f | |
parent | cbf57601d9d34aea344c98113af84ce6507d7219 (diff) | |
download | native-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.mk | 10 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 101 |
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, |