import PULS_20180308
This commit is contained in:
Executable → Regular
+10
-8
@@ -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
@@ -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
|
||||
|
||||
@@ -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
@@ -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 */
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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");
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
+9
-5
@@ -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;
|
||||
|
||||
|
||||
+40
-5
@@ -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;
|
||||
|
||||
+2
-1
@@ -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);
|
||||
|
||||
+62
-12
@@ -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() */
|
||||
|
||||
|
||||
|
||||
+21
-23
@@ -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;
|
||||
|
||||
+15
-9
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
+157
@@ -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
|
||||
+90
@@ -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
|
||||
|
||||
+2140
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
|
||||
+65
@@ -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
|
||||
+60
@@ -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 */
|
||||
+1995
-1302
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,
|
||||
};
|
||||
|
||||
|
||||
+9
-12
@@ -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;
|
||||
|
||||
+10
-11
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user