diff --git a/exynos4/hal/include/FimgApi.h b/exynos4/hal/include/FimgApi.h
new file mode 100644
index 0000000..05ccfb8
--- /dev/null
+++ b/exynos4/hal/include/FimgApi.h
@@ -0,0 +1,158 @@
+/*
+**
+** Copyright 2009 Samsung Electronics Co, Ltd.
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+**
+**
+*/
+
+#ifndef FIMG_API_H
+#define FIMG_API_H
+
+#include <utils/Log.h>
+#include "sec_g2d_4x.h"
+
+#undef REAL_DEBUG
+#undef ANDROID_LOG
+
+#if defined(REAL_DEBUG)
+#ifdef ANDROID_LOG
+#define PRINT  SLOGE
+#define PRINTD SLOGD
+#else
+#define PRINT  printf
+#define PRINTD printf
+#endif
+#else
+void VOID_FUNC(const char *format, ...);
+
+#define PRINT  VOID_FUNC
+#define PRINTD VOID_FUNC
+#endif
+
+struct Fimg {
+    int             srcX;
+    int             srcY;
+    unsigned int    srcW;
+    unsigned int    srcH;
+    unsigned int    srcFWStride; // this is not w, just stride (w * bpp)
+    unsigned int    srcFH;
+    unsigned int    srcBPP;
+    int             srcColorFormat;
+    unsigned char  *srcAddr;
+
+    int             dstX;
+    int             dstY;
+    unsigned int    dstW;
+    unsigned int    dstH;
+    unsigned int    dstFWStride; // this is not w, just stride (w * bpp)
+    unsigned int    dstFH;
+    unsigned int    dstBPP;
+    int             dstColorFormat;
+    unsigned char  *dstAddr;
+
+    int             clipT;
+    int             clipB;
+    int             clipL;
+    int             clipR;
+
+    int             mskX;
+    int             mskY;
+    unsigned int    mskW;
+    unsigned int    mskH;
+    unsigned int    mskFWStride; // this is not w, just stride (w * bpp)
+    unsigned int    mskFH;
+    unsigned int    mskBPP;
+    int             mskColorFormat;
+    unsigned char  *mskAddr;
+
+    unsigned long   fillcolor;
+    int             rotate;
+    unsigned int    alpha;
+    int             xfermode;
+    int             isDither;
+    int             isFilter;
+    int             colorFilter;
+    int             matrixType;
+    float           matrixSx;
+    float           matrixSy;
+};
+
+#ifdef __cplusplus
+
+struct blit_op_table {
+    int op;
+    const char *str;
+};
+
+extern struct blit_op_table optbl[];
+
+class FimgApi
+{
+    public:
+#endif
+
+#ifdef __cplusplus
+    private :
+        bool    m_flagCreate;
+
+    protected :
+        FimgApi();
+        FimgApi(const FimgApi& rhs) {}
+        virtual ~FimgApi();
+
+    public:
+        bool        Create(void);
+        bool        Destroy(void);
+        inline bool FlagCreate(void) { return m_flagCreate; }
+        bool        Stretch(struct fimg2d_blit *cmd);
+        bool        Sync(void);
+
+    protected:
+        virtual bool t_Create(void);
+        virtual bool t_Destroy(void);
+        virtual bool t_Stretch(struct fimg2d_blit *cmd);
+        virtual bool t_Sync(void);
+        virtual bool t_Lock(void);
+        virtual bool t_UnLock(void);
+
+};
+#endif
+
+#ifdef __cplusplus
+extern "C"
+#endif
+struct FimgApi *createFimgApi();
+
+#ifdef __cplusplus
+extern "C"
+#endif
+void destroyFimgApi(FimgApi *ptrFimgApi);
+
+#ifdef __cplusplus
+extern "C"
+#endif
+int stretchFimgApi(struct fimg2d_blit *cmd);
+#ifdef __cplusplus
+extern "C"
+#endif
+int SyncFimgApi(void);
+
+void printDataBlit(char *title, struct fimg2d_blit *cmd);
+void printDataBlitRotate(int rotate);
+void printDataBlitImage(char *title, struct fimg2d_image *image);
+void printDataBlitRect(char *title, struct fimg2d_rect *rect);
+void printDataBlitScale(struct fimg2d_scale *scaling);
+#endif //FIMG_API_H
diff --git a/exynos4/hal/libfimg4x/sec_g2d_4x.h b/exynos4/hal/include/sec_g2d_4x.h
similarity index 68%
rename from exynos4/hal/libfimg4x/sec_g2d_4x.h
rename to exynos4/hal/include/sec_g2d_4x.h
index b9ddbb2..601e367 100644
--- a/exynos4/hal/libfimg4x/sec_g2d_4x.h
+++ b/exynos4/hal/include/sec_g2d_4x.h
@@ -13,28 +13,50 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef __SEC_G2D_4X_H
-#define __SEC_G2D_4X_H __FILE__
 
-#define SEC_G2D_DEV_NAME             "/dev/fimg2d"
+#ifndef _SEC_G2D_DRIVER_H_
+#define _SEC_G2D_DRIVER_H_
+
+#define SEC_G2D_DEV_NAME        "/dev/fimg2d"
+#define G2D_ALPHA_VALUE_MAX     (255)
 
 /* ioctl commands */
-#define FIMG2D_IOCTL_MAGIC           'F'
-#define FIMG2D_BITBLT_BLIT           _IOWR(FIMG2D_IOCTL_MAGIC, 0, struct fimg2d_blit)
-#define FIMG2D_BITBLT_SYNC           _IO(FIMG2D_IOCTL_MAGIC, 1)
-#define FIMG2D_BITBLT_VERSION        _IOR(FIMG2D_IOCTL_MAGIC, 2, struct fimg2d_version)
+#define FIMG2D_IOCTL_MAGIC      'F'
+#define FIMG2D_BITBLT_BLIT      _IOWR(FIMG2D_IOCTL_MAGIC, 0, \
+                                                struct fimg2d_blit)
+#define FIMG2D_BITBLT_SYNC      _IOW(FIMG2D_IOCTL_MAGIC, 1, int)
+#define FIMG2D_BITBLT_VERSION   _IOR(FIMG2D_IOCTL_MAGIC, 2, \
+                                                struct fimg2d_version)
 
-#define G2D_ALPHA_VALUE_MAX          (255)
 
+/**
+ * @BLIT_SYNC: sync mode, to wait for blit done irq
+ * @BLIT_ASYNC: async mode, not to wait for blit done irq
+ *
+ */
+enum blit_sync {
+    BLIT_SYNC,
+    BLIT_ASYNC,
+};
+
+/**
+ * @ADDR_PHYS: physical address
+ * @ADDR_USER: user virtual address (physically Non-contiguous)
+ * @ADDR_USER_RSVD: user virtual address (physically Contiguous)
+ * @ADDR_DEVICE: specific device virtual address
+ */
 enum addr_space {
-    ADDR_UNKNOWN,
+    ADDR_NONE,
     ADDR_PHYS,
     ADDR_KERN,
     ADDR_USER,
+    ADDR_USER_RSVD,
     ADDR_DEVICE,
 };
 
 /**
+ * Pixel order complies with little-endian style
+ *
  * DO NOT CHANGE THIS ORDER
  */
 enum pixel_order {
@@ -117,12 +139,12 @@
 };
 
 /**
- * @SCALING_PERCENTAGE: percentage of width, height
- * @SCALING_PIXELS: coordinate of src, dest
+ * @SCALING_PIXELS: ratio in pixels
+ * @SCALING_RATIO: ratio in fixed point 16
  */
 enum scaling_factor {
-    SCALING_PERCENTAGE,
     SCALING_PIXELS,
+    SCALING_RATIO,
 };
 
 /**
@@ -188,11 +210,13 @@
     BLIT_OP_CONJ_DST_ATOP, BLIT_OP_CONJ_ATOP_REV = BLIT_OP_CONJ_DST_ATOP,
     BLIT_OP_CONJ_XOR,
 
-    /* Add new operation type here */
-
     /* user select coefficient manually */
     BLIT_OP_USER_COEFF,
 
+    BLIT_OP_USER_SRC_GA,
+
+    /* Add new operation type here */
+
     /* end of blit operation */
     BLIT_OP_END,
 
@@ -200,25 +224,12 @@
     BLIT_OP_NOT_SUPPORTED
 };
 
-#define MAX_FIMG2D_BLIT_OP (int)BLIT_OP_END
-
-struct fimg2d_version {
-    unsigned int hw;
-    unsigned int sw;
-};
-
 /**
  * @start: start address or unique id of image
- * @size: whole length of allocated image
- * @cacheable: memory is cacheable
- * @pinnable: memory is pinnable. currently not supported.
  */
 struct fimg2d_addr {
     enum addr_space type;
     unsigned long start;
-    size_t size;
-    int cacheable;
-    int pinnable;
 };
 
 struct fimg2d_rect {
@@ -229,30 +240,21 @@
 };
 
 /**
- * if factor is percentage, scale_w and scale_h are valid
- * if factor is pixels, src_w, src_h, dst_w, dst_h are valid
+ * pixels can be different from src, dst or clip rect
  */
 struct fimg2d_scale {
     enum scaling mode;
-    enum scaling_factor factor;
 
-    /* percentage */
-    int scale_w;
-    int scale_h;
-
-    /* pixels */
+    /* ratio in pixels */
     int src_w, src_h;
     int dst_w, dst_h;
 };
 
-/**
- * coordinate from start address(0,0) of image
- */
 struct fimg2d_clip {
     bool enable;
     int x1;
     int y1;
-    int x2;    /* x1 + width */
+    int x2; /* x1 + width */
     int y2; /* y1 + height */
 };
 
@@ -272,55 +274,65 @@
 
 /**
  * @plane2: address info for CbCr in YCbCr 2plane mode
+ * @rect: crop/clip rect
+ * @need_cacheopr: true if cache coherency is required
  */
 struct fimg2d_image {
-    struct fimg2d_addr addr;
-    struct fimg2d_addr plane2;
     int width;
     int height;
     int stride;
     enum pixel_order order;
     enum color_format fmt;
-};
-
-struct fimg2d_param {
-    enum blit_op op;
-    unsigned long fillcolor;
-    unsigned char g_alpha;
-    enum premultiplied premult;
-    bool dither;
-    enum rotation rotate;
-    struct fimg2d_scale *scaling;
-    struct fimg2d_repeat *repeat;
-    struct fimg2d_bluscr *bluscr;
-    struct fimg2d_clip *clipping;
+    struct fimg2d_addr addr;
+    struct fimg2d_addr plane2;
+    struct fimg2d_rect rect;
+    bool need_cacheopr;
 };
 
 /**
- * @g_alpha: 0xff is opaque, 0x0 is transparnet
- * @seq_no: used for debugging
+ * @solid_color:
+ *         src color instead of src image / dst color instead of dst read image.
+ *         color format and order must be ARGB8888(A is MSB).
+ *         premultiplied format must be same to 'premult' of this struct.
+ * @g_alpha: global(constant) alpha. 0xff is opaque, 0 is transparnet
+ * @dither: dithering
+ * @rotate: rotation degree in clockwise
+ * @premult: alpha premultiplied mode for read & write
+ * @scaling: common scaling info for src and mask image.
+ * @repeat: repeat type (tile mode)
+ * @bluscr: blue screen and transparent mode
  */
-struct fimg2d_blit {
-    enum blit_op op;
-
-    enum premultiplied premult;
+struct fimg2d_param {
+    unsigned long solid_color;
     unsigned char g_alpha;
     bool dither;
     enum rotation rotate;
-    struct fimg2d_scale *scaling;
-    struct fimg2d_repeat *repeat;
-    struct fimg2d_bluscr *bluscr;
-    struct fimg2d_clip *clipping;
+    enum premultiplied premult;
+    struct fimg2d_scale scaling;
+    struct fimg2d_repeat repeat;
+    struct fimg2d_bluscr bluscr;
+    struct fimg2d_clip clipping;
+};
 
-    unsigned long solid_color;
+/**
+ * @op: blit operation mode
+ * @src: set when using src image
+ * @msk: set when using mask image
+ * @tmp: set when using 2-step blit at a single command
+ * @dst: dst must not be null
+ *         * tmp image must be the same to dst except memory address
+ * @seq_no: user debugging info.
+ *          for example, user can set sequence number or pid.
+ */
+struct fimg2d_blit {
+    enum blit_op op;
+    struct fimg2d_param param;
     struct fimg2d_image *src;
-    struct fimg2d_image *dst;
     struct fimg2d_image *msk;
-
-    struct fimg2d_rect *src_rect;
-    struct fimg2d_rect *dst_rect;
-    struct fimg2d_rect *msk_rect;
-
+    struct fimg2d_image *tmp;
+    struct fimg2d_image *dst;
+    enum blit_sync sync;
     unsigned int seq_no;
 };
-#endif /* __SEC_G2D_4X_H__ */
+
+#endif /*_SEC_G2D_DRIVER_H_*/
diff --git a/exynos4/hal/libfimg4x/Android.mk b/exynos4/hal/libfimg4x/Android.mk
index f42da3f..a43d635 100644
--- a/exynos4/hal/libfimg4x/Android.mk
+++ b/exynos4/hal/libfimg4x/Android.mk
@@ -2,15 +2,15 @@
 include $(CLEAR_VARS)
 
 ifeq ($(BOARD_USES_FIMGAPI),true)
-
-#LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../include
-LOCAL_C_INCLUDES += external/skia/include/core
 LOCAL_MODULE_TAGS := optional
 
 LOCAL_SRC_FILES:= \
 	FimgApi.cpp   \
 	FimgExynos4.cpp
 
+LOCAL_C_INCLUDES += \
+	$(LOCAL_PATH)/../include
+
 LOCAL_SHARED_LIBRARIES:= liblog libutils libbinder
 
 LOCAL_MODULE:= libfimg
diff --git a/exynos4/hal/libfimg4x/FimgApi.cpp b/exynos4/hal/libfimg4x/FimgApi.cpp
index 444e9c9..8cca61c 100644
--- a/exynos4/hal/libfimg4x/FimgApi.cpp
+++ b/exynos4/hal/libfimg4x/FimgApi.cpp
@@ -270,107 +270,61 @@
 
 void printDataBlit(char *title, struct fimg2d_blit *cmd)
 {
-    ALOGI("%s\n", title);
+    SLOGI("%s\n", title);
 
-    ALOGI("    sequence_no. = %u\n", cmd->seq_no);
-    ALOGI("    blit_op      = %d(%s)\n", cmd->op, optbl[cmd->op].str);
-    ALOGI("    fill_color   = %X\n", cmd->solid_color);
-    ALOGI("    global_alpha = %u\n", (unsigned int)cmd->g_alpha);
-    ALOGI("    PREMULT      = %s\n", cmd->premult == PREMULTIPLIED ? "PREMULTIPLIED" : "NON-PREMULTIPLIED");
-    ALOGI("    do_dither    = %s\n", cmd->dither == true ? "dither" : "no-dither");
+    SLOGI("    sequence_no. = %u\n", cmd->seq_no);
+    SLOGI("    blit_op      = %d(%s)\n", cmd->op, optbl[cmd->op].str);
+    SLOGI("    fill_color   = %X\n", cmd->param.solid_color);
+    SLOGI("    global_alpha = %u\n", (unsigned int)cmd->param.g_alpha);
+    SLOGI("    PREMULT      = %s\n", cmd->param.premult == PREMULTIPLIED ? "PREMULTIPLIED" : "NON-PREMULTIPLIED");
+    SLOGI("    do_dither    = %s\n", cmd->param.dither == true ? "dither" : "no-dither");
 
-    printDataBlitRotate(cmd->rotate);
+    printDataBlitRotate(cmd->param.rotate);
 
-    printDataBlitScale(cmd->scaling);
+    printDataBlitScale(&cmd->param.scaling);
 
     printDataBlitImage("SRC", cmd->src);
     printDataBlitImage("DST", cmd->dst);
     printDataBlitImage("MSK", cmd->msk);
 
-    printDataBlitRect("SRC", cmd->src_rect);
-    printDataBlitRect("DST", cmd->dst_rect);
-    printDataBlitRect("MSK", cmd->msk_rect);
-
-    printDataBlitClip(cmd->clipping);
+    printDataBlitRect("SRC", &cmd->src->rect);
+    printDataBlitRect("DST", &cmd->dst->rect);
+    printDataBlitRect("MSK", &cmd->msk->rect);
 }
 
 void printDataBlitImage(char *title, struct fimg2d_image *image)
 {
     if (NULL != image) {
-    ALOGI("    Image_%s\n", title);
-    ALOGI("        addr = %X\n", image->addr.start);
-    ALOGI("        size = %u\n", image->addr.size);
-    ALOGI("        (width, height) = (%d, %d)\n", image->width, image->height);
-    ALOGI("        format = %d\n", image->fmt);
+    SLOGI("    Image_%s\n", title);
+    SLOGI("        addr = %X\n", image->addr.start);
+    SLOGI("        format = %d\n", image->fmt);
     } else
-        ALOGI("    Image_%s : NULL\n", title);
+        SLOGI("    Image_%s : NULL\n", title);
 }
 
 void printDataBlitRect(char *title, struct fimg2d_rect *rect)
 {
     if (NULL != rect) {
-        ALOGI("    RECT_%s\n", title);
-        ALOGI("        (x1, y1) = (%d, %d)\n", rect->x1, rect->y1);
-        ALOGI("        (x2, y2) = (%d, %d)\n", rect->x2, rect->y2);
-        ALOGI("        (width, height) = (%d, %d)\n", rect->x2 - rect->x1, rect->y2 - rect->y1);
+        SLOGI("    RECT_%s\n", title);
+        SLOGI("        (x1, y1) = (%d, %d)\n", rect->x1, rect->y1);
+        SLOGI("        (x2, y2) = (%d, %d)\n", rect->x2, rect->y2);
+        SLOGI("        (width, height) = (%d, %d)\n", rect->x2 - rect->x1, rect->y2 - rect->y1);
     } else
-        ALOGI("    RECT_%s : NULL\n", title);
+        SLOGI("    RECT_%s : NULL\n", title);
 }
 
-void printDataBlitRotate(enum rotation rotate)
+void printDataBlitRotate(int rotate)
 {
-    ALOGI("    ROTATE : %d\n", rotate);
-}
-
-void printDataBlitClip(struct fimg2d_clip *clip)
-{
-    if (NULL != clip) {
-        ALOGI("    CLIP\n");
-        ALOGI("        clip %s\n", clip->enable == true ? "enabled" : "disabled");
-        ALOGI("        (x1, y1) = (%d, %d)\n", clip->x1, clip->y1);
-        ALOGI("        (x2, y2) = (%d, %d)\n", clip->x2, clip->y2);
-        ALOGI("        (width, hight) = (%d, %d)\n", clip->x2 - clip->x1, clip->y2 - clip->y1);
-    } else
-        ALOGI("    CLIP : NULL\n");
+    SLOGI("    ROTATE : %d\n", rotate);
 }
 
 void printDataBlitScale(struct fimg2d_scale *scaling)
 {
-    if (NULL != scaling) {
-        ALOGI("    SCALING\n");
-        ALOGI("        scale_mode : %s\n", scaling->mode == 0 ?
-                                          "NO_SCALING" :
-                              (scaling->mode == 1 ? "SCALING_NEAREST" : "SCALING_BILINEAR"));
-        ALOGI("        scaling_factor_unit : %s\n", scaling->factor == 0 ? "PERCENT" : "PIXEL");
-
-        if (scaling->factor == 0)
-            ALOGI("        scaling_factor : (scale_w, scale_y) = (%d, %d)\n", scaling->scale_w, scaling->scale_h);
-        else {
-            ALOGI("        src : (src_w, src_h) = (%d, %d)\n", scaling->src_w, scaling->src_h);
-            ALOGI("        dst : (dst_w, dst_h) = (%d, %d)\n", scaling->dst_w, scaling->dst_h);
-            ALOGI("        scaling_factor : (scale_w, scale_y) = (%3.2f, %3.2f)\n", (double)scaling->dst_w / scaling->src_w, (double)scaling->dst_h / scaling->src_h);
-        }
-    } else
-        ALOGI("    SCALING : NULL(NO SCALE MODE)\n");
-
-}
-
-void printDataMatrix(int matrixType)
-{
-    ALOGI("    MATRIX\n");
-
-    if (matrixType & SkMatrix::kIdentity_Mask)
-        ALOGI("        Matrix_type : Identity_Mask\n");
-
-    if (matrixType & SkMatrix::kTranslate_Mask)
-        ALOGI("        Matrix_type : Translate_Mask(the matrix has translation)\n");
-
-    if (matrixType & SkMatrix::kScale_Mask)
-        ALOGI("        Matrix_type : Scale_Mask(the matrix has X or Y scale)\n");
-
-    if (matrixType & SkMatrix::kAffine_Mask)
-        ALOGI("        Matrix_type : Affine_Mask(the matrix skews or rotates)\n");
-
-    if (matrixType & SkMatrix::kPerspective_Mask)
-        ALOGI("        Matrix_type : Perspective_Mask(the matrix is in perspective)\n");
+    SLOGI("    SCALING\n");
+    SLOGI("        scale_mode : %s\n", scaling->mode == 0 ?
+                                      "NO_SCALING" :
+                          (scaling->mode == 1 ? "SCALING_NEAREST" : "SCALING_BILINEAR"));
+    SLOGI("        src : (src_w, src_h) = (%d, %d)\n", scaling->src_w, scaling->src_h);
+    SLOGI("        dst : (dst_w, dst_h) = (%d, %d)\n", scaling->dst_w, scaling->dst_h);
+    SLOGI("        scaling_factor : (scale_w, scale_y) = (%3.2f, %3.2f)\n", (double)scaling->dst_w / scaling->src_w, (double)scaling->dst_h / scaling->src_h);
 }
diff --git a/exynos4/hal/libfimg4x/FimgApi.h b/exynos4/hal/libfimg4x/FimgApi.h
deleted file mode 100644
index 925345e..0000000
--- a/exynos4/hal/libfimg4x/FimgApi.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-**
-** Copyright 2009 Samsung Electronics Co, Ltd.
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-**
-**
-*/
-
-#ifndef FIMG_API_H
-#define FIMG_API_H
-
-#include <utils/Log.h>
-#include "SkMatrix.h"
-#include "sec_g2d_4x.h"
-
-#define REAL_DEBUG
-#define ANDROID_ALOG
-
-#if defined(REAL_DEBUG)
-#ifdef ANDROID_ALOG
-#define PRINT  ALOGE
-#define PRINTD ALOGD
-#else
-#define PRINT  printf
-#define PRINTD printf
-#endif
-#else
-void VOID_FUNC(const char *format, ...);
-
-#define PRINT  VOID_FUNC
-#define PRINTD VOID_FUNC
-#endif
-
-#ifdef __cplusplus
-
-struct blit_op_table {
-    int op;
-    const char *str;
-};
-
-extern struct blit_op_table optbl[];
-
-class FimgApi
-{
-public:
-#endif
-
-#ifdef __cplusplus
-private :
-    bool    m_flagCreate;
-
-protected :
-    FimgApi();
-    FimgApi(const FimgApi& rhs) {}
-    virtual ~FimgApi();
-
-public:
-    bool        Create(void);
-    bool        Destroy(void);
-    inline bool FlagCreate(void) { return m_flagCreate; }
-    bool        Stretch(struct fimg2d_blit *cmd);
-    bool        Sync(void);
-
-protected:
-    virtual bool t_Create(void);
-    virtual bool t_Destroy(void);
-    virtual bool t_Stretch(struct fimg2d_blit *cmd);
-    virtual bool t_Sync(void);
-    virtual bool t_Lock(void);
-    virtual bool t_UnLock(void);
-
-};
-#endif
-
-#ifdef __cplusplus
-extern "C"
-#endif
-struct FimgApi *createFimgApi();
-
-#ifdef __cplusplus
-extern "C"
-#endif
-void destroyFimgApi(FimgApi *ptrFimgApi);
-
-#ifdef __cplusplus
-extern "C"
-#endif
-int stretchFimgApi(struct fimg2d_blit *cmd);
-#ifdef __cplusplus
-extern "C"
-#endif
-int SyncFimgApi(void);
-
-void printDataBlit(char *title, struct fimg2d_blit *cmd);
-void printDataBlitRotate(enum rotation rotate);
-void printDataBlitImage(char *title, struct fimg2d_image *image);
-void printDataBlitRect(char *title, struct fimg2d_rect *rect);
-void printDataBlitClip(struct fimg2d_clip *clip);
-void printDataBlitScale(struct fimg2d_scale *scaling);
-void printDataMatrix(int matrixType);
-
-#endif //FIMG_API_H
diff --git a/exynos4/hal/libfimg4x/FimgExynos4.h b/exynos4/hal/libfimg4x/FimgExynos4.h
index 2a7c42f..674fd7a 100644
--- a/exynos4/hal/libfimg4x/FimgExynos4.h
+++ b/exynos4/hal/libfimg4x/FimgExynos4.h
@@ -35,7 +35,6 @@
 #include <sys/poll.h>
 #include <sys/stat.h>
 
-#include <linux/android_pmem.h>
 #include <utils/threads.h>
 #include <utils/StopWatch.h>
 
@@ -46,7 +45,7 @@
 namespace android
 {
 
-#define NUMBER_FIMG_LIST           (1)  // kcoolsw : because of pmem
+#define NUMBER_FIMG_LIST           (1)
 #define GET_RECT_SIZE(rect)        ((rect->full_w) * (rect->h) * (rect->bytes_per_pixel))
 #define GET_REAL_SIZE(rect)        ((rect->full_w) * (rect->h) * (rect->bytes_per_pixel))
 #define GET_START_ADDR(rect)       (rect->virt_addr + ((rect->y * rect->full_w) * rect->bytes_per_pixel))
