aboutsummaryrefslogtreecommitdiff
path: root/mtk/rrc
diff options
context:
space:
mode:
Diffstat (limited to 'mtk/rrc')
-rw-r--r--mtk/rrc/Android.mk82
-rw-r--r--mtk/rrc/NOTICE1
-rw-r--r--mtk/rrc/README24
-rw-r--r--mtk/rrc/common/refresh_rate_control.cpp256
-rw-r--r--mtk/rrc/inc/refresh_rate_control.h66
5 files changed, 429 insertions, 0 deletions
diff --git a/mtk/rrc/Android.mk b/mtk/rrc/Android.mk
new file mode 100644
index 0000000..f452639
--- /dev/null
+++ b/mtk/rrc/Android.mk
@@ -0,0 +1,82 @@
+# Copyright Statement:
+#
+# This software/firmware and related documentation ("MediaTek Software") are
+# protected under relevant copyright laws. The information contained herein
+# is confidential and proprietary to MediaTek Inc. and/or its licensors.
+# Without the prior written permission of MediaTek inc. and/or its licensors,
+# any reproduction, modification, use or disclosure of MediaTek Software,
+# and information contained herein, in whole or in part, shall be strictly prohibited.
+#
+# MediaTek Inc. (C) 2010. All rights reserved.
+#
+# BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+# THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+# RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+# AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+# NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+# SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+# SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+# THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+# THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+# CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+# SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+# STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+# CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+# AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+# OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+# MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+#
+# The following software/firmware and/or related documentation ("MediaTek Software")
+# have been modified by MediaTek Inc. All revisions are subject to any receiver's
+# applicable license agreements with MediaTek Inc.
+
+
+#
+# librrc
+#
+LOCAL_PATH:= $(call my-dir)
+
+
+COMMON_PATH:= common
+INCLUDE_PATH:= $(LOCAL_PATH)/inc
+
+include $(CLEAR_VARS)
+
+ifeq ($(MTK_DISPLAY_120HZ_SUPPORT), yes)
+LOCAL_CFLAGS += -DMTK_RRC_ENABLE
+endif
+
+ifneq ($(TARGET_BUILD_VARIANT), user)
+LOCAL_CFLAGS += -DMTK_RRC_ENABLE_PROP
+endif
+
+
+LOCAL_SRC_FILES:= \
+ $(COMMON_PATH)/refresh_rate_control.cpp \
+
+LOCAL_C_INCLUDES:= \
+ $(INCLUDE_PATH) \
+
+
+
+LOCAL_STATIC_LIBRARIES := \
+
+LOCAL_WHOLE_STATIC_LIBRARIES := \
+
+LOCAL_MODULE:= librrc
+
+
+LOCAL_SHARED_LIBRARIES := \
+ libutils \
+ libcutils \
+ liblog \
+
+LOCAL_MODULE_TAGS := optional
+
+include $(BUILD_SHARED_LIBRARY)
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
+
+
diff --git a/mtk/rrc/NOTICE b/mtk/rrc/NOTICE
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/mtk/rrc/NOTICE
@@ -0,0 +1 @@
+
diff --git a/mtk/rrc/README b/mtk/rrc/README
new file mode 100644
index 0000000..c6a4c0a
--- /dev/null
+++ b/mtk/rrc/README
@@ -0,0 +1,24 @@
+This directory contains RRC HAL interface, which defines the interface of
+Refresh Rate Controller and is used to build a RRC shared library.
+
+This library is pre-built by MediaTek internal.
+
+WHAT IT DOES?
+=============
+librrc.so provides api for notify multimedia scenarios.
+
+HOW IT WAS BUILT?
+==================
+It needs the following library from AOSP:
+1. liblog.so
+2. libutils.so
+3. libcutils.so
+
+All source/dependency modules of this module are already put in
+'vendor/mediatek/libs' folder.
+
+HOW TO USE IT?
+==============
+Provide api for user notify the active scenarios to decide proper display refresh rate.
+
+All the source code of this library were written by MediaTek co..
diff --git a/mtk/rrc/common/refresh_rate_control.cpp b/mtk/rrc/common/refresh_rate_control.cpp
new file mode 100644
index 0000000..76efaad
--- /dev/null
+++ b/mtk/rrc/common/refresh_rate_control.cpp
@@ -0,0 +1,256 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2009
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <errno.h>
+
+#include <linux/ioctl.h>
+#include <string.h>
+
+
+#include <cutils/log.h>
+
+#ifdef MTK_RRC_ENABLE
+ #define MTK_RRC_INC_DRV
+#endif
+
+#ifdef MTK_RRC_INC_DRV
+ #include <linux/rrc_drv.h>
+#endif
+
+#include <utils/Errors.h>
+
+#include <refresh_rate_control.h>
+
+#include <utils/Log.h>
+
+#include <cutils/properties.h>
+
+
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+
+#define LOG_TAG "RefreshRateControl"
+
+
+
+#define RRC_DRV_NAME "/dev/mtk_rrc"
+
+static int currentID;
+
+static unsigned int allocated;
+
+
+RefreshRateControl::RefreshRateControl()
+{
+}
+
+
+RefreshRateControl::~RefreshRateControl()
+{
+}
+
+
+int RefreshRateControl::setScenario(int scenario, bool enable){
+
+#ifdef MTK_RRC_INC_DRV
+
+ int drvID ;
+
+ RRC_DRV_DATA rrc_data ;
+ unsigned int result = 0;
+ int config_enable = enable ;
+
+ if(!(scenario > RRC_TYPE_NONE && scenario < RRC_TYPE_MAX_SIZE)){
+ ALOGW("[RRC] setScenario RRC Driver scenario error range (%d)", scenario);
+ return -1;
+ }
+
+
+
+#ifdef MTK_RRC_ENABLE_PROP
+
+ {
+ char value[PROPERTY_VALUE_MAX];
+ unsigned long u4PQOpt;
+
+ property_get("persist.rrc", value, "0");
+ u4PQOpt = atol(value);
+ if(0 != u4PQOpt)
+ {
+
+ if(u4PQOpt == 1){
+ /* skip all event */
+ //ALOGW("[RRC] skip all event!!\n");
+ return 0;
+ } else if( u4PQOpt == 2 ) {
+ /* skip video event */
+ if((scenario >= RRC_TYPE_VIDEO_NORMAL && scenario <= RRC_TYPE_VIDEO_WIFI_DISPLAY)){
+ return 0;
+ }
+ } else if (u4PQOpt == 3) {
+ /* always keep HIGH */
+ if((scenario >= RRC_TYPE_VIDEO_NORMAL && scenario <= RRC_TYPE_VIDEO_WIFI_DISPLAY)){
+ return 0;
+ }
+ /* skip touch leave */
+ if( scenario == RRC_DRV_TYPE_TOUCH_EVENT && enable == 0){
+ return 0;
+ }
+ } else if (u4PQOpt == 4) {
+ /* always keep LOW */
+ if((scenario >= RRC_TYPE_VIDEO_NORMAL && scenario <= RRC_TYPE_VIDEO_WIFI_DISPLAY)){
+ return 0;
+ }
+ /* skip touch down */
+ if( scenario == RRC_DRV_TYPE_TOUCH_EVENT && enable == 1){
+ return 0;
+ }
+ }
+ }
+ }
+#endif
+
+
+ ALOGW("[RRC] setScenario %d, config_enable %d!!\n", scenario, config_enable);
+
+
+ if(scenario == RRC_TYPE_VIDEO_120HZ)
+ {
+ scenario = RRC_DRV_TYPE_VIDEO_PLAYBACK ;
+ if ( config_enable ){
+ config_enable = 2 ;
+ }
+ ALOGW("[RRC] Video120Hz setScenario %d, config_enable %d!!\n", scenario, config_enable);
+ }
+
+
+
+ drvID = open(RRC_DRV_NAME, O_RDONLY, 0);
+
+ if( drvID == -1 )
+ {
+ ALOGW("Open RRC Driver Error (%s)", strerror(errno));
+ return -1;
+ }
+
+
+ if(ioctl(drvID, RRC_IOCTL_CMD_INIT)<0)
+ {
+ ALOGW("RefreshRateControl Driver->RRC_IOCTL_CMD_INIT Error (%s)", strerror(errno));
+ close(drvID);
+ drvID = -1;
+ return -1;
+ }
+
+
+ rrc_data.scenario = scenario ;
+ rrc_data.enable = config_enable ;
+
+ if(ioctl(drvID, RRC_IOCTL_CMD_SET_SCENARIO_TYPE, &rrc_data) < 0)
+ {
+ ALOGW("RefreshRateControl Driver->RRC_IOCTL_CMD_SET_SCENARIO_TYPE Error (%s)", strerror(errno));
+ close(drvID);
+ return -1;
+ }
+
+ if(ioctl(drvID, RRC_IOCTL_CMD_DEINIT) < 0)
+ {
+ return -1;
+ }
+
+ close(drvID);
+
+#endif
+
+ return 0;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mtk/rrc/inc/refresh_rate_control.h b/mtk/rrc/inc/refresh_rate_control.h
new file mode 100644
index 0000000..ecf084a
--- /dev/null
+++ b/mtk/rrc/inc/refresh_rate_control.h
@@ -0,0 +1,66 @@
+#ifndef __REFRESH_RATE_CONTROL_H__
+#define __REFRESH_RATE_CONTROL_H__
+
+
+/*-----------------------------------------------------------------------------
+ Refresh Rate Control Scenario
+ -----------------------------------------------------------------------------*/
+typedef enum {
+
+ RRC_TYPE_NONE = 0,
+ RRC_TYPE_VIDEO_NORMAL ,
+ RRC_TYPE_CAMERA_PREVIEW ,
+ RRC_TYPE_CAMERA_ZSD ,
+ RRC_TYPE_CAMERA_CAPTURE ,
+ RRC_TYPE_CAMERA_ICFP ,
+ RRC_TYPE_VIDEO_SWDEC_PLAYBACK ,
+ RRC_TYPE_VIDEO_PLAYBACK ,
+ RRC_TYPE_VIDEO_TELEPHONY ,
+ RRC_TYPE_VIDEO_RECORD ,
+ RRC_TYPE_VIDEO_RECORD_CAMERA ,
+ RRC_TYPE_VIDEO_RECORD_SLOWMOTION ,
+ RRC_TYPE_VIDEO_SNAPSHOT ,
+ RRC_TYPE_VIDEO_LIVE_PHOTO ,
+ RRC_TYPE_VIDEO_WIFI_DISPLAY ,
+
+ /* touch event */
+ RRC_TYPE_TOUCH_EVENT ,
+ RRC_TYPE_VIDEO_120HZ ,
+
+ RRC_TYPE_MAX_SIZE
+
+
+} RRC_SCENARIO_TYPE;
+
+
+typedef enum {
+
+ RRC_60Hz = 0,
+ RRC_120Hz ,
+
+
+} RRC_REFRESH_RATE;
+
+
+
+class RefreshRateControl {
+
+
+public:
+
+ RefreshRateControl();
+ ~RefreshRateControl();
+
+ int setScenario(int scenario, bool enable);
+
+ int getRefreshRate();
+
+private:
+
+ int getScenario();
+
+ int setRefreshRate(int refresh);
+
+};
+
+#endif