diff --git a/include/exynos_rotator.h b/include/exynos_rotator.h
new file mode 100644
index 0000000..189e693
--- /dev/null
+++ b/include/exynos_rotator.h
@@ -0,0 +1,238 @@
+/*
+ *
+ * Copyright 2012 Samsung Electronics S.LSI Co. LTD
+ *
+ * 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.
+ */
+
+/*!
+ * \file      exynos_rotator.h
+ * \brief     header file for exynos_rotator HAL
+ * \author    Sunmi Lee (carrotsm.lee@samsung.com)
+ * \date      2012/03/05
+ *
+ * <b>Revision History: </b>
+ * - 2012/03/05 : Sunmi Lee (carrotsm.lee@samsung.com) \n
+ *   Create
+ *
+ */
+
+/*!
+ * \defgroup exynos_rotator
+ * \brief API for rotator
+ * \addtogroup Exynos
+ */
+
+#ifndef _EXYNOS_ROTATOR_H_
+#define _EXYNOS_ROTATOR_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*!
+ * Create librotator handle
+ *
+ * \ingroup exynos_rotator
+ *
+ * \return
+ *   librotator handle
+ */
+void *exynos_rotator_create(void);
+
+/*!
+ * Destroy librotator handle
+ *
+ * \ingroup exynos_rotator
+ *
+ * \param handle
+ *   librotator handle[in]
+ */
+void exynos_rotator_destroy(
+    void *handle);
+
+/*!
+ * Set source format.
+ *
+ * \ingroup exynos_rotator
+ *
+ * \param handle
+ *   librotator handle[in]
+ *
+ * \param width
+ *   image width[in]
+ *
+ * \param height
+ *   image height[in]
+ *
+ * \param crop_left
+ *   image left crop size[in]
+ *
+ * \param crop_top
+ *   image top crop size[in]
+ *
+ * \param crop_width
+ *   cropped image width[in]
+ *
+ * \param crop_height
+ *   cropped image height[in]
+ *
+ * \param v4l2_colorformat
+ *   color format[in]
+ *
+ * \param cacheable
+ *   ccacheable[in]
+ *
+ * \return
+ *   error code
+ */
+int exynos_rotator_set_src_format(
+    void        *handle,
+    unsigned int width,
+    unsigned int height,
+    unsigned int crop_left,
+    unsigned int crop_top,
+    unsigned int crop_width,
+    unsigned int crop_height,
+    unsigned int v4l2_colorformat,
+    unsigned int cacheable);
+
+/*!
+ * Set destination format.
+ *
+ * \ingroup exynos_rotator
+ *
+ * \param handle
+ *   librotator handle[in]
+ *
+ * \param width
+ *   image width[in]
+ *
+ * \param height
+ *   image height[in]
+ *
+ * \param crop_left
+ *   image left crop size[in]
+ *
+ * \param crop_top
+ *   image top crop size[in]
+ *
+ * \param v4l2_colorformat
+ *   color format[in]
+ *
+ * \param cacheable
+ *   ccacheable[in]
+ *
+ * \return
+ *   error code
+ */
+int exynos_rotator_set_dst_format(
+    void        *handle,
+    unsigned int width,
+    unsigned int height,
+    unsigned int crop_left,
+    unsigned int crop_top,
+    unsigned int v4l2_colorformat,
+    unsigned int cacheable);
+
+/*!
+ * Set rotation.
+ *
+ * \ingroup exynos_rotator
+ *
+ * \param handle
+ *   librotator handle[in]
+ *
+ * \param rotation
+ *   image rotation. It should be multiple of 90[in]
+ *
+ * \return
+ *   error code
+ */
+int exynos_rotator_set_rotation(
+    void *handle,
+    int   rotation);
+
+/*!
+ * Set source buffer
+ *
+ * \ingroup exynos_rotator
+ *
+ * \param handle
+ *   librotator handle[in]
+ *
+ * \param addr
+ *   buffer pointer array[in]
+ *
+ * \return
+ *   error code
+ */
+int exynos_rotator_set_src_addr(
+    void *handle,
+    void *addr[3]);
+
+/*!
+ * Set destination buffer
+ *
+ * \ingroup exynos_rotator
+ *
+ * \param handle
+ *   librotator handle[in]
+ *
+ * \param addr
+ *   buffer pointer array[in]
+ *
+ * \return
+ *   error code
+ */
+int exynos_rotator_set_dst_addr(
+    void *handle,
+    void *addr[3]);
+
+/*!
+ * Convert color space with presetup color format
+ *
+ * \ingroup exynos_rotator
+ *
+ * \param handle
+ *   librotator handle[in]
+ *
+ * \return
+ *   error code
+ */
+int exynos_rotator_convert(
+    void *handle);
+
+/*!
+ * api for local path rotator. Not yet support.
+ *
+ * \ingroup exynos_rotator
+ */
+int exynos_rotator_connect(
+    void *handle,
+    void *hw);
+
+/*!
+ * api for local path rotator. Not yet support.
+ *
+ * \ingroup exynos_rotator
+ */
+int exynos_rotator_disconnect(
+    void *handle,
+    void *hw);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*EXYNOS_ROTATORALER_H_*/
\ No newline at end of file
