import PULS_20180308

This commit is contained in:
Stricted
2018-03-13 20:30:12 +01:00
parent 6fa3eb70c0
commit 4b9e97964e
203 changed files with 11168 additions and 5668 deletions
+10 -8
View File
@@ -1164,13 +1164,13 @@ CONFIG_MTK_SENSOR_SUPPORT=y
# CONFIG_MTK_AUTO_DETECT_ALSPS is not set
CONFIG_CUSTOM_KERNEL_ACCELEROMETER=y
CONFIG_CUSTOM_KERNEL_GYROSCOPE=y
CONFIG_CUSTOM_KERNEL_ALSPS=y
# CONFIG_CUSTOM_KERNEL_ALSPS=y
# CONFIG_CUSTOM_SEC_AUTH_SUPPORT is not set
CONFIG_CUSTOM_KERNEL_MAGNETOMETER=y
# CONFIG_CUSTOM_KERNEL_BAROMETER is not set
CONFIG_CUSTOM_KERNEL_IMGSENSOR="ov2680_raw ov5670_mipi_raw"
CONFIG_CUSTOM_KERNEL_IMGSENSOR="ov2680_raw gc2355_mipi_raw ov5670_mipi_raw ov56702nd_mipi_raw"
#CONFIG_CUSTOM_KERNEL_LCM="a080ean01_dsi_vdo"
CONFIG_CUSTOM_KERNEL_LCM="ota7291_wxga_dsi_vdo a080ean01_dsi_vdo"
CONFIG_CUSTOM_KERNEL_LCM="ota7291_wxga_dsi_vdo rm72013_wxga_dsi_vdo a080ean01_dsi_vdo"
CONFIG_CUSTOM_KERNEL_FLASHLIGHT="constant_flashlight"
CONFIG_CUSTOM_KERNEL_EXTMD=""
CONFIG_CUSTOM_KERNEL_SSW="ssw_single"
@@ -1351,7 +1351,7 @@ CONFIG_MTK_PMIC_WRAP=y
# CONFIG_MTK_PMIC_MT6397 is not set
# CONFIG_POWER_EXT is not set
# CONFIG_MTK_POWER_EXT_DETECT is not set
CONFIG_MTK_PUMP_EXPRESS_SUPPORT=y
# CONFIG_MTK_PUMP_EXPRESS_SUPPORT is not set
# CONFIG_MTK_PUMP_EXPRESS_PLUS_SUPPORT is not set
# CONFIG_MTK_VOW_SUPPORT is not set
# CONFIG_MTK_EXTERNAL_LDO is not set
@@ -1359,7 +1359,7 @@ CONFIG_MTK_PUMP_EXPRESS_SUPPORT=y
# CONFIG_MTK_BQ24250_SUPPORT is not set
# CONFIG_MTK_BQ24261_SUPPORT is not set
# CONFIG_MTK_BQ24196_SUPPORT is not set
# CONFIG_MTK_FAN5405_SUPPORT is not set
CONFIG_MTK_FAN5405_SUPPORT=y
# CONFIG_MTK_FAN5402_SUPPORT is not set
# CONFIG_MTK_BQ24158_SUPPORT is not set
# CONFIG_MTK_BQ24296_SUPPORT is not set
@@ -1385,7 +1385,7 @@ CONFIG_MTK_SOUND=y
# CONFIG_MTK_EPL2182_NEW is not set
# CONFIG_MTK_STK3X1X is not set
# CONFIG_MTK_CM36652_NEW is not set
CONFIG_MTK_APDS9930=y
# CONFIG_MTK_APDS9930 is not set
# CONFIG_MTK_CM3232_NEW is not set
# CONFIG_MTK_APDS9930_NEW is not set
# CONFIG_MTK_KXTJ2_1009 is not set
@@ -1408,7 +1408,7 @@ CONFIG_MTK_BMA2XX=y
# CONFIG_MTK_MPU6515G is not set
# CONFIG_MTK_MPU3050C_NEW is not set
# CONFIG_MTK_AKM8963 is not set
CONFIG_MTK_AKM09911=y
# CONFIG_MTK_AKM09911=y
# CONFIG_MTK_AKM8963_NEW is not set
# CONFIG_MTK_HSCDTD006 is not set
# CONFIG_MTK_BMM050 is not set
@@ -1478,7 +1478,9 @@ CONFIG_MTK_SIM2_SOCKET_TYPE="1"
# CONFIG_MTK_CTP_RESET_CONFIG is not set
CONFIG_MTK_BICR_SUPPORT=y
CONFIG_MTK_VIDEO_HEVC_SUPPORT=y
CONFIG_MTK_AAL_SUPPORT=y
#[FEATURE]-Mod-BEGIN by TCTSZ.yaohui.zeng, 2015/04/20,disable BL AAL
#CONFIG_MTK_AAL_SUPPORT=y
#[FEATURE]-Mod-END by TCTSZ.yaohui.zeng, 2015/04/20
# CONFIG_MTK_MULTIBRIDGE_SUPPORT is not set
# CONFIG_NAND_OTP_SUPPORT is not set
# CONFIG_MTK_OD_SUPPORT is not set
Executable → Regular
+10 -8
View File
@@ -1163,13 +1163,13 @@ CONFIG_MTK_SENSOR_SUPPORT=y
# CONFIG_MTK_AUTO_DETECT_ALSPS is not set
CONFIG_CUSTOM_KERNEL_ACCELEROMETER=y
CONFIG_CUSTOM_KERNEL_GYROSCOPE=y
CONFIG_CUSTOM_KERNEL_ALSPS=y
# CONFIG_CUSTOM_KERNEL_ALSPS=y
# CONFIG_CUSTOM_SEC_AUTH_SUPPORT is not set
CONFIG_CUSTOM_KERNEL_MAGNETOMETER=y
# CONFIG_CUSTOM_KERNEL_BAROMETER is not set
CONFIG_CUSTOM_KERNEL_IMGSENSOR="ov2680_raw ov5670_mipi_raw"
CONFIG_CUSTOM_KERNEL_IMGSENSOR="ov2680_raw gc2355_mipi_raw ov5670_mipi_raw ov56702nd_mipi_raw"
#CONFIG_CUSTOM_KERNEL_LCM="a080ean01_dsi_vdo"
CONFIG_CUSTOM_KERNEL_LCM="ota7291_wxga_dsi_vdo a080ean01_dsi_vdo"
CONFIG_CUSTOM_KERNEL_LCM="ota7291_wxga_dsi_vdo rm72013_wxga_dsi_vdo a080ean01_dsi_vdo"
CONFIG_CUSTOM_KERNEL_FLASHLIGHT="constant_flashlight"
CONFIG_CUSTOM_KERNEL_EXTMD=""
CONFIG_CUSTOM_KERNEL_SSW="ssw_single"
@@ -1348,7 +1348,7 @@ CONFIG_MTK_PMIC_WRAP=y
# CONFIG_MTK_PMIC_MT6397 is not set
# CONFIG_POWER_EXT is not set
# CONFIG_MTK_POWER_EXT_DETECT is not set
CONFIG_MTK_PUMP_EXPRESS_SUPPORT=y
# CONFIG_MTK_PUMP_EXPRESS_SUPPORT is not set
# CONFIG_MTK_PUMP_EXPRESS_PLUS_SUPPORT is not set
# CONFIG_MTK_VOW_SUPPORT is not set
# CONFIG_MTK_EXTERNAL_LDO is not set
@@ -1356,7 +1356,7 @@ CONFIG_MTK_PUMP_EXPRESS_SUPPORT=y
# CONFIG_MTK_BQ24250_SUPPORT is not set
# CONFIG_MTK_BQ24261_SUPPORT is not set
# CONFIG_MTK_BQ24196_SUPPORT is not set
# CONFIG_MTK_FAN5405_SUPPORT is not set
CONFIG_MTK_FAN5405_SUPPORT=y
# CONFIG_MTK_FAN5402_SUPPORT is not set
# CONFIG_MTK_BQ24158_SUPPORT is not set
# CONFIG_MTK_BQ24296_SUPPORT is not set
@@ -1382,7 +1382,7 @@ CONFIG_MTK_SOUND=y
# CONFIG_MTK_EPL2182_NEW is not set
# CONFIG_MTK_STK3X1X is not set
# CONFIG_MTK_CM36652_NEW is not set
CONFIG_MTK_APDS9930=y
# CONFIG_MTK_APDS9930 is not set
# CONFIG_MTK_CM3232_NEW is not set
# CONFIG_MTK_APDS9930_NEW is not set
# CONFIG_MTK_KXTJ2_1009 is not set
@@ -1405,7 +1405,7 @@ CONFIG_MTK_BMA2XX=y
# CONFIG_MTK_MPU6515G is not set
# CONFIG_MTK_MPU3050C_NEW is not set
# CONFIG_MTK_AKM8963 is not set
CONFIG_MTK_AKM09911=y
# CONFIG_MTK_AKM09911 is not set
# CONFIG_MTK_AKM8963_NEW is not set
# CONFIG_MTK_HSCDTD006 is not set
# CONFIG_MTK_BMM050 is not set
@@ -1475,7 +1475,9 @@ CONFIG_MTK_SIM2_SOCKET_TYPE="1"
# CONFIG_MTK_CTP_RESET_CONFIG is not set
CONFIG_MTK_BICR_SUPPORT=y
CONFIG_MTK_VIDEO_HEVC_SUPPORT=y
CONFIG_MTK_AAL_SUPPORT=y
#[FEATURE]-Mod-BEGIN by TCTSZ.yaohui.zeng, 2015/04/20,disable BL AAL
#CONFIG_MTK_AAL_SUPPORT=y
#[FEATURE]-Mod-END by TCTSZ.yaohui.zeng, 2015/04/20
# CONFIG_MTK_MULTIBRIDGE_SUPPORT is not set
# CONFIG_NAND_OTP_SUPPORT is not set
# CONFIG_MTK_OD_SUPPORT is not set
+1 -1
View File
@@ -58,7 +58,7 @@ struct thread_info {
struct cpu_context_save cpu_context; /* cpu context */
__u32 syscall; /* syscall number */
__u8 used_cp[16]; /* thread used copro */
unsigned long tp_value;
unsigned long tp_value[2]; /* TLS registers */
#ifdef CONFIG_CRUNCH
struct crunch_state crunchstate;
#endif
+30 -13
View File
@@ -2,27 +2,33 @@
#define __ASMARM_TLS_H
#ifdef __ASSEMBLY__
.macro set_tls_none, tp, tmp1, tmp2
#include <asm/asm-offsets.h>
.macro switch_tls_none, prev, next, tp, tpuser, tmp1, tmp2
.endm
.macro set_tls_v6k, tp, tmp1, tmp2
.macro switch_tls_v6k, prev, next, tp, tpuser, tmp1, tmp2
ldrd \tp, \tpuser, [\next, #TI_TP_VALUE] @ get the next TLS and user r/w register
mrc p15, 0, \tmp2, c13, c0, 2 @ get the user r/w register
mcr p15, 0, \tp, c13, c0, 3 @ set TLS register
mov \tmp1, #0
mcr p15, 0, \tmp1, c13, c0, 2 @ clear user r/w TLS register
mcr p15, 0, \tpuser, c13, c0, 2 @ and the user r/w register
str \tmp2, [\prev, #TI_TP_VALUE + 4] @ save it
.endm
.macro set_tls_v6, tp, tmp1, tmp2
.macro switch_tls_v6, prev, next, tp, tpuser, tmp1, tmp2
ldr \tmp1, =elf_hwcap
ldr \tmp1, [\tmp1, #0]
mov \tmp2, #0xffff0fff
ldr \tp, [\next, #TI_TP_VALUE] @ get the next TLS register
tst \tmp1, #HWCAP_TLS @ hardware TLS available?
mcrne p15, 0, \tp, c13, c0, 3 @ yes, set TLS register
movne \tmp1, #0
mcrne p15, 0, \tmp1, c13, c0, 2 @ clear user r/w TLS register
streq \tp, [\tmp2, #-15] @ set TLS value at 0xffff0ff0
mrcne p15, 0, \tmp2, c13, c0, 2 @ get the previous user r/w register
ldrne \tpuser, [\next, #TI_TP_VALUE + 4] @ get the next user r/w register
mcrne p15, 0, \tp, c13, c0, 3 @ yes, set TLS register
mcrne p15, 0, \tpuser, c13, c0, 2 @ set user r/w register
strne \tmp2, [\prev, #TI_TP_VALUE + 4] @ save it
.endm
.macro set_tls_software, tp, tmp1, tmp2
.macro switch_tls_software, prev, next, tp, tpuser, tmp1, tmp2
mov \tmp1, #0xffff0fff
str \tp, [\tmp1, #-15] @ set TLS value at 0xffff0ff0
.endm
@@ -31,19 +37,30 @@
#ifdef CONFIG_TLS_REG_EMUL
#define tls_emu 1
#define has_tls_reg 1
#define set_tls set_tls_none
#define switch_tls switch_tls_none
#elif defined(CONFIG_CPU_V6)
#define tls_emu 0
#define has_tls_reg (elf_hwcap & HWCAP_TLS)
#define set_tls set_tls_v6
#define switch_tls switch_tls_v6
#elif defined(CONFIG_CPU_32v6K)
#define tls_emu 0
#define has_tls_reg 1
#define set_tls set_tls_v6k
#define switch_tls switch_tls_v6k
#else
#define tls_emu 0
#define has_tls_reg 0
#define set_tls set_tls_software
#define switch_tls switch_tls_software
#endif
#ifndef __ASSEMBLY__
static inline unsigned long get_tpuser(void)
{
unsigned long reg = 0;
if (has_tls_reg && !tls_emu)
__asm__("mrc p15, 0, %0, c13, c0, 2" : "=r" (reg));
return reg;
}
#endif
#endif /* __ASMARM_TLS_H */
+2
View File
@@ -229,12 +229,14 @@ struct tag {
tag_dfo_boot dfo_data;
struct tag_mdinfo_data mdinfo_data;
mem_desc_t tee_reserved_mem;
#if 0
#ifdef PT_ABTC_ATAG
struct tag_pt_info tag_pt_info;
#endif
#ifdef NAND_ABTC_ATAG
struct tag_nand_number tag_nand_number;
flashdev_info_t gen_FlashTable_p;
#endif
#endif
} u;
};
+1 -2
View File
@@ -708,7 +708,6 @@ ENTRY(__switch_to)
ldmfa ip!, {r0, r1, r2, r5, r6, r8, lr}
#endif
add ip, r1, #TI_CPU_SAVE
ldr r3, [r2, #TI_TP_VALUE]
ARM( stmia ip!, {r4 - sl, fp, sp, lr} ) @ Store most regs on stack
THUMB( stmia ip!, {r4 - sl, fp} ) @ Store most regs on stack
THUMB( str sp, [ip], #4 )
@@ -716,7 +715,7 @@ ENTRY(__switch_to)
#ifdef CONFIG_CPU_USE_DOMAINS
ldr r6, [r2, #TI_CPU_DOMAIN]
#endif
set_tls r3, r4, r5
switch_tls r1, r2, r4, r5, r3, r7
#if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP)
ldr r7, [r2, #TI_TASK]
ldr r8, =__stack_chk_guard
+12 -2
View File
@@ -41,6 +41,7 @@
#include <asm/thread_notify.h>
#include <asm/stacktrace.h>
#include <asm/mach/time.h>
#include <asm/tls.h>
#include <mach/system.h>
#ifdef CONFIG_CC_STACKPROTECTOR
@@ -60,6 +61,10 @@ static const char *isa_modes[] = {
"ARM" , "Thumb" , "Jazelle", "ThumbEE"
};
//[BUGFIX]-Add-BEGIN by SCDTABLET.(fangyou.wang),10/10/2015,1097303,
//auto reboot after power off
extern void force_enable_uart_log(void);
//[BUGFIX]-Add-END by SCDTABLET.(fangyou.wang)
#ifdef CONFIG_SMP
void arch_trigger_all_cpu_backtrace(void)
{
@@ -329,7 +334,11 @@ void machine_power_off(void)
/* Disable interrupts first */
local_irq_disable();
local_fiq_disable();
//[BUGFIX]-Add-BEGIN by SCDTABLET.(fangyou.wang),10/10/2015,1097303,
//auto reboot after power off
force_enable_uart_log();
//[BUGFIX]-Add-END by SCDTABLET.(fangyou.wang)
smp_send_stop();
if(reboot_pid > 1)
{
@@ -632,7 +641,8 @@ copy_thread(unsigned long clone_flags, unsigned long stack_start,
clear_ptrace_hw_breakpoint(p);
if (clone_flags & CLONE_SETTLS)
thread->tp_value = childregs->ARM_r3;
thread->tp_value[0] = childregs->ARM_r3;
thread->tp_value[1] = get_tpuser();
thread_notify(THREAD_NOTIFY_COPY, thread);
+1 -1
View File
@@ -849,7 +849,7 @@ long arch_ptrace(struct task_struct *child, long request,
#endif
case PTRACE_GET_THREAD_AREA:
ret = put_user(task_thread_info(child)->tp_value,
ret = put_user(task_thread_info(child)->tp_value[0],
datap);
break;
+2 -2
View File
@@ -662,7 +662,7 @@ asmlinkage int arm_syscall(int no, struct pt_regs *regs)
return regs->ARM_r0;
case NR(set_tls):
thread->tp_value = regs->ARM_r0;
thread->tp_value[0] = regs->ARM_r0;
if (tls_emu)
return 0;
if (has_tls_reg) {
@@ -780,7 +780,7 @@ static int get_tp_trap(struct pt_regs *regs, unsigned int instr)
int reg = (instr >> 12) & 15;
if (reg == 15)
return 1;
regs->uregs[reg] = current_thread_info()->tp_value;
regs->uregs[reg] = current_thread_info()->tp_value[0];
regs->ARM_pc += 4;
return 0;
}
@@ -114,8 +114,8 @@ typedef struct
u32 advancedmode;
struct MLC_feature_set feature_set;
}flashdev_info_t,*pflashdev_info;
#if 0
static const flashdev_info gen_FlashTable[]={
static const flashdev_info_t gen_FlashTable_p[]={
{{0x45,0xDE,0x94,0x93,0x76,0x57}, 6,5,IO_8BIT,8192,4096,16384,1280,0x10804222, 0xC03222,0x101,80,VEND_SANDISK,1024, "SDTNQGAMA008G ",0 ,
{SANDISK_16K, {0xEF,0xEE,0xFF,16,0x11,0,1,RTYPE_SANDISK_19NM,{0x80, 0x00},{0x80, 0x01}},
{RAND_TYPE_SAMSUNG,{0x2D2D,1,1,1,1,1}}}},
@@ -147,5 +147,6 @@ static const flashdev_info gen_FlashTable[]={
{SANDISK_16K, {0xEF,0xEE,0xFF,7,0xFF,7,0,RTYPE_TOSHIBA,{0x80, 0x00},{0x80, 0x01}},
{RAND_TYPE_SAMSUNG,{0x2D2D,1,1,1,1,1}}}},
};
#endif
static unsigned int flash_number = sizeof(gen_FlashTable_p) / sizeof(flashdev_info_t);
#endif
@@ -50,7 +50,6 @@ int kdCISModulePowerOn(CAMERA_DUAL_CAMERA_SENSOR_ENUM SensorIdx, char *currSenso
#define IDX_PS_ON 2
#define IDX_PS_OFF 3
#define IDX_SUB_CAM 1
u32 pinSet[2][8] =
{
@@ -219,16 +218,6 @@ int kdCISModulePowerOn(CAMERA_DUAL_CAMERA_SENSOR_ENUM SensorIdx, char *currSenso
//OV5648 Power UP
//First Power Pin low and Reset Pin Low
/*[BUGFIX] ADD-BEGIN by sz.chengming.xiang for PR-1021927(pixi3-7-3G) 2015/06/15
set front sensor hi708's pwdn to high, make sure it is in Hi-Z state so that
it will not affect i2c comunication on this bus*/
if (GPIO_CAMERA_INVALID != pinSet[IDX_SUB_CAM][IDX_PS_CMPDN]) {
if(mt_set_gpio_mode(pinSet[IDX_SUB_CAM][IDX_PS_CMPDN],pinSet[IDX_SUB_CAM][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
if(mt_set_gpio_dir(pinSet[IDX_SUB_CAM][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
if(mt_set_gpio_out(pinSet[IDX_SUB_CAM][IDX_PS_CMPDN],pinSet[IDX_SUB_CAM][IDX_PS_CMPDN+IDX_PS_ON])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module
}
/*[BUGFIX] ADD-END by sz.chengming.xiang for PR-1021927 2015/06/15*/
if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800, mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to enable IO power\n");
@@ -269,6 +258,9 @@ int kdCISModulePowerOn(CAMERA_DUAL_CAMERA_SENSOR_ENUM SensorIdx, char *currSenso
// wait power to be stable
mdelay(25);
;
}
else if ((pinSetIdx == 0) && currSensorName && (0 == strcmp(SENSOR_DRVNAME_S5K5E2YA_MIPI_RAW,currSensorName)))
{
@@ -593,19 +585,9 @@ int kdCISModulePowerOn(CAMERA_DUAL_CAMERA_SENSOR_ENUM SensorIdx, char *currSenso
if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensor
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module
}
/*[BUGFIX] ADD-BEGIN by sz.chengming.xiang for PR-1021927(pixi3-7-3G) 2015/06/15
as open main camera will set sub cam's pwd to high ,so should set it back when close main camera
to prevent current leakage */
if ((pinSetIdx != IDX_SUB_CAM) && (GPIO_CAMERA_INVALID != pinSet[IDX_SUB_CAM][IDX_PS_CMPDN])) {
{
mt_set_gpio_mode(pinSet[IDX_SUB_CAM][IDX_PS_CMPDN],pinSet[IDX_SUB_CAM][IDX_PS_CMPDN+IDX_PS_MODE]);
mt_set_gpio_dir(pinSet[IDX_SUB_CAM][IDX_PS_CMPDN],GPIO_DIR_OUT);
mt_set_gpio_out(pinSet[IDX_SUB_CAM][IDX_PS_CMPDN],pinSet[IDX_SUB_CAM][IDX_PS_CMPDN+IDX_PS_OFF]);
}
if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A,mode_name)) {
PK_DBG("[CAMERA SENSOR] Fail to OFF a power\n");
}
@@ -628,7 +610,7 @@ int kdCISModulePowerOn(CAMERA_DUAL_CAMERA_SENSOR_ENUM SensorIdx, char *currSenso
_kdCISModulePowerOn_exit_:
return -EIO;
}
}
EXPORT_SYMBOL(kdCISModulePowerOn);
File diff suppressed because it is too large Load Diff
@@ -14,10 +14,6 @@
#define MIN_CHARGE_TEMPERATURE_PLUS_X_DEGREE 4 //6 Fixed to 2 degree accoding to TCL standard
#define MAX_LIMIT_CHARGE_TEMPERATURE 45
#define MIN_LIMIT_CHARGE_TEMPERATURE 43
/* [PLATFORM]-ADD-BEGIN by TCTSZ huichen@tcl.com, 05/21/2015, BATTERY Notify PR-1007717*/
#define MAX_RAISING_CHARGE_TEMPERATURE 58
#define MIN_DROPPING_CHARGE_TEMPERATURE -18
/* [PLATFORM]-ADD-END by TCTSZ huichen@tcl.com*/
#define ERR_CHARGE_TEMPERATURE 0xFF
/* Linear Charging Threshold */
@@ -50,10 +46,7 @@
#define BAT_LOW_TEMP_PROTECT_ENABLE // stop charging if temp < MIN_CHARGE_TEMPERATURE
/* [PLATFORM]-Add-END by TCTSZ.leo.guo */
#define V_CHARGER_ENABLE 0 // 1:ON , 0:OFF
/* [PLATFORM]-MOD-BEGIN by TCTSZ huichen@tcl.com, 05/18/2015, modify OVP function FR-1005346*/
//#define V_CHARGER_MAX 6500 // 6.5 V
#define V_CHARGER_MAX 6900 // 6.9 V
/* [PLATFORM]-MOD-END by TCTSZ huichen@tcl.com, 05/18/2015*/
#define V_CHARGER_MAX 6500 // 6.5 V
#define V_CHARGER_MIN 4400 // 4.4 V
/* Tracking TIME */
@@ -50,7 +50,6 @@ int kdCISModulePowerOn(CAMERA_DUAL_CAMERA_SENSOR_ENUM SensorIdx, char *currSenso
#define IDX_PS_ON 2
#define IDX_PS_OFF 3
#define IDX_SUB_CAM 1
u32 pinSet[2][8] =
{
@@ -219,16 +218,6 @@ int kdCISModulePowerOn(CAMERA_DUAL_CAMERA_SENSOR_ENUM SensorIdx, char *currSenso
//OV5648 Power UP
//First Power Pin low and Reset Pin Low
/*[BUGFIX] ADD-BEGIN by sz.chengming.xiang for PR-1021927(pixi3-7-3G) 2015/06/15
set front sensor hi708's pwdn to high, make sure it is in Hi-Z state so that
it will not affect i2c comunication on this bus*/
if (GPIO_CAMERA_INVALID != pinSet[IDX_SUB_CAM][IDX_PS_CMPDN]) {
if(mt_set_gpio_mode(pinSet[IDX_SUB_CAM][IDX_PS_CMPDN],pinSet[IDX_SUB_CAM][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
if(mt_set_gpio_dir(pinSet[IDX_SUB_CAM][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
if(mt_set_gpio_out(pinSet[IDX_SUB_CAM][IDX_PS_CMPDN],pinSet[IDX_SUB_CAM][IDX_PS_CMPDN+IDX_PS_ON])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module
}
/*[BUGFIX] ADD-END by sz.chengming.xiang for PR-1021927 2015/06/15*/
if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800, mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to enable IO power\n");
@@ -269,6 +258,9 @@ int kdCISModulePowerOn(CAMERA_DUAL_CAMERA_SENSOR_ENUM SensorIdx, char *currSenso
// wait power to be stable
mdelay(25);
;
}
else if ((pinSetIdx == 0) && currSensorName && (0 == strcmp(SENSOR_DRVNAME_S5K5E2YA_MIPI_RAW,currSensorName)))
{
@@ -595,17 +587,7 @@ int kdCISModulePowerOn(CAMERA_DUAL_CAMERA_SENSOR_ENUM SensorIdx, char *currSenso
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensor
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module
}
/*[BUGFIX] ADD-BEGIN by sz.chengming.xiang for PR-1021927(pixi3-7-3G) 2015/06/15
as open main camera will set sub cam's pwd to high ,so should set it back when close main camera
to prevent current leakage */
if ((pinSetIdx != IDX_SUB_CAM) && (GPIO_CAMERA_INVALID != pinSet[IDX_SUB_CAM][IDX_PS_CMPDN])) {
{
mt_set_gpio_mode(pinSet[IDX_SUB_CAM][IDX_PS_CMPDN],pinSet[IDX_SUB_CAM][IDX_PS_CMPDN+IDX_PS_MODE]);
mt_set_gpio_dir(pinSet[IDX_SUB_CAM][IDX_PS_CMPDN],GPIO_DIR_OUT);
mt_set_gpio_out(pinSet[IDX_SUB_CAM][IDX_PS_CMPDN],pinSet[IDX_SUB_CAM][IDX_PS_CMPDN+IDX_PS_OFF]);
}
if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A,mode_name)) {
PK_DBG("[CAMERA SENSOR] Fail to OFF a power\n");
}
@@ -628,7 +610,7 @@ int kdCISModulePowerOn(CAMERA_DUAL_CAMERA_SENSOR_ENUM SensorIdx, char *currSenso
_kdCISModulePowerOn_exit_:
return -EIO;
}
}
EXPORT_SYMBOL(kdCISModulePowerOn);
@@ -132,7 +132,7 @@
/*[BUGFIX]-Add-BEGIN by TCTSZ.pingao.yang, 4/15/2015, */
#define MAX_SUSPEND_CURRENT 420 // 42 mA
#define MIN_SUSPEND_CURRENT 30 // 3 mA
#define MIN_SUSPEND_CURRENT 0 // 0 mA
#define DEFAUL_SUSPEND_CURRENT 120 //12mA
#define SUSPEND_CURRENT_SETP 30 //3mA
#define SLEEP_AFTER_FG_DIFF 3 // diff about 3%
File diff suppressed because it is too large Load Diff
@@ -14,10 +14,6 @@
#define MIN_CHARGE_TEMPERATURE_PLUS_X_DEGREE 4 //6 Fixed to 2 degree accoding to TCL standard
#define MAX_LIMIT_CHARGE_TEMPERATURE 45
#define MIN_LIMIT_CHARGE_TEMPERATURE 43
/* [PLATFORM]-ADD-BEGIN by TCTSZ huichen@tcl.com, 05/21/2015, BATTERY Notify PR-1007717*/
#define MAX_RAISING_CHARGE_TEMPERATURE 58
#define MIN_DROPPING_CHARGE_TEMPERATURE -18
/* [PLATFORM]-ADD-END by TCTSZ huichen@tcl.com*/
#define ERR_CHARGE_TEMPERATURE 0xFF
/* Linear Charging Threshold */
@@ -50,10 +46,7 @@
#define BAT_LOW_TEMP_PROTECT_ENABLE // stop charging if temp < MIN_CHARGE_TEMPERATURE
/* [PLATFORM]-Add-END by TCTSZ.leo.guo */
#define V_CHARGER_ENABLE 0 // 1:ON , 0:OFF
/* [PLATFORM]-MOD-BEGIN by TCTSZ huichen@tcl.com, 05/18/2015, modify OVP function FR-1005346*/
//#define V_CHARGER_MAX 6500 // 6.5 V
#define V_CHARGER_MAX 6900 // 6.9 V
/* [PLATFORM]-MOD-END by TCTSZ huichen@tcl.com, 05/18/2015*/
#define V_CHARGER_MAX 6500 // 6.5 V
#define V_CHARGER_MIN 4400 // 4.4 V
/* Tracking TIME */
+13 -5
View File
@@ -115,23 +115,23 @@ static struct early_suspend mt_cpufreq_early_suspend_handler =
#define DVFS_F4 ( 598000) // KHz
#if defined(HQA_LV_1_09V)
#define DVFS_V0 (1200) // mV
#define DVFS_V0 (1250) // mV
#define DVFS_V1 (1150) // mV
#define DVFS_V2 (1090) // mV
#define DVFS_V3 (1090) // mV
#elif defined(HQA_NV_1_15V)
#define DVFS_V0 (1260) // mV
#define DVFS_V1 (1200) // mV
#define DVFS_V1 (1250) // mV
#define DVFS_V2 (1150) // mV
#define DVFS_V3 (1050) // mV /*Not used */
#elif defined(HQA_HV_1_21V)
#define DVFS_V0 (1320) // mV
#define DVFS_V1 (1210) // mV
#define DVFS_V1 (1250) // mV
#define DVFS_V2 (1150) // mV /*Not used */
#define DVFS_V3 (1050) // mV /*Not used */
#else /* Normal case */
#define DVFS_V0 (1300) // mV
#define DVFS_V1 (1200) // mV
#define DVFS_V1 (1250) // mV
#ifdef CPUFREQ_SDIO_TRANSFER
#define DVFS_V2_0 (1185) // mV
#endif
@@ -1207,6 +1207,7 @@ static void mt_cpufreq_set(unsigned int freq_old, unsigned int freq_new, unsigne
#ifdef MT_CPUFREQ_FHCTL
if(((freq_new > FHCTL_CHANGE_FREQ) && (freq_old > FHCTL_CHANGE_FREQ)) || ((freq_new < FHCTL_CHANGE_FREQ) && (freq_old < FHCTL_CHANGE_FREQ)))
{
dprintk("Before === FHCTL: freq_new = %d < freq_old = %d ===\n", freq_new, freq_old);
mt_dfs_armpll(freq_old, freq_new);
dprintk("=== FHCTL: freq_new = %d > freq_old = %d ===\n", freq_new, freq_old);
@@ -1236,6 +1237,7 @@ static void mt_cpufreq_set(unsigned int freq_old, unsigned int freq_new, unsigne
#ifdef MT_CPUFREQ_FHCTL
if(((freq_new > FHCTL_CHANGE_FREQ) && (freq_old > FHCTL_CHANGE_FREQ)) || ((freq_new < FHCTL_CHANGE_FREQ) && (freq_old < FHCTL_CHANGE_FREQ)))
{
dprintk("Before === FHCTL: freq_new = %d < freq_old = %d ===\n", freq_new, freq_old);
mt_dfs_armpll(freq_old, freq_new);
dprintk("=== FHCTL: freq_new = %d < freq_old = %d ===\n", freq_new, freq_old);
@@ -1547,7 +1549,13 @@ static int mt_cpufreq_target(struct cpufreq_policy *policy, unsigned int target_
/******************************
* set to the target freeuency
*******************************/
mt_cpufreq_set(freqs.old, freqs.new, next.cpufreq_volt);
/* Get current frequency */
freqs.old = g_cur_freq;
if (freqs.old != freqs.new)
mt_cpufreq_set(freqs.old, freqs.new, next.cpufreq_volt);
else
dprintk("CPU frequency from %d MHz to %d MHz (skipped) due to same frequency in critical seciton check\n", freqs.old / 1000, freqs.new / 1000);
spin_unlock_irqrestore(&mt_cpufreq_lock, flags);
+4 -4
View File
@@ -29,7 +29,7 @@
#include <mach/dfo_boot_default.h>
#include <linux/aee.h>
#include <linux/mrdump.h>
#ifdef CONFIG_MTK_MTD_NAND
#if 0//#ifdef CONFIG_MTK_MTD_NAND
#include <mach/nand_device_define.h>
#include <mach/mt_partitioninfo.h>
#endif
@@ -44,7 +44,7 @@ extern void adjust_kernel_cmd_line_setting_for_console(char*, char*);
unsigned int mtk_get_max_DRAM_size(void);
resource_size_t get_actual_DRAM_size(void);
#ifdef CONFIG_MTK_MTD_NAND
#if 0//#ifdef CONFIG_MTK_MTD_NAND
struct tag_pt_info otp_info;
struct tag_pt_info bmt_info;
unsigned int flash_number;
@@ -1170,7 +1170,7 @@ static int __init parse_tag_devinfo_data_fixup(const struct tag *tags)
return 0;
}
#ifdef CONFIG_MTK_MTD_NAND
#if 0//#ifdef CONFIG_MTK_MTD_NAND
int __init parse_tag_partition_fixup(const struct tag *tags)
{
@@ -1278,7 +1278,7 @@ void mt_fixup(struct tag *tags, char **cmdline, struct meminfo *mi)
g_meta_com_type = tags->u.meta_com.meta_com_type;
g_meta_com_id = tags->u.meta_com.meta_com_id;
} //FIXME_8127
#ifdef CONFIG_MTK_MTD_NAND
#if 0//#ifdef CONFIG_MTK_MTD_NAND
else if(tags->hdr.tag == ATAG_OTP_INFO)
{
parse_tag_partition_fixup(tags);
@@ -130,12 +130,4 @@
#define LOW_POWER_WAKEUP_PERIOD 300 //5 * 60 = 5 min
#define CLOSE_POWEROFF_WAKEUP_PERIOD 30 //30 s
#define MAX_SUSPEND_CURRENT 420 // 42 mA
#define MIN_SUSPEND_CURRENT 30 // 3 mA
#define DEFAUL_SUSPEND_CURRENT 120 //12mA
#define SUSPEND_CURRENT_SETP 30 //3mA
#define SLEEP_AFTER_FG_DIFF 3 // diff about 3%
#define UI_REDUCE_CURRENT 180 //18mA
#define SLEEP_REDUCE_CURRENT 60 //6mA
#endif //#ifndef _CUST_BATTERY_METER_H
@@ -14,9 +14,6 @@
#define MIN_CHARGE_TEMPERATURE_PLUS_X_DEGREE 6
#define ERR_CHARGE_TEMPERATURE 0xFF
#define MAX_RAISING_CHARGE_TEMPERATURE 58
#define MIN_DROPPING_CHARGE_TEMPERATURE -18
/* Linear Charging Threshold */
#define V_PRE2CC_THRES 3400 //mV
#define V_CC2TOPOFF_THRES 4050
@@ -82,116 +82,231 @@ u32 pinSet[2][8] = {
}
//power ON
if (On) {
if (On) {
PK_DBG("kdCISModulePowerOn -on:currSensorName=%s;\n",currSensorName);
PK_DBG("kdCISModulePowerOn -on:pinSetIdx=%d\n",pinSetIdx);
if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_OV5670_MIPI_RAW,currSensorName))){
if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n");
}
mdelay(10);
if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1800,mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n");
}
mdelay(10);
if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800,mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n");
}
mdelay(10);
PK_DBG("SENSOR_DRVNAME_OV5670_MIPI_RAW power!! \n");
if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_OUT_ZERO)){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");}
mdelay(10);
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_OUT_ONE)){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");}
mdelay(1);
//PDN pin
if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_OUT_ONE)){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}
}else if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_OV2680_RAW ,currSensorName))) {
if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800, mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to enable IO power\n");
goto _kdCISModulePowerOn_exit_;
}
{
//PDN pin
if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN], pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN], GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN], pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}
mdelay(10);
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN], pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_ON])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}
mdelay(5);
//RST pin
if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST], pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST], GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST], pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");}
mdelay(10);
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST], pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_ON])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");}
mdelay(5);
}
msleep(20);
if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800, mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n");
goto _kdCISModulePowerOn_exit_;
}
//if(TRUE != hwPowerOn(PMIC_APP_MAIN_CAMERA_POWER_D, VOL_1500,mode_name))
// {
// PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n");
// goto _kdCISModulePowerOn_exit_;
// }
// wait power to be stable
mdelay(25);
if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_OV5670_MIPI_RAW,currSensorName)||0 == strcmp(SENSOR_DRVNAME_OV56702ND_MIPI_RAW,currSensorName))){
}
}else {//power OFF
if (pinSetIdx == 0){
//PDN pin
if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_OUT_ZERO)){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");}
//PK_DBG("[OFF]sensorIdx:%d \n",SensorIdx);
if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST]) {
if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensor
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module
}
if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n");
}
mdelay(10);
if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_OUT_ONE)){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}
if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800,mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n");
}
mdelay(10);
if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1200,mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n");
}
mdelay(10);
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_OUT_ONE)){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");}
}
}else if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_OV2680_RAW ,currSensorName))) {
if (pinSetIdx == 1){
{
//PDN pin
// if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN], pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
// if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN], GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
// if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN], pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}
// mdelay(10);
// if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN], pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_ON])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}
// mdelay(5);
//RST pin
if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST], pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST], GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST], pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");}
mdelay(10);
}
if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800, mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to enable IO power\n");
goto _kdCISModulePowerOn_exit_;
}
msleep(10);
if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800, mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n");
goto _kdCISModulePowerOn_exit_;
}
//if(TRUE != hwPowerOn(PMIC_APP_MAIN_CAMERA_POWER_D, VOL_1500,mode_name))
// {
// PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n");
// goto _kdCISModulePowerOn_exit_;
// }
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST], pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_ON])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");}
// wait power to be stable
mdelay(10);
}
}else if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_GC2355_MIPI_RAW ,currSensorName))) {
if (pinSetIdx == 1){
//PDN pin
if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN], pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN], GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN], pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_ON])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}
//RST pin
if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST], pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST], GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST], pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");}
mdelay(10);
if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800, mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to enable IO power\n");
goto _kdCISModulePowerOn_exit_;
}
if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1800,mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n");
goto _kdCISModulePowerOn_exit_;
}
if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800, mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n");
goto _kdCISModulePowerOn_exit_;
}
mdelay(5);
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN], pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}
mdelay(5);
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST], pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_ON])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");}
// wait power to be stable
mdelay(10);
}
}
}else {//power OFF
if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_OV5670_MIPI_RAW,currSensorName)||0 == strcmp(SENSOR_DRVNAME_OV56702ND_MIPI_RAW,currSensorName))){
if (pinSetIdx == 0){
if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensor
mdelay(5);
if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D, mode_name)) {
PK_DBG("[CAMERA SENSOR] Fail to OFF d digital power\n");
}
mdelay(5);
if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D2,mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to OFF d2 digital power\n");
}
if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module
mdelay(5);
if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A,mode_name)) {
PK_DBG("[CAMERA SENSOR] Fail to OFF a power\n");
}
}
} else if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_OV2680_RAW,currSensorName))){
if (pinSetIdx == 1){
if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST]) {
if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensor
}
if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A,mode_name)) {
PK_DBG("[CAMERA SENSOR] Fail to OFF a power\n");
}
mdelay(5);
if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D2,mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to OFF d2 digital power\n");
}
}
} else if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_GC2355_MIPI_RAW,currSensorName))){
if (pinSetIdx == 1){
if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN], pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN], GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN], pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_ON])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}
mdelay(5);
if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST]) {
if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensor
}
mdelay(5);
if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A,mode_name)) {
PK_DBG("[CAMERA SENSOR] Fail to OFF a power\n");
}
if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D,mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to OFF d2 digital power\n");
}
if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D2,mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to OFF d2 digital power\n");
}
}
}
}//
if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A,mode_name)) {
PK_DBG("[CAMERA SENSOR] Fail to OFF a power\n");
}
if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A2,mode_name)){
PK_DBG("[CAMERA SENSOR] Fail to OFF a2 power\n");
}
if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D, mode_name)) {
PK_DBG("[CAMERA SENSOR] Fail to OFF d digital power\n");
}
if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D2,mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to OFF d2 digital power\n");
}
}//
#endif /* end of defined MTK_ALPS_BOX_SUPPORT */
return 0;
+2 -2
View File
@@ -619,8 +619,8 @@ struct msdc_hw msdc1_hw = {
.data_pins = 4,
.data_offset = 0,
#ifdef CUST_EINT_MSDC1_INS_NUM
.flags = MSDC_SYS_SUSPEND | MSDC_WP_PIN_EN | MSDC_CD_PIN_EN | MSDC_REMOVABLE | MSDC_HIGHSPEED | MSDC_UHS1 |MSDC_DDR |MSDC_SD_NEED_POWER,
.flags = MSDC_SYS_SUSPEND | MSDC_WP_PIN_EN | MSDC_CD_PIN_EN | MSDC_REMOVABLE | MSDC_HIGHSPEED | MSDC_UHS1 |MSDC_DDR, //|MSDC_SD_NEED_POWER,
//[BUGFIX]Added-by SZTCT.leo.guo 05.25.2015, Fixed TF card power control issue.
#else
.flags = MSDC_SYS_SUSPEND | MSDC_WP_PIN_EN | MSDC_HIGHSPEED | MSDC_UHS1 |MSDC_DDR,
#endif
Binary file not shown.
@@ -28,9 +28,12 @@ unsigned int Cust_GetBacklightLevelSupport_byPWM(void)
unsigned int brightness_mapping(unsigned int level)
{
unsigned int mapped_level;
mapped_level = level;
/* [FEATURE]-Mod-BEGIN by TCTSZ.yaohui.zeng, 2015/04/20,set BL min level to 8(PWM 3.14%)*/
if((level <= 32)&&(level > 0))
mapped_level = 32;
else
mapped_level = level;
/* [FEATURE]-Mod-END by TCTSZ.yaohui.zeng, 2015/04/20*/
return mapped_level;
}
/*
@@ -13,6 +13,7 @@
#define SOC_BY_SW_FG //oam
#endif
#define CUST_CAPACITY_OCV2CV_TRANSFORM
//#define CONFIG_DIS_CHECK_BATTERY
//#define FIXED_TBAT_25
@@ -79,24 +80,24 @@
#define FG_METER_RESISTANCE 0
/* Qmax for battery */
#define Q_MAX_POS_50 3009
#define Q_MAX_POS_25 3009
#define Q_MAX_POS_0 3009
#define Q_MAX_NEG_10 3009
#define Q_MAX_POS_50_H_CURRENT 2975
#define Q_MAX_POS_25_H_CURRENT 2975
#define Q_MAX_POS_0_H_CURRENT 2975
#define Q_MAX_NEG_10_H_CURRENT 2975
#define Q_MAX_POS_50 4060
#define Q_MAX_POS_25 4060
#define Q_MAX_POS_0 3400
#define Q_MAX_NEG_10 2950
#define Q_MAX_POS_50_H_CURRENT 4000
#define Q_MAX_POS_25_H_CURRENT 4020
#define Q_MAX_POS_0_H_CURRENT 2760
#define Q_MAX_NEG_10_H_CURRENT 2450
/*[BUGFIX]-Add-BEGIN by TCTSZ.pingao.yang, 4/15/2015, pr-975290, change fg integration way */
/* Discharge Percentage */
#define OAM_D5 1 // 1 : D5, 0: D2
#define OAM_D5 0 // 1 : D5, 0: D2
/*[BUGFIX]-Add-end by TCTSZ.pingao.yang, 4/15/2015*/
/* battery meter parameter */
#define CUST_TRACKING_POINT 14
#define CUST_R_SENSE 200
#define CUST_R_SENSE 62 //Fixed sensor resistor according to HW designed.
#define CUST_HW_CC 0
#define AGING_TUNING_VALUE 100
#define CUST_R_FG_OFFSET 23
@@ -130,4 +131,14 @@
#define LOW_POWER_WAKEUP_PERIOD 300 //5 * 60 = 5 min
#define CLOSE_POWEROFF_WAKEUP_PERIOD 30 //30 s
/*[BUGFIX]-Add-BEGIN by TCTSZ.pingao.yang, 4/15/2015, */
#define MAX_SUSPEND_CURRENT 420 // 42 mA
#define MIN_SUSPEND_CURRENT 0 // 0 mA
#define DEFAUL_SUSPEND_CURRENT 120 //12mA
#define SUSPEND_CURRENT_SETP 30 //3mA
#define SLEEP_AFTER_FG_DIFF 3 // diff about 3%
#define UI_REDUCE_CURRENT 180 //18mA
#define SLEEP_REDUCE_CURRENT 60 //6mA
/*[BUGFIX]-Add-END by TCTSZ.pingao.yang */
#endif //#ifndef _CUST_BATTERY_METER_H
File diff suppressed because it is too large Load Diff
@@ -8,10 +8,16 @@
/* Battery Temperature Protection */
#define MTK_TEMPERATURE_RECHARGE_SUPPORT
#define MAX_CHARGE_TEMPERATURE 50
#define MAX_CHARGE_TEMPERATURE_MINUS_X_DEGREE 47
#define MIN_CHARGE_TEMPERATURE 0
#define MIN_CHARGE_TEMPERATURE_PLUS_X_DEGREE 6
#define MAX_CHARGE_TEMPERATURE 55
#define MAX_CHARGE_TEMPERATURE_MINUS_X_DEGREE 50 //47 Fixed to 50 degree for according to standard
#define MIN_CHARGE_TEMPERATURE 2
#define MIN_CHARGE_TEMPERATURE_PLUS_X_DEGREE 4 //6 Fixed to 2 degree accoding to TCL standard
#define MAX_LIMIT_CHARGE_TEMPERATURE 45
#define MIN_LIMIT_CHARGE_TEMPERATURE 43
/* [PLATFORM]-ADD-BEGIN by TCTSZ leo.guo, 06/09/2015, BATTERY Notify for NTC*/
#define MAX_RAISING_CHARGE_TEMPERATURE 58
#define MIN_DROPPING_CHARGE_TEMPERATURE -18
/* [PLATFORM]-ADD-END by TCTSZ leo.guo*/
#define ERR_CHARGE_TEMPERATURE 0xFF
/* Linear Charging Threshold */
@@ -27,7 +33,7 @@
#define USB_CHARGER_CURRENT_CONFIGURED CHARGE_CURRENT_500_00_MA // 500mA
#define USB_CHARGER_CURRENT CHARGE_CURRENT_500_00_MA //500mA
#define AC_CHARGER_CURRENT CHARGE_CURRENT_800_00_MA
#define AC_CHARGER_CURRENT CHARGE_CURRENT_1200_00_MA
#define NON_STD_AC_CHARGER_CURRENT CHARGE_CURRENT_500_00_MA
#define CHARGING_HOST_CHARGER_CURRENT CHARGE_CURRENT_650_00_MA
#define APPLE_0_5A_CHARGER_CURRENT CHARGE_CURRENT_500_00_MA
@@ -40,7 +46,9 @@
#define BATTERY_AVERAGE_SIZE 30
/* charger error check */
//#define BAT_LOW_TEMP_PROTECT_ENABLE // stop charging if temp < MIN_CHARGE_TEMPERATURE
/* [PLATFORM]-Add-BEGIN by TCTSZ.leo.guo, 04/15/2015, modify ntc temperature function */
#define BAT_LOW_TEMP_PROTECT_ENABLE // stop charging if temp < MIN_CHARGE_TEMPERATURE
/* [PLATFORM]-Add-END by TCTSZ.leo.guo */
#define V_CHARGER_ENABLE 0 // 1:ON , 0:OFF
#define V_CHARGER_MAX 6500 // 6.5 V
#define V_CHARGER_MIN 4400 // 4.4 V
@@ -98,7 +106,7 @@
#endif
/* High battery support */
//#define HIGH_BATTERY_VOLTAGE_SUPPORT
#define HIGH_BATTERY_VOLTAGE_SUPPORT
/* Disable Battery check for HQA */
#ifdef MTK_DISABLE_POWER_ON_OFF_VOLTAGE_LIMITATION
@@ -107,7 +115,9 @@
//#define MTK_WIRELESS_CHARGER_SUPPORT 1
/* [PLATFORM]-Add-BEGIN by TCTSZ.leo.guo, 04/15/2015, modify ntc temperature function */
#define MTK_BATTERY_PROTECT_FEATURE
/* [PLATFORM]-Add-END by TCTSZ.leo.guo */
/* Pump Express support (fast charging) */
#ifdef CONFIG_MTK_PUMP_EXPRESS_SUPPORT
#define TA_START_VCHR_TUNUNG_VOLTAGE 3400
@@ -93,6 +93,8 @@ extern char tpd_firmware_version_val[5];
extern int tpd_config_version;
extern int tpd_x_line;
extern int tpd_y_line;
extern u8 tpd_sensor_id;
int gtp_autotool_setting;
EXPORT_SYMBOL(gtp_autotool_setting);
extern struct tpd_device *tpd;
@@ -232,8 +234,12 @@ struct input_dev *pen_dev;
#if GTP_COMPATIBLE_MODE
u8 driver_num = 0;
u8 sensor_num = 0;
u8 gtp_ref_retries = 0;
u8 gtp_clk_retries = 0;
/*[PLATFORM]-Add-BEGIN by falin.luo@tcl.com 2015/4/29*/
/*change counter data type to u16, because GTP_CHK_FS_MNT_MAX is 300 */
u16 gtp_ref_retries = 0;
u16 gtp_clk_retries = 0;
static u16 is_data_mounted = 0;
/*[PLATFORM]-Add-NED by falin.luo@tcl.com 2015/4/29*/
CHIP_TYPE_T gtp_chip_type = CHIP_TYPE_GT9;
u8 rqst_processing = 0;
u8 is_950 = 0;
@@ -1220,6 +1226,7 @@ static s32 gtp_init_panel(struct i2c_client *client)
cfg_len = cfg_info_len[sensor_id];
tpd_config_version= send_cfg_buf[sensor_id][0];
tpd_sensor_id = sensor_id;
GTP_INFO("CTP_CONFIG_GROUP%d used, config length: %d", sensor_id + 1, cfg_len);
if (cfg_len < GTP_CONFIG_MIN_LENGTH)
@@ -1577,11 +1584,12 @@ static u8 gtp_bak_ref_proc(struct i2c_client *client, u8 mode)
//check file-system mounted
GTP_DEBUG("[gtp_bak_ref_proc]Waiting for FS %d", gtp_ref_retries);
if (gup_check_fs_mounted("/data") == FAIL)
if (/*gup_check_fs_mounted("/data") == FAIL*/!is_data_mounted)/*[PLATFORM]-MOD by falin.luo@tcl.com 2015/4/29*/
{
GTP_DEBUG("[gtp_bak_ref_proc]/data not mounted");
if(gtp_ref_retries++ < GTP_CHK_FS_MNT_MAX)
{
msleep(100);/*[PLATFORM]-ADD by falin.luo@tcl.com 2015/4/29*/
return FAIL;
}
}
@@ -1811,12 +1819,13 @@ static u8 gtp_main_clk_proc(struct i2c_client *client)
u8 gtp_clk_buf[6] = {0};
struct file *flp = NULL;
GTP_DEBUG("[gtp_main_clk_proc]Waiting for FS %d", gtp_ref_retries);
if (gup_check_fs_mounted("/data") == FAIL)
GTP_DEBUG("[gtp_main_clk_proc]Waiting for FS %d", gtp_clk_retries);/*[PLATFORM]-MOD by falin.luo@tcl.com 2015/4/29*/
if (/*gup_check_fs_mounted("/data") == FAIL*/!is_data_mounted)/*[PLATFORM]-MOD by falin.luo@tcl.com 2015/4/29*/
{
GTP_DEBUG("[gtp_main_clk_proc]/data not mounted");
if(gtp_clk_retries++ < GTP_CHK_FS_MNT_MAX)
{
msleep(100);/*[PLATFORM]-ADD by falin.luo@tcl.com 2015/4/29*/
return FAIL;
}
else
@@ -1951,8 +1960,10 @@ u8 gtp_hopping_proc(struct i2c_client *client, s32 mode)
s32 ret = 0;
GTP_DEBUG("Store hopping data, wait for /data mounted.");
ret = gup_check_fs_mounted("/data");
/*[PLATFORM]-MOD-BEGIN by falin.luo@tcl.com 2015/4/29*/
// ret = gup_check_fs_mounted("/data");
ret = is_data_mounted ? SUCCESS : FAIL;
/*[PLATFORM]-MOD-END by falin.luo@tcl.com 2015/4/29*/
if (FAIL == ret)
{
@@ -2496,12 +2507,43 @@ static ssize_t cfg_load_enable_store(struct device *dev,
}
static ssize_t cfg_load_enable_show(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t count)
char *buf)
{
return count;
return 1;
}
static DEVICE_ATTR(cfg_load_enable, S_IRUGO|S_IWUSR, cfg_load_enable_show, cfg_load_enable_store);
/*[PLATFORM]-Add-BEGIN by falin.luo@tcl.com 2015/4/29*/
/*sys interface to get and set the data partition mount status*/
#ifdef GTP_COMPATIBLE_MODE
static ssize_t data_is_mount_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t count)
{
GTP_INFO("enter %s", __func__);
is_data_mounted = ((buf[0] == '1') ? 1 : 0);
GTP_INFO("is_data_mount = %d, buf = %s", is_data_mounted, buf);
return count;
}
static ssize_t data_is_mount_show(struct device *dev,
struct device_attribute *attr,
char *buf)
{
return snprintf(buf, PAGE_SIZE, "is_data_mounted = %d\n", is_data_mounted);
}
static DEVICE_ATTR(data_is_mount, 0644, data_is_mount_show, data_is_mount_store);
#endif
/*[PLATFORM]-Add-END by falin.luo@tcl.com 2015/4/29*/
static struct miscdevice cfg_misc_device =
{
.minor = MISC_DYNAMIC_MINOR,
@@ -2525,9 +2567,10 @@ static void buttons_timer_function(unsigned long data)
static s32 tpd_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id)
{
s32 err = 0;
#if 0
s32 ret = 0;
u16 version_info;
#endif
#if GTP_HAVE_TOUCH_KEY
s32 idx = 0;
#endif
@@ -2663,6 +2706,12 @@ static s32 tpd_i2c_probe(struct i2c_client *client, const struct i2c_device_id *
tpd_load_status = 1;
#endif
misc_register(&cfg_misc_device);
/*[PLATFORM]-Add-BEGIN by falin.luo@tcl.com 2015/4/29*/
#ifdef GTP_COMPATIBLE_MODE
device_create_file(cfg_misc_device.this_device, &dev_attr_data_is_mount);
#endif
/*[PLATFORM]-Add-END by falin.luo@tcl.com 2015/4/29*/
device_create_file(cfg_misc_device.this_device, &dev_attr_cfg_load_enable);
tpd_load_status = 1;
return 0;
+19 -5
View File
@@ -38,11 +38,14 @@ char tpd_firmware_version_val[5];
int tpd_config_version;
int tpd_x_line;
int tpd_y_line;
u8 tpd_sensor_id;
EXPORT_SYMBOL(gesture_value);
EXPORT_SYMBOL(tpd_firmware_version_val);
EXPORT_SYMBOL(tpd_config_version);
EXPORT_SYMBOL(tpd_x_line);
EXPORT_SYMBOL(tpd_y_line);
EXPORT_SYMBOL(tpd_sensor_id);
@@ -291,7 +294,7 @@ static ssize_t firmware_version_val_show(struct device* dev, struct device_attri
return snprintf(buf, PAGE_SIZE, "%s\n", tpd_firmware_version_val);
}
static ssize_t firmware_version_val_store(struct device* dev, struct device_attribute* attr, char* buf, size_t count) {
static ssize_t firmware_version_val_store(struct device* dev, struct device_attribute* attr, const char* buf, size_t count) {
return count;
@@ -301,7 +304,7 @@ static ssize_t config_version_val_show(struct device* dev, struct device_attribu
return snprintf(buf, PAGE_SIZE, "%x\n", tpd_config_version);
}
static ssize_t config_version_val_store(struct device* dev, struct device_attribute* attr, char* buf,size_t count) {
static ssize_t config_version_val_store(struct device* dev, struct device_attribute* attr, const char* buf,size_t count) {
return count;
@@ -311,7 +314,7 @@ static ssize_t tpd_x_line_val_show(struct device* dev, struct device_attribute*
return snprintf(buf, PAGE_SIZE, "%d\n", tpd_x_line);
}
static ssize_t tpd_x_line_val_store(struct device* dev, struct device_attribute* attr, char* buf,size_t count) {
static ssize_t tpd_x_line_val_store(struct device* dev, struct device_attribute* attr, const char* buf,size_t count) {
return count;
@@ -321,18 +324,27 @@ static ssize_t tpd_y_line_val_show(struct device* dev, struct device_attribute*
return snprintf(buf, PAGE_SIZE, "%d\n", tpd_y_line);
}
static ssize_t tpd_y_line_val_store(struct device* dev, struct device_attribute* attr, char* buf,size_t count) {
static ssize_t tpd_y_line_val_store(struct device* dev, struct device_attribute* attr, const char* buf,size_t count) {
return count;
}
static ssize_t sensor_id_val_show(struct device* dev, struct device_attribute* attr, char* buf) {
return snprintf(buf, PAGE_SIZE, "%x\n", tpd_sensor_id);
}
static ssize_t sensor_id_val_store(struct device* dev, struct device_attribute* attr, const char* buf,size_t count) {
return count;
}
static DEVICE_ATTR(gesture_val, S_IRUGO | S_IWUSR, hello_val_show, hello_val_store);
static DEVICE_ATTR(firmware_version, S_IRUGO | S_IWUSR, firmware_version_val_show, firmware_version_val_store);
static DEVICE_ATTR(cfg_version, S_IRUGO | S_IWUSR, config_version_val_show, config_version_val_store);
static DEVICE_ATTR(tpd_xline, S_IRUGO | S_IWUSR, tpd_x_line_val_show, tpd_x_line_val_store);
static DEVICE_ATTR(tpd_yline, S_IRUGO | S_IWUSR, tpd_y_line_val_show, tpd_y_line_val_store);
static DEVICE_ATTR(sensor_id, S_IRUGO | S_IWUSR, sensor_id_val_show, sensor_id_val_store);
@@ -490,7 +502,9 @@ static int tpd_probe(struct platform_device *pdev) {
if(device_create_file(&pdev->dev, &dev_attr_tpd_yline) < 0) {
printk(KERN_ALERT"caoyang creat attribute val.");
}
if(device_create_file(&pdev->dev, &dev_attr_sensor_id) < 0) {
printk(KERN_ERR"create sensor_id sys file failed!\n");
}
/* init R-Touch */
#if 0
@@ -165,36 +165,45 @@ extern s32 gtp_i2c_read_dbl_check(struct i2c_client *client, u16 addr, u8 *rxbuf
// TODO: define your config for Sensor_ID == 3 here, if needed
#define CTP_CFG_GROUP4 {\
}
0x45,0x20,0x03,0x00,0x05,0x0A,0x34,0x02,0x01,0x08,0x19,0x0A,0x50,0x41,0x03,0x05,\
0x00,0x00,0x00,0x00,0x33,0x12,0x04,0x14,0x16,0x1A,0x14,0x8C,0x2E,0x0E,0x3F,0x41,\
0xD3,0x07,0x00,0x00,0x00,0xBA,0x02,0x11,0x00,0x01,0x00,0x18,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x1C,0x6C,0x94,0xC5,0x02,0x00,0x00,0x00,0x04,0xE3,0x20,0x00,0xB2,\
0x2A,0x00,0x8E,0x37,0x00,0x73,0x48,0x00,0x60,0x5F,0x00,0x5F,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x40,0x33,0x11,0x03,0x08,0x08,0x0F,0x1F,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x0F,0x0A,0x00,0x00,0x00,0x00,\
0x02,0x04,0x06,0x08,0x0A,0x0C,0x0E,0x10,0x12,0x14,0x16,0x18,0x1A,0x1C,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x13,\
0x12,0x10,0x0F,0x0C,0x0A,0x08,0x06,0x04,0x02,0x00,0x16,0x18,0x1C,0x1D,0x1E,0x1F,\
0x20,0x21,0x22,0x24,0x26,0x28,0x29,0x2A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x0F,0x01\
}
// TODO: define your config for Sensor_ID == 4 here, if needed
#define CTP_CFG_GROUP5 {\
}
// TODO: define your config for Sensor_ID == 5 here, if needed
#define CTP_CFG_GROUP6 {\
0x41,0x20,0x03,0x00,0x05,0x0A,0x05,0x20,0x01,0x0F,0x1E,\
0x0F,0x50,0x32,0x03,0x05,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x8C,0x2E,0x0E,0x36,0x38,0xD3,\
0x07,0x00,0x00,0x02,0x9B,0x04,0x1D,0x00,0x01,0x00,0x00,\
0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x1E,0x66,0x94,0xC5,\
0x02,0x08,0x00,0x00,0x04,0xC1,0x22,0x00,0x9C,0x2B,0x00,\
0x7D,0x37,0x00,0x65,0x47,0x00,0x54,0x5A,0x00,0x54,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x02,0x04,0x06,0x08,0x0A,0x0C,0x0E,0x10,0x12,\
0x14,0x16,0x18,0x1A,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,\
0x13,0x12,0x10,0x0F,0x0C,0x0A,0x08,0x06,0x04,0x02,0x00,\
0x16,0x18,0x1C,0x1D,0x1E,0x1F,0x20,0x21,0x22,0x24,0x26,\
0x28,0x29,0x2A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0x01 \
}
#define CTP_CFG_GROUP6 {\
0x49,0x20,0x03,0x00,0x05,0x0A,0x34,0x02,0x01,0x09,0x19,0x0C,0x64,0x3C,0x03,0x05,\
0x00,0x00,0x00,0x00,0x33,0x12,0x04,0x14,0x16,0x1A,0x14,0x8C,0x2E,0x0E,0x2F,0x31,\
0xD3,0x07,0x00,0x00,0x01,0xBA,0x02,0x11,0x00,0x09,0x00,0x1F,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x1C,0x4B,0x94,0xD5,0x03,0x06,0x00,0x00,0x04,0xE7,0x1F,0x00,0xC7,\
0x25,0x00,0xA6,0x2E,0x00,0x8E,0x38,0x00,0x76,0x44,0x00,0x76,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x40,0x33,0x11,0x03,0x08,0x08,0x0F,0x1F,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x0F,0x0A,0x00,0x00,0x00,0x00,\
0x02,0x04,0x06,0x08,0x0A,0x0C,0x0E,0x10,0x12,0x14,0x16,0x18,0x1A,0x1C,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x13,\
0x12,0x10,0x0F,0x0C,0x0A,0x08,0x06,0x04,0x02,0x00,0x16,0x18,0x1C,0x1D,0x1E,0x1F,\
0x20,0x21,0x22,0x24,0x26,0x28,0x29,0x2A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0xD4,0x01\
}
// STEP_2(REQUIRED): Customize your I/O ports & I/O operations here
#define TPD_POWER_SOURCE_CUSTOM MT6323_POWER_LDO_VGP2// define your power source for tp if needed
+2 -2
View File
@@ -688,7 +688,7 @@ static void *__dma_alloc(struct device *dev, size_t size, dma_addr_t *handle,
void *arm_dma_alloc(struct device *dev, size_t size, dma_addr_t *handle,
gfp_t gfp, struct dma_attrs *attrs)
{
pgprot_t prot = __get_dma_pgprot(attrs, pgprot_kernel);
pgprot_t prot = __get_dma_pgprot(attrs, PAGE_KERNEL);
void *memory;
if (dma_alloc_from_coherent(dev, size, handle, &memory))
@@ -701,7 +701,7 @@ void *arm_dma_alloc(struct device *dev, size_t size, dma_addr_t *handle,
static void *arm_coherent_dma_alloc(struct device *dev, size_t size,
dma_addr_t *handle, gfp_t gfp, struct dma_attrs *attrs)
{
pgprot_t prot = __get_dma_pgprot(attrs, pgprot_kernel);
pgprot_t prot = __get_dma_pgprot(attrs, PAGE_KERNEL);
void *memory;
if (dma_alloc_from_coherent(dev, size, handle, &memory))
+15 -6
View File
@@ -315,22 +315,31 @@ out:
}
static int
validate_event(struct pmu_hw_events *hw_events,
struct perf_event *event)
validate_event(struct pmu *pmu, struct pmu_hw_events *hw_events,
struct perf_event *event)
{
struct arm_pmu *armpmu = to_arm_pmu(event->pmu);
struct arm_pmu *armpmu;
struct hw_perf_event fake_event = event->hw;
struct pmu *leader_pmu = event->group_leader->pmu;
if (is_software_event(event))
return 1;
/*
* Reject groups spanning multiple HW PMUs (e.g. CPU + CCI). The
* core perf code won't check that the pmu->ctx == leader->ctx
* until after pmu->event_init(event).
*/
if (event->pmu != pmu)
return 0;
if (event->pmu != leader_pmu || event->state < PERF_EVENT_STATE_OFF)
return 1;
if (event->state == PERF_EVENT_STATE_OFF && !event->attr.enable_on_exec)
return 1;
armpmu = to_arm_pmu(event->pmu);
return armpmu->get_event_idx(hw_events, &fake_event) >= 0;
}
@@ -348,15 +357,15 @@ validate_group(struct perf_event *event)
memset(fake_used_mask, 0, sizeof(fake_used_mask));
fake_pmu.used_mask = fake_used_mask;
if (!validate_event(&fake_pmu, leader))
if (!validate_event(event->pmu, &fake_pmu, leader))
return -EINVAL;
list_for_each_entry(sibling, &leader->sibling_list, group_entry) {
if (!validate_event(&fake_pmu, sibling))
if (!validate_event(event->pmu, &fake_pmu, sibling))
return -EINVAL;
}
if (!validate_event(&fake_pmu, event))
if (!validate_event(event->pmu, &fake_pmu, event))
return -EINVAL;
return 0;
+1 -1
View File
@@ -50,7 +50,7 @@ asmlinkage long sys_mmap(unsigned long addr, unsigned long len,
* The sys_call_table array must be 4K aligned to be accessible from
* kernel/entry.S.
*/
void *sys_call_table[__NR_syscalls] __aligned(4096) = {
void const *sys_call_table[__NR_syscalls] __aligned(4096) = {
[0 ... __NR_syscalls - 1] = sys_ni_syscall,
#include <asm/unistd.h>
};
+1
View File
@@ -830,6 +830,7 @@ static void disk_seqf_stop(struct seq_file *seqf, void *v)
if (iter) {
class_dev_iter_exit(iter);
kfree(iter);
seqf->private = NULL;
}
}
+6
View File
@@ -1364,6 +1364,12 @@ config CRYPTO_LZO
help
This is the LZO algorithm.
config CRYPTO_LZ4K
tristate "LZ4K compression algorithm"
select CRYPTO_ALGAPI
help
This is the LZ4K algorithm.
config CRYPTO_842
tristate "842 compression algorithm"
depends on CRYPTO_DEV_NX_COMPRESS
+1
View File
@@ -85,6 +85,7 @@ obj-$(CONFIG_CRYPTO_CRC32C) += crc32c.o
obj-$(CONFIG_CRYPTO_CRC32) += crc32.o
obj-$(CONFIG_CRYPTO_AUTHENC) += authenc.o authencesn.o
obj-$(CONFIG_CRYPTO_LZO) += lzo.o
obj-$(CONFIG_CRYPTO_LZ4K) += lz4kc.o
obj-$(CONFIG_CRYPTO_842) += 842.o
obj-$(CONFIG_CRYPTO_RNG2) += rng.o
obj-$(CONFIG_CRYPTO_RNG2) += krng.o
+151
View File
@@ -0,0 +1,151 @@
/*
* Cryptographic API.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc., 51
* Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
#include <linux/init.h>
#include <linux/module.h>
#include <linux/crypto.h>
#include <linux/vmalloc.h>
#include <linux/lzo.h>
#include <linux/lz4k.h>
#define malloc(a) kmalloc(a, GFP_KERNEL)
#define free(a) kfree(a)
#if 0
extern int lz4k_compress_ubifs(const unsigned char *in, size_t in_len, unsigned char *out,
size_t *out_len, void *wrkmem);
extern int lz4k_decompress_ubifs(const unsigned char *in, size_t in_len,
unsigned char *out, size_t *out_len);
extern int lz4k_compress(const unsigned char *in, size_t in_len, unsigned char *out,
size_t *out_len, void *wrkmem);
#endif
struct lz4k_ctx {
void *lz4k_comp_mem;
};
static int lz4kc_init(struct crypto_tfm *tfm)
{
struct lz4k_ctx *ctx = crypto_tfm_ctx(tfm);
ctx->lz4k_comp_mem = vmalloc(LZO1X_MEM_COMPRESS);
if (!ctx->lz4k_comp_mem)
return -ENOMEM;
return 0;
}
static void lz4kc_exit(struct crypto_tfm *tfm)
{
struct lz4k_ctx *ctx = crypto_tfm_ctx(tfm);
vfree(ctx->lz4k_comp_mem);
}
static int lz4kc_compress(struct crypto_tfm *tfm, const u8 *src,
unsigned int slen, u8 *dst, unsigned int *dlen)
{
struct lz4k_ctx *ctx = crypto_tfm_ctx(tfm);
//static size_t in_size = 0, out_size = 0;
size_t tmp_len = *dlen; /* size_t(ulong) <-> uint on 64 bit */
int err;
static int count = 0;
//printk("lz4k_compress 2 count = %d\r\n", count);
count++;
err = lz4k_compress(src, slen, dst, &tmp_len, ctx->lz4k_comp_mem);
//err = lzo1x_1_compress(src, slen, dst, &tmp_len, ctx->lz4k_comp_mem);
if (err != LZO_E_OK)
return -EINVAL;
#if 0
if (count%10 == 0)
{
in_size += slen;
out_size += tmp_len;
printk("lz4k_compress_ubifs result in_size = %d, out_size = %d \n", in_size,out_size);
}
#endif
//printk("lz4k_compress result in_size = %d, out_size = %d \n", in_size,out_size);
//printk("lz4k_compress result slen = %d, tmp_len = %d \n", slen,tmp_len);
*dlen = tmp_len;
return 0;
}
static int lz4kc_decompress(struct crypto_tfm *tfm, const u8 *src,
unsigned int slen, u8 *dst, unsigned int *dlen)
{
static int count = 0;
int err;
size_t tmp_len = *dlen; /* size_t(ulong) <-> uint on 64 bit */
//printk("lz4k_decompress 2count = %d, *dlen = %d", count,*dlen);
err = lz4k_decompress_ubifs(src, slen, dst, &tmp_len);
//err = lzo1x_decompress_safe(src, slen, dst, &tmp_len);
count++;
if (err != LZO_E_OK)
return -EINVAL;
*dlen = tmp_len;
return 0;
}
static struct crypto_alg alg = {
.cra_name = "lz4k",
.cra_flags = CRYPTO_ALG_TYPE_COMPRESS,
.cra_ctxsize = sizeof(struct lz4k_ctx),
.cra_module = THIS_MODULE,
.cra_list = LIST_HEAD_INIT(alg.cra_list),
.cra_init = lz4kc_init,
.cra_exit = lz4kc_exit,
.cra_u = { .compress = {
.coa_compress = lz4kc_compress,
.coa_decompress = lz4kc_decompress } }
};
static int __init lz4k_mod_init(void)
{
return crypto_register_alg(&alg);
}
static void __exit lz4k_mod_fini(void)
{
crypto_unregister_alg(&alg);
}
module_init(lz4k_mod_init);
module_exit(lz4k_mod_fini);
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("LZ77 with 4K Compression Algorithm");
+3
View File
@@ -1148,6 +1148,7 @@ static void hid_input_field(struct hid_device *hid, struct hid_field *field,
/* Ignore report if ErrorRollOver */
if (!(field->flags & HID_MAIN_ITEM_VARIABLE) &&
value[n] >= min && value[n] <= max &&
value[n] - min < field->maxusage &&
field->usage[value[n] - min].hid == HID_UP_KEYBOARD + 1)
goto exit;
}
@@ -1160,11 +1161,13 @@ static void hid_input_field(struct hid_device *hid, struct hid_field *field,
}
if (field->value[n] >= min && field->value[n] <= max
&& field->value[n] - min < field->maxusage
&& field->usage[field->value[n] - min].hid
&& search(value, field->value[n], count))
hid_process_event(hid, field, &field->usage[field->value[n] - min], 0, interrupt);
if (value[n] >= min && value[n] <= max
&& value[n] - min < field->maxusage
&& field->usage[value[n] - min].hid
&& search(field->value, value[n], count))
hid_process_event(hid, field, &field->usage[value[n] - min], 1, interrupt);
@@ -454,6 +454,13 @@ static s32 goodix_tool_write(struct file *filp, const char __user *buff, unsigne
{
show_len = 0;
total_len = 0;
if ((cmd_head.data == NULL)
|| (cmd_head.data_len >= DATA_LENGTH)
|| (cmd_head.data_len >= (len - CMD_HEAD_LENGTH))) {
GTP_ERROR("copy_from_user data out of range.");
return -EINVAL;
}
memset(cmd_head.data, 0, cmd_head.data_len + 1);
memcpy(cmd_head.data, &buff[CMD_HEAD_LENGTH], cmd_head.data_len);
@@ -508,6 +508,13 @@ static s32 goodix_tool_write(struct file *filp, const char __user *buff, unsigne
{
show_len = 0;
total_len = 0;
if ((cmd_head.data == NULL)
|| (cmd_head.data_len >= DATA_LENGTH)
|| (cmd_head.data_len >= (len - CMD_HEAD_LENGTH))) {
GTP_ERROR("copy_from_user data out of range.");
return -EINVAL;
}
memset(cmd_head.data, 0, cmd_head.data_len + 1);
memcpy(cmd_head.data, &buff[CMD_HEAD_LENGTH], cmd_head.data_len);
GTP_DEBUG("update firmware, filename: %s", cmd_head.data);
@@ -508,6 +508,13 @@ static s32 goodix_tool_write(struct file *filp, const char __user *buff, unsigne
{
show_len = 0;
total_len = 0;
if ((cmd_head.data == NULL)
|| (cmd_head.data_len >= DATA_LENGTH)
|| (cmd_head.data_len >= (len - CMD_HEAD_LENGTH))) {
GTP_ERROR("copy_from_user data out of range.");
return -EINVAL;
}
memset(cmd_head.data, 0, cmd_head.data_len + 1);
memcpy(cmd_head.data, &buff[CMD_HEAD_LENGTH], cmd_head.data_len);
GTP_DEBUG("update firmware, filename: %s", cmd_head.data);
@@ -508,6 +508,13 @@ static s32 goodix_tool_write(struct file *filp, const char __user *buff, unsigne
{
show_len = 0;
total_len = 0;
if ((cmd_head.data == NULL)
|| (cmd_head.data_len >= DATA_LENGTH)
|| (cmd_head.data_len >= (len - CMD_HEAD_LENGTH))) {
GTP_ERROR("copy_from_user data out of range.");
return -EINVAL;
}
memset(cmd_head.data, 0, cmd_head.data_len + 1);
memcpy(cmd_head.data, &buff[CMD_HEAD_LENGTH], cmd_head.data_len);
GTP_DEBUG("update firmware, filename: %s", cmd_head.data);
@@ -508,6 +508,13 @@ static s32 goodix_tool_write(struct file *filp, const char __user *buff, unsigne
{
show_len = 0;
total_len = 0;
if ((cmd_head.data == NULL)
|| (cmd_head.data_len >= DATA_LENGTH)
|| (cmd_head.data_len >= (len - CMD_HEAD_LENGTH))) {
GTP_ERROR("copy_from_user data out of range.");
return -EINVAL;
}
memset(cmd_head.data, 0, cmd_head.data_len + 1);
memcpy(cmd_head.data, &buff[CMD_HEAD_LENGTH], cmd_head.data_len);
GTP_DEBUG("update firmware, filename: %s", cmd_head.data);
@@ -474,6 +474,13 @@ static s32 goodix_tool_write(struct file *filp, const char __user *buff, unsigne
{
show_len = 0;
total_len = 0;
if ((cmd_head.data == NULL)
|| (cmd_head.data_len >= DATA_LENGTH)
|| (cmd_head.data_len >= (len - CMD_HEAD_LENGTH))) {
GTP_ERROR("copy_from_user data out of range.");
return -EINVAL;
}
memset(cmd_head.data, 0, cmd_head.data_len + 1);
memcpy(cmd_head.data, &buff[CMD_HEAD_LENGTH], cmd_head.data_len);
GTP_DEBUG("update firmware, filename: %s", cmd_head.data);
@@ -568,6 +568,13 @@ static s32 goodix_tool_write(struct file *filp, const char __user *buff, unsigne
{
show_len = 0;
total_len = 0;
if ((cmd_head.data == NULL)
|| (cmd_head.data_len >= DATA_LENGTH)
|| (cmd_head.data_len >= (len - CMD_HEAD_LENGTH))) {
GTP_ERROR("copy_from_user data out of range.");
return -EINVAL;
}
memset(cmd_head.data, 0, cmd_head.data_len + 1);
ret = copy_from_user(cmd_head.data, &buff[CMD_HEAD_LENGTH], cmd_head.data_len);
if (ret)
@@ -503,6 +503,13 @@ static s32 goodix_tool_write(struct file *filp, const char __user *buff, unsigne
{
show_len = 0;
total_len = 0;
if ((cmd_head.data == NULL)
|| (cmd_head.data_len >= DATA_LENGTH)
|| (cmd_head.data_len >= (len - CMD_HEAD_LENGTH))) {
GTP_ERROR("copy_from_user data out of range.");
return -EINVAL;
}
memset(cmd_head.data, 0, cmd_head.data_len + 1);
memcpy(cmd_head.data, &buff[CMD_HEAD_LENGTH], cmd_head.data_len);
GTP_DEBUG("update firmware, filename: %s", cmd_head.data);
@@ -577,6 +577,13 @@ static s32 goodix_tool_write(struct file *filp, const char __user *buff, unsigne
{
show_len = 0;
total_len = 0;
if ((cmd_head.data == NULL)
|| (cmd_head.data_len >= DATA_LENGTH)
|| (cmd_head.data_len >= (len - CMD_HEAD_LENGTH))) {
GTP_ERROR("copy_from_user data out of range.");
return -EINVAL;
}
memset(cmd_head.data, 0, cmd_head.data_len + 1);
ret = copy_from_user(cmd_head.data, &buff[CMD_HEAD_LENGTH], cmd_head.data_len);
if (ret)
@@ -566,6 +566,13 @@ static s32 goodix_tool_write(struct file *filp, const char __user *buff, unsigne
{
show_len = 0;
total_len = 0;
if ((cmd_head.data == NULL)
|| (cmd_head.data_len >= DATA_LENGTH)
|| (cmd_head.data_len >= (len - CMD_HEAD_LENGTH))) {
GTP_ERROR("copy_from_user data out of range.");
return -EINVAL;
}
memset(cmd_head.data, 0, cmd_head.data_len + 1);
ret = copy_from_user(cmd_head.data, &buff[CMD_HEAD_LENGTH], cmd_head.data_len);
if (ret)
@@ -577,6 +577,13 @@ static s32 goodix_tool_write(struct file *filp, const char __user *buff, unsigne
{
show_len = 0;
total_len = 0;
if ((cmd_head.data == NULL)
|| (cmd_head.data_len >= DATA_LENGTH)
|| (cmd_head.data_len >= (len - CMD_HEAD_LENGTH))) {
GTP_ERROR("copy_from_user data out of range.");
return -EINVAL;
}
memset(cmd_head.data, 0, cmd_head.data_len + 1);
ret = copy_from_user(cmd_head.data, &buff[CMD_HEAD_LENGTH], cmd_head.data_len);
if (ret)
@@ -566,6 +566,13 @@ static s32 goodix_tool_write(struct file *filp, const char __user *buff, unsigne
{
show_len = 0;
total_len = 0;
if ((cmd_head.data == NULL)
|| (cmd_head.data_len >= DATA_LENGTH)
|| (cmd_head.data_len >= (len - CMD_HEAD_LENGTH))) {
GTP_ERROR("copy_from_user data out of range.");
return -EINVAL;
}
memset(cmd_head.data, 0, cmd_head.data_len + 1);
memcpy(cmd_head.data, &buff[CMD_HEAD_LENGTH], cmd_head.data_len);
GTP_DEBUG("update firmware, filename: %s", cmd_head.data);
+2 -1
View File
@@ -1385,11 +1385,12 @@ static int xc2028_set_config(struct dvb_frontend *fe, void *priv_cfg)
* in order to avoid troubles during device release.
*/
kfree(priv->ctrl.fname);
priv->ctrl.fname = NULL;
memcpy(&priv->ctrl, p, sizeof(priv->ctrl));
if (p->fname) {
priv->ctrl.fname = kstrdup(p->fname, GFP_KERNEL);
if (priv->ctrl.fname == NULL)
rc = -ENOMEM;
return -ENOMEM;
}
/*
+4
View File
@@ -10,6 +10,10 @@ ccflags-y += -I$(srctree)/drivers/misc/mediatek/cmdq/$(MTK_PLATFORM) \
# Enable MET
ccflags-y += -DMET_USER_EVENT_SUPPORT
ifneq ($(TARGET_BUILD_VARIANT),user)
ccflags-y += -D_CMDQ_TEST_PROC_
endif
# secure path
ifeq ($(strip $(MTK_SEC_VIDEO_PATH_SUPPORT)),yes)
ifeq ($(strip $(TRUSTONIC_TEE_SUPPORT)),yes)
+27
View File
@@ -41,6 +41,10 @@ static const struct of_device_id cmdq_of_ids[] = {
};
#endif
#define CMDQ_MAX_DUMP_REG_COUNT (2048)
#define CMDQ_MAX_COMMAND_SIZE (0x10000)
#define CMDQ_MAX_WRITE_ADDR_COUNT (PAGE_SIZE / sizeof(u32))
static dev_t gCmdqDevNo;
static struct cdev *gCmdqCDev;
static struct class *gCMDQClass;
@@ -185,6 +189,8 @@ static int cmdq_driver_create_reg_address_buffer(cmdqCommandStruct *pCommand)
}
/* how many register to dump? */
if (kernelRegCount > CMDQ_MAX_DUMP_REG_COUNT || userRegCount > CMDQ_MAX_DUMP_REG_COUNT)
return -EINVAL;
totalRegCount = kernelRegCount + userRegCount;
if (0 == totalRegCount) {
@@ -237,6 +243,7 @@ static void cmdq_driver_process_read_address_request(cmdqReadAddressStruct *req_
do {
if (NULL == req_user ||
0 == req_user->count ||
req_user->count > CMDQ_MAX_DUMP_REG_COUNT ||
NULL == req_user->values || NULL == req_user->dmaAddresses) {
CMDQ_ERR("[READ_PA] invalid req_user\n");
break;
@@ -364,6 +371,9 @@ static long cmdq_driver_process_command_request(cmdqCommandStruct *pCommand)
return -EFAULT;
}
if (pCommand->regRequest.count > CMDQ_MAX_DUMP_REG_COUNT)
return -EINVAL;
/* allocate secure medatata */
status = cmdq_driver_create_secure_medadata(pCommand);
if (0 != status) {
@@ -458,6 +468,11 @@ static long cmdq_ioctl(struct file *pFile, unsigned int code, unsigned long para
return -EFAULT;
}
if (command.regRequest.count > CMDQ_MAX_DUMP_REG_COUNT ||
!command.blockSize ||
command.blockSize > CMDQ_MAX_COMMAND_SIZE)
return -EINVAL;
/* insert private_data for resource reclaim */
command.privateData = (void *)pFile->private_data;
@@ -480,6 +495,9 @@ static long cmdq_ioctl(struct file *pFile, unsigned int code, unsigned long para
return -EFAULT;
}
if (job.command.blockSize > CMDQ_MAX_COMMAND_SIZE)
return -EINVAL;
/* not support secure path for async ioctl yet */
if (true == job.command.secData.isSecure) {
CMDQ_ERR("not support secure path for CMDQ_IOCTL_ASYNC_JOB_EXEC\n");
@@ -537,6 +555,8 @@ static long cmdq_ioctl(struct file *pFile, unsigned int code, unsigned long para
return -EFAULT;
}
pTask = (TaskStruct *)(unsigned long)jobResult.hJob;
if (pTask->regCount > CMDQ_MAX_DUMP_REG_COUNT)
return -EINVAL;
/* utility service, fill the engine flag. */
/* this is required by MDP. */
@@ -632,6 +652,13 @@ static long cmdq_ioctl(struct file *pFile, unsigned int code, unsigned long para
return -EFAULT;
}
if (!addrReq.count || addrReq.count > CMDQ_MAX_WRITE_ADDR_COUNT) {
CMDQ_ERR(
"CMDQ_IOCTL_ALLOC_WRITE_ADDRESS invalid alloc write addr count:%u\n",
addrReq.count);
return -EINVAL;
}
status = cmdqCoreAllocWriteAddress(addrReq.count, &paStart);
if (0 != status) {
CMDQ_ERR
+6 -1
View File
@@ -29,7 +29,9 @@ static bool gCmdqTestSecure = false;
extern unsigned long msleep_interruptible(unsigned int msecs);
#ifdef _CMDQ_TEST_PROC_
static struct proc_dir_entry *gCmdqTestProcEntry;
#endif
extern int32_t cmdq_core_suspend_HW_thread(int32_t thread);
@@ -2514,6 +2516,7 @@ static struct file_operations cmdq_fops = {
static int __init cmdq_test_init(void)
{
#ifdef _CMDQ_TEST_PROC_
CMDQ_MSG("cmdq_test_init\n");
/* Mout proc entry for debug */
@@ -2523,17 +2526,19 @@ static int __init cmdq_test_init(void)
CMDQ_MSG("cmdq_test_init failed\n");
}
}
#endif
return 0;
}
static void __exit cmdq_test_exit(void)
{
#ifdef _CMDQ_TEST_PROC_
CMDQ_MSG("cmdq_test_exit\n");
if (NULL != gCmdqTestProcEntry) {
proc_remove(gCmdqTestProcEntry);
gCmdqTestProcEntry = NULL;
}
#endif
}
module_init(cmdq_test_init);
module_exit(cmdq_test_exit);
@@ -80,6 +80,8 @@ when mtk_wcn_wmt_func_on is called by wifi through rfkill)
#define MAX_GPIO_CTRL_TIME (2000) /* [FixMe][GeorgeKuo] a temp value */
#define MAX_PATCH_NUM 10
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
@@ -1163,13 +1163,20 @@ long WMT_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
case WMT_IOCTL_SET_PATCH_NUM:{
pAtchNum = arg;
WMT_INFO_FUNC(" get patch num from launcher = %d\n", pAtchNum);
wmt_lib_set_patch_num(pAtchNum);
pPatchInfo = kzalloc(sizeof(WMT_PATCH_INFO) *pAtchNum, GFP_ATOMIC);
if (pAtchNum == 0 || pAtchNum > MAX_PATCH_NUM) {
WMT_ERR_FUNC("patch num(%d) == 0 or > %d!\n", pAtchNum, MAX_PATCH_NUM);
iRet = -1;
break;
}
pPatchInfo = kzalloc(sizeof(WMT_PATCH_INFO) * pAtchNum, GFP_ATOMIC);
if (!pPatchInfo) {
WMT_ERR_FUNC("allocate memory fail!\n");
iRet = -EFAULT;
break;
}
WMT_INFO_FUNC(" get patch num from launcher = %d\n", pAtchNum);
wmt_lib_set_patch_num(pAtchNum);
}
break;
@@ -3197,8 +3197,23 @@ P_SW_RFB_T qmHandleRxPackets(IN P_ADAPTER_T prAdapter, IN P_SW_RFB_T prSwRfbList
}
}
#if CFG_SUPPORT_WAPI
/* Todo:: Move the data class error check here */
if (prCurrSwRfb->u2PacketLen > ETHER_HEADER_LEN) {
PUINT_8 pc = (PUINT_8) prCurrSwRfb->pvHeader;
UINT_16 u2Etype = 0;
u2Etype = (pc[ETHER_TYPE_LEN_OFFSET] << 8) | (pc[ETHER_TYPE_LEN_OFFSET + 1]);
/* for wapi integrity test. WPI_1x packet should be always in non-encrypted mode.
if we received any WPI(0x88b4) packet that is encrypted, drop here. */
if (u2Etype == ETH_WPI_1X &&
HAL_RX_STATUS_GET_SEC_MODE(prRxStatus) != 0) {
DBGLOG(QM, INFO, ("drop wpi packet with sec mode\n"));
prCurrSwRfb->eDst = RX_PKT_DESTINATION_NULL;
QUEUE_INSERT_TAIL(prReturnedQue, (P_QUE_ENTRY_T) prCurrSwRfb);
continue;
}
}
#endif
if (prCurrSwRfb->fgReorderBuffer && !fgIsBMC && fgIsHTran) {
/* If this packet should dropped or indicated to the host immediately,
* it should be enqueued into the rReturnedQue with specific flags. If
@@ -1783,7 +1783,7 @@ wext_set_mlme(IN struct net_device *prNetDev,
/*----------------------------------------------------------------------------*/
static int
wext_set_scan(IN struct net_device *prNetDev,
IN struct iw_request_info *prIwrInfo, IN union iwreq_data *prData, IN char *pcExtra)
IN struct iw_request_info *prIwrInfo, IN struct iw_scan_req *prIwScanReq, IN char *pcExtra)
{
P_GLUE_INFO_T prGlueInfo = NULL;
WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS;
@@ -1798,10 +1798,8 @@ wext_set_scan(IN struct net_device *prNetDev,
#if WIRELESS_EXT > 17
/* retrieve SSID */
if (prData) {
essid_len =
((struct iw_scan_req *)(((struct iw_point *)prData)->pointer))->essid_len;
}
if (prIwScanReq)
essid_len = prIwScanReq->essid_len;
#endif
init_completion(&prGlueInfo->rScanComp);
@@ -3699,6 +3697,7 @@ int wext_support_ioctl(IN struct net_device *prDev, IN struct ifreq *prIfReq, IN
int ret = 0;
char *prExtraBuf = NULL;
UINT_32 u4ExtraSize = 0;
struct iw_scan_req * prIwScanReq = NULL;
/* prDev is verified in the caller function wlanDoIOCTL() */
@@ -3841,23 +3840,22 @@ int wext_support_ioctl(IN struct net_device *prDev, IN struct ifreq *prIfReq, IN
}
#if WIRELESS_EXT > 17
else if (iwr->u.data.length == sizeof(struct iw_scan_req)) {
prExtraBuf = kalMemAlloc(MAX_SSID_LEN, VIR_MEM_TYPE);
if (!prExtraBuf) {
prIwScanReq = kalMemAlloc(iwr->u.data.length, VIR_MEM_TYPE);
if (!prIwScanReq) {
ret = -ENOMEM;
break;
}
if (copy_from_user
(prExtraBuf, ((struct iw_scan_req *)(iwr->u.data.pointer))->essid,
((struct iw_scan_req *)(iwr->u.data.pointer))->essid_len)) {
if (copy_from_user(prIwScanReq, iwr->u.data.pointer, iwr->u.data.length)) {
ret = -EFAULT;
} else {
ret =
wext_set_scan(prDev, NULL, (union iwreq_data *)&(iwr->u.data),
prExtraBuf);
if (prIwScanReq->essid_len > IW_ESSID_MAX_SIZE)
prIwScanReq->essid_len = IW_ESSID_MAX_SIZE;
ret = wext_set_scan(prDev, NULL, prIwScanReq, &(prIwScanReq->essid[0]));
}
kalMemFree(prExtraBuf, VIR_MEM_TYPE, MAX_SSID_LEN);
prExtraBuf = NULL;
kalMemFree(prIwScanReq, VIR_MEM_TYPE, iwr->u.data.length);
prIwScanReq = NULL;
}
#endif
else {
@@ -1698,6 +1698,7 @@ priv_get_struct(IN struct net_device *prNetDev,
UINT_32 u4BufLen = 0;
PUINT_32 pu4IntBuf = NULL;
int status = 0;
UINT_32 u4CopyDataMax = 0;
kalMemZero(&aucOidBuf[0], sizeof(aucOidBuf));
@@ -1763,11 +1764,14 @@ priv_get_struct(IN struct net_device *prNetDev,
pu4IntBuf = (PUINT_32) prIwReqData->data.pointer;
prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0];
if (copy_from_user(&prNdisReq->ndisOidContent[0],
prIwReqData->data.pointer, prIwReqData->data.length)) {
DBGLOG(REQ, INFO, ("priv_get_struct() copy_from_user oidBuf fail\n"));
return -EFAULT;
}
u4CopyDataMax = sizeof(aucOidBuf) - OFFSET_OF(NDIS_TRANSPORT_STRUCT, ndisOidContent);
if ((prIwReqData->data.length > u4CopyDataMax)
|| copy_from_user(&prNdisReq->ndisOidContent[0],
prIwReqData->data.pointer,
prIwReqData->data.length)) {
DBGLOG(REQ, INFO, ("priv_get_struct() copy_from_user oidBuf fail\n"));
return -EFAULT;
}
prNdisReq->ndisOidCmd = OID_CUSTOM_SW_CTRL;
prNdisReq->inNdisOidlength = 8;
@@ -78,6 +78,8 @@ when mtk_wcn_wmt_func_on is called by wifi through rfkill)
#define MAX_GPIO_CTRL_TIME (2000) /* [FixMe][GeorgeKuo] a temp value */
#define MAX_PATCH_NUM 10
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
@@ -2517,13 +2517,20 @@ WMT_unlocked_ioctl (
case WMT_IOCTL_SET_PATCH_NUM: {
pAtchNum = arg;
WMT_INFO_FUNC(" get patch num from launcher = %d\n",pAtchNum);
wmt_lib_set_patch_num(pAtchNum);
pPatchInfo = kzalloc(sizeof(WMT_PATCH_INFO)*pAtchNum,GFP_ATOMIC);
if (!pPatchInfo) {
WMT_ERR_FUNC("allocate memory fail!\n");
if (pAtchNum == 0 || pAtchNum > MAX_PATCH_NUM) {
WMT_ERR_FUNC("patch num(%d) == 0 or > %d!\n", pAtchNum, MAX_PATCH_NUM);
iRet = -1;
break;
}
pPatchInfo = kzalloc(sizeof(WMT_PATCH_INFO) * pAtchNum, GFP_ATOMIC);
if (!pPatchInfo) {
WMT_ERR_FUNC("allocate memory fail!\n");
iRet = -EFAULT;
break;
}
WMT_INFO_FUNC(" get patch num from launcher = %d\n",pAtchNum);
wmt_lib_set_patch_num(pAtchNum);
}
break;
@@ -1242,10 +1242,19 @@ wlanAdapterStart (
UINT_32 u4SetInfoLen;
#endif
enum Adapter_Start_Fail_Reason {
ALLOC_ADAPTER_MEM_FAIL,
DRIVER_OWN_FAIL,
INIT_ADAPTER_FAIL,
RAM_CODE_DOWNLOAD_FAIL,
WAIT_FIRMWARE_READY_FAIL,
FAIL_REASON_MAX
} eFailReason;
ASSERT(prAdapter);
DEBUGFUNC("wlanAdapterStart");
eFailReason = FAIL_REASON_MAX;
//4 <0> Reset variables in ADAPTER_T
prAdapter->fgIsFwOwn = TRUE;
prAdapter->fgIsEnterD3ReqIssued = FALSE;
@@ -1262,6 +1271,7 @@ wlanAdapterStart (
if ( (u4Status = nicAllocateAdapterMemory(prAdapter)) != WLAN_STATUS_SUCCESS ) {
DBGLOG(INIT, ERROR, ("nicAllocateAdapterMemory Error!\n"));
u4Status = WLAN_STATUS_FAILURE;
eFailReason = ALLOC_ADAPTER_MEM_FAIL;
break;
}
@@ -1278,6 +1288,7 @@ wlanAdapterStart (
if(prAdapter->fgIsFwOwn == TRUE) {
DBGLOG(INIT, ERROR, ("nicpmSetDriverOwn() failed!\n"));
u4Status = WLAN_STATUS_FAILURE;
eFailReason = DRIVER_OWN_FAIL;
break;
}
@@ -1285,6 +1296,7 @@ wlanAdapterStart (
if ( (u4Status = nicInitializeAdapter(prAdapter)) != WLAN_STATUS_SUCCESS ) {
DBGLOG(INIT, ERROR, ("nicInitializeAdapter failed!\n"));
u4Status = WLAN_STATUS_FAILURE;
eFailReason = INIT_ADAPTER_FAIL;
break;
}
#endif
@@ -1400,6 +1412,7 @@ wlanAdapterStart (
#endif
if(u4Status != WLAN_STATUS_SUCCESS) {
eFailReason = RAM_CODE_DOWNLOAD_FAIL;
break;
}
@@ -1415,6 +1428,7 @@ wlanAdapterStart (
else {
DBGLOG(INIT, ERROR, ("No Firmware found!\n"));
u4Status = WLAN_STATUS_FAILURE;
eFailReason = RAM_CODE_DOWNLOAD_FAIL;
break;
}
@@ -1602,6 +1616,7 @@ wlanAdapterStart (
else if(kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE
|| fgIsBusAccessFailed == TRUE) {
u4Status = WLAN_STATUS_FAILURE;
eFailReason = WAIT_FIRMWARE_READY_FAIL;
break;
}
else if(i >= CFG_RESPONSE_POLLING_TIMEOUT) {
@@ -1611,6 +1626,7 @@ wlanAdapterStart (
DBGLOG(INIT, ERROR, ("Waiting for Ready bit: Timeout, ID=%u\n",
(u4MailBox0 & 0x0000FFFF)));
u4Status = WLAN_STATUS_FAILURE;
eFailReason = WAIT_FIRMWARE_READY_FAIL;
break;
}
else {
@@ -1681,6 +1697,7 @@ wlanAdapterStart (
RECLAIM_POWER_CONTROL_TO_PM(prAdapter, FALSE);
if(u4Status != WLAN_STATUS_SUCCESS) {
eFailReason = WAIT_FIRMWARE_READY_FAIL;
break;
}
@@ -1862,8 +1879,26 @@ wlanAdapterStart (
}
else {
// release allocated memory
nicReleaseAdapterMemory(prAdapter);
}
switch (eFailReason)
{
case WAIT_FIRMWARE_READY_FAIL:
case RAM_CODE_DOWNLOAD_FAIL:
DBGLOG(INIT, ERROR, ("Wait firmware ready fail or ram code download fail, FailReason: %d\n",
eFailReason));
KAL_WAKE_LOCK_DESTROY(prAdapter, &prAdapter->rTxThreadWakeLock);
nicRxUninitialize(prAdapter);
nicTxRelease(prAdapter);
/* System Service Uninitialization */
nicUninitSystemService(prAdapter);
case INIT_ADAPTER_FAIL:
case DRIVER_OWN_FAIL:
nicReleaseAdapterMemory(prAdapter);
case ALLOC_ADAPTER_MEM_FAIL:
break;
default:
break;
}
}
return u4Status;
} /* wlanAdapterStart */
@@ -4534,7 +4569,7 @@ wlanQueryPermanentAddress(
// header checking ..
prHifRxHdr = (P_HIF_RX_HEADER_T)aucBuffer;
if(prHifRxHdr->u2PacketType != HIF_RX_PKT_TYPE_EVENT) {
if ((prHifRxHdr->u2PacketType & HIF_RX_HDR_PACKET_TYPE_MASK) != HIF_RX_PKT_TYPE_EVENT) {
return WLAN_STATUS_FAILURE;
}
@@ -4624,7 +4659,7 @@ wlanQueryNicCapability(
// header checking ..
prHifRxHdr = (P_HIF_RX_HEADER_T)aucBuffer;
if(prHifRxHdr->u2PacketType != HIF_RX_PKT_TYPE_EVENT) {
if ((prHifRxHdr->u2PacketType & HIF_RX_HDR_PACKET_TYPE_MASK) != HIF_RX_PKT_TYPE_EVENT) {
return WLAN_STATUS_FAILURE;
}
@@ -4963,7 +4998,7 @@ wlanQueryPdMcr(
// header checking ..
prHifRxHdr = (P_HIF_RX_HEADER_T)aucBuffer;
if(prHifRxHdr->u2PacketType != HIF_RX_PKT_TYPE_EVENT) {
if ((prHifRxHdr->u2PacketType & HIF_RX_HDR_PACKET_TYPE_MASK) != HIF_RX_PKT_TYPE_EVENT) {
return WLAN_STATUS_FAILURE;
}
@@ -89,6 +89,8 @@
/*! HIF_RX_HEADER_T */
// DW 0, Byte 1
#define HIF_RX_HDR_PACKET_TYPE_MASK BITS(0,1)
#define HIF_RX_HDR_SEC_MODE_MASK BITS(2, 5)
#define HIF_RX_HDR_SEC_MODE_OFFSET 2
// DW 1, Byte 0
#define HIF_RX_HDR_HEADER_LEN BITS(2,7)
@@ -176,6 +178,8 @@ typedef enum _ENUM_HIF_RX_PKT_TYPE_T {
((((_prHifRxHdr)->uc80211_Reorder_PAL_TCL) & HIF_RX_HDR_NETWORK_IDX_MASK)\
>> HIF_RX_HDR_NETWORK_IDX_OFFSET)
#define HIF_RX_HDR_GET_SEC_MODE(_prHifRxHdr) \
((((_prHifRxHdr)->u2PacketType) & HIF_RX_HDR_SEC_MODE_MASK) >> HIF_RX_HDR_SEC_MODE_OFFSET)
#define HIF_RX_HDR_GET_TID(_prHifRxHdr) \
((((_prHifRxHdr)->u2SeqNoTid) & HIF_RX_HDR_TID_MASK)\
@@ -2975,7 +2975,21 @@ qmHandleRxPackets(
}
}
#if CFG_SUPPORT_WAPI
if (prCurrSwRfb->u2PacketLen > ETHER_HEADER_LEN) {
PUINT_8 pc = (PUINT_8) prCurrSwRfb->pvHeader;
UINT_16 u2Etype = 0;
u2Etype = (pc[ETH_TYPE_LEN_OFFSET] << 8) | (pc[ETH_TYPE_LEN_OFFSET + 1]);
/* for wapi integrity test. WPI_1x packet should be always in non-encrypted mode.
if we received any WPI(0x88b4) packet that is encrypted, drop here. */
if (u2Etype == ETH_WPI_1X && HIF_RX_HDR_GET_SEC_MODE(prHifRxHdr) != 0) {
DBGLOG(QM, INFO, ("drop wpi packet with sec mode\n"));
prCurrSwRfb->eDst = RX_PKT_DESTINATION_NULL;
QUEUE_INSERT_TAIL(&rReturnedQue, (P_QUE_ENTRY_T) prCurrSwRfb);
continue;
}
}
#endif
/* BAR frame */
if(HIF_RX_HDR_GET_BAR_FLAG(prHifRxHdr)){
prCurrSwRfb->eDst = RX_PKT_DESTINATION_NULL;
@@ -1766,7 +1766,8 @@ mtk_cfg80211_mgmt_frame_register (
if (prGlueInfo->prAdapter != NULL){
prGlueInfo->ulFlag |= GLUE_FLAG_FRAME_FILTER_AIS;
/* prGlueInfo->ulFlag |= GLUE_FLAG_FRAME_FILTER_AIS; */
set_bit(GLUE_FLAG_FRAME_FILTER_AIS_BIT, &prGlueInfo->ulFlag);
/* wake up main thread */
wake_up_interruptible(&prGlueInfo->waitq);
@@ -2888,8 +2888,17 @@ wlanProbe(
P_ADAPTER_T prAdapter = NULL;
INT_32 i4Status = 0;
BOOLEAN bRet = FALSE;
enum probe_fail_reason {
BUS_INIT_FAIL,
NET_CREATE_FAIL,
BUS_SET_IRQ_FAIL,
ADAPTER_START_FAIL,
NET_REGISTER_FAIL,
PROC_INIT_FAIL,
FAIL_REASON_NUM
} eFailReason;
eFailReason = FAIL_REASON_NUM;
do {
//4 <1> Initialize the IO port of the interface
/* GeorgeKuo: pData has different meaning for _HIF_XXX:
@@ -2904,6 +2913,7 @@ wlanProbe(
if (FALSE == bRet) {
DBGLOG(INIT, ERROR, (KERN_ALERT "wlanProbe: glBusInit() fail\n"));
i4Status = -EIO;
eFailReason = BUS_INIT_FAIL;
break;
}
@@ -2911,6 +2921,7 @@ wlanProbe(
if ((prWdev = wlanNetCreate(pvData)) == NULL) {
DBGLOG(INIT, ERROR, ("wlanProbe: No memory for dev and its private\n"));
i4Status = -ENOMEM;
eFailReason = NET_CREATE_FAIL;
break;
}
@@ -2938,6 +2949,7 @@ wlanProbe(
if (i4Status != WLAN_STATUS_SUCCESS) {
DBGLOG(INIT, ERROR, ("wlanProbe: Set IRQ error\n"));
eFailReason = BUS_SET_IRQ_FAIL;
break;
}
@@ -3031,6 +3043,7 @@ bailout:
HifRegDump(prGlueInfo->prAdapter);
if (prGlueInfo->rHifInfo.DmaOps->DmaRegDump != NULL)
prGlueInfo->rHifInfo.DmaOps->DmaRegDump(&prGlueInfo->rHifInfo);
eFailReason = ADAPTER_START_FAIL;
break;
}
}
@@ -3046,6 +3059,7 @@ bailout:
if (wlanAdapterStart(prAdapter, prRegInfo, NULL, 0) != WLAN_STATUS_SUCCESS) {
i4Status = -EIO;
eFailReason = ADAPTER_START_FAIL;
break;
}
#endif
@@ -3144,6 +3158,7 @@ bailout:
if ((i4DevIdx = wlanNetRegister(prWdev)) < 0){
i4Status = -ENXIO;
DBGLOG(INIT, ERROR, ("wlanProbe: Cannot register the net_device context to the kernel\n"));
eFailReason = NET_REGISTER_FAIL;
break;
}
@@ -3153,6 +3168,7 @@ bailout:
DBGLOG(INIT, TRACE, ("init procfs...\n"));
if ( (i4Status = procInitProcfs(prDev, NIC_DEVICE_ID_LOW)) < 0) {
DBGLOG(INIT, ERROR, ("wlanProbe: init procfs failed\n"));
eFailReason = PROC_INIT_FAIL;
break;
}
#endif /* WLAN_INCLUDE_PROC */
@@ -3183,10 +3199,30 @@ bailout:
while (FALSE);
if (i4Status != WLAN_STATUS_SUCCESS)
{
KAL_WAKE_LOCK_DESTROY(prGlueInfo->prAdapter, &prGlueInfo->rAhbIsrWakeLock);
if (prWdev != NULL)
glBusFreeIrq(prWdev->netdev, *((P_GLUE_INFO_T *) netdev_priv(prWdev->netdev)));
{
switch (eFailReason)
{
case PROC_INIT_FAIL:
wlanNetUnregister(prWdev);
case NET_REGISTER_FAIL:
set_bit(GLUE_FLAG_HALT_BIT, &prGlueInfo->ulFlag);
/* wake up main thread */
wake_up_interruptible(&prGlueInfo->waitq);
/* wait main thread stops */
wait_for_completion_interruptible(&prGlueInfo->rHaltComp);
KAL_WAKE_LOCK_DESTROY(prGlueInfo->prAdapter, &prGlueInfo->rAhbIsrWakeLock);
wlanAdapterStop(prAdapter);
case ADAPTER_START_FAIL:
if (prWdev != NULL)
glBusFreeIrq(prWdev->netdev, *((P_GLUE_INFO_T *) netdev_priv(prWdev->netdev)));
case BUS_SET_IRQ_FAIL:
KAL_WAKE_LOCK_DESTROY(prAdapter, &prGlueInfo->rAhbIsrWakeLock);
wlanNetDestroy(prWdev);
case NET_CREATE_FAIL:
case BUS_INIT_FAIL:
default:
break;
}
}
#if CFG_ENABLE_WIFI_DIRECT
@@ -3203,14 +3239,28 @@ bailout:
kalIndicateAgpsNotify(prAdapter, AGPS_EVENT_WLAN_ON, NULL, 0);
#endif
#if (CFG_SUPPORT_MET_PROFILING == 1)
DBGLOG(INIT, TRACE, ("init MET procfs...\n"));
printk("MET_PROF: MET PROCFS init....\n");
if ( (i4Status = kalMetInitProcfs(prGlueInfo)) < 0) {
DBGLOG(INIT, ERROR, ("wlanProbe: init MET procfs failed\n"));
}
{
int iMetInitRet = WLAN_STATUS_FAILURE;
if (i4Status == WLAN_STATUS_SUCCESS)
{
DBGLOG(INIT, TRACE, ("init MET procfs...\n"));
iMetInitRet = kalMetInitProcfs(prGlueInfo);
if (iMetInitRet < 0)
{
DBGLOG(INIT, ERROR, ("wlanProbe: init MET procfs failed\n"));
}
}
}
#endif
DBGLOG(INIT, TRACE, ("wlanProbe ok\n"));
return i4Status;
if (i4Status == WLAN_STATUS_SUCCESS) {
/* probe ok */
DBGLOG(INIT, TRACE, ("wlanProbe ok\n"));
} else {
/* probe failed */
DBGLOG(INIT, ERROR, ("wlanProbe failed\n"));
}
return i4Status;
} /* end of wlanProbe() */
@@ -1788,12 +1788,8 @@ wext_set_mlme (
*/
/*----------------------------------------------------------------------------*/
static int
wext_set_scan (
IN struct net_device *prNetDev,
IN struct iw_request_info *prIwrInfo,
IN union iwreq_data *prData,
IN char *pcExtra
)
wext_set_scan(IN struct net_device *prNetDev,
IN struct iw_request_info *prIwrInfo, IN struct iw_scan_req *prIwScanReq, IN char *pcExtra)
{
P_GLUE_INFO_T prGlueInfo = NULL;
WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS;
@@ -1808,9 +1804,8 @@ wext_set_scan (
#if WIRELESS_EXT > 17
/* retrieve SSID */
if(prData) {
essid_len = ((struct iw_scan_req *)(((struct iw_point*)prData)->pointer))->essid_len;
}
if (prIwScanReq)
essid_len = prIwScanReq->essid_len;
#endif
init_completion(&prGlueInfo->rScanComp);
@@ -3974,6 +3969,7 @@ wext_support_ioctl (
int ret = 0;
char *prExtraBuf = NULL;
UINT_32 u4ExtraSize = 0;
struct iw_scan_req * prIwScanReq = NULL;
/* prDev is verified in the caller function wlanDoIOCTL() */
@@ -4120,21 +4116,23 @@ wext_support_ioctl (
}
#if WIRELESS_EXT > 17
else if (iwr->u.data.length == sizeof(struct iw_scan_req)) {
prExtraBuf = kalMemAlloc(MAX_SSID_LEN, VIR_MEM_TYPE);
if (!prExtraBuf) {
ret = -ENOMEM;
break;
}
if (copy_from_user(prExtraBuf, ((struct iw_scan_req *) (iwr->u.data.pointer))->essid,
((struct iw_scan_req *) (iwr->u.data.pointer))->essid_len)) {
ret = -EFAULT;
} else {
ret = wext_set_scan(prDev, NULL, (union iwreq_data *) &(iwr->u.data), prExtraBuf);
}
prIwScanReq = kalMemAlloc(iwr->u.data.length, VIR_MEM_TYPE);
if (!prIwScanReq) {
ret = -ENOMEM;
break;
}
kalMemFree(prExtraBuf, VIR_MEM_TYPE, MAX_SSID_LEN);
prExtraBuf = NULL;
}
if (copy_from_user(prIwScanReq, iwr->u.data.pointer, iwr->u.data.length)) {
ret = -EFAULT;
} else {
if (prIwScanReq->essid_len > IW_ESSID_MAX_SIZE)
prIwScanReq->essid_len = IW_ESSID_MAX_SIZE;
ret = wext_set_scan(prDev, NULL, prIwScanReq, &(prIwScanReq->essid[0]));
}
kalMemFree(prIwScanReq, VIR_MEM_TYPE, iwr->u.data.length);
prIwScanReq = NULL;
}
#endif
else {
ret = -EINVAL;
@@ -1334,12 +1334,15 @@ priv_get_int (
{
wlanQueryDebugCode(prGlueInfo->prAdapter);
kalMemSet(gucBufDbgCode, '.', sizeof(gucBufDbgCode));
if (copy_to_user(prIwReqData->data.pointer, gucBufDbgCode, prIwReqData->data.length)) {
return -EFAULT;
}
else
return status;
kalMemSet(gucBufDbgCode, '.', sizeof(gucBufDbgCode));
u4BufLen = prIwReqData->data.length;
if (u4BufLen > sizeof(gucBufDbgCode))
u4BufLen = sizeof(gucBufDbgCode);
if (copy_to_user(prIwReqData->data.pointer, gucBufDbgCode, u4BufLen)) {
return -EFAULT;
}
else
return status;
}
default:
@@ -1769,6 +1772,7 @@ priv_get_struct (
UINT_32 u4BufLen = 0;
PUINT_32 pu4IntBuf = NULL;
int status = 0;
UINT_32 u4CopyDataMax = 0;
kalMemZero(&aucOidBuf[0], sizeof(aucOidBuf));
@@ -1839,9 +1843,11 @@ priv_get_struct (
pu4IntBuf = (PUINT_32)prIwReqData->data.pointer;
prNdisReq = (P_NDIS_TRANSPORT_STRUCT) &aucOidBuf[0];
if (copy_from_user(&prNdisReq->ndisOidContent[0],
prIwReqData->data.pointer,
prIwReqData->data.length)) {
u4CopyDataMax = sizeof(aucOidBuf) - OFFSET_OF(NDIS_TRANSPORT_STRUCT, ndisOidContent);
if ((prIwReqData->data.length > u4CopyDataMax)
|| copy_from_user(&prNdisReq->ndisOidContent[0],
prIwReqData->data.pointer,
prIwReqData->data.length)) {
DBGLOG(REQ, INFO, ("priv_get_struct() copy_from_user oidBuf fail\n"));
return -EFAULT;
}
@@ -97,7 +97,11 @@ DISPLAY_PWM_T * get_pwm_lut(void)
return &g_pwm_lut;
}
static unsigned int brightness_mapping(unsigned int level);
/* [FEATURE]-Mod-BEGIN by TCTSZ.yaohui.zeng, 2015/04/20,use customized brightness_mapping()*/
//static unsigned int brightness_mapping(unsigned int level);
extern unsigned int brightness_mapping(unsigned int level);
/* [FEATURE]-Mod-END by TCTSZ.yaohui.zeng, 2015/04/20*/
void disp_onConfig_bls(DISP_AAL_PARAM *param)
{
unsigned long prevSetting = DISP_REG_GET(DISP_REG_BLS_BLS_SETTING);
@@ -142,7 +146,8 @@ void disp_onConfig_bls(DISP_AAL_PARAM *param)
}
/* [FEATURE]-Mod-BEGIN by TCTSZ.yaohui.zeng, 2015/04/20,use customized brightness_mapping()*/
/*
static unsigned int brightness_mapping(unsigned int level)
{
unsigned int mapped_level;
@@ -154,6 +159,8 @@ static unsigned int brightness_mapping(unsigned int level)
return mapped_level;
}
*/
/* [FEATURE]-Mod-END by TCTSZ.yaohui.zeng, 2015/04/20*/
#if !defined(CONFIG_MTK_AAL_SUPPORT)
#ifdef USE_DISP_BLS_MUTEX
@@ -186,7 +186,7 @@ static void process_dbg_opt(const char *opt)
char *p = (char *)opt + 5;
unsigned int addr = (unsigned int) simple_strtoul(p, &p, 16);
if (addr)
if (addr >= 0xf4000000 && addr <= 0xf5000000)
{
unsigned int regVal = DISP_REG_GET(addr);
DISP_MSG("regr: 0x%08X = 0x%08X\n", addr, regVal);
@@ -200,7 +200,7 @@ static void process_dbg_opt(const char *opt)
char *p = (char *)opt + 5;
unsigned int addr = (unsigned int) simple_strtoul(p, &p, 16);
unsigned int val = (unsigned int) simple_strtoul(p + 1, &p, 16);
if (addr)
if (addr >= 0xf4000000 && addr <= 0xf5000000)
{
unsigned int regVal;
DISP_REG_SET(addr, val);
+2 -17
View File
@@ -5328,24 +5328,9 @@ static int __init hdmi_init(void)
{
int ret = 0;
int tmp_boot_mode;
//[BUGFIX]-Add-BEGIN by SCDTABLET.jinghuang@tcl.com,19/5/2015,
//add the function to check if hdmi power is on.
int hdmi_power=-1;
//[BUGFIX]-Mod-END by SCDTABLET.jinghuang@tcl.com
printk("[hdmi]%s\n", __func__);
//[BUGFIX]-Add-BEGIN by SCDTABLET.jinghuang@tcl.com,19/5/2015,
//add the function to check if hdmi power is on.
mt_set_gpio_mode(GPIO87,GPIO_MODE_00); // gpio mode high
mt_set_gpio_dir(GPIO87,GPIO_DIR_OUT); //OUT
hdmi_power=mt_get_gpio_out(GPIO87);
if(hdmi_power==0)
{
printk("[hdmi]check: hdmi power is off,power on again \n");
mt_set_gpio_out(GPIO87,GPIO_OUT_ONE);//OUT h
}else{
printk("[hdmi]check: hdmi power is already on \n");
}
//[BUGFIX]-Mod-END by SCDTABLET.jinghuang@tcl.com
if (platform_driver_register(&hdmi_driver))
{
printk("[hdmi]failed to register hdmitx driver\n");
@@ -302,6 +302,10 @@ static ssize_t freqhopping_userdefine_proc_write(struct file *file, const char *
fh_ctl.ssc_setting.dds = p7;
fh_ctl.ssc_setting.freq = 0;
/* Check validity of PLL ID */
if (fh_ctl.pll_id >= FH_PLL_COUNT)
return -1;
if( p1 == FH_CMD_ENABLE){
ret = mt_fh_enable_usrdef(&fh_ctl);
@@ -428,6 +432,10 @@ static ssize_t freqhopping_status_proc_write(struct file *file, const char *buff
fh_ctl.ssc_setting.upbnd= 0;
fh_ctl.ssc_setting.lowbnd= 0;
/* Check validity of PLL ID */
if (fh_ctl.pll_id >= FH_PLL_COUNT)
return -1;
if( p1 == 0){
mt_freqhopping_ioctl(NULL,FH_CMD_DISABLE,(unsigned long)(&fh_ctl));
}
@@ -446,7 +454,7 @@ static int freqhopping_debug_proc_read(struct seq_file* m, void* v)
arg.m = m;
arg.v = v;
arg.pll = g_fh_drv_pll;
g_p_fh_hal_drv->ioctl(FH_IO_PROC_READ, &arg);
//g_p_fh_hal_drv->ioctl(FH_IO_PROC_READ, &arg);
return 0;
#else
FH_MSG("EN: %s",__func__);
@@ -529,6 +537,10 @@ static ssize_t freqhopping_debug_proc_write(struct file *file, const char *buffe
fh_ctl.ssc_setting.lowbnd = p7;
fh_ctl.ssc_setting.freq = 0;
/* Check validity of PLL ID */
if (fh_ctl.pll_id >= FH_PLL_COUNT)
return -1;
if (cmd < FH_CMD_INTERNAL_MAX_CMD) {
mt_freqhopping_ioctl(NULL,cmd,(unsigned long)(&fh_ctl));
@@ -994,7 +1006,7 @@ int mt_freqhopping_devctl(unsigned int cmd, void* args)
return 1;
}
g_p_fh_hal_drv->ioctl(cmd, args);
//g_p_fh_hal_drv->ioctl(cmd, args);
return 0;
}
+9 -1
View File
@@ -84,7 +84,15 @@ static long ged_dispatch(GED_BRIDGE_PACKAGE *psBridgePackageKM)
typedef int (ged_bridge_func_type)(void*, void*);
ged_bridge_func_type* pFunc = NULL;
if (psBridgePackageKM->i32InBufferSize + psBridgePackageKM->i32OutBufferSize < GED_IOCTL_PARAM_BUF_SIZE)
/* We make sure the both size and the sum of them are GE 0 integer.
* The sum will not overflow to zero, because we will get zero from two GE 0 integers
* if and only if they are both zero in a 2's complement numeral system.
* That is: if overflow happen, the sum will be a negative number.
*/
if (psBridgePackageKM->i32InBufferSize >= 0 && psBridgePackageKM->i32OutBufferSize >= 0
&& psBridgePackageKM->i32InBufferSize + psBridgePackageKM->i32OutBufferSize >= 0
&& psBridgePackageKM->i32InBufferSize + psBridgePackageKM->i32OutBufferSize
< GED_IOCTL_PARAM_BUF_SIZE)
{
pvInt = gvIOCTLParamBuf;
pvOut = (void*)((char*)pvInt + (uintptr_t)psBridgePackageKM->i32InBufferSize);
@@ -427,7 +427,7 @@ static int mali_mem_os_shrink(struct shrinker *shrinker, struct shrink_control *
#endif
if (0 == nr) {
//[BUGFIX]-Mod-BEGIN by SCDTABLET.zhangku.guo@tcl.com,06/09/2015,983716,mtk patch for fix ANR issue when TAT
//[BUGFIX]-Mod-BEGIN by SCDTABLET.zhangku.guo@tcl.com,06/09/2015,1017702,mtk patch for fix ANR issue when TAT
//return mali_mem_os_allocator.pool_count + mali_mem_page_table_page_pool.count;
return mali_mem_os_allocator.pool_count;
//[BUGFIX]-Mod-END by SCDTABLET.zhangku.guo@tcl.com
@@ -457,7 +457,7 @@ static int mali_mem_os_shrink(struct shrinker *shrinker, struct shrink_control *
mali_mem_os_free_page(page);
}
//[BUGFIX]-Del-BEGIN by SCDTABLET.zhangku.guo@tcl.com,06/09/2015,983716,mtk patch for fix ANR issue when TAT
//[BUGFIX]-Del-BEGIN by SCDTABLET.zhangku.guo@tcl.com,06/09/2015,1017702,mtk patch for fix ANR issue when TAT
/* Release some pages from page table page pool */
//mali_mem_os_trim_page_table_page_pool();
//[BUGFIX]-Del-END by SCDTABLET.zhangku.guo@tcl.com
@@ -468,7 +468,7 @@ static int mali_mem_os_shrink(struct shrinker *shrinker, struct shrink_control *
cancel_delayed_work(&mali_mem_os_allocator.timed_shrinker);
}
//[BUGFIX]-Mod-BEGIN by SCDTABLET.zhangku.guo@tcl.com,06/09/2015,983716,mtk patch for fix ANR issue when TAT
//[BUGFIX]-Mod-BEGIN by SCDTABLET.zhangku.guo@tcl.com,06/09/2015,1017702,mtk patch for fix ANR issue when TAT
//return mali_mem_os_allocator.pool_count + mali_mem_page_table_page_pool.count;
return mali_mem_os_allocator.pool_count;
//[BUGFIX]-Mod-END by SCDTABLET.zhangku.guo@tcl.com
+3 -3
View File
@@ -31,7 +31,7 @@ static struct hall_data *hall = NULL;
static struct class *hall_class = NULL;
static struct device *hall_dev = NULL;
static struct platform_device *hall_pdev = NULL;
extern unsigned int bl_brightness;
extern unsigned int bl_brightness_hal;
static void do_hall_work(struct work_struct *work)
@@ -46,14 +46,14 @@ static void do_hall_work(struct work_struct *work)
hall_state = !hall_state;
pressed = (hall_state == !!CUST_EINT_POLARITY_LOW);
if((pressed == 1) && (bl_brightness != 0)) {
if((pressed == 1) && (bl_brightness_hal != 0)) {
input_report_key(hall_input, KEY_POWER, pressed);
input_sync(hall_input);
input_report_key(hall_input, KEY_POWER, !pressed);
input_sync(hall_input);
}
if((pressed == 0) && (bl_brightness == 0)) {
if((pressed == 0) && (bl_brightness_hal == 0)) {
input_report_key(hall_input, KEY_POWER, !pressed);
input_sync(hall_input);
input_report_key(hall_input, KEY_POWER, pressed);
@@ -265,7 +265,7 @@ static void hwmsen_work_func(struct work_struct *work)
memset(&sensor_data, 0, sizeof(sensor_data));
time.tv_sec = time.tv_nsec = 0;
time = get_monotonic_coarse();
get_monotonic_boottime(&time);
nt = time.tv_sec*1000000000LL+time.tv_nsec;
//mutex_lock(&obj_data.lock);
for(idx = 0; idx < MAX_ANDROID_SENSOR_NUM; idx++)
@@ -340,7 +340,7 @@ static void hwmsen_work_func(struct work_struct *work)
if((sensor_data.values[0] != obj_data.sensors_data[idx].values[0])
|| (sensor_data.values[1] != obj_data.sensors_data[idx].values[1])
|| (sensor_data.values[2] != obj_data.sensors_data[idx].values[2])
|| (idx == ID_MAGNETIC))
|| (idx == ID_MAGNETIC) || (idx == ID_ACCELEROMETER))
{
if( 0 == sensor_data.values[0] && 0==sensor_data.values[1]
&& 0 == sensor_data.values[2])
@@ -443,7 +443,7 @@ int hwmsen_get_interrupt_data(int sensor, hwm_sensor_data *data)
else
{
time.tv_sec = time.tv_nsec = 0;
time = get_monotonic_coarse();
get_monotonic_boottime(&time);
nt = time.tv_sec*1000000000LL+time.tv_nsec;
if((sensor == ID_LIGHT) ||(sensor == ID_PRESSURE)
||(sensor == ID_PROXIMITY) || (sensor == ID_TEMPRERATURE))
@@ -603,6 +603,11 @@ static int hwmsen_enable(struct hwmdev_object *obj, int sensor, int enable)
sensor_type = 1 << sensor;
if (sensor > MAX_ANDROID_SENSOR_NUM || sensor < 0) {
HWM_ERR("handle %d!\n", sensor);
return -EINVAL;
}
if(!obj)
{
HWM_ERR("hwmdev obj pointer is NULL!\n");
@@ -613,7 +618,6 @@ static int hwmsen_enable(struct hwmdev_object *obj, int sensor, int enable)
HWM_ERR("the sensor (%d) is not attached!!\n", sensor);
return -ENODEV;
}
mutex_lock(&obj->dc->lock);
cxt = obj->dc->cxt[sensor];
@@ -724,6 +728,11 @@ static int hwmsen_enable_nodata(struct hwmdev_object *obj, int sensor, int enabl
HWM_FUN(f);
sensor_type = 1 << sensor;
if (sensor > MAX_ANDROID_SENSOR_NUM || sensor < 0) {
HWM_ERR("handle %d!\n", sensor);
return -EINVAL;
}
if(NULL == obj)
{
HWM_ERR("hwmdev obj pointer is NULL!\n");
@@ -734,7 +743,6 @@ static int hwmsen_enable_nodata(struct hwmdev_object *obj, int sensor, int enabl
HWM_ERR("the sensor (%d) is not attached!!\n", sensor);
return -ENODEV;
}
mutex_lock(&obj->dc->lock);
cxt = obj->dc->cxt[sensor];
@@ -784,6 +792,10 @@ static int hwmsen_set_delay(int delay, int handle )
int err = 0;
struct hwmsen_context *cxt = NULL;
if (handle > MAX_ANDROID_SENSOR_NUM || handle < 0) {
HWM_ERR("handle %d!\n", handle);
return -EINVAL;
}
cxt = hwm_obj->dc->cxt[handle];
if(NULL == cxt ||(cxt->obj.sensor_operate == NULL))
{
@@ -202,7 +202,7 @@ static ssize_t set_config(struct device *dev, struct device_attribute *attr, con
unsigned char tmpbuffer[128];
printk("%s\n", buf);
//if ( sscanf(buf, "%d %d %d %d %d %d %d %d %d %d %d %d %s", &bus_id, &address, &operation, &trans_mode, &trans_stop, &speed_mode, &pushpull_mode, &query_mode, &timing, &trans_num, &trans_auxlen,&dir, data_buffer) ) {
if ( sscanf(buf, "%d %x %d %d %d %d %d %d %d %d %d %s", &bus_id, &address, &operation, &trans_mode, &trans_stop, &speed_mode, &pushpull_mode, &query_mode, &timing, &trans_num, &trans_auxlen,data_buffer) ) {
if ( sscanf(buf, "%d %x %d %d %d %d %d %d %d %d %d %1023s", &bus_id, &address, &operation, &trans_mode, &trans_stop, &speed_mode, &pushpull_mode, &query_mode, &timing, &trans_num, &trans_auxlen,data_buffer) ) {
if((address != 0)&&(operation<=2)){
length = strlen(data_buffer);
if (operation == 0){
@@ -254,7 +254,7 @@
#define T8EV5_SENSOR_ID 0x1011
#define GC2235_SENSOR_ID 0x2235
#define OV8865_SENSOR_ID 0x8865
#define GC2355_SENSOR_ID 0x2355
#define GC2355MIPI_SENSOR_ID 0x2355
#define HI551_SENSOR_ID 0x0551
#define HI841_SENSOR_ID 0x0841
@@ -302,7 +302,8 @@
#define SENSOR_DRVNAME_OV5647_RAW "ov5647"
#define SENSOR_DRVNAME_OV5648_MIPI_RAW "ov5648mipi"
#define SENSOR_DRVNAME_OV5670_MIPI_RAW "ov5670mipi"
#define SENSOR_DRVNAME_OV5670_MIPI_RAW "ov5670mipiraw"
#define SENSOR_DRVNAME_OV56702ND_MIPI_RAW "ov56702ndmipiraw"
#define SENSOR_DRVNAME_OV5693_MIPI_RAW "ov5693mipi"
#define SENSOR_DRVNAME_OV5642_MIPI_YUV "ov5642mipiyuv"
#define SENSOR_DRVNAME_OV5642_MIPI_RGB "ov5642mipirgb"
@@ -0,0 +1,4 @@
include $(srctree)/drivers/misc/mediatek/Makefile.custom
obj-y += gc2355mipi_Sensor.o
@@ -0,0 +1,157 @@
/* 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.
*/
/*****************************************************************************
* 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) 2008
*
* 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).
*
*****************************************************************************/
/*****************************************************************************
*
* Filename:
* ---------
* sensor.h
*
* Project:
* --------
* DUMA
*
* Description:
* ------------
* Header file of camera customized parameters.
*
*
* Author:
* -------
* Leo Lee
*
*============================================================================
* HISTORY
*------------------------------------------------------------------------------
* $Revision:$
* $Modtime:$
* $Log:$
*
* 03 01 2013
* First release GC2355MIPI driver Version 1.0
*
*------------------------------------------------------------------------------
*============================================================================
****************************************************************************/
#ifndef __CAMERA_CUSTOMIZED_H
#define __CAMERA_CUSTOMIZED_H
// the angle between handset and sensor placement in clockwise, should be one of 0, 90, 270
#define MAIN_SENSOR_ORIENTATION_ANGLE 90
#define SUB_SENSOR_ORIENTATION_ANGLE 0 // do not care if the sub sensor does not exist
// First, we think you hold the cell phone vertical.
// Second, we suppose the direction of upward is 0
// Third, it is 90, 180, 270 in clockwise
// here we define the main sensor and sub sensor angles to deal with the jpeg orientation
#define MAIN_SENSOR_TO_PHONE_ANGLE 90
#define SUB_SENSOR_TO_PHONE_ANGLE 0
#define CAM_SIZE_QVGA_WIDTH 320
#define CAM_SIZE_QVGA_HEIGHT 240
#define CAM_SIZE_VGA_WIDTH 640
#define CAM_SIZE_VGA_HEIGHT 480
#define CAM_SIZE_05M_WIDTH 800
#define CAM_SIZE_05M_HEIGHT 600
#define CAM_SIZE_1M_WIDTH 1280
#define CAM_SIZE_1M_HEIGHT 960
#define CAM_SIZE_2M_WIDTH 1600
#define CAM_SIZE_2M_HEIGHT 1200
#define CAM_SIZE_3M_WIDTH 2048
#define CAM_SIZE_3M_HEIGHT 1536
#define CAM_SIZE_5M_WIDTH 2592
#define CAM_SIZE_5M_HEIGHT 1944
// for main sensor
#define MAIN_NUM_OF_PREVIEW_RESOLUTION 3
#define MAIN_NUM_OF_VIDEO_RESOLUTION 4
#define MAIN_NUM_OF_STILL_RESOLUTION 7
#define MAIN_VIDEO_RESOLUTION_PROFILE {{176,144},{320,240},{640,480},{720,480}}
#define MAIN_PREVIEW_RESOLUTION_PROFILE {{232,174},{320,240},{240,320}}
#define MAIN_STILL_RESOLUTION_PROFILE {{CAM_SIZE_QVGA_WIDTH,CAM_SIZE_QVGA_HEIGHT}, \
{CAM_SIZE_VGA_WIDTH,CAM_SIZE_VGA_HEIGHT}, \
{CAM_SIZE_05M_WIDTH,CAM_SIZE_05M_HEIGHT}, \
{CAM_SIZE_1M_WIDTH,CAM_SIZE_1M_HEIGHT}, \
{CAM_SIZE_2M_WIDTH,CAM_SIZE_2M_HEIGHT}, \
{CAM_SIZE_3M_WIDTH,CAM_SIZE_3M_HEIGHT}, \
{CAM_SIZE_5M_WIDTH,CAM_SIZE_5M_HEIGHT}}
// if sub sensor does not exist, set all the parameters as 0
#define SUB_NUM_OF_PREVIEW_RESOLUTION 0
#define SUB_NUM_OF_VIDEO_RESOLUTION 0
#define SUB_NUM_OF_STILL_RESOLUTION 0
#define SUB_VIDEO_RESOLUTION_PROFILE {{0,0}}
#define SUB_PREVIEW_RESOLUTION_PROFILE {{0,0}}
#define SUB_STILL_RESOLUTION_PROFILE {{0,0}}
//#define NUM_OF_PREVIEW_RESOLUTION max(MAIN_NUM_OF_PREVIEW_RESOLUTION,SUB_NUM_OF_PREVIEW_RESOLUTION)
//#define NUM_OF_VIDEO_RESOLUTION max(MAIN_NUM_OF_VIDEO_RESOLUTION,SUB_NUM_OF_VIDEO_RESOLUTION)
//#define NUM_OF_STILL_RESOLUTION max(MAIN_NUM_OF_STILL_RESOLUTION,SUB_NUM_OF_STILL_RESOLUTION)
#define NUM_OF_VIDEO_STREAM_BUFF 8 // Maximun is 8
#endif
@@ -0,0 +1,90 @@
/*****************************************************************************
* 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) 2008
*
* 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).
*
*****************************************************************************/
/*****************************************************************************
*
* Filename:
* ---------
* camera_sensor_para.h
*
* Project:
* --------
* DUMA
*
* Description:
* ------------
* Header file of Sensor tuning parameters that should be generated by CCT
*
*
* Author:
* -------
* Leo Lee
*
*============================================================================
* HISTORY
*------------------------------------------------------------------------------
* $Revision:$
* $Modtime:$
* $Log:$
*
* 03 01 2013
* First release GC2355MIPI driver Version 1.0
*
*------------------------------------------------------------------------------
*============================================================================
****************************************************************************/
#ifndef _GC2355MIPI_CAMERA_SENSOR_PARA_H
#define _GC2355MIPI_CAMERA_SENSOR_PARA_H
#define GC2355MIPI_CAMERA_SENSOR_REG_DEFAULT_VALUE \
{ \
{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF}, \
{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF}, \
{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF}, \
{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF}, \
{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF}, \
{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF}, \
{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF}, \
{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF}, \
{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF}, \
{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,0xFFFFFFFF},{0xFFFFFFFF,ISP_DRIVING_6MA}, \
}
#define GC2355MIPI_CAMERA_SENSOR_CCT_DEFAULT_VALUE \
{ \
{0xFFFFFFFF,0x40},{0xFFFFFFFF,0x40},{0xFFFFFFFF,0x40},{0xFFFFFFFF,0x40},{0xFFFFFFFF,0x40}, \
}
#endif /* __CAMERA_SENSOR_PARA_H */
/* SENSOR FULL SIZE */
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,240 @@
/* 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.
*/
/*****************************************************************************
* 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) 2005
*
* 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).
*
*****************************************************************************/
/*****************************************************************************
*
* Filename:
* ---------
* sensor.c
*
* Project:
* --------
* RAW
*
* Description:
* ------------
* Source code of Sensor driver
*
*
* Author:
* -------
* Leo Lee
*
*============================================================================
* HISTORY
*------------------------------------------------------------------------------
* $Revision:$
* $Modtime:$
* $Log:$
*
* 03 01 2013
* First release GC2355MIPI driver Version 1.0
*
*------------------------------------------------------------------------------
*============================================================================
****************************************************************************/
#ifndef _GC2355MIPI_SENSOR_H
#define _GC2355MIPI_SENSOR_H
#define GC2355MIPI_DEBUG
#define GC2355MIPI_DRIVER_TRACE
//#define GC2355MIPI_TEST_PATTEM
//#define SENSORDB printk
//#define SENSORDB(x,...)
#define GC2355MIPI_FACTORY_START_ADDR 0
#define GC2355MIPI_ENGINEER_START_ADDR 10
typedef enum GC2355MIPI_group_enum
{
GC2355MIPI_PRE_GAIN = 0,
GC2355MIPI_CMMCLK_CURRENT,
GC2355MIPI_FRAME_RATE_LIMITATION,
GC2355MIPI_REGISTER_EDITOR,
GC2355MIPI_GROUP_TOTAL_NUMS
} GC2355MIPI_FACTORY_GROUP_ENUM;
typedef enum GC2355MIPI_register_index
{
GC2355MIPI_SENSOR_BASEGAIN = GC2355MIPI_FACTORY_START_ADDR,
GC2355MIPI_PRE_GAIN_R_INDEX,
GC2355MIPI_PRE_GAIN_Gr_INDEX,
GC2355MIPI_PRE_GAIN_Gb_INDEX,
GC2355MIPI_PRE_GAIN_B_INDEX,
GC2355MIPI_FACTORY_END_ADDR
} GC2355MIPI_FACTORY_REGISTER_INDEX;
typedef enum GC2355MIPI_engineer_index
{
GC2355MIPI_CMMCLK_CURRENT_INDEX = GC2355MIPI_ENGINEER_START_ADDR,
GC2355MIPI_ENGINEER_END
} GC2355MIPI_FACTORY_ENGINEER_INDEX;
typedef struct _sensor_data_struct
{
SENSOR_REG_STRUCT reg[GC2355MIPI_ENGINEER_END];
SENSOR_REG_STRUCT cct[GC2355MIPI_FACTORY_END_ADDR];
} sensor_data_struct;
#define GC2355MIPI_PREVIEW_CLK 42000000
#define GC2355MIPI_CAPTURE_CLK 42000000
#define GC2355MIPI_COLOR_FORMAT SENSOR_OUTPUT_FORMAT_RAW_B
#define GC2355MIPI_MIN_ANALOG_GAIN 1 /* 1x */
#define GC2355MIPI_MAX_ANALOG_GAIN 4 /* 2.8x */
/* FRAME RATE UNIT */
#define GC2355MIPI_FPS(x) (10 * (x))
/* SENSOR PIXEL/LINE NUMBERS IN ONE PERIOD */
#define GC2355MIPI_FULL_PERIOD_PIXEL_NUMS 1680
#define GC2355MIPI_FULL_PERIOD_LINE_NUMS 1250
#define GC2355MIPI_VIDEO_PERIOD_PIXEL_NUMS 1680
#define GC2355MIPI_VIDEO_PERIOD_LINE_NUMS 1250
#define GC2355MIPI_PV_PERIOD_PIXEL_NUMS 1680
#define GC2355MIPI_PV_PERIOD_LINE_NUMS 1250
/* SENSOR START/END POSITION */
#define GC2355MIPI_FULL_X_START 0
#define GC2355MIPI_FULL_Y_START 0
#define GC2355MIPI_IMAGE_SENSOR_FULL_WIDTH (1600 - 8)
#define GC2355MIPI_IMAGE_SENSOR_FULL_HEIGHT (1200 - 6)
#define GC2355MIPI_VIDEO_X_START 0
#define GC2355MIPI_VIDEO_Y_START 0
#define GC2355MIPI_IMAGE_SENSOR_VIDEO_WIDTH (1600)
#define GC2355MIPI_IMAGE_SENSOR_VIDEO_HEIGHT (1200)
#define GC2355MIPI_PV_X_START 0
#define GC2355MIPI_PV_Y_START 0
#define GC2355MIPI_IMAGE_SENSOR_PV_WIDTH (1600 - 8)
#define GC2355MIPI_IMAGE_SENSOR_PV_HEIGHT (1200 - 6)
/* SENSOR READ/WRITE ID */
#define GC2355MIPI_WRITE_ID (0x78)
#define GC2355MIPI_READ_ID (0x79)
/* SENSOR ID */
/* SENSOR PRIVATE STRUCT */
typedef enum {
SENSOR_MODE_INIT = 0,
SENSOR_MODE_PREVIEW,
SENSOR_MODE_VIDEO,
SENSOR_MODE_CAPTURE
} GC2355MIPI_SENSOR_MODE;
typedef enum{
GC2355MIPI_IMAGE_NORMAL = 0,
GC2355MIPI_IMAGE_H_MIRROR,
GC2355MIPI_IMAGE_V_MIRROR,
GC2355MIPI_IMAGE_HV_MIRROR
}GC2355MIPI_IMAGE_MIRROR;
typedef struct GC2355MIPI_sensor_STRUCT
{
MSDK_SENSOR_CONFIG_STRUCT cfg_data;
sensor_data_struct eng; /* engineer mode */
MSDK_SENSOR_ENG_INFO_STRUCT eng_info;
GC2355MIPI_SENSOR_MODE sensorMode;
GC2355MIPI_IMAGE_MIRROR Mirror;
kal_bool pv_mode;
kal_bool video_mode;
kal_bool NightMode;
kal_uint16 normal_fps; /* video normal mode max fps */
kal_uint16 night_fps; /* video night mode max fps */
kal_uint16 FixedFps;
kal_uint16 shutter;
kal_uint16 gain;
kal_uint32 pclk;
kal_uint16 frame_height;
kal_uint16 frame_height_BackUp;
kal_uint16 line_length;
kal_uint16 Prv_line_length;
} GC2355MIPI_sensor_struct;
typedef enum GC2355MIPI_GainMode_Index
{
GC2355MIPI_Analogic_Gain = 0,
GC2355MIPI_Digital_Gain
}GC2355MIPI_GainMode_Index;
//export functions
UINT32 GC2355MIPIOpen(void);
UINT32 GC2355MIPIControl(MSDK_SCENARIO_ID_ENUM ScenarioId, MSDK_SENSOR_EXPOSURE_WINDOW_STRUCT *pImageWindow, MSDK_SENSOR_CONFIG_STRUCT *pSensorConfigData);
UINT32 GC2355MIPIFeatureControl(MSDK_SENSOR_FEATURE_ENUM FeatureId, UINT8 *pFeaturePara,UINT32 *pFeatureParaLen);
UINT32 GC2355MIPIGetInfo(MSDK_SCENARIO_ID_ENUM ScenarioId, MSDK_SENSOR_INFO_STRUCT *pSensorInfo, MSDK_SENSOR_CONFIG_STRUCT *pSensorConfigData);
UINT32 GC2355MIPIGetResolution(MSDK_SENSOR_RESOLUTION_INFO_STRUCT *pSensorResolution);
UINT32 GC2355MIPIClose(void);
#define Sleep(ms) mdelay(ms)
#endif
@@ -169,10 +169,6 @@ kal_uint16 HI708_read_cmos_sensor(kal_uint8 addr)
return get_byte;
}
static int CAPTURE_FLAG = 0;
static int CAPTUREA_FLAG = 0;
static int CAPTUREB_FLAG = 0;//Add By Jason
#define HI708_LOAD_FROM_T_FLASH
#ifdef HI708_LOAD_FROM_T_FLASH
@@ -1562,7 +1558,7 @@ static UINT32 HI708Preview(MSDK_SENSOR_EXPOSURE_WINDOW_STRUCT *image_window,
SENSORDB("[Exit]:HI708 preview func\n");
//HI708_night_mode(HI708_sensor.night_mode);
HI708_night_mode(HI708_sensor.night_mode);
return TRUE;
} /* HI708_Preview */
@@ -1586,9 +1582,6 @@ kal_uint32 CapShutter;
HI708_write_cmos_sensor(0x84, (CapShutter >> 8) & 0xFF);
HI708_write_cmos_sensor(0x85, CapShutter & 0xFF);
#endif
CAPTURE_FLAG = 1;
CAPTUREA_FLAG = 1;
CAPTUREB_FLAG = 1;//Add By Jason
return ERROR_NONE;
} /* HM3451Capture() */
@@ -2194,8 +2187,6 @@ UINT32 HI708YUVSensorSetting(FEATURE_ID iCmd, UINT32 iPara)
switch (iCmd)
{
case FID_SCENE_MODE: //auto mode or night mode
if( CAPTURE_FLAG == 0)
{
if (iPara == SCENE_MODE_OFF)//auto mode
{
HI708_night_mode(FALSE);
@@ -2204,11 +2195,6 @@ UINT32 HI708YUVSensorSetting(FEATURE_ID iCmd, UINT32 iPara)
{
HI708_night_mode(TRUE);
}
}
else
{
CAPTURE_FLAG = 0;
}
break;
case FID_AWB_MODE:
HI708_set_param_wb(iPara);
@@ -2216,18 +2202,11 @@ UINT32 HI708YUVSensorSetting(FEATURE_ID iCmd, UINT32 iPara)
case FID_COLOR_EFFECT:
HI708_set_param_effect(iPara);
break;
case FID_AE_EV:
if( CAPTUREA_FLAG == 0)
case FID_AE_EV:
HI708_set_param_exposure(iPara);
else
CAPTUREA_FLAG = 0;
break;
case FID_AE_FLICKER:
if( CAPTUREB_FLAG == 0)
case FID_AE_FLICKER:
HI708_set_param_banding(iPara);
else
CAPTUREB_FLAG = 0;
break;
case FID_ZOOM_FACTOR:
spin_lock(&hi708_yuv_drv_lock);
@@ -76,6 +76,8 @@ UINT32 HI708_YUV_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc);
UINT32 OV2680MIPISensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc);
UINT32 S5K5E2YA_MIPI_RAW_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc);
UINT32 OV5670_MIPI_RAW_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc);
UINT32 OV56702ND_MIPI_RAW_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc);
UINT32 GC2355MIPI_RAW_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc);
//! Add Sensor Init function here
//! Note:
@@ -85,6 +87,15 @@ UINT32 OV5670_MIPI_RAW_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc);
//! 2. This file should be the same as mediatek\custom\common\hal\imgsensor\src\sensorlist.cpp
ACDK_KD_SENSOR_INIT_FUNCTION_STRUCT kdSensorList[MAX_NUM_OF_SUPPORT_SENSOR+1] =
{
#if defined(OV5670_MIPI_RAW)
{OV5670_SENSOR_ID, SENSOR_DRVNAME_OV5670_MIPI_RAW, OV5670_MIPI_RAW_SensorInit},
#endif
#if defined(OV56702ND_MIPI_RAW)
{OV5670_SENSOR_ID+1, SENSOR_DRVNAME_OV56702ND_MIPI_RAW, OV56702ND_MIPI_RAW_SensorInit},
#endif
#if defined(S5K5E2YA_MIPI_RAW)
{S5K5E2YA_SENSOR_ID, SENSOR_DRVNAME_S5K5E2YA_MIPI_RAW, S5K5E2YA_MIPI_RAW_SensorInit},
#endif
@@ -93,6 +104,10 @@ ACDK_KD_SENSOR_INIT_FUNCTION_STRUCT kdSensorList[MAX_NUM_OF_SUPPORT_SENSOR+1] =
{OV2680MIPI_SENSOR_ID, SENSOR_DRVNAME_OV2680_RAW, OV2680MIPISensorInit},
#endif
#if defined(GC2355_MIPI_RAW)
{GC2355MIPI_SENSOR_ID, SENSOR_DRVNAME_GC2355_MIPI_RAW, GC2355MIPI_RAW_SensorInit},
#endif
#if defined(GC2355_RAW)
{GC2355_SENSOR_ID, SENSOR_DRVNAME_GC2355_RAW, GC2355_RAW_SensorInit},
#endif
@@ -311,9 +326,6 @@ ACDK_KD_SENSOR_INIT_FUNCTION_STRUCT kdSensorList[MAX_NUM_OF_SUPPORT_SENSOR+1] =
{S5K4H5YX_2LANE_SENSOR_ID, SENSOR_DRVNAME_S5K4H5YX_2LANE_MIPI_RAW, S5K4H5YX_2LANE_MIPI_RAW_SensorInit},
#endif
#if defined(OV5670_MIPI_RAW)
{OV5670_SENSOR_ID, SENSOR_DRVNAME_OV5670_MIPI_RAW, OV5670_MIPI_RAW_SensorInit},
#endif
/* ADD sensor driver before this line */
{0,{0},NULL}, //end of list
@@ -99,6 +99,35 @@ extern int iMultiWriteReg(u8 *pData, u16 lens, u16 i2cId);
MSDK_SCENARIO_ID_ENUM ov2680CurrentScenarioId = MSDK_SCENARIO_ID_CAMERA_PREVIEW;
/* SZ TCT xuejian.zhong add for CTS test*/
static void OV2680GetAFMaxNumFocusAreas(UINT32 *pFeatureReturnPara32)
{
*pFeatureReturnPara32 = 0;
SENSORDB("OV2680GetAFMaxNumFocusAreas *pFeatureReturnPara32 = %d\n", *pFeatureReturnPara32);
}
static void OV2680GetAEMaxNumMeteringAreas(UINT32 *pFeatureReturnPara32)
{
*pFeatureReturnPara32 = 0;
SENSORDB("OV2680GetAEMaxNumMeteringAreas *pFeatureReturnPara32 = %d\n", *pFeatureReturnPara32);
}
static void OV2680GetExifInfo(UINT32 exifAddr)
{
SENSOR_EXIF_INFO_STRUCT* pExifInfo = (SENSOR_EXIF_INFO_STRUCT*)exifAddr;
pExifInfo->FNumber = 28;
pExifInfo->AEISOSpeed = AE_ISO_100;
pExifInfo->AWBMode = AWB_MODE_AUTO;
pExifInfo->CapExposureTime = 0;
pExifInfo->FlashLightTimeus = 0;
pExifInfo->RealISOValue = AE_ISO_100;
}
/* SZ TCT xuejian.zhong end */
static OV2680_sensor_struct OV2680_sensor =
{
.eng =
@@ -963,8 +992,8 @@ static void OV2680MIPI_Sensor_preview(void)
OV2680_write_cmos_sensor(0x3813, 0x08);
OV2680_write_cmos_sensor(0x3814, 0x11);
OV2680_write_cmos_sensor(0x3815, 0x11);
OV2680_write_cmos_sensor(0x3820, 0xc4);
OV2680_write_cmos_sensor(0x3821, 0x04);
OV2680_write_cmos_sensor(0x3820, 0xc0);
OV2680_write_cmos_sensor(0x3821, 0x00);
OV2680_write_cmos_sensor(0x4008, 0x02);
OV2680_write_cmos_sensor(0x4009, 0x09);
OV2680_write_cmos_sensor(0x4837, 0x18);
@@ -1007,8 +1036,8 @@ static void OV2680MIPI_Sensor_2M_15fps(void)
OV2680_write_cmos_sensor(0x3813, 0x08);
OV2680_write_cmos_sensor(0x3814, 0x11);
OV2680_write_cmos_sensor(0x3815, 0x11);
OV2680_write_cmos_sensor(0x3820, 0xc4);
OV2680_write_cmos_sensor(0x3821, 0x04);
OV2680_write_cmos_sensor(0x3820, 0xc0);//0xc4
OV2680_write_cmos_sensor(0x3821, 0x00);//0x04
OV2680_write_cmos_sensor(0x4008, 0x02);
OV2680_write_cmos_sensor(0x4009, 0x09);
OV2680_write_cmos_sensor(0x4837, 0x30);
@@ -1981,6 +2010,29 @@ UINT32 OV2680FeatureControl(MSDK_SENSOR_FEATURE_ENUM FeatureId,
*pFeatureReturnPara32=OV2680_TEST_PATTERN_CHECKSUM;
*pFeatureParaLen=4;
break;
/*SZ TCT xuejian.zhong add for CTS test */
case SENSOR_FEATURE_GET_AF_MAX_NUM_FOCUS_AREAS:
OV2680GetAFMaxNumFocusAreas(pFeatureReturnPara32);
*pFeatureParaLen=4;
break;
case SENSOR_FEATURE_GET_AE_MAX_NUM_METERING_AREAS:
OV2680GetAEMaxNumMeteringAreas(pFeatureReturnPara32);
*pFeatureParaLen=4;
break;
case SENSOR_FEATURE_GET_EXIF_INFO:
SENSORDB("SENSOR_FEATURE_GET_EXIF_INFO\n");
SENSORDB("EXIF addr = 0x%x\n",*pFeatureData32);
OV2680GetExifInfo(*pFeatureData32);
break;
/* xuejian.zhong add end */
default:
break;
}
@@ -0,0 +1,4 @@
include $(srctree)/drivers/misc/mediatek/Makefile.custom
obj-y += ov56702ndmipi_Sensor.o
@@ -0,0 +1,147 @@
/*****************************************************************************
*
* Filename:
* ---------
* OV56702NDmipi_Sensor.h
*
* Project:
* --------
* ALPS
*
* Description:
* ------------
* CMOS sensor header file
*
****************************************************************************/
#ifndef _OV56702NDMIPI_SENSOR_H
#define _OV56702NDMIPI_SENSOR_H
typedef enum group_enum {
PRE_GAIN=0,
CMMCLK_CURRENT,
FRAME_RATE_LIMITATION,
REGISTER_EDITOR,
GROUP_TOTAL_NUMS
} FACTORY_GROUP_ENUM;
#define ENGINEER_START_ADDR 10
#define FACTORY_START_ADDR 0
typedef enum engineer_index
{
CMMCLK_CURRENT_INDEX=ENGINEER_START_ADDR,
ENGINEER_END
} FACTORY_ENGINEER_INDEX;
typedef enum register_index
{
SENSOR_BASEGAIN=FACTORY_START_ADDR,
PRE_GAIN_R_INDEX,
PRE_GAIN_Gr_INDEX,
PRE_GAIN_Gb_INDEX,
PRE_GAIN_B_INDEX,
FACTORY_END_ADDR
} FACTORY_REGISTER_INDEX;
typedef struct
{
SENSOR_REG_STRUCT Reg[ENGINEER_END];
SENSOR_REG_STRUCT CCT[FACTORY_END_ADDR];
} SENSOR_DATA_STRUCT, *PSENSOR_DATA_STRUCT;
typedef enum {
SENSOR_MODE_INIT = 0,
SENSOR_MODE_PREVIEW,
SENSOR_MODE_VIDEO,
SENSOR_MODE_CAPTURE
} OV56702ND_SENSOR_MODE;
typedef struct
{
kal_uint32 DummyPixels;
kal_uint32 DummyLines;
kal_uint32 pvShutter;
kal_uint32 pvGain;
kal_uint32 pvPclk;
kal_uint32 videoPclk;
kal_uint32 capPclk;
kal_uint32 shutter;
kal_uint16 sensorGlobalGain;
kal_uint16 ispBaseGain;
kal_uint16 realGain;
kal_int16 imgMirror;
OV56702ND_SENSOR_MODE sensorMode;
kal_bool OV56702NDAutoFlickerMode;
kal_bool OV56702NDVideoMode;
}OV56702ND_PARA_STRUCT,*POV56702ND_PARA_STRUCT;
#define OV56702ND_SHUTTER_MARGIN (4)
#define OV56702ND_GAIN_BASE (128)
#define OV56702ND_AUTOFLICKER_OFFSET_30 (296)
#define OV56702ND_AUTOFLICKER_OFFSET_25 (250)
#define OV56702ND_AUTOFLICKER_OFFSET_15 (146)
#define OV56702ND_PREVIEW_PCLK (102850000)
#define OV56702ND_VIDEO_PCLK (OV56702ND_PREVIEW_PCLK)
#define OV56702ND_CAPTURE_PCLK (102850000)
#define OV56702ND_MAX_FPS_PREVIEW (300)
#define OV56702ND_MAX_FPS_VIDEO (300)
#define OV56702ND_MAX_FPS_CAPTURE (250)
//#define OV56702ND_MAX_FPS_N3D (300)
//grab window
#define OV56702ND_IMAGE_SENSOR_PV_WIDTH (1296)
#define OV56702ND_IMAGE_SENSOR_PV_HEIGHT (972) //(960)
#define OV56702ND_IMAGE_SENSOR_VIDEO_WIDTH (OV56702ND_IMAGE_SENSOR_PV_WIDTH)
#define OV56702ND_IMAGE_SENSOR_VIDEO_HEIGHT (OV56702ND_IMAGE_SENSOR_PV_HEIGHT)
#define OV56702ND_IMAGE_SENSOR_FULL_WIDTH (2592)
#define OV56702ND_IMAGE_SENSOR_FULL_HEIGHT (1944)
#define OV56702ND_FULL_X_START (0)
#define OV56702ND_FULL_Y_START (0)
#define OV56702ND_PV_X_START (0)
#define OV56702ND_PV_Y_START (0)
#define OV56702ND_VIDEO_X_START (0)
#define OV56702ND_VIDEO_Y_START (0)
#define OV56702ND_MAX_ANALOG_GAIN (8)
#define OV56702ND_MIN_ANALOG_GAIN (1)
/* SENSOR PIXEL/LINE NUMBERS IN ONE PERIOD */
#define OV56702ND_PV_PERIOD_PIXEL_NUMS 0x068C //1676*2=>3352
#define OV56702ND_PV_PERIOD_LINE_NUMS 0x07FD //2045
#define OV56702ND_VIDEO_PERIOD_PIXEL_NUMS OV56702ND_PV_PERIOD_PIXEL_NUMS
#define OV56702ND_VIDEO_PERIOD_LINE_NUMS OV56702ND_PV_PERIOD_LINE_NUMS
#define OV56702ND_FULL_PERIOD_PIXEL_NUMS 0x07DC //2012*2 25fps
#define OV56702ND_FULL_PERIOD_LINE_NUMS 0x07FD //2045
#define OV56702NDMIPI_WRITE_ID (0x6c)
#define OV56702NDMIPI_READ_ID (0x6d)
#define OV56702NDMIPI_SENSOR_ID OV5670_SENSOR_ID
UINT32 OV56702NDMIPIOpen(void);
UINT32 OV56702NDMIPIGetResolution(MSDK_SENSOR_RESOLUTION_INFO_STRUCT *pSensorResolution);
UINT32 OV56702NDMIPIGetInfo(MSDK_SCENARIO_ID_ENUM ScenarioId, MSDK_SENSOR_INFO_STRUCT *pSensorInfo, MSDK_SENSOR_CONFIG_STRUCT *pSensorConfigData);
UINT32 OV56702NDMIPIControl(MSDK_SCENARIO_ID_ENUM ScenarioId, MSDK_SENSOR_EXPOSURE_WINDOW_STRUCT *pImageWindow, MSDK_SENSOR_CONFIG_STRUCT *pSensorConfigData);
UINT32 OV56702NDMIPIFeatureControl(MSDK_SENSOR_FEATURE_ENUM FeatureId, UINT8 *pFeaturePara,UINT32 *pFeatureParaLen);
UINT32 OV56702NDMIPIClose(void);
#endif
@@ -0,0 +1,65 @@
/*******************************************************************************************/
/*******************************************************************************************/
#ifndef __CAMERA_CUSTOMIZED_H
#define __CAMERA_CUSTOMIZED_H
// the angle between handset and sensor placement in clockwise, should be one of 0, 90, 270
#define MAIN_SENSOR_ORIENTATION_ANGLE 90
#define SUB_SENSOR_ORIENTATION_ANGLE 0 // do not care if the sub sensor does not exist
// First, we think you hold the cell phone vertical.
// Second, we suppose the direction of upward is 0
// Third, it is 90, 180, 270 in clockwise
// here we define the main sensor and sub sensor angles to deal with the jpeg orientation
#define MAIN_SENSOR_TO_PHONE_ANGLE 90
#define SUB_SENSOR_TO_PHONE_ANGLE 0
#define CAM_SIZE_QVGA_WIDTH 320
#define CAM_SIZE_QVGA_HEIGHT 240
#define CAM_SIZE_VGA_WIDTH 640
#define CAM_SIZE_VGA_HEIGHT 480
#define CAM_SIZE_05M_WIDTH 800
#define CAM_SIZE_05M_HEIGHT 600
#define CAM_SIZE_1M_WIDTH 1280
#define CAM_SIZE_1M_HEIGHT 960
#define CAM_SIZE_2M_WIDTH 1600
#define CAM_SIZE_2M_HEIGHT 1200
#define CAM_SIZE_3M_WIDTH 2048
#define CAM_SIZE_3M_HEIGHT 1536
#define CAM_SIZE_5M_WIDTH 2592
#define CAM_SIZE_5M_HEIGHT 1944
// for main sensor
#define MAIN_NUM_OF_PREVIEW_RESOLUTION 3
#define MAIN_NUM_OF_VIDEO_RESOLUTION 4
#define MAIN_NUM_OF_STILL_RESOLUTION 7
#define MAIN_VIDEO_RESOLUTION_PROFILE {{176,144},{320,240},{640,480},{720,480}}
#define MAIN_PREVIEW_RESOLUTION_PROFILE {{232,174},{320,240},{240,320}}
#define MAIN_STILL_RESOLUTION_PROFILE {{CAM_SIZE_QVGA_WIDTH,CAM_SIZE_QVGA_HEIGHT}, \
{CAM_SIZE_VGA_WIDTH,CAM_SIZE_VGA_HEIGHT}, \
{CAM_SIZE_05M_WIDTH,CAM_SIZE_05M_HEIGHT}, \
{CAM_SIZE_1M_WIDTH,CAM_SIZE_1M_HEIGHT}, \
{CAM_SIZE_2M_WIDTH,CAM_SIZE_2M_HEIGHT}, \
{CAM_SIZE_3M_WIDTH,CAM_SIZE_3M_HEIGHT}, \
{CAM_SIZE_5M_WIDTH,CAM_SIZE_5M_HEIGHT}}
// if sub sensor does not exist, set all the parameters as 0
#define SUB_NUM_OF_PREVIEW_RESOLUTION 0
#define SUB_NUM_OF_VIDEO_RESOLUTION 0
#define SUB_NUM_OF_STILL_RESOLUTION 0
#define SUB_VIDEO_RESOLUTION_PROFILE {{0,0}}
#define SUB_PREVIEW_RESOLUTION_PROFILE {{0,0}}
#define SUB_STILL_RESOLUTION_PROFILE {{0,0}}
//#define NUM_OF_PREVIEW_RESOLUTION max(MAIN_NUM_OF_PREVIEW_RESOLUTION,SUB_NUM_OF_PREVIEW_RESOLUTION)
//#define NUM_OF_VIDEO_RESOLUTION max(MAIN_NUM_OF_VIDEO_RESOLUTION,SUB_NUM_OF_VIDEO_RESOLUTION)
//#define NUM_OF_STILL_RESOLUTION max(MAIN_NUM_OF_STILL_RESOLUTION,SUB_NUM_OF_STILL_RESOLUTION)
#define NUM_OF_VIDEO_STREAM_BUFF 8 // Maximun is 8
#endif
@@ -0,0 +1,60 @@
/*******************************************************************************************/
/*******************************************************************************************/
/* SENSOR FULL SIZE */
#ifndef __CAMERA_SENSOR_PARA_H
#define __CAMERA_SENSOR_PARA_H
#define CAMERA_SENSOR_REG_DEFAULT_VALUE \
/* ARRAY: SENSOR.reg[11] */\
{\
/* STRUCT: SENSOR.reg[0] */\
{\
/* SENSOR.reg[0].addr */ 0x00000304, /* SENSOR.reg[0].para */ 0x00000000\
},\
/* STRUCT: SENSOR.reg[1] */\
{\
/* SENSOR.reg[1].addr */ 0x00000305, /* SENSOR.reg[1].para */ 0x0000000D\
},\
/* STRUCT: SENSOR.reg[2] */\
{\
/* SENSOR.reg[2].addr */ 0x00000306, /* SENSOR.reg[2].para */ 0x00000000\
},\
/* STRUCT: SENSOR.reg[3] */\
{\
/* SENSOR.reg[3].addr */ 0x00000307, /* SENSOR.reg[3].para */ 0x000000C0\
},\
/* STRUCT: SENSOR.reg[4] */\
{\
/* SENSOR.reg[4].addr */ 0x00000300, /* SENSOR.reg[4].para */ 0x00000000\
},\
/* STRUCT: SENSOR.reg[5] */\
{\
/* SENSOR.reg[5].addr */ 0x00000301, /* SENSOR.reg[5].para */ 0x00000004\
},\
/* STRUCT: SENSOR.reg[6] */\
{\
/* SENSOR.reg[6].addr */ 0x0000030A, /* SENSOR.reg[6].para */ 0x00000000\
},\
/* STRUCT: SENSOR.reg[7] */\
{\
/* SENSOR.reg[7].addr */ 0x0000030B, /* SENSOR.reg[7].para */ 0x00000002\
},\
/* STRUCT: SENSOR.reg[8] */\
{\
/* SENSOR.reg[8].addr */ 0x00000308, /* SENSOR.reg[8].para */ 0x00000000\
},\
/* STRUCT: SENSOR.reg[9] */\
{\
/* SENSOR.reg[9].addr */ 0x00000309, /* SENSOR.reg[9].para */ 0x00000008\
},\
/* STRUCT: SENSOR.reg[10] */\
{\
/* SENSOR.reg[10].addr */ 0xFFFFFFFF, /* SENSOR.reg[10].para */ 0x00000001\
}\
}
#define CAMERA_SENSOR_CCT_DEFAULT_VALUE {{ 0xFFFFFFFF, 0x08 } ,{ 0x0205, 0x20 } ,{ 0x020e, 0x01 } ,{ 0x0210, 0x01 } ,{ 0x0212, 0x01 }}
#endif /* __CAMERA_SENSOR_PARA_H */
File diff suppressed because it is too large Load Diff
@@ -16,99 +16,132 @@
#ifndef _OV5670MIPI_SENSOR_H
#define _OV5670MIPI_SENSOR_H
typedef enum group_enum {
PRE_GAIN=0,
CMMCLK_CURRENT,
FRAME_RATE_LIMITATION,
REGISTER_EDITOR,
GROUP_TOTAL_NUMS
} FACTORY_GROUP_ENUM;
typedef enum{
IMGSENSOR_MODE_INIT,
IMGSENSOR_MODE_PREVIEW,
IMGSENSOR_MODE_CAPTURE,
IMGSENSOR_MODE_VIDEO,
} IMGSENSOR_MODE;
typedef struct imgsensor_mode_struct {
kal_uint32 pclk; //record different mode's pclk
kal_uint32 linelength; //record different mode's linelength
kal_uint32 framelength; //record different mode's framelength
#define ENGINEER_START_ADDR 10
#define FACTORY_START_ADDR 0
kal_uint8 startx; //record different mode's startx of grabwindow
kal_uint8 starty; //record different mode's startx of grabwindow
typedef enum engineer_index
{
CMMCLK_CURRENT_INDEX=ENGINEER_START_ADDR,
ENGINEER_END
} FACTORY_ENGINEER_INDEX;
kal_uint16 grabwindow_width; //record different mode's width of grabwindow
kal_uint16 grabwindow_height; //record different mode's height of grabwindow
typedef enum register_index
{
SENSOR_BASEGAIN=FACTORY_START_ADDR,
PRE_GAIN_R_INDEX,
PRE_GAIN_Gr_INDEX,
PRE_GAIN_Gb_INDEX,
PRE_GAIN_B_INDEX,
FACTORY_END_ADDR
} FACTORY_REGISTER_INDEX;
/* following for MIPIDataLowPwr2HighSpeedSettleDelayCount by different scenario */
kal_uint8 mipi_data_lp2hs_settle_dc;
typedef struct
{
SENSOR_REG_STRUCT Reg[ENGINEER_END];
SENSOR_REG_STRUCT CCT[FACTORY_END_ADDR];
} SENSOR_DATA_STRUCT, *PSENSOR_DATA_STRUCT;
/* following for GetDefaultFramerateByScenario() */
kal_uint16 max_framerate;
typedef enum {
SENSOR_MODE_INIT = 0,
SENSOR_MODE_PREVIEW,
SENSOR_MODE_VIDEO,
SENSOR_MODE_CAPTURE
} OV5670_SENSOR_MODE;
typedef struct
{
kal_uint32 DummyPixels;
kal_uint32 DummyLines;
} imgsensor_mode_struct;
/* SENSOR PRIVATE STRUCT FOR VARIABLES*/
typedef struct imgsensor_struct {
kal_uint8 mirror; //mirrorflip information
kal_uint8 sensor_mode; //record IMGSENSOR_MODE enum value
kal_uint32 shutter; //current shutter
kal_uint16 gain; //current gain
kal_uint32 pvShutter;
kal_uint32 pvGain;
kal_uint32 pclk; //current pclk
kal_uint32 frame_length; //current framelength
kal_uint32 line_length; //current linelength
kal_uint32 min_frame_length; //current min framelength to max framerate
kal_uint16 dummy_pixel; //current dummypixel
kal_uint16 dummy_line; //current dummline
kal_uint32 pvPclk;
kal_uint32 videoPclk;
kal_uint32 capPclk;
kal_uint16 current_fps; //current max fps
kal_bool autoflicker_en; //record autoflicker enable or disable
kal_bool test_pattern; //record test pattern mode or not
MSDK_SCENARIO_ID_ENUM current_scenario_id;//current scenario id
kal_uint8 ihdr_en; //ihdr enable or disable
kal_uint8 i2c_write_id; //record current sensor's i2c write id
} imgsensor_struct;
kal_uint32 shutter;
/* SENSOR PRIVATE STRUCT FOR CONSTANT*/
typedef struct imgsensor_info_struct {
kal_uint32 sensor_id; //record sensor id defined in Kd_imgsensor.h
kal_uint32 checksum_value; //checksum value for Camera Auto Test
imgsensor_mode_struct pre; //preview scenario relative information
imgsensor_mode_struct cap; //capture scenario relative information
imgsensor_mode_struct normal_video;//normal video scenario relative information
kal_uint8 ae_shut_delay_frame; //shutter delay frame for AE cycle
kal_uint8 ae_sensor_gain_delay_frame; //sensor gain delay frame for AE cycle
kal_uint8 ae_ispGain_delay_frame; //isp gain delay frame for AE cycle
kal_uint8 sensor_mode_num; //support sensor mode num
kal_uint8 cap_delay_frame; //enter capture delay frame num
kal_uint8 pre_delay_frame; //enter preview delay frame num
kal_uint8 video_delay_frame; //enter video delay frame num
kal_uint8 margin; //sensor framelength & shutter margin
kal_uint32 min_shutter; //min shutter
kal_uint32 max_frame_length; //max framelength by sensor register's limitation
kal_uint16 sensorGlobalGain;
kal_uint16 ispBaseGain;
kal_uint16 realGain;
kal_uint8 isp_driving_current; //mclk driving current
kal_uint8 sensor_interface_type;//sensor_interface_type
kal_uint8 mipi_sensor_type; //0,MIPI_OPHY_NCSI2; 1,MIPI_OPHY_CSI2, default is NCSI2, don't modify this para
kal_uint8 mipi_settle_delay_mode; //0, high speed signal auto detect; 1, use settle delay,unit is ns, default is auto detect, don't modify this para
kal_uint8 sensor_output_dataformat;//sensor output first pixel color
kal_uint8 mclk; //mclk value, suggest 24 or 26 for 24Mhz or 26Mhz
kal_int16 imgMirror;
OV5670_SENSOR_MODE sensorMode;
kal_bool OV5670AutoFlickerMode;
kal_bool OV5670VideoMode;
kal_uint8 mipi_lane_num; //mipi lane num
kal_uint8 i2c_addr_table[5]; //record sensor support all write id addr, only supprt 4must end with 0xff
} imgsensor_info_struct;
}OV5670_PARA_STRUCT,*POV5670_PARA_STRUCT;
/* SENSOR READ/WRITE ID */
//#define IMGSENSOR_WRITE_ID_1 (0x6c)
//#define IMGSENSOR_READ_ID_1 (0x6d)
//#define IMGSENSOR_WRITE_ID_2 (0x20)
//#define IMGSENSOR_READ_ID_2 (0x21)
extern int iReadRegI2C(u8 *a_pSendData , u16 a_sizeSendData, u8 * a_pRecvData, u16 a_sizeRecvData, u16 i2cId);
extern int iWriteRegI2C(u8 *a_pSendData , u16 a_sizeSendData, u16 i2cId);
#define OV5670_SHUTTER_MARGIN (4)
#define OV5670_GAIN_BASE (128)
#define OV5670_AUTOFLICKER_OFFSET_30 (296)
#define OV5670_AUTOFLICKER_OFFSET_25 (250)
#define OV5670_AUTOFLICKER_OFFSET_15 (146)
#define OV5670_PREVIEW_PCLK (102850000)
#define OV5670_VIDEO_PCLK (OV5670_PREVIEW_PCLK)
#define OV5670_CAPTURE_PCLK (102850000)
#define OV5670_MAX_FPS_PREVIEW (300)
#define OV5670_MAX_FPS_VIDEO (300)
#define OV5670_MAX_FPS_CAPTURE (250)
//#define OV5670_MAX_FPS_N3D (300)
//grab window
#define OV5670_IMAGE_SENSOR_PV_WIDTH (1296)
#define OV5670_IMAGE_SENSOR_PV_HEIGHT (972) //(960)
#define OV5670_IMAGE_SENSOR_VIDEO_WIDTH (OV5670_IMAGE_SENSOR_PV_WIDTH)
#define OV5670_IMAGE_SENSOR_VIDEO_HEIGHT (OV5670_IMAGE_SENSOR_PV_HEIGHT)
#define OV5670_IMAGE_SENSOR_FULL_WIDTH (2592)
#define OV5670_IMAGE_SENSOR_FULL_HEIGHT (1944)
#define OV5670_FULL_X_START (0)
#define OV5670_FULL_Y_START (0)
#define OV5670_PV_X_START (0)
#define OV5670_PV_Y_START (0)
#define OV5670_VIDEO_X_START (0)
#define OV5670_VIDEO_Y_START (0)
#define OV5670_MAX_ANALOG_GAIN (8)
#define OV5670_MIN_ANALOG_GAIN (1)
/* SENSOR PIXEL/LINE NUMBERS IN ONE PERIOD */
#define OV5670_PV_PERIOD_PIXEL_NUMS 0x068C //1676*2=>3352
#define OV5670_PV_PERIOD_LINE_NUMS 0x07FD //2045
#define OV5670_VIDEO_PERIOD_PIXEL_NUMS OV5670_PV_PERIOD_PIXEL_NUMS
#define OV5670_VIDEO_PERIOD_LINE_NUMS OV5670_PV_PERIOD_LINE_NUMS
#define OV5670_FULL_PERIOD_PIXEL_NUMS 0x07DC //2012*2 25fps
#define OV5670_FULL_PERIOD_LINE_NUMS 0x07FD //2045
#define OV5670MIPI_WRITE_ID (0x6c)
#define OV5670MIPI_READ_ID (0x6d)
#define OV5670MIPI_SENSOR_ID OV5670_SENSOR_ID
UINT32 OV5670MIPIOpen(void);
UINT32 OV5670MIPIGetResolution(MSDK_SENSOR_RESOLUTION_INFO_STRUCT *pSensorResolution);
UINT32 OV5670MIPIGetInfo(MSDK_SCENARIO_ID_ENUM ScenarioId, MSDK_SENSOR_INFO_STRUCT *pSensorInfo, MSDK_SENSOR_CONFIG_STRUCT *pSensorConfigData);
UINT32 OV5670MIPIControl(MSDK_SCENARIO_ID_ENUM ScenarioId, MSDK_SENSOR_EXPOSURE_WINDOW_STRUCT *pImageWindow, MSDK_SENSOR_CONFIG_STRUCT *pSensorConfigData);
UINT32 OV5670MIPIFeatureControl(MSDK_SENSOR_FEATURE_ENUM FeatureId, UINT8 *pFeaturePara,UINT32 *pFeatureParaLen);
UINT32 OV5670MIPIClose(void);
#endif
@@ -643,7 +643,7 @@ static void lcm_resume(void)
#endif
lcm_init();
}
/*
static unsigned int lcm_esd_test = FALSE;
static unsigned int lcm_esd_check(void)
@@ -654,7 +654,7 @@ static unsigned int lcm_esd_check(void)
char buffer[1];
int array[4];
int ret = 0;
if(lcm_esd_test)
{
lcm_esd_test = FALSE;
@@ -694,7 +694,7 @@ static unsigned int lcm_esd_recover(void)
lcm_init();
return TRUE;
}
*/
static unsigned int lcm_compare_id(void)
{
unsigned int id1 = 0, id2 = 0, id = 0;
@@ -742,8 +742,8 @@ LCM_DRIVER a080ean01_dsi_vdo_lcm_drv =
.init = lcm_init,
.suspend = lcm_suspend,
.resume = lcm_resume,
//.esd_check = lcm_esd_check,
// .esd_recover = lcm_esd_recover,
.esd_check = lcm_esd_check,
.esd_recover = lcm_esd_recover,
.compare_id = lcm_compare_id,
};
@@ -142,31 +142,28 @@ static void init_lcm_registers(void)
#else
//printk("[IND][K] y_____1%s\n", __func__);
#endif
//[BUGFIX]-Mod-BEGIN by SCDTABLET.jinghuang@tcl.com,05/21/2015,1008656£¬
//import gamma2.2 V1 parameters.
data_array[0] = 0x77801500;
data_array[0] = 0x47801500;
dsi_set_cmdq(&data_array, 1, 1);
MDELAY(1);
data_array[0] = 0x77811500;
data_array[0] = 0x40811500;
dsi_set_cmdq(&data_array, 1, 1);
MDELAY(1);
data_array[0] = 0xa8821500;
data_array[0] = 0x04821500;
dsi_set_cmdq(&data_array, 1, 1);
MDELAY(1);
data_array[0] = 0xfe831500;
data_array[0] = 0x77831500;
dsi_set_cmdq(&data_array, 1, 1);
MDELAY(1);
data_array[0] = 0xb0841500;
data_array[0] = 0x0F841500;
dsi_set_cmdq(&data_array, 1, 1);
MDELAY(1);
data_array[0] = 0x77851500;
data_array[0] = 0x70851500;
dsi_set_cmdq(&data_array, 1, 1);
MDELAY(1);
data_array[0] = 0x77861500;
data_array[0] = 0x70861500;
dsi_set_cmdq(&data_array, 1, 1);
MDELAY(1);
//[BUGFIX]-Mod-END by SCDTABLET.jinghuang@tcl.com
}
@@ -321,7 +318,7 @@ static unsigned int lcm_esd_check(void)
read_reg_v2(0x81, buffer, 1);
//printk("\n ZERO] [0x81]=0x%02x\n", buffer[0]);
if(buffer[0] != 0x77)
if(buffer[0] != 0x40)
{
printk("[LCM ERROR] [0x81]=0x%02x\n", buffer[0]);
return TRUE;
@@ -142,30 +142,29 @@ static void init_lcm_registers(void)
#else
//printk("[IND][K] y_____1%s\n", __func__);
#endif
//[BUGFIX]-Mod-BEGIN by SCDTABLET.jinghuang@tcl.com,05/21/2015,1008656£¬
//import gamma2.2 V1 parameters.
data_array[0] = 0x77801500;
data_array[0] = 0x47801500;
dsi_set_cmdq(&data_array, 1, 1);
MDELAY(1);
data_array[0] = 0x77811500;
data_array[0] = 0x40811500;
dsi_set_cmdq(&data_array, 1, 1);
MDELAY(1);
data_array[0] = 0xa8821500;
data_array[0] = 0x04821500;
dsi_set_cmdq(&data_array, 1, 1);
MDELAY(1);
data_array[0] = 0xfe831500;
data_array[0] = 0x77831500;
dsi_set_cmdq(&data_array, 1, 1);
MDELAY(1);
data_array[0] = 0xb0841500;
data_array[0] = 0x0F841500;
dsi_set_cmdq(&data_array, 1, 1);
MDELAY(1);
data_array[0] = 0x77851500;
data_array[0] = 0x70851500;
dsi_set_cmdq(&data_array, 1, 1);
MDELAY(1);
data_array[0] = 0x77861500;
data_array[0] = 0x70861500;
dsi_set_cmdq(&data_array, 1, 1);
MDELAY(1);
//[BUGFIX]-Mod-END by SCDTABLET.jinghuang@tcl.com
}
@@ -316,7 +315,7 @@ static unsigned int lcm_esd_check(void)
read_reg_v2(0x81, buffer, 1);
//printk("\n ZERO] [0x81]=0x%02x\n", buffer[0]);
if(buffer[0] != 0x77)
if(buffer[0] != 0x40)
{
printk("[LCM ERROR] [0x81]=0x%02x\n", buffer[0]);
return TRUE;
@@ -300,20 +300,15 @@ static void lcm_init(void)
lcd_reset(0);
lcd_power_en(0);
lcd_power_en(1);
MDELAY(5);
mt_set_gpio_out(GPIO_LCM_PWR_EN, GPIO_OUT_ONE);//iml8881 bias
MDELAY(50);
lcd_reset(1);
MDELAY(20);
MDELAY(15);
lcd_reset(0);
MDELAY(20);
MDELAY(15);
lcd_reset(1);
MDELAY(20);
mt_set_gpio_out(GPIO_LCM_PWR_EN, GPIO_OUT_ONE);//iml8881 bias
MDELAY(50);
#ifdef BUILD_LK
//extern int tps65640_e2prom_data_check(void);
//tps65640_e2prom_data_check();
#endif
MDELAY(15);
push_table(lcm_initialization_setting, sizeof(lcm_initialization_setting) / sizeof(struct LCM_setting_table), 1);
}
@@ -329,9 +324,9 @@ static void lcm_suspend(void)
printk("%s, kernel", __func__);
#endif
lcd_reset(0);
MDELAY(5);
mt_set_gpio_out(GPIO_LCM_PWR_EN, GPIO_OUT_ZERO);//iml8881 bias
MDELAY(10);
lcd_reset(0);
lcd_power_en(0);
MDELAY(10);
}
+9
View File
@@ -0,0 +1,9 @@
#
# Makefile for misc devices that really don't fit anywhere else.
#
include $(srctree)/drivers/misc/mediatek/Makefile.custom
obj-y += rm72013_wxga_dsi_vdo.o
@@ -0,0 +1,350 @@
#ifdef BUILD_LK
#include <string.h>
//Evan add
#include <debug.h>
#include <sys/types.h>
#include <platform/mt_i2c.h>
//Evan add end
#else
#include <linux/string.h>
#endif
#ifdef BUILD_LK
#include <platform/mt_gpio.h>
#include <platform/mt_pmic.h>
#else
#include <mach/mt_gpio.h>
#include <mach/mt_pm_ldo.h>
#include <mach/upmu_common.h>
#endif
#include "lcm_drv.h"
// ---------------------------------------------------------------------------
// Local Constants
// ---------------------------------------------------------------------------
#define FRAME_WIDTH (800)
#define FRAME_HEIGHT (1280)
#define REGFLAG_DELAY 0XFE
#define REGFLAG_END_OF_TABLE 0xFF // END OF REGISTERS MARKER
#define LCM_DSI_CMD_MODE 0
#define LCM_ID 0x03 //DPT+AUO+Rm72013
// ---------------------------------------------------------------------------
// Local Variables
// ---------------------------------------------------------------------------
static LCM_UTIL_FUNCS lcm_util = {
.set_gpio_out = NULL,
};
#define SET_RESET_PIN(v) (lcm_util.set_reset_pin((v)))
#define UDELAY(n) (lcm_util.udelay(n))
#define MDELAY(n) (lcm_util.mdelay(n))
// ---------------------------------------------------------------------------
// Local Functions
// ---------------------------------------------------------------------------
#define dsi_set_cmdq_V2(cmd, count, ppara, force_update) lcm_util.dsi_set_cmdq_V2(cmd, count, ppara, force_update)
#define dsi_set_cmdq(pdata, queue_size, force_update) lcm_util.dsi_set_cmdq(pdata, queue_size, force_update)
#define wrtie_cmd(cmd) lcm_util.dsi_write_cmd(cmd)
#define write_regs(addr, pdata, byte_nums) lcm_util.dsi_write_regs(addr, pdata, byte_nums)
#define read_reg lcm_util.dsi_read_reg()
#define read_reg_v2(cmd, buffer, buffer_size) lcm_util.dsi_dcs_read_lcm_reg_v2(cmd, buffer, buffer_size)
struct LCM_setting_table {
unsigned cmd;
unsigned char count;
unsigned char para_list[64];
};
static struct LCM_setting_table lcm_initialization_setting[] = {
{0x50,1,{0x77}},
{0xE1,1,{0x66}},
{0xDC,1,{0x67}},
{0xD3,1,{0xC8}},
{0x50,1,{0x00}},
{0xF0,2,{0x5A,0x5A}},
{0xF5,1,{0x96}},
{0xC3,3,{0x40,0x00,0x28}},
{REGFLAG_DELAY, 6, {}},
{0x11,1,{}},
{0x29,1,{}},
{REGFLAG_DELAY, 200, {}},
{REGFLAG_END_OF_TABLE, 0x00, {}}
};
static struct LCM_setting_table lcm_power_off_setting[] = {
{0x28,1,{}},
{0x10,1,{}},
{REGFLAG_DELAY, 5, {}},
{0xF0,2,{0x5A,0x5A}},
{0xC3,3,{0x40,0x00,0x20}},
{REGFLAG_END_OF_TABLE, 0x00, {}}
};
static void lcd_power_en(unsigned char enabled)
{
if (enabled) {
#ifdef BUILD_LK
upmu_set_rg_vgp1_vosel(0x7);//3.3V
upmu_set_rg_vgp1_en(0x1);
upmu_set_rg_vgp3_vosel(0x3);//1.8V
upmu_set_rg_vgp3_en(0x1);
#else
upmu_set_rg_vgp1_vosel(0x7);//3.3V
upmu_set_rg_vgp1_en(0x1);
upmu_set_rg_vgp3_vosel(0x3);//1.8V
upmu_set_rg_vgp3_en(0x1);
#endif
} else {
#ifdef BUILD_LK
upmu_set_rg_vgp1_en(0);
upmu_set_rg_vgp1_vosel(0);
upmu_set_rg_vgp3_en(0);
upmu_set_rg_vgp3_vosel(0);
#else
upmu_set_rg_vgp1_en(0);
upmu_set_rg_vgp1_vosel(0);
upmu_set_rg_vgp3_en(0);
upmu_set_rg_vgp3_vosel(0);
#endif
}
}
static void lcd_reset(unsigned char enabled)
{
if (enabled) {
mt_set_gpio_out(GPIO_LCM_RST, GPIO_OUT_ONE);
} else {
mt_set_gpio_out(GPIO_LCM_RST, GPIO_OUT_ZERO);
}
}
// ---------------------------------------------------------------------------
// LCM Driver Implementations
// ---------------------------------------------------------------------------
static void lcm_set_util_funcs(const LCM_UTIL_FUNCS *util)
{
memcpy(&lcm_util, util, sizeof(LCM_UTIL_FUNCS));
}
static void lcm_get_params(LCM_PARAMS *params)
{
memset(params, 0, sizeof(LCM_PARAMS));
params->type = LCM_TYPE_DSI;
params->width = FRAME_WIDTH;
params->height = FRAME_HEIGHT;
params->dsi.mode = SYNC_EVENT_VDO_MODE; //BURST_VDO_MODE;BURST_VDO_MODE;
// DSI
/* Command mode setting */
params->dsi.LANE_NUM = LCM_FOUR_LANE;
//The following defined the fomat for data coming from LCD engine.
params->dsi.data_format.format = LCM_DSI_FORMAT_RGB888; //LCM_DSI_FORMAT_RGB666;
// Video mode setting
params->dsi.PS = LCM_PACKED_PS_24BIT_RGB888; //LCM_PACKED_PS_18BIT_RGB666;
params->dsi.vertical_sync_active = 4;//0;
params->dsi.vertical_backporch = 8;//23;
params->dsi.vertical_frontporch = 8;
params->dsi.vertical_active_line = FRAME_HEIGHT;
params->dsi.horizontal_sync_active = 4;//0;
params->dsi.horizontal_backporch = 132;//160;
params->dsi.horizontal_frontporch = 24; //100;//160;
params->dsi.horizontal_active_pixel = FRAME_WIDTH;
params->dsi.PLL_CLOCK = 250;//148;
}
static void push_table(struct LCM_setting_table *table, unsigned int count, unsigned char force_update)
{
unsigned int i;
for(i = 0; i < count; i++) {
unsigned cmd;
cmd = table[i].cmd;
switch (cmd) {
case REGFLAG_DELAY :
MDELAY(table[i].count);
break;
case REGFLAG_END_OF_TABLE :
break;
default:
dsi_set_cmdq_V2(cmd, table[i].count, table[i].para_list, force_update);
}
}
}
static void lcm_init(void)
{
unsigned int data_array[16];
#ifdef BUILD_LK
printf("%s, LK \n", __func__);
#else
printk("%s, kernel", __func__);
#endif
lcd_reset(0);
lcd_power_en(0);
lcd_power_en(1);
MDELAY(5);
mt_set_gpio_out(GPIO_LCM_PWR_EN, GPIO_OUT_ONE);//iml8881 bias
MDELAY(50);
lcd_reset(1);
MDELAY(15);
lcd_reset(0);
MDELAY(15);
lcd_reset(1);
MDELAY(15);
push_table(lcm_initialization_setting, sizeof(lcm_initialization_setting) / sizeof(struct LCM_setting_table), 1);
}
static void lcm_suspend(void)
{
unsigned int data_array[16];
#ifdef BUILD_LK
printf("%s, LK \n", __func__);
#else
printk("%s, kernel", __func__);
#endif
push_table(lcm_power_off_setting, sizeof(lcm_power_off_setting) / sizeof(struct LCM_setting_table), 1);
lcd_reset(0);
mt_set_gpio_out(GPIO_LCM_PWR_EN, GPIO_OUT_ZERO);//iml8881 bias
lcd_power_en(0);
MDELAY(10);
}
static void lcm_resume(void)
{
unsigned int data_array[16];
#ifdef BUILD_LK
printf("%s, LK \n", __func__);
#else
printk("%s, kernel", __func__);
#endif
lcm_init();
}
/*
static unsigned int lcm_esd_test = FALSE;
static unsigned int lcm_esd_check(void)
{
#ifndef BUILD_LK
char buffer[1];
int array[4];
int ret = 0;
if(lcm_esd_test)
{
lcm_esd_test = FALSE;
return TRUE;
}
array[0] = 0x00013700;
dsi_set_cmdq(array, 1, 1);
read_reg_v2(0x0A, buffer, 1);
//printk("[LCM ERROR] [0x0A]=0x%02x\n", buffer[0]);
if(buffer[0] != 0x9C)
{
// printk("[LCM ERROR] [0x0A]=0x%02x\n", buffer[0]);
ret++;
}
// return TRUE: need recovery
// return FALSE: No need recovery
if(ret)
{
return TRUE;
}
else
{
return FALSE;
}
#endif
}
static unsigned int lcm_esd_recover(void)
{
#ifdef BUILD_LK
printf("%s, LK \n", __func__);
#else
printk("%s, KERNEL \n", __func__);
#endif
lcm_init();
return TRUE;
}
*/
static unsigned int lcm_compare_id(void)
{
unsigned int id1 = 0, id2 = 0, id = 0;
#ifdef BUILD_LK
printf("%s, LK \n", __func__);
#endif
lcd_reset(0);
lcd_power_en(0);
lcd_power_en(1);
lcd_reset(1);
MDELAY(20);
lcd_reset(0);
MDELAY(20);
lcd_reset(1);
MDELAY(20);
mt_set_gpio_mode(GPIO_HALL_2_PIN, GPIO_HALL_2_PIN_M_GPIO);
mt_set_gpio_dir(GPIO_HALL_2_PIN, GPIO_DIR_IN);
mt_set_gpio_pull_enable(GPIO_HALL_2_PIN, GPIO_PULL_DISABLE);
mt_set_gpio_mode(GPIO_HALL_1_PIN, GPIO_HALL_1_PIN_M_GPIO);
mt_set_gpio_dir(GPIO_HALL_1_PIN, GPIO_DIR_IN);
mt_set_gpio_pull_enable(GPIO_HALL_1_PIN, GPIO_PULL_DISABLE);
MDELAY(2);
id1 = mt_get_gpio_in(GPIO_HALL_1_PIN);
id2 = mt_get_gpio_in(GPIO_HALL_2_PIN);
id = (id1<<1)|(id2);
#ifdef BUILD_LK
printf("DPT+AUO id1=%d,id2=%d,id=0x%x\n",id1,id2,id);
#else
printk("DPT+AUO id1=%d,id2=%d,id=0x%x\n",id1,id2,id);
#endif
lcd_reset(0);
lcd_power_en(0);
MDELAY(10);
return (LCM_ID == id)?1:0;
}
LCM_DRIVER rm72013_wxga_dsi_vdo_lcm_drv =
{
.name = "rm72013_wxga_dsi_vdo",
.set_util_funcs = lcm_set_util_funcs,
.get_params = lcm_get_params,
.init = lcm_init,
.suspend = lcm_suspend,
.resume = lcm_resume,
//.esd_check = lcm_esd_check,
//.esd_recover = lcm_esd_recover,
.compare_id = lcm_compare_id,
};

Some files were not shown because too many files have changed in this diff Show More