void mt_gpio_self_test(void) { int i, val; for (i = 0; i < MT_GPIO_EXT_MAX; i++) { s32 res,old; GPIOMSG("GPIO-%3d test\n", i); /*direction test*/ old = mt_get_gpio_dir(i); if (old == 0 || old == 1) { GPIOLOG(" dir old = %d\n", old); } else { GPIOERR(" test dir fail: %d\n", old); break; } if ((res = mt_set_gpio_dir(i, GPIO_DIR_OUT)) != RSUCCESS) { GPIOERR(" set dir out fail: %d\n", res); break; } else if ((res = mt_get_gpio_dir(i)) != GPIO_DIR_OUT) { GPIOERR(" get dir out fail: %d\n", res); break; } else { /*output test*/ s32 out = mt_get_gpio_out(i); if (out != 0 && out != 1) { GPIOERR(" get out fail = %d\n", old); break; } for (val = 0; val < GPIO_OUT_MAX; val++) { if ((res = mt_set_gpio_out(i,0)) != RSUCCESS) { GPIOERR(" set out[%d] fail: %d\n", val, res); break; } else if ((res = mt_get_gpio_out(i)) != 0) { GPIOERR(" get out[%d] fail: %d\n", val, res); break; } } if ((res = mt_set_gpio_out(i,out)) != RSUCCESS) { GPIOERR(" restore out fail: %d\n", res); break; } } if ((res = mt_set_gpio_dir(i, GPIO_DIR_IN)) != RSUCCESS) { GPIOERR(" set dir in fail: %d\n", res); break; } else if ((res = mt_get_gpio_dir(i)) != GPIO_DIR_IN) { GPIOERR(" get dir in fail: %d\n", res); break; } else { GPIOLOG(" input data = %d\n", res); } if ((res = mt_set_gpio_dir(i, old)) != RSUCCESS) { GPIOERR(" restore dir fail: %d\n", res); break; } for (val = 0; val < GPIO_PULL_EN_MAX; val++) { if ((res = mt_set_gpio_pull_enable(i,val)) != RSUCCESS) { GPIOERR(" set pullen[%d] fail: %d\n", val, res); break; } else if ((res = mt_get_gpio_pull_enable(i)) != val) { GPIOERR(" get pullen[%d] fail: %d\n", val, res); break; } } if ((res = mt_set_gpio_pull_enable(i, old)) != RSUCCESS) { GPIOERR(" restore pullen fail: %d\n", res); break; } /*pull select test*/ old = mt_get_gpio_pull_select(i); if (old == 0 || old == 1) GPIOLOG(" pullsel old = %d\n", old); else { GPIOERR(" pullsel fail: %d\n", old); break; } for (val = 0; val < GPIO_PULL_MAX; val++) { if ((res = mt_set_gpio_pull_select(i,val)) != RSUCCESS) { GPIOERR(" set pullsel[%d] fail: %d\n", val, res); break; } else if ((res = mt_get_gpio_pull_select(i)) != val) { GPIOERR(" get pullsel[%d] fail: %d\n", val, res); break; } } if ((res = mt_set_gpio_pull_select(i, old)) != RSUCCESS) { GPIOERR(" restore pullsel fail: %d\n", res); break; } /*data inversion*/ old = mt_get_gpio_inversion(i); if (old == 0 || old == 1) GPIOLOG(" inv old = %d\n", old); else { GPIOERR(" inv fail: %d\n", old); break; } for (val = 0; val < GPIO_DATA_INV_MAX; val++) { if ((res = mt_set_gpio_inversion(i,val)) != RSUCCESS) { GPIOERR(" set inv[%d] fail: %d\n", val, res); break; } else if ((res = mt_get_gpio_inversion(i)) != val) { GPIOERR(" get inv[%d] fail: %d\n", val, res); break; } } if ((res = mt_set_gpio_inversion(i, old)) != RSUCCESS) { GPIOERR(" restore inv fail: %d\n", res); break; } /*mode control*/ // if((i<=GPIOEXT6) || (i >= GPIOEXT9)){ old = mt_get_gpio_mode(i); if ((old >= GPIO_MODE_00) && (val < GPIO_MODE_MAX)) { GPIOLOG(" mode old = %d\n", old); } else { GPIOERR(" get mode fail: %d\n", old); break; } for (val = 0; val < GPIO_MODE_MAX; val++) { if ((res = mt_set_gpio_mode(i, val)) != RSUCCESS) { GPIOERR("set mode[%d] fail: %d\n", val, res); break; } else if ((res = mt_get_gpio_mode(i)) != val) { GPIOERR("get mode[%d] fail: %d\n", val, res); break; } } if ((res = mt_set_gpio_mode(i,old)) != RSUCCESS) { GPIOERR(" restore mode fail: %d\n", res); break; } // } } GPIOLOG("GPIO test done\n"); }
static int touch_event_handler(void *unused) { struct sched_param param = { .sched_priority = RTPM_PRIO_TPD }; int x1=0, y1=0, x2=0, y2=0, x3=0, y3=0, x4=0, y4=0, p1=0, p2=0, p3=0, p4=0, id1=0xf, id2=0xf, id3=0xf, id4 = 0xf, pre_id1 = 0xf, pre_id2 = 0xf, pre_id3 = 0xf, pre_id4 = 0xf, pre_tt_mode = 0, finger_num = 0, pre_num = 0; int raw_x1=0, raw_y1=0, raw_x2=0, raw_y2=0, raw_x3=0, raw_y3=0, raw_x4=0, raw_y4=0; static char toggle; static char buffer[32];//[16]; // int pending = 0; u32 temp; sched_setscheduler(current, SCHED_RR, ¶m); g_temptimerdiff=get_jiffies_64();//jiffies; do { if(tpd_debuglog==1) { TPD_DMESG("[mtk-tpd] %s\n", __FUNCTION__); } set_current_state(TASK_INTERRUPTIBLE); if(tpd_debuglog==1) TPD_DMESG("[mtk-tpd], %s, tpd_halt=%d\n", __FUNCTION__, tpd_halt); while (tpd_halt) {tpd_flag = 0; msleep(20);} #ifndef POLL_MODE wait_event_interruptible(waiter, tpd_flag != 0); tpd_flag = 0; #endif TPD_DEBUG_SET_TIME; set_current_state(TASK_RUNNING); // #ifndef CY8CTMA300_CHARGE #if 0 temp = *(volatile u32 *)CHR_CON0; temp &= (1<<13); if(temp!=0) { if(tpd_debuglog==1) TPD_DMESG("[mtk-tpd], write 0x01 to 0x1D register!!\n"); buffer[0] = 0x01; buffer[0] = 0x01; i2c_smbus_write_i2c_block_data(i2c_client, 0x1D, 1, &(buffer[0])); } else { if(tpd_debuglog==1) TPD_DMESG("[mtk-tpd], write 0x00 to 0x1D register!!\n"); buffer[0] = 0x00; i2c_smbus_write_i2c_block_data(i2c_client, 0x1D, 1, &(buffer[0])); } #endif #ifndef TPD_NO_GPIO // for mt6575T fpga early porting if (tpd_show_version) { tpd_show_version = 0; mt_set_gpio_mode(GPIO1, 0x00); mt_set_gpio_dir(GPIO1, GPIO_DIR_OUT); mt_set_gpio_pull_enable(GPIO1, GPIO_PULL_ENABLE); mt_set_gpio_pull_select(GPIO1, GPIO_PULL_UP); mt_set_gpio_out(GPIO1, GPIO_OUT_ZERO); msleep(100); buffer[0] = 0x01; // reset touch panel mode i2c_smbus_write_i2c_block_data(i2c_client, 0x00, 1, &(buffer[0])); msleep(200); buffer[0] = 0x10; // swith to system information mode i2c_smbus_write_i2c_block_data(i2c_client, 0x00, 1, &(buffer[0])); msleep(200); i2c_smbus_read_i2c_block_data(i2c_client, 0x00, 8, &(buffer[0x0])); i2c_smbus_read_i2c_block_data(i2c_client, 0x08, 8, &(buffer[0x8])); i2c_smbus_read_i2c_block_data(i2c_client, 0x10, 8, &(buffer[0x10])); i2c_smbus_read_i2c_block_data(i2c_client, 0x18, 8, &(buffer[0x18])); printk("[mtk-tpd] Cypress Touch Panel ID %x.%x\n", buffer[0x07], buffer[0x08]); printk("[mtk-tpd] Cypress Touch Panel Firmware Version %x.%x\n", buffer[0x15], buffer[0x16]); buffer[0] = 0x04; // switch to operation mode i2c_smbus_write_i2c_block_data(i2c_client, 0x00, 1, &(buffer[0])); msleep(200); mt_set_gpio_out(GPIO1, GPIO_OUT_ONE); mt_set_gpio_mode(GPIO1, 0x01); mt_set_gpio_pull_enable(GPIO1, GPIO_PULL_ENABLE); mt_set_gpio_pull_select(GPIO1, GPIO_PULL_UP); continue; } #endif i2c_smbus_read_i2c_block_data(i2c_client, 0x00, 8, &(buffer[0])); i2c_smbus_read_i2c_block_data(i2c_client, 0x08, 8, &(buffer[8])); i2c_smbus_read_i2c_block_data(i2c_client, 0x10, 8, &(buffer[16])); i2c_smbus_read_i2c_block_data(i2c_client, 0x18, 8, &(buffer[24])); if(tpd_debuglog==1) { TPD_DMESG("[mtk-tpd]HST_MODE : %x\n", buffer[0]); TPD_DMESG("[mtk-tpd]TT_MODE : %x\n", buffer[1]); TPD_DMESG("[mtk-tpd]TT_STAT : %x\n", buffer[2]); // TPD_DEBUG("[mtk-tpd]TOUCH_ID : %x\n", buffer[8]); TPD_DMESG("[mtk-tpd]TOUCH_12ID : %x\n", buffer[8]); TPD_DMESG("[mtk-tpd]TOUCH_34ID : %x\n", buffer[21]); } finger_num = buffer[2] & 0x0f; if (finger_num == 0 && pre_num ==0) { msleep(10); tpd_flag = 0; pre_tt_mode = buffer[1]; continue; } if (pre_tt_mode == buffer[1]) { msleep(5); tpd_flag = 0; pre_tt_mode = buffer[1]; continue; } if (buffer[1] & 0x20) { TPD_DEBUG("buffer not ready\n"); tpd_flag = 0; pre_tt_mode = buffer[1]; continue; // buffer is not ready for use } id1 = (buffer[8] & 0xf0) >> 4; id2 = (buffer[8] & 0x0f); id3 = (buffer[21] & 0xf0) >> 4; id4 = (buffer[21] & 0x0f); // if (id1 != 0xf) { if(finger_num>=1) { x1 = (((int)buffer[3]) << 8) + buffer[4]; y1 = (((int)buffer[5]) << 8) + buffer[6]; if(x1>2048 || y1>2048) { tpd_flag = 0; pre_tt_mode = buffer[1]; continue; } p1 = buffer[7]; raw_x1 = x1; raw_y1 = y1; tpd_calibrate(&x1, &y1); tpd_down(raw_x1, raw_y1, x1, y1, p1); if(counter_pointer==0) g_temptimerdiff=get_jiffies_64();//jiffies; if(x_min==0&&y_min==0&&x_max==0&&y_max==0) { x_min = x1; y_min = y1; x_max = x1; y_max = y1; } if(x1<x_min) x_min = x1; if(x1>x_max) x_max = x1; if(y1<y_min) y_min = y1; if(y1>y_max) y_max = y1; counter_pointer++; if (time_after(jiffies, g_temptimerdiff + 100)){ //1s TPD_DMESG("[mtk-tpd], x_min=%d, y_min=%d, x_max=%d, y_max=%d, counter_pointer=%d!!\n", x_min, y_min, x_max, y_max, counter_pointer); x_min=0; y_min=0; x_max=0; y_max=0; counter_pointer=0; } } // if (id2 != 0xf || finger_num==2) { if(finger_num>=2) { x2 = (((int)buffer[9]) << 8) + buffer[10]; y2 = (((int)buffer[11]) << 8) + buffer[12]; p2 = buffer[13]; raw_x2 = x2; raw_y2 = y2; tpd_calibrate(&x2, &y2); tpd_down(raw_x2, raw_y2, x2, y2, p2); } // if(id3 != 0xf || finger_num==3) { if(finger_num>=3) { x3 = (((int)buffer[16]) << 8) + buffer[17]; y3= (((int)buffer[18]) << 8) + buffer[19]; p3= buffer[20]; raw_x3 = x3; raw_y3 = y3; tpd_calibrate(&x3, &y3); tpd_down(raw_x3, raw_y3, x3, y3, p3); } // if(id4 != 0xf || finger_num==4) { if(finger_num>=4) { x4 = (((int)buffer[22]) << 8) + buffer[23]; y4= (((int)buffer[24]) << 8) + buffer[25]; p4= buffer[26]; raw_x4 = x4; raw_y4 = y4; tpd_calibrate(&x4, &y4); tpd_down(raw_x4, raw_y4, x4, y4, p4); } if(pre_num>=1 && pre_id1==0xf) { if(finger_num>=1 && id1==0xf) { if(tpd_debuglog==1) TPD_DMESG("finger1 is still down!\n"); } else { if(tpd_debuglog==1) TPD_DMESG("finger1 is up!!\n"); tpd_up(raw_x1, raw_y1, x1, y1, p1); } } else if(pre_num>=1 && pre_id1 !=0xf) { if(id1==pre_id1) { if(tpd_debuglog==1) TPD_DMESG("finger1 is still down!!\n"); } else { if(tpd_debuglog==1) TPD_DMESG("finger1 is up!\n"); tpd_up(raw_x1, raw_y1, x1, y1, p1); } } if(pre_num>=2 && pre_id2==0xf) { if((finger_num>=2 && id2==0xf) || (finger_num==1 && id1==0xf)) { if(tpd_debuglog==1) TPD_DMESG("finger2 is still down!\n"); } else { if(tpd_debuglog==1) TPD_DMESG("finger2 is up!!\n"); tpd_up(raw_x2, raw_y2, x2, y2, p2); } } else if(pre_num>=2 && pre_id2 !=0xf) { if(id2==pre_id2 || id1==pre_id2) { if(tpd_debuglog==1) TPD_DMESG("finger2 is still down!!\n"); } else { if(tpd_debuglog==1) TPD_DMESG("finger2 is up!\n"); tpd_up(raw_x2, raw_y2, x2, y2, p2); } } if(pre_num>=3 && pre_id3==0xf) { if((finger_num>=3 && id3==0xf) || (finger_num==2 && id2==0xf) || (finger_num==1 && id1==0xf)) { if(tpd_debuglog==1) TPD_DMESG("finger3 is still down!\n"); } else { if(tpd_debuglog==1) TPD_DMESG("finger3 is up!!\n"); tpd_up(raw_x3, raw_y3, x3, y3, p3); } } else if(pre_num>=3 && pre_id3 !=0xf) { if(id3==pre_id3 || id2==pre_id3 || id1==pre_id3) { if(tpd_debuglog==1) TPD_DMESG("finger3 is still down!!\n"); } else { if(tpd_debuglog==1) TPD_DMESG("finger3 is up!\n"); tpd_up(raw_x3, raw_y3, x3, y3, p3); } } if(pre_num==4 && pre_id4==0xf) { if((finger_num>=4 && id4==0xf) || (finger_num==3 && id3==0xf) || (finger_num==2 && id2==0xf) || (finger_num==1 && id1==0xf)) { if(tpd_debuglog==1) TPD_DMESG("finger4 is still down!\n"); } else { if(tpd_debuglog==1) TPD_DMESG("finger4 is up!!\n"); tpd_up(raw_x4, raw_y4, x4, y4, p4); } } else if(pre_num==4 && pre_id4 !=0xf) { if(id4==pre_id4 || id3==pre_id4 || id2==pre_id4 || id1==pre_id4) { if(tpd_debuglog==1) TPD_DMESG("finger4 is still down!!\n"); } else { if(tpd_debuglog==1) TPD_DMESG("finger4 is up!\n"); tpd_up(raw_x4, raw_y4, x4, y4, p4); } } if(tpd_debuglog==1) TPD_DMESG("pre_id1=%d, pre_id2=%d, pre_id3=%d, pre_id4=%d, id1=%d, id2=%d, id3=%d, id4=%d\n", pre_id1, pre_id2, pre_id3, pre_id4, id1, id2, id3, id4); pre_id1 = id1; pre_id2 = id2; pre_id3 = id3; pre_id4 = id4; pre_tt_mode = buffer[1]; pre_num = finger_num; if(tpd && tpd->dev && tpd_register_flag==1) { input_sync(tpd->dev); } i2c_smbus_read_i2c_block_data(i2c_client, 0x00, 1, &toggle); if((toggle & 0x80) == 0) toggle = toggle | 0x80; else toggle = toggle & (~0x80); i2c_smbus_write_i2c_block_data(i2c_client, 0x00, 1, &toggle); // switch the read toggle bit to do next sampling tpd_flag = 0; #ifndef POLL_MODE } while (!kthread_should_stop()); #else }while(1);
int mms100_ISP_download_binary_data(int dl_mode) { int nRet = 0; int retry_cnt = 0; mt_set_gpio_mode(GPIO_I2C1_SDA_PIN, GPIO_I2C1_SDA_PIN_M_GPIO); mt_set_gpio_dir(GPIO_I2C1_SDA_PIN, GPIO_DIR_OUT); mt_set_gpio_pull_enable(GPIO_I2C1_SDA_PIN, GPIO_PULL_ENABLE); mt_set_gpio_pull_select(GPIO_I2C1_SDA_PIN, GPIO_PULL_UP); mt_set_gpio_mode(GPIO_I2C1_SCA_PIN, GPIO_I2C1_SCA_PIN_M_GPIO); mt_set_gpio_dir(GPIO_I2C1_SCA_PIN, GPIO_DIR_OUT); mt_set_gpio_pull_enable(GPIO_I2C1_SCA_PIN, GPIO_PULL_ENABLE); mt_set_gpio_pull_select(GPIO_I2C1_SCA_PIN, GPIO_PULL_DOWN); mt_set_gpio_mode(GPIO_CTP_EINT_PIN, GPIO_CTP_EINT_PIN_M_GPIO); mt_set_gpio_dir(GPIO_CTP_EINT_PIN, GPIO_DIR_OUT); mt_set_gpio_pull_enable(GPIO_CTP_EINT_PIN, GPIO_PULL_ENABLE); mt_set_gpio_pull_select(GPIO_CTP_EINT_PIN, 2); #if 0 #if MELFAS_USE_PROTOCOL_COMMAND_FOR_DOWNLOAD melfas_send_download_enable_command(); mcsdl_delay(MCSDL_DELAY_100US); #endif MELFAS_DISABLE_BASEBAND_ISR(); // Disable Baseband touch interrupt ISR. MELFAS_DISABLE_WATCHDOG_TIMER_RESET(); // Disable Baseband watchdog timer #endif //------------------------ // Run Download //------------------------ for (retry_cnt = 0; retry_cnt < 5; retry_cnt++) { if(dl_mode == 0x01) //MELFAS_ISP_DOWNLOAD nRet = mcsdl_download( (const UINT8*) MELFAS_binary, (const UINT16)MELFAS_binary_nLength , 0); else //MELFAS_ISC_DOWNLOAD { //nRet = mcsdl_download( (const UINT8*) MELFAS_MMS100_Initial_binary, (const UINT16)MELFAS_MMS100_Initial_nLength , 0); } if (!nRet) break; } MELFAS_ROLLBACK_BASEBAND_ISR(); // Roll-back Baseband touch interrupt ISR. MELFAS_ROLLBACK_WATCHDOG_TIMER_RESET(); // Roll-back Baseband watchdog timer mt_set_gpio_mode(GPIO_I2C1_SDA_PIN, GPIO_I2C1_SDA_PIN_M_SDA); mt_set_gpio_dir(GPIO_I2C1_SDA_PIN, GPIO_DIR_OUT); mt_set_gpio_pull_enable(GPIO_I2C1_SDA_PIN, GPIO_PULL_ENABLE); mt_set_gpio_pull_select(GPIO_I2C1_SDA_PIN, GPIO_PULL_UP); mt_set_gpio_mode(GPIO_I2C1_SCA_PIN, GPIO_I2C1_SCA_PIN_M_SCL); mt_set_gpio_dir(GPIO_I2C1_SCA_PIN, GPIO_DIR_OUT); mt_set_gpio_pull_enable(GPIO_I2C1_SCA_PIN, GPIO_PULL_ENABLE); mt_set_gpio_pull_select(GPIO_I2C1_SCA_PIN, GPIO_PULL_UP); fw_error: if (nRet) { mcsdl_erase_flash(0); mcsdl_erase_flash(1); } return nRet; }
BOOL hwpowerdown(PowerInformation pwInfo, char* mode_name) { if(pwInfo.PowerType == AVDD) { if(PowerCustList.PowerCustInfo[0].Gpio_Pin == GPIO_UNSUPPORTED) { if(TRUE != hwPowerDown(pwInfo.PowerType,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); return FALSE; } } else{ if(mt_set_gpio_mode(PowerCustList.PowerCustInfo[0].Gpio_Pin,PowerCustList.PowerCustInfo[0].Gpio_Mode)){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");} if(mt_set_gpio_dir(PowerCustList.PowerCustInfo[0].Gpio_Pin,GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");} if(mt_set_gpio_out(PowerCustList.PowerCustInfo[0].Gpio_Pin,PowerCustList.PowerCustInfo[0].Voltage)){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} } } else if(pwInfo.PowerType == DVDD) { if(PowerCustList.PowerCustInfo[1].Gpio_Pin == GPIO_UNSUPPORTED) { if(pinSetIdx==1) { if(TRUE != hwPowerDown(PMIC_APP_SUB_CAMERA_POWER_D,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); return FALSE; } } else if(TRUE != hwPowerDown(pwInfo.PowerType,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); return FALSE; } else{} } else{ if(mt_set_gpio_mode(PowerCustList.PowerCustInfo[1].Gpio_Pin,PowerCustList.PowerCustInfo[1].Gpio_Mode)){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");} if(mt_set_gpio_dir(PowerCustList.PowerCustInfo[1].Gpio_Pin,GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");} if(mt_set_gpio_out(PowerCustList.PowerCustInfo[1].Gpio_Pin,PowerCustList.PowerCustInfo[1].Voltage)){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} } } else if(pwInfo.PowerType == DOVDD) { if(PowerCustList.PowerCustInfo[2].Gpio_Pin == GPIO_UNSUPPORTED) { if(TRUE != hwPowerDown(pwInfo.PowerType,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); return FALSE; } } else{ if(mt_set_gpio_mode(PowerCustList.PowerCustInfo[2].Gpio_Pin,PowerCustList.PowerCustInfo[2].Gpio_Mode)){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");} if(mt_set_gpio_dir(PowerCustList.PowerCustInfo[2].Gpio_Pin,GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");} if(mt_set_gpio_out(PowerCustList.PowerCustInfo[2].Gpio_Pin,PowerCustList.PowerCustInfo[2].Voltage)){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} } } else if(pwInfo.PowerType == AFVDD) { if(PowerCustList.PowerCustInfo[3].Gpio_Pin == GPIO_UNSUPPORTED) { if(TRUE != hwPowerDown(pwInfo.PowerType,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); return FALSE; } } else{ if(mt_set_gpio_mode(PowerCustList.PowerCustInfo[3].Gpio_Pin,PowerCustList.PowerCustInfo[3].Gpio_Mode)){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");} if(mt_set_gpio_dir(PowerCustList.PowerCustInfo[3].Gpio_Pin,GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");} if(mt_set_gpio_out(PowerCustList.PowerCustInfo[3].Gpio_Pin,PowerCustList.PowerCustInfo[3].Voltage)){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} if(PowerCustList.PowerCustInfo[4].Gpio_Pin != GPIO_UNSUPPORTED) { mdelay(5); if(mt_set_gpio_mode(PowerCustList.PowerCustInfo[3].Gpio_Pin,PowerCustList.PowerCustInfo[3].Gpio_Mode)){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");} if(mt_set_gpio_dir(PowerCustList.PowerCustInfo[3].Gpio_Pin,GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");} if(mt_set_gpio_out(PowerCustList.PowerCustInfo[3].Gpio_Pin,PowerCustList.PowerCustInfo[3].Voltage)){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} } } } else if(pwInfo.PowerType==PDN) { PK_DBG("PDN\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(pwInfo.Voltage == Vol_High) { 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");} msleep(1); } else { 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");} msleep(1); } } else if(pwInfo.PowerType==RST) { PK_DBG("RST\n"); if(pinSetIdx==0) { #ifndef MTK_MT6306_SUPPORT 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!! (CMRST)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\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!! (CMRST)\n");} if(pwInfo.Voltage == Vol_High) { if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_ON])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} } else { if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} } #else if(mt6306_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\n");} if(pwInfo.Voltage == Vol_High) { if(mt6306_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_ON])){PK_DBG("[CAMERA SENSOR] set gpio failed!! (CMRST)\n");} } else{ if(mt6306_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! (CMRST)\n");} } #endif } else if(pinSetIdx==1) { 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!! (CMRST)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\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!! (CMRST)\n");} if(pwInfo.Voltage == Vol_High) { if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_ON])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} } else { if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} } } } else if(pwInfo.PowerType==SensorMCLK) { if(pinSetIdx==0) { ISP_MCLK1_EN(FALSE); } else if(pinSetIdx==1) { ISP_MCLK2_EN(FALSE); } } else{} return TRUE; }
int kdCISModulePowerOn(CAMERA_DUAL_CAMERA_SENSOR_ENUM SensorIdx, char *currSensorName, BOOL On, char* mode_name) { u32 pinSetIdx = 0;//default main sensor u32 tmp_idx = 0; #define IDX_PS_CMRST 0 #define IDX_PS_CMPDN 4 #define IDX_PS_MODE 1 #define IDX_PS_ON 2 #define IDX_PS_OFF 3 u32 pinSet[2][8] = { //for main sensor { CAMERA_CMRST_PIN, // The reset pin of main sensor uses GPIO10 of mt6306, please call mt6306 API to set CAMERA_CMRST_PIN_M_GPIO, GPIO_OUT_ONE, /* ON state */ GPIO_OUT_ZERO, /* OFF state */ }, //for sub sensor { CAMERA_CMRST1_PIN, CAMERA_CMRST1_PIN_M_GPIO, GPIO_OUT_ONE, GPIO_OUT_ZERO, CAMERA_CMPDN1_PIN, CAMERA_CMPDN1_PIN_M_GPIO, GPIO_OUT_ONE, GPIO_OUT_ZERO, } }; if (DUAL_CAMERA_MAIN_SENSOR == SensorIdx){ pinSetIdx = 0; } else if (DUAL_CAMERA_SUB_SENSOR == SensorIdx) { pinSetIdx = 1; } PK_DBG("pinSetIdx:%d, currSensorName: s5k3l2xx_mipi_raw\n"); //power ON if (On) { #if 0 ISP_MCLK1_EN(1); ISP_MCLK2_EN(1); #else if(pinSetIdx == 0 ) { ISP_MCLK1_EN(1); } else if (pinSetIdx == 1) { ISP_MCLK2_EN(1); } #endif PK_DBG("pinSetIdx:%d, currSensorName: %s\n", pinSetIdx, currSensorName); #ifdef MTK_MT6306_SUPPORT PK_DBG("MTK_MT6306_SUPPORT is defined, mt6306_set_gpio_dir: %d\n", pinSet[pinSetIdx][IDX_PS_CMRST]); #endif //Power off PWND pin ,only for sub camera if(pinSetIdx == 1 ) { if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMPDN]) { if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA PWDN] set gpio mode failed!! (CMPDN)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA PWDN] set gpio dir failed!! (CMPDN)\n");} if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA PWDN] set gpio failed!! (CMPDN)\n");} } } if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST]) { #ifndef MTK_MT6306_SUPPORT 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!! (CMRST)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\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!! (CMRST)\n");} #else if(mt6306_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\n");} if(mt6306_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! (CMRST)\n");} #endif } //VCAM_A if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,mode_name)){ PK_DBG("[CAMERA SENSOR] Fail to enable analog power (VCAM_A), power id = %d\n", CAMERA_POWER_VCAM_A); goto _kdCISModulePowerOn_exit_; } mdelay(1); //VCAM_IO if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_IO, VOL_1800, mode_name)){ PK_DBG("[CAMERA SENSOR] Fail to enable digital power (VCAM_IO), power id = %d \n", CAMERA_POWER_VCAM_IO); goto _kdCISModulePowerOn_exit_; } //pull up PWDN pin ,sync with DOVDD if(pinSetIdx == 1 ) { if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMPDN]) { if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_ON])){PK_DBG("[CAMERA PWDN] set gpio failed!! (CMPDN)\n");} } } mdelay(1); //VCAM_D,main-1.2v, sub-1.2v if(pinSetIdx == 0 ) { if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1200,mode_name)){ PK_DBG("[CAMERA SENSOR] Fail to enable digital power (VCAM_D), power id = %d \n", CAMERA_POWER_VCAM_D); goto _kdCISModulePowerOn_exit_; } } else if(pinSetIdx == 1 ) { if(TRUE != hwPowerOn(SUB_CAMERA_POWER_VCAM_D, VOL_1200,mode_name)){ PK_DBG("[SUB CAMERA SENSOR] Fail to enable digital power (VCAM_D), power id = %d \n", SUB_CAMERA_POWER_VCAM_D); goto _kdCISModulePowerOn_exit_; } } mdelay(1); //AF_VCC,only for main camera if(pinSetIdx == 0 ) { if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_AF, VOL_2800,mode_name)){ PK_DBG("[CAMERA SENSOR] Fail to enable analog power (VCAM_AF), power id = %d \n", CAMERA_POWER_VCAM_AF); goto _kdCISModulePowerOn_exit_; } } mdelay(2); //enable active sensor if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST]) { #ifndef MTK_MT6306_SUPPORT 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!! (CMRST)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\n");} 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!! (CMRST)\n");} #else if(mt6306_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\n");} if(mt6306_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_ON])){PK_DBG("[CAMERA SENSOR] set gpio failed!! (CMRST)\n");} #endif } tmp_idx = (pinSetIdx + 1) % 2; /*disable unused camera sensor*/ #if 1 if (GPIO_CAMERA_INVALID != pinSet[tmp_idx][IDX_PS_CMRST]) { if(mt_set_gpio_mode(pinSet[tmp_idx][IDX_PS_CMRST],pinSet[tmp_idx][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");} if(mt_set_gpio_dir(pinSet[tmp_idx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");} if(mt_set_gpio_out(pinSet[tmp_idx][IDX_PS_CMRST],pinSet[tmp_idx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} } #endif } else {//power OFF /* Mark: need to verify whether ISP_MCLK1_EN is required in here //Jessy @2014/06/04 */ #if 0 ISP_MCLK1_EN(0); ISP_MCLK2_EN(0); #else if(pinSetIdx == 0 ) { ISP_MCLK1_EN(0); } else if (pinSetIdx == 1) { ISP_MCLK2_EN(0); } #endif //only sub camera has PWDN pin,first set it low if (pinSetIdx == 1) { if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMPDN]) { if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA PWDN] set gpio mode failed!! (CMPDN)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA PWDN] set gpio dir failed!! (CMPDN)\n");} if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA PWDN] set gpio failed!! (CMPDN)\n");} } } //Set Reset Pin Low if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST]) { #ifndef MTK_MT6306_SUPPORT 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!! (CMRST)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\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!! (CMRST)\n");} #else if(mt6306_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\n");} if(mt6306_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! (CMRST)\n");} #endif } mdelay(2); //AF_VCC BU64245_move_to_nature(); if (pinSetIdx == 0) { if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_AF,mode_name)){ PK_DBG("[CAMERA SENSOR] Fail to OFF AF power (VCAM_AF), power id = %d \n", CAMERA_POWER_VCAM_AF); //return -EIO; goto _kdCISModulePowerOn_exit_; } } //VCAM_D if (pinSetIdx == 0) { if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D,mode_name)){ PK_DBG("[CAMERA SENSOR] Fail to OFF core power (VCAM_D), power id = %d \n",CAMERA_POWER_VCAM_D); goto _kdCISModulePowerOn_exit_; } }else if (pinSetIdx == 1) { if(TRUE != hwPowerDown(SUB_CAMERA_POWER_VCAM_D,mode_name)){ PK_DBG("[CAMERA SENSOR] Fail to OFF core power (VCAM_D), power id = %d \n",SUB_CAMERA_POWER_VCAM_D); goto _kdCISModulePowerOn_exit_; } } //VCAM_IO if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_IO, mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF digital power (VCAM_IO), power id = %d \n", CAMERA_POWER_VCAM_IO); //return -EIO; goto _kdCISModulePowerOn_exit_; } //VCAM_A if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF analog power (VCAM_A), power id= (%d) \n", CAMERA_POWER_VCAM_A); //return -EIO; goto _kdCISModulePowerOn_exit_; } } return 0; _kdCISModulePowerOn_exit_: return -EIO; }
INT32 wmt_plat_pmu_ctrl ( ENUM_PIN_STATE state ) { switch(state) { case PIN_STA_INIT: /*set to gpio output low, disable pull*/ mt_set_gpio_pull_enable(GPIO_COMBO_PMU_EN_PIN, GPIO_PULL_DISABLE); mt_set_gpio_dir(GPIO_COMBO_PMU_EN_PIN, GPIO_DIR_OUT); mt_set_gpio_mode(GPIO_COMBO_PMU_EN_PIN, GPIO_MODE_GPIO); mt_set_gpio_out(GPIO_COMBO_PMU_EN_PIN, GPIO_OUT_ZERO); #ifdef GPIO_COMBO_PMUV28_EN_PIN mt_set_gpio_pull_enable(GPIO_COMBO_PMUV28_EN_PIN, GPIO_PULL_DISABLE); mt_set_gpio_dir(GPIO_COMBO_PMUV28_EN_PIN, GPIO_DIR_OUT); mt_set_gpio_mode(GPIO_COMBO_PMUV28_EN_PIN, GPIO_MODE_GPIO); mt_set_gpio_out(GPIO_COMBO_PMUV28_EN_PIN, GPIO_OUT_ZERO); #endif WMT_DBG_FUNC("WMT-PLAT:PMU init (out 0) \n"); break; case PIN_STA_OUT_H: mt_set_gpio_out(GPIO_COMBO_PMU_EN_PIN, GPIO_OUT_ONE); #ifdef GPIO_COMBO_PMUV28_EN_PIN mt_set_gpio_out(GPIO_COMBO_PMUV28_EN_PIN, GPIO_OUT_ONE); #endif WMT_DBG_FUNC("WMT-PLAT:PMU (out 1) \n"); break; case PIN_STA_OUT_L: mt_set_gpio_out(GPIO_COMBO_PMU_EN_PIN, GPIO_OUT_ZERO); #ifdef GPIO_COMBO_PMUV28_EN_PIN mt_set_gpio_out(GPIO_COMBO_PMUV28_EN_PIN, GPIO_OUT_ZERO); #endif WMT_DBG_FUNC("WMT-PLAT:PMU (out 0) \n"); break; case PIN_STA_IN_L: case PIN_STA_DEINIT: /*set to gpio input low, pull down enable*/ mt_set_gpio_mode(GPIO_COMBO_PMU_EN_PIN, GPIO_COMBO_PMU_EN_PIN_M_GPIO); mt_set_gpio_dir(GPIO_COMBO_PMU_EN_PIN, GPIO_DIR_IN); mt_set_gpio_pull_select(GPIO_COMBO_PMU_EN_PIN, GPIO_PULL_DOWN); mt_set_gpio_pull_enable(GPIO_COMBO_PMU_EN_PIN, GPIO_PULL_ENABLE); #ifdef GPIO_COMBO_PMUV28_EN_PIN mt_set_gpio_mode(GPIO_COMBO_PMUV28_EN_PIN, GPIO_COMBO_PMUV28_EN_PIN_M_GPIO); mt_set_gpio_dir(GPIO_COMBO_PMUV28_EN_PIN, GPIO_DIR_IN); mt_set_gpio_pull_select(GPIO_COMBO_PMUV28_EN_PIN, GPIO_PULL_DOWN); mt_set_gpio_pull_enable(GPIO_COMBO_PMUV28_EN_PIN, GPIO_PULL_ENABLE); #endif WMT_DBG_FUNC("WMT-PLAT:PMU deinit (in pd) \n"); break; case PIN_STA_SHOW: WMT_INFO_FUNC("WMT-PLAT:PMU PIN_STA_SHOW start\n"); WMT_INFO_FUNC("WMT-PLAT:PMU Mode(%d)\n", mt_get_gpio_mode(GPIO_COMBO_PMU_EN_PIN)); WMT_INFO_FUNC("WMT-PLAT:PMU Dir(%d)\n", mt_get_gpio_dir(GPIO_COMBO_PMU_EN_PIN)); WMT_INFO_FUNC("WMT-PLAT:PMU Pull enable(%d)\n", mt_get_gpio_pull_enable(GPIO_COMBO_PMU_EN_PIN)); WMT_INFO_FUNC("WMT-PLAT:PMU Pull select(%d)\n", mt_get_gpio_pull_select(GPIO_COMBO_PMU_EN_PIN)); WMT_INFO_FUNC("WMT-PLAT:PMU out(%d)\n", mt_get_gpio_out(GPIO_COMBO_PMU_EN_PIN)); WMT_INFO_FUNC("WMT-PLAT:PMU PIN_STA_SHOW end\n"); break; default: WMT_WARN_FUNC("WMT-PLAT:Warnning, invalid state(%d) on PMU\n", state); break; } return 0; }
static unsigned int lcm_compare_id(void) { #if 0 unsigned int ret = 0; ret = mt_get_gpio_in(GPIO92); #if defined(BUILD_LK) printf("%s, [jx]hx8394a GPIO92 = %d \n", __func__, ret); #endif return (ret == 0)?1:0; #else unsigned int id=0; unsigned char buffer[2] = {0,0}; unsigned int array[16]; dct_pmic_VGP2_enable(1); mt_set_gpio_mode(GPIO112,GPIO_MODE_00); mt_set_gpio_dir(GPIO112,GPIO_DIR_OUT); mt_set_gpio_out(GPIO112,GPIO_OUT_ONE); MDELAY(5); //SET_RESET_PIN(0); mt_set_gpio_out(GPIO112,GPIO_OUT_ZERO); MDELAY(50); //SET_RESET_PIN(1); mt_set_gpio_out(GPIO112,GPIO_OUT_ONE); MDELAY(105); array[0] = 0x00043902; array[1] = 0x9483FFB9;// page enable dsi_set_cmdq(&array, 2, 1); MDELAY(10); array[0] = 0x00023902; array[1] = 0x000013BA; dsi_set_cmdq(array, 2, 1); MDELAY(10); array[0] = 0x00013700;// return byte number dsi_set_cmdq(&array, 1, 1); MDELAY(10); read_reg_v2(0xF4, buffer, 1); id = buffer[0]; #ifdef BUILD_LK printf("[LK]---cmd---hx8394_hd720_dsi_vdo_truly----%s------[0x%x]\n",__func__,buffer[0]); #else printk("[KERNEL]---cmd---hx8394_hd720_dsi_vdo_truly----%s------[0x%x]\n",__func__,buffer[0]); #endif if(id==HX8394_LCM_ID) { int adcdata[4]; int lcmadc=0; IMM_GetOneChannelValue(0,adcdata,&lcmadc); lcmadc = lcmadc * 1500/4096; #ifdef BUILD_LK printf("[LK]---cmd---hx8394_hd720_dsi_vdo_truly----%s------adc[%d]\n",__func__,lcmadc); #else printk("[KERNEL]---cmd---hx8394_hd720_dsi_vdo_truly----%s------adc[%d]\n",__func__,lcmadc); #endif if(lcmadc < 200) return 1; } return 0;//(id == HX8394_LCM_ID)?1:0; #endif }
void mt6620_power_on(void) { int result = 0; static int _32k_set = 0; /*log MT6620 GPIO Settings*/ mt6620_print_pin_configure(); /* disable interrupt firstly */ mt_combo_bgf_disable_irq(); #define MT6620_OFF_TIME (10) /* in ms, workable value */ #define MT6620_RST_TIME (30) /* in ms, workable value */ #define MT6620_STABLE_TIME (30) /* in ms, workable value */ #define MT6620_EXT_INT_TIME (5) /* in ms, workable value */ #define MT6620_32K_STABLE_TIME (100) /* in ms, test value */ #if defined(CONFIG_MTK_COMBO_SDIO_SLOT) && (CONFIG_MTK_COMBO_SDIO_SLOT == 0) printk(KERN_INFO "[mt6620] pull up sd0 bus(gpio169~gpio175(exclude gpio174))\n"); mt_set_gpio_pull_enable(GPIO172, GPIO_PULL_ENABLE); //->CLK mt_set_gpio_pull_select(GPIO172, GPIO_PULL_UP); mt_set_gpio_pull_enable(GPIO171, GPIO_PULL_ENABLE); //->CMD mt_set_gpio_pull_select(GPIO171, GPIO_PULL_UP); mt_set_gpio_pull_enable(GPIO175, GPIO_PULL_ENABLE); //->DAT0 mt_set_gpio_pull_select(GPIO175, GPIO_PULL_UP); mt_set_gpio_pull_enable(GPIO173, GPIO_PULL_ENABLE); //->DAT1 mt_set_gpio_pull_select(GPIO173, GPIO_PULL_UP); mt_set_gpio_pull_enable(GPIO169, GPIO_PULL_ENABLE); //->DAT2 mt_set_gpio_pull_select(GPIO169, GPIO_PULL_UP); mt_set_gpio_pull_enable(GPIO170, GPIO_PULL_ENABLE); //->DAT3 mt_set_gpio_pull_select(GPIO170, GPIO_PULL_UP); #elif (CONFIG_MTK_COMBO_SDIO_SLOT == 1) #error "error:MSDC1 is not reserved for MT6620 on MT6575EVB" #elif (CONFIG_MTK_COMBO_SDIO_SLOT == 2) printk(KERN_INFO "[mt6620] pull up sd2 bus(gpio182~187)\n"); mt_set_gpio_pull_enable(GPIO182, GPIO_PULL_ENABLE); //->CLK mt_set_gpio_pull_select(GPIO182, GPIO_PULL_UP); mt_set_gpio_pull_enable(GPIO184, GPIO_PULL_ENABLE); //->CMD mt_set_gpio_pull_select(GPIO184, GPIO_PULL_UP); mt_set_gpio_pull_enable(GPIO186, GPIO_PULL_ENABLE); //->DAT0 mt_set_gpio_pull_select(GPIO186, GPIO_PULL_UP); mt_set_gpio_pull_enable(GPIO187, GPIO_PULL_ENABLE); //->DAT1 mt_set_gpio_pull_select(GPIO187, GPIO_PULL_UP); mt_set_gpio_pull_enable(GPIO185, GPIO_PULL_ENABLE); //->DAT2 mt_set_gpio_pull_select(GPIO185, GPIO_PULL_UP); mt_set_gpio_pull_enable(GPIO183, GPIO_PULL_ENABLE); //->DAT3 mt_set_gpio_pull_select(GPIO183, GPIO_PULL_UP); #elif (CONFIG_MTK_COMBO_SDIO_SLOT == 3) printk(KERN_INFO "[mt6620] pull up sd3 bus (GPIO89~GPIO94)\n"); mt_set_gpio_pull_enable(GPIO92, GPIO_PULL_ENABLE); //->CLK mt_set_gpio_pull_select(GPIO92, GPIO_PULL_UP); mt_set_gpio_pull_enable(GPIO91, GPIO_PULL_ENABLE); //->CMD mt_set_gpio_pull_select(GPIO91, GPIO_PULL_UP); mt_set_gpio_pull_enable(GPIO94, GPIO_PULL_ENABLE); //->DAT0 mt_set_gpio_pull_select(GPIO94, GPIO_PULL_UP); mt_set_gpio_pull_enable(GPIO90, GPIO_PULL_ENABLE); //->DAT1 mt_set_gpio_pull_select(GPIO90, GPIO_PULL_UP); mt_set_gpio_pull_enable(GPIO89, GPIO_PULL_ENABLE); //->DAT2 mt_set_gpio_pull_select(GPIO89, GPIO_PULL_UP); mt_set_gpio_pull_enable(GPIO93, GPIO_PULL_ENABLE); //->DAT3 mt_set_gpio_pull_select(GPIO93, GPIO_PULL_UP); #else #error "error:unsupported CONFIG_MTK_COMBO_SDIO_SLOT" CONFIG_MTK_COMBO_SDIO_SLOT #endif //printk(KERN_INFO "[mt6620] enable RTC CLK\n"); if(_32k_set == 0){ //rtc_gpio_export_32k(true); //old 32k export API /* * To fix RTC32k clocks stops after system reboot */ rtc_gpio_enable_32k(RTC_GPIO_USER_GPS); _32k_set = 1; printk("[mt6620]rtc_gpio_enable_32k(RTC_GPIO_USER_GPS) \n"); } else { printk("[mt6620]not to rtc_gpio_enable_32k(RTC_GPIO_USER_GPS)\n"); } msleep(MT6620_32K_STABLE_TIME); /* UART Mode */ result += mt_set_gpio_mode(GPIO_UART_URXD3_PIN, GPIO_UART_URXD3_PIN_M_URXD);//GPIO_MODE_01->GPIO_UART_URXD3_PIN_M_URXD result += mt_set_gpio_mode(GPIO_UART_UTXD3_PIN, GPIO_UART_UTXD3_PIN_M_UTXD);//GPIO_MODE_01->GPIO_UART_UTXD3_PIN_M_UTXD //printk(KERN_INFO "[mt6620] set UART GPIO Mode [%d]\n", result); /* FIXME! GeorgeKuo: added for MT6620 GPIO initialization */ /* disable pull */ mt_set_gpio_pull_enable(GPIO_COMBO_PMU_EN_PIN, GPIO_PULL_DISABLE); mt_set_gpio_pull_enable(GPIO_COMBO_RST_PIN, GPIO_PULL_DISABLE); /* set output */ mt_set_gpio_dir(GPIO_COMBO_PMU_EN_PIN, GPIO_DIR_OUT); mt_set_gpio_dir(GPIO_COMBO_RST_PIN, GPIO_DIR_OUT); /* set gpio mode */ mt_set_gpio_mode(GPIO_COMBO_PMU_EN_PIN, GPIO_MODE_GPIO); mt_set_gpio_mode(GPIO_COMBO_RST_PIN, GPIO_MODE_GPIO); /* SYSRST_B low */ mt_set_gpio_out(GPIO_COMBO_RST_PIN, GPIO_OUT_ZERO); /* PMU_EN low */ mt_set_gpio_out(GPIO_COMBO_PMU_EN_PIN, GPIO_OUT_ZERO); msleep(MT6620_OFF_TIME); /* PMU_EN high, SYSRST_B low */ mt_set_gpio_out(GPIO_COMBO_PMU_EN_PIN, GPIO_OUT_ONE); msleep(MT6620_RST_TIME); /* SYSRST_B high */ mt_set_gpio_out(GPIO_COMBO_RST_PIN, GPIO_OUT_ONE); msleep(MT6620_STABLE_TIME); /* BT PCM bus default mode. Real control is done by audio and mt_combo.c */ mt_combo_audio_ctrl_ex(COMBO_AUDIO_STATE_1, 0); /* EINT1 for BGF_INT_B */ mt_set_gpio_mode(GPIO_COMBO_BGF_EINT_PIN, GPIO_COMBO_BGF_EINT_PIN_M_GPIO); mt_set_gpio_pull_enable(GPIO_COMBO_BGF_EINT_PIN, GPIO_PULL_ENABLE); mt_set_gpio_pull_select(GPIO_COMBO_BGF_EINT_PIN, GPIO_PULL_UP); mt_set_gpio_mode(GPIO_COMBO_BGF_EINT_PIN, GPIO_COMBO_BGF_EINT_PIN_M_EINT); /* request IRQ (EINT1) */ mt_combo_bgf_request_irq(NULL); printk(KERN_INFO "[mt6620] power on \n"); return; }
void mt6620_power_off(void) { printk(KERN_INFO "[mt6620] power off\n"); //printk(KERN_INFO "[mt6620] mt_combo_bgf_disable_irq\n"); mt_combo_bgf_disable_irq(); //printk(KERN_INFO "[mt6620] set BGF_EINT input pull down\n"); mt_set_gpio_mode(GPIO_COMBO_BGF_EINT_PIN, GPIO_COMBO_BGF_EINT_PIN_M_GPIO); mt_set_gpio_dir(GPIO_COMBO_BGF_EINT_PIN, GPIO_DIR_IN); mt_set_gpio_pull_select(GPIO_COMBO_BGF_EINT_PIN, GPIO_PULL_DOWN); mt_set_gpio_pull_enable(GPIO_COMBO_BGF_EINT_PIN, GPIO_PULL_ENABLE); //printk(KERN_INFO "[mt6620] ALL_EINT NC\n"); #ifdef GPIO_COMBO_ALL_EINT_PIN //printk(KERN_INFO "[mt6620] set ALL_EINT input pull down\n"); mt_set_gpio_mode(GPIO_COMBO_ALL_EINT_PIN, GPIO_MODE_00); mt_set_gpio_dir(GPIO_COMBO_ALL_EINT_PIN, GPIO_DIR_IN); mt_set_gpio_pull_select(GPIO_COMBO_ALL_EINT_PIN, GPIO_PULL_DOWN); mt_set_gpio_pull_enable(GPIO_COMBO_ALL_EINT_PIN, GPIO_PULL_ENABLE); #endif //printk(KERN_INFO "[mt6620] set COMBO_AUDIO_STATE_0\n"); mt_combo_audio_ctrl_ex(COMBO_AUDIO_STATE_0, 0); //MT6620 I2S0 related pin defination has been added to the .dws file #ifndef FM_ANALOG_INPUT mt_set_gpio_mode(GPIO_I2S0_CK_PIN, GPIO_I2S0_CK_PIN_M_GPIO); mt_set_gpio_dir(GPIO_I2S0_CK_PIN, GPIO_DIR_IN); mt_set_gpio_pull_select(GPIO_I2S0_CK_PIN, GPIO_PULL_DOWN); mt_set_gpio_pull_enable(GPIO_I2S0_CK_PIN, GPIO_PULL_ENABLE); mt_set_gpio_mode(GPIO_I2S0_WS_PIN, GPIO_I2S0_WS_PIN_M_GPIO); mt_set_gpio_dir(GPIO_I2S0_WS_PIN, GPIO_DIR_IN); mt_set_gpio_pull_select(GPIO_I2S0_WS_PIN, GPIO_PULL_DOWN); mt_set_gpio_pull_enable(GPIO_I2S0_WS_PIN, GPIO_PULL_ENABLE); mt_set_gpio_mode(GPIO_I2S0_DAT_PIN, GPIO_I2S0_DAT_PIN_M_GPIO); mt_set_gpio_dir(GPIO_I2S0_DAT_PIN, GPIO_DIR_IN); mt_set_gpio_pull_select(GPIO_I2S0_DAT_PIN, GPIO_PULL_DOWN); mt_set_gpio_pull_enable(GPIO_I2S0_DAT_PIN, GPIO_PULL_ENABLE); #endif //printk(KERN_INFO "[mt6620] set SYSRST_B 0 and PMU_EN 0 \n"); /* SYSRST_B low */ mt_set_gpio_out(GPIO_COMBO_RST_PIN, GPIO_OUT_ZERO); /* PMU_EN low */ mt_set_gpio_out(GPIO_COMBO_PMU_EN_PIN, GPIO_OUT_ZERO); #if defined(CONFIG_MTK_COMBO_SDIO_SLOT) && (CONFIG_MTK_COMBO_SDIO_SLOT == 0) printk(KERN_INFO "[mt6620] pull down sd0 bus(gpio169~gpio175(exclude gpio174))\n"); mt_set_gpio_pull_enable(GPIO172, GPIO_PULL_DOWN); //->CLK mt_set_gpio_pull_select(GPIO172, GPIO_PULL_ENABLE); mt_set_gpio_pull_enable(GPIO171, GPIO_PULL_DOWN); //->CMD mt_set_gpio_pull_select(GPIO171, GPIO_PULL_ENABLE); mt_set_gpio_pull_enable(GPIO175, GPIO_PULL_DOWN); //->DAT0 mt_set_gpio_pull_select(GPIO175, GPIO_PULL_ENABLE); mt_set_gpio_pull_enable(GPIO173, GPIO_PULL_DOWN); //->DAT1 mt_set_gpio_pull_select(GPIO173, GPIO_PULL_ENABLE); mt_set_gpio_pull_enable(GPIO169, GPIO_PULL_DOWN); //->DAT2 mt_set_gpio_pull_select(GPIO169, GPIO_PULL_ENABLE); mt_set_gpio_pull_enable(GPIO170, GPIO_PULL_DOWN); //->DAT3 mt_set_gpio_pull_select(GPIO170, GPIO_PULL_ENABLE); #elif (CONFIG_MTK_COMBO_SDIO_SLOT == 1) #error "error:MSDC1 is not reserved for MT6620 on MT6575EVB" #elif (CONFIG_MTK_COMBO_SDIO_SLOT == 2) printk(KERN_INFO "[mt6620] pull down sd2 bus(gpio182~187)\n"); mt_set_gpio_pull_enable(GPIO182, GPIO_PULL_DOWN); //->CLK mt_set_gpio_pull_select(GPIO182, GPIO_PULL_ENABLE); mt_set_gpio_pull_enable(GPIO184, GPIO_PULL_DOWN); //->CMD mt_set_gpio_pull_select(GPIO184, GPIO_PULL_ENABLE); mt_set_gpio_pull_enable(GPIO186, GPIO_PULL_DOWN); //->DAT0 mt_set_gpio_pull_select(GPIO186, GPIO_PULL_ENABLE); mt_set_gpio_pull_enable(GPIO187, GPIO_PULL_DOWN); //->DAT1 mt_set_gpio_pull_select(GPIO187, GPIO_PULL_ENABLE); mt_set_gpio_pull_enable(GPIO185, GPIO_PULL_DOWN); //->DAT2 mt_set_gpio_pull_select(GPIO185, GPIO_PULL_ENABLE); mt_set_gpio_pull_enable(GPIO183, GPIO_PULL_DOWN); //->DAT3 mt_set_gpio_pull_select(GPIO183, GPIO_PULL_ENABLE); #elif (CONFIG_MTK_COMBO_SDIO_SLOT == 3) printk(KERN_INFO "[mt6620] pull down sd3 bus (GPIO89~GPIO94)\n"); mt_set_gpio_pull_enable(GPIO92, GPIO_PULL_DOWN); //->CLK mt_set_gpio_pull_select(GPIO92, GPIO_PULL_ENABLE); mt_set_gpio_pull_enable(GPIO91, GPIO_PULL_DOWN); //->CMD mt_set_gpio_pull_select(GPIO91, GPIO_PULL_ENABLE); mt_set_gpio_pull_enable(GPIO94, GPIO_PULL_DOWN); //->DAT0 mt_set_gpio_pull_select(GPIO94, GPIO_PULL_ENABLE); mt_set_gpio_pull_enable(GPIO90, GPIO_PULL_DOWN); //->DAT1 mt_set_gpio_pull_select(GPIO90, GPIO_PULL_ENABLE); mt_set_gpio_pull_enable(GPIO89, GPIO_PULL_DOWN); //->DAT2 mt_set_gpio_pull_select(GPIO89, GPIO_PULL_ENABLE); mt_set_gpio_pull_enable(GPIO93, GPIO_PULL_DOWN); //->DAT3 mt_set_gpio_pull_select(GPIO93, GPIO_PULL_ENABLE); #else #error "error:unsupported CONFIG_MTK_COMBO_SDIO_SLOT" CONFIG_MTK_COMBO_SDIO_SLOT #endif //printk(KERN_INFO "[mt6620] set UART GPIO Mode output 0\n"); mt_set_gpio_mode(GPIO_UART_URXD3_PIN, GPIO_UART_URXD3_PIN_M_GPIO); mt_set_gpio_dir(GPIO_UART_URXD3_PIN, GPIO_DIR_OUT); mt_set_gpio_out(GPIO_UART_URXD3_PIN, GPIO_OUT_ZERO); mt_set_gpio_mode(GPIO_UART_UTXD3_PIN, GPIO_UART_UTXD3_PIN_M_GPIO); mt_set_gpio_dir(GPIO_UART_UTXD3_PIN, GPIO_DIR_OUT); mt_set_gpio_out(GPIO_UART_UTXD3_PIN, GPIO_OUT_ZERO); //printk(KERN_INFO "[mt6620] disable RTC CLK \n"); printk("[mt6620]not to rtc_gpio_disable_32k(RTC_GPIO_USER_GPS) \n"); return; }
static int nmi5625_open(struct inode *inode, struct file *file) { int ret = 0; func_enter(); if (!already_init) { ret = -ENODEV; goto _fail_; } /*************************************** initialize 2.8V 1.2V RESET GPIO mode for reference ****************************************/ // kdCISModulePowerOn(DUAL_CAMERA_SUB_SENSOR,SENSOR_DRVNAME_GC0329_YUV,true,"nmiatv"); /*if(mt_set_gpio_mode(GPIO_CAMERA_CMRST1_PIN,GPIO_CAMERA_CMRST1_PIN_M_GPIO)){printk("[CAMERA SENSOR] set gpio mode failed!! \n");} if(mt_set_gpio_dir(GPIO_CAMERA_CMRST1_PIN,GPIO_DIR_OUT)){printk("[CAMERA SENSOR] set gpio dir failed!! \n");} if(mt_set_gpio_out(GPIO_CAMERA_CMRST1_PIN,GPIO_OUT_ZERO)){printk("[CAMERA SENSOR] set gpio failed!! \n");} if(mt_set_gpio_mode(GPIO_CAMERA_CMPDN1_PIN,GPIO_CAMERA_CMPDN1_PIN_M_GPIO)){printk("[CAMERA LENS] set gpio mode failed!! \n");} if(mt_set_gpio_dir(GPIO_CAMERA_CMPDN1_PIN,GPIO_DIR_OUT)){printk("[CAMERA LENS] set gpio dir failed!! \n");} if(mt_set_gpio_out(GPIO_CAMERA_CMPDN1_PIN,GPIO_OUT_ONE)){printk("[CAMERA LENS] set gpio failed!! \n");} */ //PWR Enable // mt_set_gpio_mode(NMI_POWER_VDDIO_PIN,GPIO_MODE_00); // mt_set_gpio_dir(NMI_POWER_VDDIO_PIN, GPIO_DIR_OUT); // mt_set_gpio_pull_enable(NMI_POWER_VDDIO_PIN,true); // mt_set_gpio_out(NMI_POWER_VDDIO_PIN, 0); // RF #if 0 mt_set_gpio_mode(NMI_ATV_ANT_PIN,GPIO_MODE_00); mt_set_gpio_dir(NMI_ATV_ANT_PIN, GPIO_DIR_OUT); mt_set_gpio_pull_enable(NMI_ATV_ANT_PIN,true); mt_set_gpio_out(NMI_ATV_ANT_PIN, GPIO_OUT_ONE); mt_set_gpio_mode(NMI_FM_ANT_PIN,GPIO_MODE_00); mt_set_gpio_dir(NMI_FM_ANT_PIN, GPIO_DIR_OUT); mt_set_gpio_pull_enable(NMI_FM_ANT_PIN,true); mt_set_gpio_out(NMI_FM_ANT_PIN, GPIO_OUT_ZERO); #endif mt_set_gpio_mode(NMI_POWER_VCORE_PIN,GPIO_MODE_00); mt_set_gpio_dir(NMI_POWER_VCORE_PIN, GPIO_DIR_OUT); mt_set_gpio_pull_enable(NMI_POWER_VCORE_PIN,true); mt_set_gpio_out(NMI_POWER_VCORE_PIN, GPIO_OUT_ZERO); mt_set_gpio_mode(NMI_RESET_PIN,GPIO_MODE_00); mt_set_gpio_dir(NMI_RESET_PIN, GPIO_DIR_OUT); mt_set_gpio_pull_enable(NMI_RESET_PIN,true); mt_set_gpio_out(NMI_RESET_PIN, GPIO_OUT_ZERO); #ifndef NMI_HW_I2C nmi_i2c_init(); #endif #ifdef NMI_USE_MTK_I2C_DMA gpDMABuf_va = (u8 *)dma_alloc_coherent(NULL, 4096, &gpDMABuf_pa, GFP_KERNEL); if(!gpDMABuf_va){ printk("[nmi][Error] Allocate DMA I2C Buffer failed!\n"); } #endif file->private_data = (void *)&nd; // _fail_: func_exit(); return ret; }
//ting.kang static int nmi5625_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { struct nmi_5625_dev *d = file->private_data; long ret = 0; #ifdef NMI_USE_MTK_I2C_DMA U8 *pReadData = 0; U8 *pWriteData = 0; U8 *pa_addr = 0; int *user_data_addr; #else U8 *kbuf = &i2cBuf[0]; #endif U16 len; switch ((cmd&0xffff0000)) { case NM5625_PWR_2P8_CTL: printk("NM5625_PWR_2P8_CTL, power11 %s\n",(arg==1)?"on":"off"); if (arg == 1) { /* on */ // mt_set_gpio_out(u32 pin,u32 output)(NMI_POWER_VDDIO_PIN, 1); if (0 != cust_matv_power_on()) { goto _fail_; } mt_set_gpio_out(NMI_FM_ANT_PIN, GPIO_OUT_ONE); mt_set_gpio_out(NMI_ATV_ANT_PIN, GPIO_OUT_ZERO); } else{ // mt_set_gpio_out(NMI_POWER_VDDIO_PIN, 0); if (0 != cust_matv_power_off()) { goto _fail_; } mt_set_gpio_out(NMI_FM_ANT_PIN, GPIO_OUT_ZERO); mt_set_gpio_out(NMI_ATV_ANT_PIN, GPIO_OUT_ONE); } break; case NM5625_PWR_1P2_CTL: printk("NM5625_PWR_1P2_CTL, power %s\n",(arg==1)?"on":"off"); if (arg == 1) { /* on */ #if 0 if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800, "nmitv")) { goto _fail_; } mt_set_gpio_mode(GPIO_CAMERA_CMRST1_PIN,GPIO_CAMERA_CMRST1_PIN_M_GPIO); mt_set_gpio_dir(GPIO_CAMERA_CMRST1_PIN,GPIO_DIR_OUT); mt_set_gpio_out(GPIO_CAMERA_CMRST1_PIN,GPIO_OUT_ZERO); mt_set_gpio_mode(GPIO_CAMERA_CMPDN1_PIN,GPIO_CAMERA_CMPDN1_PIN_M_GPIO); mt_set_gpio_dir(GPIO_CAMERA_CMPDN1_PIN,GPIO_DIR_OUT); mt_set_gpio_out(GPIO_CAMERA_CMPDN1_PIN,GPIO_OUT_ONE); /// if(TRUE != hwPowerOn(MT6323_POWER_LDO_VCAM_IO, VOL_1800, "nmitv")) { goto _fail_; } /// #endif mt_set_gpio_out(NMI_POWER_VCORE_PIN, GPIO_OUT_ONE); g_bIsAtvStart = true; }else { #if 0 mt_set_gpio_mode(GPIO_CAMERA_CMRST1_PIN,GPIO_MODE_00); mt_set_gpio_dir(GPIO_CAMERA_CMRST1_PIN,GPIO_DIR_OUT); mt_set_gpio_out(GPIO_CAMERA_CMRST1_PIN,GPIO_OUT_ZERO); mt_set_gpio_mode(GPIO_CAMERA_CMPDN1_PIN,GPIO_MODE_00); mt_set_gpio_dir(GPIO_CAMERA_CMPDN1_PIN,GPIO_DIR_OUT); mt_set_gpio_out(GPIO_CAMERA_CMPDN1_PIN,GPIO_OUT_ZERO); if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A, "nmitv")) { goto _fail_; } if(TRUE != hwPowerDown(MT6323_POWER_LDO_VCAM_IO, "nmitv")) { goto _fail_; } /// #endif mt_set_gpio_out(NMI_POWER_VCORE_PIN, GPIO_OUT_ZERO); g_bIsAtvStart = false; /// mt_set_gpio_out(NMI_FM_ANT_PIN, GPIO_OUT_ZERO); mt_set_gpio_out(NMI_ATV_ANT_PIN, GPIO_OUT_ONE); } break; case NM5625_ATV_RESET_CTL: printk("NM5625_ATV_RESET_CTL, power %s\n",(arg==1)?"on":"off"); if (arg == 1) { mt_set_gpio_out(NMI_RESET_PIN, GPIO_OUT_ONE); } else { mt_set_gpio_out(NMI_RESET_PIN, GPIO_OUT_ZERO); } break; case NM5625_ATV_I2C_READ: len = cmd&0xffff; /* Note: I used the lower 16 bits for size */ dPrint(N_INFO,"NM5625_ATV_I2C_READ , len is (%d)\n" , len ); mutex_lock(&d->mu); #ifdef NMI_HW_I2C #ifdef NMI_USE_MTK_I2C_DMA user_data_addr = (int *)arg; pReadData = gpDMABuf_va; pa_addr = gpDMABuf_pa; if(!pReadData){ printk("[Error] dma_alloc_coherent failed!\n"); mutex_unlock(&d->mu); goto _fail_; } ret = nmi5625_dma_read_m_byte(pReadData, pa_addr, len); if (ret < 0) { //dPrint(N_ERR, "nmi: failed i2c read...(%d)\n", ret); mutex_unlock(&d->mu); goto _fail_; } if (copy_to_user(user_data_addr, pReadData, len) ) { dPrint(N_ERR, "nmi: failed copy to user...\n"); ret = -EFAULT; mutex_unlock(&d->mu); goto _fail_; } #else if ( len > 8 ) { dPrint(N_ERR, "nmi: failed receive 8 more data from i2s bus , please use dma way to instead.\n"); ret = -EFAULT; mutex_unlock(&d->mu); goto _fail_; } ret = i2c_master_recv(d->i2c_client_atv, kbuf, len); if (ret < 0) { dPrint(N_ERR, "nmi: failed i2c read...(%d)\n", ret); mutex_unlock(&d->mu); goto _fail_; } if (copy_to_user(arg, i2cBuf, len) ) { dPrint(N_ERR, "nmi: failed copy to user...\n"); ret = -EFAULT; mutex_unlock(&d->mu); goto _fail_; } #endif //end for #ifdef NMI_USE_MTK_I2C_DMA #else ret = nmi_i2c_read(0x60,kbuf,len); //dPrint(N_TRACE,"kernel:nmi_i2c_read buf is (%x), length is (%d)\n",kbuf,len); if (copy_to_user(arg, i2cBuf, len) ) { dPrint(N_ERR, "nmi: failed copy to user...\n"); ret = -EFAULT; mutex_unlock(&d->mu); goto _fail_; } #endif mutex_unlock(&d->mu); break; case NM5625_ATV_I2C_WRITE: len = cmd&0xffff; /* Note: I used the lower 16 bits for size */ dPrint(N_INFO,"NM5625_ATV_I2C_WRITE , len is (%d)\n" , len ); mutex_lock(&d->mu); #ifdef NMI_HW_I2C #ifdef NMI_USE_MTK_I2C_DMA user_data_addr = (int *)arg; pWriteData = gpDMABuf_va; pa_addr = gpDMABuf_pa; if(!pWriteData){ printk("[Error] dma_alloc_coherent failed!\n"); mutex_unlock(&d->mu); goto _fail_; } ret = copy_from_user(pWriteData, user_data_addr, len); if ( ret < 0 ) { dPrint(N_ERR, "nmi: failed copy from user...\n"); ret = -EFAULT; mutex_unlock(&d->mu); goto _fail_; } ret = nmi5625_dma_write_m_byte(pWriteData, pa_addr, len); if (ret < 0) { //dPrint(N_ERR, "nmi: failed i2c read...(%d)\n", ret); mutex_unlock(&d->mu); goto _fail_; } #else if ( len > 8 ) { dPrint(N_ERR, "nmi: failed to send 8 more data to i2s bus , please use dma way to instead.\n"); ret = -EFAULT; mutex_unlock(&d->mu); goto _fail_; } if (copy_from_user(kbuf, arg, len)) { dPrint(N_ERR, "nmi: failed copy from user...\n"); ret = -EFAULT; goto _fail_; } ret = i2c_master_send(d->i2c_client_atv, kbuf, len); if (ret < 0) { dPrint(N_ERR, "nmi: failed i2c write...(%d)\n", ret); mutex_unlock(&d->mu); goto _fail_; } #endif //end for #ifdef NMI_USE_MTK_I2C_DMA #else if (copy_from_user(kbuf, arg, len)) { dPrint(N_ERR, "nmi: failed copy from user...\n"); ret = -EFAULT; goto _fail_; } ret = nmi_i2c_write(0x60,kbuf,len); dPrint(N_TRACE,"kernel:nmi_i2c_write buf is (%x), length is (%d)\n",kbuf,len); #endif mutex_unlock(&d->mu); break; default: break; } _fail_: //func_exit(); //dPrint(N_TRACE, "nmi_ioctl return value...(%d)\n", ret); return ret; }
int kdCISModulePowerOn(CAMERA_DUAL_CAMERA_SENSOR_ENUM SensorIdx, char *currSensorName, BOOL On, char* mode_name) { u32 pinSetIdx = 0;//default main sensor #define IDX_PS_CMRST 0 #define IDX_PS_CMPDN 4 #define IDX_PS_MODE 1 #define IDX_PS_ON 2 #define IDX_PS_OFF 3 u32 pinSet[3][8] = { //for main sensor {GPIO_CAMERA_CMRST_PIN, GPIO_CAMERA_CMRST_PIN_M_GPIO, /* mode */ GPIO_OUT_ONE, /* ON state */ GPIO_OUT_ZERO, /* OFF state */ GPIO_CAMERA_CMPDN_PIN, GPIO_CAMERA_CMPDN_PIN_M_GPIO, GPIO_OUT_ZERO, GPIO_OUT_ONE, }, //for sub sensor {GPIO_CAMERA_CMRST1_PIN, GPIO_CAMERA_CMRST1_PIN_M_GPIO, GPIO_OUT_ONE, GPIO_OUT_ZERO, GPIO_CAMERA_CMPDN1_PIN, GPIO_CAMERA_CMPDN1_PIN_M_GPIO, GPIO_OUT_ZERO, GPIO_OUT_ONE, }, //for main_2 sensor {GPIO_CAMERA_2_CMRST_PIN, GPIO_CAMERA_2_CMRST_PIN_M_GPIO, /* mode */ GPIO_OUT_ONE, /* ON state */ GPIO_OUT_ZERO, /* OFF state */ GPIO_CAMERA_2_CMPDN_PIN, GPIO_CAMERA_2_CMPDN_PIN_M_GPIO, GPIO_OUT_ZERO, GPIO_OUT_ONE, } }; if (DUAL_CAMERA_MAIN_SENSOR == SensorIdx){ pinSetIdx = 0; } else if (DUAL_CAMERA_SUB_SENSOR == SensorIdx) { pinSetIdx = 1; } else if (DUAL_CAMERA_MAIN_SECOND_SENSOR == SensorIdx) { pinSetIdx = 2; } //power ON if (On) { //in case #if 0 //TODO: depends on HW layout. Should be notified by SA. printk("Set CAMERA_POWER_PULL_PIN for power \n"); if (mt_set_gpio_pull_enable(GPIO_CAMERA_LDO_EN_PIN, GPIO_PULL_DISABLE)) {PK_DBG("[[CAMERA SENSOR] Set CAMERA_POWER_PULL_PIN DISABLE ! \n"); } if(mt_set_gpio_mode(GPIO_CAMERA_LDO_EN_PIN, GPIO_CAMERA_LDO_EN_PIN_M_GPIO)){PK_DBG("[[CAMERA SENSOR] set CAMERA_POWER_PULL_PIN mode failed!! \n");} if(mt_set_gpio_dir(GPIO_CAMERA_LDO_EN_PIN,GPIO_DIR_OUT)){PK_DBG("[[CAMERA SENSOR] set CAMERA_POWER_PULL_PIN dir failed!! \n");} if(mt_set_gpio_out(GPIO_CAMERA_LDO_EN_PIN,GPIO_OUT_ONE)){PK_DBG("[[CAMERA SENSOR] set CAMERA_POWER_PULL_PIN failed!! \n");} #endif if(pinSetIdx == 0) { if(mt_set_gpio_mode(pinSet[1-pinSetIdx][IDX_PS_CMRST],pinSet[1-pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE])) PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n"); if(mt_set_gpio_dir(pinSet[1-pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)) PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n"); if(mt_set_gpio_out(pinSet[1-pinSetIdx][IDX_PS_CMRST],pinSet[1-pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])) PK_DBG("[CAMERA SENSOR] set gpio failed!! \n"); mdelay(3); 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_ON])) PK_DBG("[CAMERA SENSOR] set gpio failed!! \n"); mdelay(3); } if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } mdelay(5); //mdelay(1); if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_OV5647MIPI_RAW,currSensorName))) { PK_DBG("[ON_MT9P017 case 1.8V]sensorIdx:%d \n",SensorIdx); if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } mdelay(5); } PK_DBG("[ON_general 2.8V]sensorIdx:%d \n",SensorIdx); if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } mdelay(5); if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_OV5647MIPI_RAW,currSensorName))) { PK_DBG("[ON_MT9P017 case AF 2.8V]sensorIdx:%d \n",SensorIdx); if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A2, VOL_2800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } mdelay(5); //mdelay(1); } // LuckAs add // OV5647tMIPI_RAW if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_OV5647tMIPI_RAW,currSensorName))) { PK_DBG("[ON_MT9P017 case 1.8V]sensorIdx:%d \n",SensorIdx); if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } mdelay(5); } PK_DBG("[ON_general 2.8V]sensorIdx:%d \n",SensorIdx); if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } mdelay(5); if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_OV5647tMIPI_RAW,currSensorName))) { PK_DBG("[ON_MT9P017 case AF 2.8V]sensorIdx:%d \n",SensorIdx); if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A2, VOL_2800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } mdelay(5); //mdelay(1); } // OV5647TRULY_RAW if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_OV5647TRULY_RAW,currSensorName))) { PK_DBG("[ON_MT9P017 case 1.8V]sensorIdx:%d \n",SensorIdx); if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } mdelay(5); } PK_DBG("[ON_general 2.8V]sensorIdx:%d \n",SensorIdx); if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } mdelay(5); if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_OV5647TRULY_RAW,currSensorName))) { PK_DBG("[ON_MT9P017 case AF 2.8V]sensorIdx:%d \n",SensorIdx); if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A2, VOL_2800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } mdelay(5); //mdelay(1); } // LuckAs end //disable inactive sensor if (GPIO_CAMERA_INVALID != pinSet[1-pinSetIdx][IDX_PS_CMPDN]) { if(mt_set_gpio_mode(pinSet[1-pinSetIdx][IDX_PS_CMPDN],pinSet[1-pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");} if(mt_set_gpio_dir(pinSet[1-pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");} if(mt_set_gpio_out(pinSet[1-pinSetIdx][IDX_PS_CMPDN],pinSet[1-pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module mdelay(1); } //enable active sensor //RST pin if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMPDN]) { if(pinSetIdx == 1) { 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_ON])) PK_DBG("[CAMERA SENSOR] set gpio failed!! \n"); mdelay(5); } //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");} } mdelay(20); } else {//power OFF #if 0 //TODO: depends on HW layout. Should be notified by SA. printk("Set GPIO 94 for power OFF\n"); if (mt_set_gpio_pull_enable(GPIO_CAMERA_LDO_EN_PIN, GPIO_PULL_DISABLE)) {PK_DBG("[CAMERA SENSOR] Set GPIO94 PULL DISABLE ! \n"); } if(mt_set_gpio_mode(GPIO_CAMERA_LDO_EN_PIN, GPIO_CAMERA_LDO_EN_PIN_M_GPIO)){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");} if(mt_set_gpio_dir(GPIO_CAMERA_LDO_EN_PIN,GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");} if(mt_set_gpio_out(GPIO_CAMERA_LDO_EN_PIN,GPIO_OUT_ZERO)){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} #endif //PK_DBG("[OFF]sensorIdx:%d \n",SensorIdx); if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMPDN]) { if(pinSetIdx == 1 && 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(pinSetIdx == 0 && mt_set_gpio_mode(pinSet[1-pinSetIdx][IDX_PS_CMRST],pinSet[1-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(pinSetIdx == 1 && mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");} if(pinSetIdx == 0 && mt_set_gpio_dir(pinSet[1-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(pinSetIdx == 1 && 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(pinSetIdx == 0 && mt_set_gpio_out(pinSet[1-pinSetIdx][IDX_PS_CMRST],pinSet[1-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 != hwPowerDown(CAMERA_POWER_VCAM_A,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF analog power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } if (pinSetIdx == 0) { if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A2,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } } if (pinSetIdx == 0) { if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D, mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF digital power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } } if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D2,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } }// return 0; _kdCISModulePowerOn_exit_: return -EIO; }
static int touch_event_handler(void *unused) { struct sched_param param = { .sched_priority = RTPM_PRIO_TPD }; char index; char buffer[14]; int i, pre_touch1 = 0, pre_touch2 = 0, touch = 0, finger_num = 0; int x1, y1, p1, x2, y2, p2, raw_x1, raw_y1, raw_x2, raw_y2; struct i2c_msg msg[2]; sched_setscheduler(current, SCHED_RR, ¶m); do { MT6516_EINTIRQUnmask(CUST_EINT_TOUCH_PANEL_NUM); // possibly to lose event? set_current_state(TASK_INTERRUPTIBLE); if (!kthread_should_stop()) { while (tpd_halt) {tpd_flag=0; msleep(20);} if (pre_touch1 || pre_touch2) wait_event_interruptible_timeout(waiter, tpd_flag!=0, HZ/8); else wait_event_interruptible_timeout(waiter, tpd_flag!=0, HZ*2); TPD_DEBUG_SET_TIME; } set_current_state(TASK_RUNNING); if (tpd_calibrate_en | tpd_show_version) { mt_set_gpio_mode(GPIO61, 0x00); mt_set_gpio_pull_enable(GPIO61, GPIO_PULL_ENABLE); mt_set_gpio_pull_select(GPIO61,GPIO_PULL_UP); mt_set_gpio_dir(GPIO61, GPIO_DIR_OUT); mt_set_gpio_out(GPIO61, GPIO_OUT_ZERO); hwPowerDown(TPD_POWER_SOURCE,"TP"); hwPowerOn(TPD_POWER_SOURCE,VOL_3300,"TP"); msleep(20); if (tpd_calibrate_en) { tpd_do_calibrate(); tpd_calibrate_en = 0; } else { tpd_print_version(); tpd_show_version = 0; } /* added in android 2.2, for configuring EINT2 to EINT mode */ mt_set_gpio_mode(GPIO61, 0x01); mt_set_gpio_pull_enable(GPIO61, GPIO_PULL_ENABLE); mt_set_gpio_pull_select(GPIO61,GPIO_PULL_UP); continue; } if (!tpd_flag) { if (pre_touch1==1) { tpd_up(raw_x1, raw_y1, x1,y1,p1); pre_touch1 = 0; } if (pre_touch2==1) { tpd_up(raw_x2, raw_y2, x2,y2,p2); pre_touch2 = 0; } input_sync(tpd->dev); continue; } else { tpd_flag = 0; } buffer[0] = 0x80; i2c_master_send(i2c_rs_client, &buffer[0], (1 << 8 | 1)); touch = (buffer[0] & 0x08) >> 3; // finger up or finger down //printk("buffer[0] = %d\n", buffer[0]); if (buffer[0]&0x80) { buffer[6] = 0xc0; i2c_master_send(i2c_rs_client, &buffer[6], (8 << 8 | 1)); buffer[0] = 0xe0; i2c_master_send(i2c_rs_client, &buffer[0], (6 << 8 | 1)); if (finger_num == 0x03 && buffer[0] == 0x00) { TPD_DEBUG("[mtk-tpd] firmware bug. hold one finger, hold another finger, and then tap the first finger, it will happen.\n"); continue; } if ((buffer[0] & 0xF0)) { TPD_DEBUG("[mtk-tpd] this is not a position information\n"); continue; } if (buffer[1] == 0x01) { TPD_DEBUG("[mtk-tpd] fat touch detect\n"); continue; } finger_num = buffer[0]&0x07; if (finger_num&1) { x1 = buffer[2]+((buffer[3]&0x0f)<<8); y1 = buffer[4]+((buffer[3]&0xf0)<<4); p1 = buffer[5]&0x0f; raw_x1 = x1; raw_y1 = y1; tpd_calibrate(&x1, &y1); tpd_down(raw_x1, raw_y1, x1, y1, p1); pre_touch1=1; } else { if (pre_touch1!=0) { tpd_up(raw_x1, raw_y1, x1, y1, p1); pre_touch1 = 0; } } if (finger_num&2) { x2 = buffer[6]+((buffer[7]&0x0f)<<8); y2 = buffer[8]+((buffer[7]&0xf0)<<4); p2 = buffer[9]&0x0f; raw_x2 = x2; raw_y2 = y2; tpd_calibrate(&x2, &y2); tpd_down(raw_x2, raw_y2, x2, y2, p2); pre_touch2=1; } else { if (pre_touch2!=0) { tpd_up(raw_x2, raw_y2, x2, y2, p2); pre_touch2 = 0; } } input_sync(tpd->dev); } else { msleep(10); } } while (!kthread_should_stop()); return 0; }
int kdCISModulePowerOn(CAMERA_DUAL_CAMERA_SENSOR_ENUM SensorIdx, char *currSensorName, BOOL On, char* mode_name) { u32 pinSetIdx = 0;//default main sensor #define IDX_PS_CMRST 0 #define IDX_PS_CMPDN 4 #define IDX_PS_MODE 1 #define IDX_PS_ON 2 #define IDX_PS_OFF 3 u32 pinSet[3][8] = { //for main sensor { CAMERA_CMRST_PIN, // The reset pin of main sensor uses GPIO10 of mt6306, please call mt6306 API to set CAMERA_CMRST_PIN_M_GPIO, /* mode */ GPIO_OUT_ONE, /* ON state */ GPIO_OUT_ZERO, /* OFF state */ CAMERA_CMPDN_PIN, CAMERA_CMPDN_PIN_M_GPIO, GPIO_OUT_ONE, GPIO_OUT_ZERO, }, //for sub sensor { CAMERA_CMRST1_PIN, CAMERA_CMRST1_PIN_M_GPIO, GPIO_OUT_ONE, GPIO_OUT_ZERO, CAMERA_CMPDN1_PIN, CAMERA_CMPDN1_PIN_M_GPIO, GPIO_OUT_ONE, GPIO_OUT_ZERO, }, //for main_2 sensor { GPIO_CAMERA_INVALID, GPIO_CAMERA_INVALID, /* mode */ GPIO_OUT_ONE, /* ON state */ GPIO_OUT_ZERO, /* OFF state */ GPIO_CAMERA_INVALID, GPIO_CAMERA_INVALID, GPIO_OUT_ONE, GPIO_OUT_ZERO, } }; if (DUAL_CAMERA_MAIN_SENSOR == SensorIdx){ pinSetIdx = 0; } else if (DUAL_CAMERA_SUB_SENSOR == SensorIdx) { pinSetIdx = 1; } else if (DUAL_CAMERA_MAIN_2_SENSOR == SensorIdx) { pinSetIdx = 2; } //power ON if (On) { #if 0 ISP_MCLK1_EN(1); ISP_MCLK2_EN(1); ISP_MCLK3_EN(1); #else if(pinSetIdx == 0 ) { ISP_MCLK1_EN(1); } else if (pinSetIdx == 1) { ISP_MCLK2_EN(1); } #endif PK_DBG("[PowerON]pinSetIdx:%d, currSensorName: %s\n", pinSetIdx, currSensorName); if ((currSensorName && (0 == strcmp(currSensorName,"imx135mipiraw")))|| (currSensorName && (0 == strcmp(currSensorName,"imx220mipiraw")))) { //First Power Pin low and Reset Pin Low if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMPDN]) { 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!! (CMPDN)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! (CMPDN)\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!! (CMPDN)\n");} } 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!! (CMRST)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\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!! (CMRST)\n");} } //AF_VCC if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_AF, VOL_2800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power (VCAM_AF), power id = %d \n", CAMERA_POWER_VCAM_AF); goto _kdCISModulePowerOn_exit_; } mdelay(1); //VCAM_A if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power (VCAM_A), power id = %d\n", CAMERA_POWER_VCAM_A); goto _kdCISModulePowerOn_exit_; } mdelay(1); if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1000,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power (VCAM_D), power id = %d \n", CAMERA_POWER_VCAM_D); goto _kdCISModulePowerOn_exit_; } mdelay(1); //VCAM_IO if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_IO, VOL_1800, mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power (VCAM_IO), power id = %d \n", CAMERA_POWER_VCAM_IO); goto _kdCISModulePowerOn_exit_; } mdelay(2); //enable active sensor 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!! (CMRST)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\n");} 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!! (CMRST)\n");} } if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMPDN]) { 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!! (CMPDN)\n");} } } else if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_OV5648_MIPI_RAW, currSensorName))) { mt_set_gpio_mode(GPIO_SPI_MOSI_PIN,GPIO_MODE_00); mt_set_gpio_dir(GPIO_SPI_MOSI_PIN,GPIO_DIR_OUT); mt_set_gpio_out(GPIO_SPI_MOSI_PIN,GPIO_OUT_ONE); //First Power Pin low and Reset Pin Low if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMPDN]) { 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!! (CMPDN)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! (CMPDN)\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!! (CMPDN)\n");} } 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!! (CMRST)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\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!! (CMRST)\n");} } //VCAM_IO if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_IO, VOL_1800, mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power (VCAM_IO), power id = %d \n", CAMERA_POWER_VCAM_IO); goto _kdCISModulePowerOn_exit_; } mdelay(1); //VCAM_A if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power (VCAM_A), power id = %d\n", CAMERA_POWER_VCAM_A); goto _kdCISModulePowerOn_exit_; } mdelay(1); if(TRUE != hwPowerOn(SUB_CAMERA_POWER_VCAM_D, VOL_1500,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power (VCAM_D), power id = %d \n", CAMERA_POWER_VCAM_D); goto _kdCISModulePowerOn_exit_; } mdelay(5); //AF_VCC if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_AF, VOL_2800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power (VCAM_AF), power id = %d \n", CAMERA_POWER_VCAM_AF); goto _kdCISModulePowerOn_exit_; } mdelay(1); //enable active sensor if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMPDN]) { 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!! (CMPDN)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! (CMPDN)\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!! (CMPDN)\n");} } mdelay(2); 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!! (CMRST)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\n");} 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!! (CMRST)\n");} } mdelay(20); } else if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_GC2355_MIPI_RAW, currSensorName))) { mt_set_gpio_mode(GPIO_SPI_MOSI_PIN,GPIO_MODE_00); mt_set_gpio_dir(GPIO_SPI_MOSI_PIN,GPIO_DIR_OUT); mt_set_gpio_out(GPIO_SPI_MOSI_PIN,GPIO_OUT_ONE); //First Power Pin low and Reset Pin Low if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMPDN]) { 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!! (CMPDN)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! (CMPDN)\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!! (CMPDN)\n");} } 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!! (CMRST)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\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!! (CMRST)\n");} } mdelay(50); //VCAM_A if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power (VCAM_A), power id = %d\n", CAMERA_POWER_VCAM_A); goto _kdCISModulePowerOn_exit_; } mdelay(10); //VCAM_IO if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_IO, VOL_1800, mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power (VCAM_IO), power id = %d \n", CAMERA_POWER_VCAM_IO); goto _kdCISModulePowerOn_exit_; } mdelay(10); if(TRUE != hwPowerOn(SUB_CAMERA_POWER_VCAM_D, VOL_1500,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power (VCAM_D), power id = %d \n", CAMERA_POWER_VCAM_D); goto _kdCISModulePowerOn_exit_; } mdelay(10); //AF_VCC if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_AF, VOL_2800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power (VCAM_AF), power id = %d \n", CAMERA_POWER_VCAM_AF); goto _kdCISModulePowerOn_exit_; } mdelay(50); 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!! (CMRST)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\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!! (CMRST)\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!! (CMRST)\n");} } mdelay(5); //enable active sensor if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMPDN]) { 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!! (CMPDN)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! (CMPDN)\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!! (CMPDN)\n");} 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!! (CMPDN)\n");} } mdelay(5); } else { //First Power Pin low and Reset Pin Low if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMPDN]) { 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!! (CMPDN)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! (CMPDN)\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!! (CMPDN)\n");} } 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!! (CMRST)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\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!! (CMRST)\n");} } //VCAM_IO if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_IO, VOL_1800, mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power (VCAM_IO), power id = %d \n", CAMERA_POWER_VCAM_IO); goto _kdCISModulePowerOn_exit_; } //VCAM_A if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power (VCAM_A), power id = %d\n", CAMERA_POWER_VCAM_A); goto _kdCISModulePowerOn_exit_; } //VCAM_D if(currSensorName && (0 == strcmp(SENSOR_DRVNAME_S5K2P8_MIPI_RAW, currSensorName))) { if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1200,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); goto _kdCISModulePowerOn_exit_; } } else if(currSensorName && (0 == strcmp(SENSOR_DRVNAME_IMX219_MIPI_RAW, currSensorName))) { if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1200,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); goto _kdCISModulePowerOn_exit_; } } else { // Main VCAMD max 1.5V if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1500,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); goto _kdCISModulePowerOn_exit_; } } //AF_VCC if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_AF, VOL_2800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power (VCAM_AF), power id = %d \n", CAMERA_POWER_VCAM_AF); goto _kdCISModulePowerOn_exit_; } mdelay(5); //enable active sensor if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMPDN]) { 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!! (CMPDN)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! (CMPDN)\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!! (CMPDN)\n");} } mdelay(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!! (CMRST)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\n");} 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!! (CMRST)\n");} } } } else {//power OFF PK_DBG("[PowerOFF]pinSetIdx:%d\n", pinSetIdx); if(pinSetIdx == 0 ) { ISP_MCLK1_EN(0); } else if (pinSetIdx == 1) { ISP_MCLK2_EN(0); } if ((currSensorName && (0 == strcmp(currSensorName,"imx135mipiraw")))|| (currSensorName && (0 == strcmp(currSensorName,"imx220mipiraw")))) { //Set Power Pin low and Reset Pin Low if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMPDN]) { 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!! (CMPDN)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! (CMPDN)\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!! (CMPDN)\n");} } //Set Reset Pin Low 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!! (CMRST)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\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!! (CMRST)\n");} } //AF_VCC if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_AF,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF AF power (VCAM_AF), power id = %d \n", CAMERA_POWER_VCAM_AF); //return -EIO; goto _kdCISModulePowerOn_exit_; } //VCAM_IO if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_IO, mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF digital power (VCAM_IO), power id = %d \n", CAMERA_POWER_VCAM_IO); //return -EIO; goto _kdCISModulePowerOn_exit_; } if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF core power (VCAM_D), power id = %d \n",CAMERA_POWER_VCAM_D); goto _kdCISModulePowerOn_exit_; } //VCAM_A if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF analog power (VCAM_A), power id= (%d) \n", CAMERA_POWER_VCAM_A); //return -EIO; goto _kdCISModulePowerOn_exit_; } } else if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_OV5648_MIPI_RAW, currSensorName))) { mt_set_gpio_out(GPIO_SPI_MOSI_PIN,GPIO_OUT_ZERO); //Set Power Pin low and Reset Pin Low if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMPDN]) { 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!! (CMPDN)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! (CMPDN)\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!! (CMPDN)\n");} } 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!! (CMRST)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\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!! (CMRST)\n");} } if(TRUE != hwPowerDown(SUB_CAMERA_POWER_VCAM_D,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF core power (VCAM_D), power id = %d \n",SUB_CAMERA_POWER_VCAM_D); goto _kdCISModulePowerOn_exit_; } //VCAM_A if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF analog power (VCAM_A), power id= (%d) \n", CAMERA_POWER_VCAM_A); //return -EIO; goto _kdCISModulePowerOn_exit_; } //VCAM_IO if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_IO, mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF digital power (VCAM_IO), power id = %d \n", CAMERA_POWER_VCAM_IO); //return -EIO; goto _kdCISModulePowerOn_exit_; } //AF_VCC if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_AF,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF AF power (VCAM_AF), power id = %d \n", CAMERA_POWER_VCAM_AF); //return -EIO; goto _kdCISModulePowerOn_exit_; } } else if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_GC2355_MIPI_RAW, currSensorName))) { mt_set_gpio_out(GPIO_SPI_MOSI_PIN,GPIO_OUT_ZERO); //Set Power Pin low and Reset Pin Low if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMPDN]) { 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!! (CMPDN)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! (CMPDN)\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!! (CMPDN)\n");} } 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!! (CMRST)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\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!! (CMRST)\n");} } if(TRUE != hwPowerDown(SUB_CAMERA_POWER_VCAM_D,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF core power (VCAM_D), power id = %d \n",SUB_CAMERA_POWER_VCAM_D); goto _kdCISModulePowerOn_exit_; } //VCAM_A if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF analog power (VCAM_A), power id= (%d) \n", CAMERA_POWER_VCAM_A); //return -EIO; goto _kdCISModulePowerOn_exit_; } //VCAM_IO if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_IO, mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF digital power (VCAM_IO), power id = %d \n", CAMERA_POWER_VCAM_IO); //return -EIO; goto _kdCISModulePowerOn_exit_; } //AF_VCC if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_AF,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF AF power (VCAM_AF), power id = %d \n", CAMERA_POWER_VCAM_AF); //return -EIO; goto _kdCISModulePowerOn_exit_; } } else { //Set Power Pin low and Reset Pin Low if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMPDN]) { 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!! (CMPDN)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! (CMPDN)\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!! (CMPDN)\n");} } 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!! (CMRST)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\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!! (CMRST)\n");} } if(TRUE != hwPowerDown(SUB_CAMERA_POWER_VCAM_D,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF core power (VCAM_D), power id = %d \n",SUB_CAMERA_POWER_VCAM_D); goto _kdCISModulePowerOn_exit_; } //VCAM_A if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF analog power (VCAM_A), power id= (%d) \n", CAMERA_POWER_VCAM_A); //return -EIO; goto _kdCISModulePowerOn_exit_; } //VCAM_IO if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_IO, mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF digital power (VCAM_IO), power id = %d \n", CAMERA_POWER_VCAM_IO); //return -EIO; goto _kdCISModulePowerOn_exit_; } //AF_VCC if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_AF,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF AF power (VCAM_AF), power id = %d \n", CAMERA_POWER_VCAM_AF); //return -EIO; goto _kdCISModulePowerOn_exit_; } } } return 0; _kdCISModulePowerOn_exit_: return -EIO; }
static int pn544_probe(struct i2c_client *client, const struct i2c_device_id *id) { int ret; struct pn544_dev *pn544_dev; printk("pn544 nfc probe step01 is ok\n"); if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { pr_err("pn544 %s : need I2C_FUNC_I2C\n", __func__); return -ENODEV; } printk("pn544 nfc probe step02 is ok\n"); pn544_dev = kzalloc(sizeof(*pn544_dev), GFP_KERNEL); if (pn544_dev == NULL) { dev_err(&client->dev, "pn544 failed to allocate memory for module data\n"); return -ENOMEM; } memset(pn544_dev, 0, sizeof(struct pn544_dev)); p_pn544_dev = pn544_dev; printk("pn544 nfc probe step03 is ok\n"); client->addr = (client->addr & I2C_MASK_FLAG); pn544_dev->client = client; /* init mutex and queues */ init_waitqueue_head(&pn544_dev->read_wq); mutex_init(&pn544_dev->read_mutex); spin_lock_init(&pn544_dev->irq_enabled_lock); pn544_dev->pn544_device.minor = MISC_DYNAMIC_MINOR; pn544_dev->pn544_device.name = PN544_DRVNAME; pn544_dev->pn544_device.fops = &pn544_dev_fops; ret = misc_register(&pn544_dev->pn544_device); if (ret) { pr_err("pn544 %s : misc_register failed\n", __FILE__); goto err_misc_register; } printk("pn544 nfc probe step04 is ok\n"); /* VEN */ mt_set_gpio_mode(VEN_PIN, GPIO_MODE_00); mt_set_gpio_dir(VEN_PIN, GPIO_DIR_OUT); /* GPIO4 */ mt_set_gpio_mode(GPIO4_PIN, GPIO_MODE_00); mt_set_gpio_dir(GPIO4_PIN, GPIO_DIR_OUT); /* IRQ */ mt_set_gpio_mode(IRQ_PIN, GPIO_MODE_01); mt_set_gpio_dir(IRQ_PIN, GPIO_DIR_IN); mt_set_gpio_pull_enable(IRQ_PIN, true); mt_set_gpio_pull_select(IRQ_PIN, GPIO_PULL_DOWN); printk("pn544 nfc probe step05 is ok\n"); pn544_dev->irq_enabled = true; mt65xx_eint_set_sens(EINT_NUM, CUST_EINT_LEVEL_SENSITIVE); mt65xx_eint_set_hw_debounce(EINT_NUM, 0); mt65xx_eint_registration(EINT_NUM, CUST_EINT_DEBOUNCE_DISABLE, CUST_EINT_POLARITY_HIGH, pn544_dev_irq_handler, 0); pn544_disable_irq(pn544_dev); i2c_set_clientdata(client, pn544_dev); printk("pn544 nfc probe step06 is ok\n"); return 0; err_dma_alloc: misc_deregister(&pn544_dev->pn544_device); err_misc_register: mutex_destroy(&pn544_dev->read_mutex); kfree(pn544_dev); p_pn544_dev = NULL; return ret; }
static int __devinit tpd_probe(struct i2c_client *client, const struct i2c_device_id *id) { int retval = TPD_OK; int panel_version = 0; int panel_vendor = 0; int iRetry = 3; tinno_ts_data *ts; int ret = 0; if ( tpd_load_status ){ CTP_DBG("Already probed a TP, needn't to probe any more!"); return -1; } if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { dev_err(&client->dev,"need I2C_FUNC_I2C"); ret = -ENODEV; goto err_check_functionality_failed; } ts = kzalloc(sizeof(*ts), GFP_KERNEL); if (ts == NULL) { ret = -ENOMEM; goto err_alloc_data_failed; } CTP_DBG("TPD enter tpd_probe ts=0x%p, TPD_RES_X=%d, TPD_RES_Y=%d, addr=0x%x\n", ts, TPD_RES_X, TPD_RES_Y, client->addr); memset(ts, 0, sizeof(*ts)); g_pts = ts; client->timing = I2C_MASTER_CLOCK; ts->client = client; ts->start_reg = 0x00; atomic_set( &ts->ts_sleepState, 0 ); mutex_init(&ts->mutex); i2c_set_clientdata(client, ts); fts_5x06_hw_init(); msleep(120); fts_iic_init(ts); if ( fts_5x06_isp_init(ts) ){ goto err_isp_register; } while (iRetry) { ret = ft5x06_get_vendor_version(ts, &panel_vendor, &panel_version); if ( panel_version < 0 || panel_vendor<0 || ret<0 ){ TPD_DMESG("Product version is %d\n", panel_version); fts_5x06_hw_reset(); }else{ break; } iRetry--; msleep(15); } if ( panel_version < 0 || panel_vendor<0 || ret<0 ){ goto err_get_version; } #ifdef TPD_HAVE_BUTTON tinno_update_tp_button_dim(panel_vendor); #endif #ifdef CONFIG_TOUCHSCREEN_FT5X05_DISABLE_KEY_WHEN_SLIDE if ( fts_keys_init(ts) ){ fts_keys_deinit(); goto err_get_version; } #endif mt_set_gpio_mode(GPIO_CTP_EINT_PIN, GPIO_CTP_EINT_PIN_M_EINT); mt_set_gpio_dir(GPIO_CTP_EINT_PIN, GPIO_DIR_IN); mt_set_gpio_pull_enable(GPIO_CTP_EINT_PIN, GPIO_PULL_ENABLE); mt_set_gpio_pull_select(GPIO_CTP_EINT_PIN, GPIO_PULL_UP); mt_eint_set_sens(CUST_EINT_TOUCH_PANEL_NUM, CUST_EINT_TOUCH_PANEL_SENSITIVE); mt_eint_set_hw_debounce(CUST_EINT_TOUCH_PANEL_NUM, CUST_EINT_TOUCH_PANEL_DEBOUNCE_CN); mt_eint_registration(CUST_EINT_TOUCH_PANEL_NUM, CUST_EINT_TOUCH_PANEL_TYPE, tpd_eint_interrupt_handler, 0); ts->thread = kthread_run(touch_event_handler, ts, TPD_DEVICE); if (IS_ERR(ts->thread)){ retval = PTR_ERR(ts->thread); TPD_DMESG(TPD_DEVICE " failed to create kernel thread: %d\n", retval); goto err_start_touch_kthread; } tpd_load_status = 1; mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM); CTP_DBG("Touch Panel Device(%s) Probe PASS\n", fts_get_vendor_name(panel_vendor)); #if defined (TINNO_ANDROID_S9091) || defined (TINNO_ANDROID_S9050) { extern char tpd_desc[50]; extern int tpd_fw_version; sprintf(tpd_desc, "%s-%s(0x%X)", DRIVER_NAME, fts_get_vendor_name(panel_vendor),panel_vendor); tpd_fw_version = panel_version; } #endif return 0; err_start_touch_kthread: mt_eint_mask(CUST_EINT_TOUCH_PANEL_NUM); err_get_version: err_isp_register: #ifdef CONFIG_TOUCHSCREEN_POWER_DOWN_WHEN_SLEEP hwPowerDown(MT65XX_POWER_LDO_VGP, "touch"); #endif fts_5x06_isp_exit(); mutex_destroy(&ts->mutex); g_pts = NULL; kfree(ts); err_alloc_data_failed: err_check_functionality_failed: CTP_DBG("Touch Panel Device Probe FAIL\n"); return -1; }
INT32 wmt_plat_i2s_ctrl(ENUM_PIN_STATE state) { // TODO: [NewFeature][GeorgeKuo]: GPIO_I2Sx is changed according to different project. // TODO: provide a translation table in board_custom.h for different ALPS project customization. UINT32 normalI2SFlag = 0; /*check if combo chip support merge if or not*/ if (0 != wmt_plat_merge_if_flag_get()) { #if (MTK_WCN_CMB_MERGE_INTERFACE_SUPPORT) //Hardware support Merge IF function #if defined(FM_DIGITAL_INPUT) || defined(FM_DIGITAL_OUTPUT) #if defined (GPIO_COMBO_I2S_CK_PIN) switch(state) { case PIN_STA_INIT: case PIN_STA_MUX: mt_set_gpio_mode(GPIO_COMBO_I2S_CK_PIN, GPIO_COMBO_I2S_CK_PIN_PINMUX_MODE); mt_set_gpio_mode(GPIO_COMBO_I2S_WS_PIN, GPIO_COMBO_I2S_WS_PIN_PINMUX_MODE); mt_set_gpio_mode(GPIO_COMBO_I2S_DAT_PIN, GPIO_COMBO_I2S_DAT_PIN_PINMUX_MODE); mt_set_gpio_mode(GPIO_PCM_DAIPCMOUT_PIN, GPIO_PCM_DAIPCMOUT_PIN_PINMUX_MODE); WMT_DBG_FUNC("WMT-PLAT:<Merge IF>I2S init (I2S0 system) \n"); break; case PIN_STA_IN_L: case PIN_STA_DEINIT: mt_set_gpio_mode(GPIO_COMBO_I2S_CK_PIN, GPIO_COMBO_I2S_CK_PIN_M_GPIO); mt_set_gpio_dir(GPIO_COMBO_I2S_CK_PIN, GPIO_DIR_OUT); mt_set_gpio_out(GPIO_COMBO_I2S_CK_PIN, GPIO_OUT_ZERO); mt_set_gpio_mode(GPIO_COMBO_I2S_WS_PIN, GPIO_COMBO_I2S_WS_PIN_M_GPIO); mt_set_gpio_dir(GPIO_COMBO_I2S_WS_PIN, GPIO_DIR_OUT); mt_set_gpio_out(GPIO_COMBO_I2S_WS_PIN, GPIO_OUT_ZERO); mt_set_gpio_mode(GPIO_COMBO_I2S_DAT_PIN, GPIO_COMBO_I2S_DAT_PIN_M_GPIO); mt_set_gpio_dir(GPIO_COMBO_I2S_DAT_PIN, GPIO_DIR_OUT); mt_set_gpio_out(GPIO_COMBO_I2S_DAT_PIN, GPIO_OUT_ZERO); WMT_DBG_FUNC("WMT-PLAT:<Merge IF>I2S deinit (out 0) \n"); break; default: WMT_WARN_FUNC("WMT-PLAT:<Merge IF>Warnning, invalid state(%d) on I2S Group\n", state); break; } #else WMT_ERR_FUNC( "[MT662x]<Merge IF>Error:FM digital mode set, but no I2S GPIOs defined\n"); #endif #else WMT_INFO_FUNC( "[MT662x]<Merge IF>warnning:FM digital mode is not set, no I2S GPIO settings should be modified by combo driver\n"); #endif #else //Hardware does support Merge IF function normalI2SFlag = 1; #endif } else { normalI2SFlag = 1; } if (0 != normalI2SFlag) { #if defined(FM_DIGITAL_INPUT) || defined(FM_DIGITAL_OUTPUT) #if defined (GPIO_COMBO_I2S_CK_PIN) switch(state) { case PIN_STA_INIT: case PIN_STA_MUX: mt_set_gpio_mode(GPIO_COMBO_I2S_CK_PIN, GPIO_COMBO_I2S_CK_PIN_I2SONLY_MODE); mt_set_gpio_mode(GPIO_COMBO_I2S_WS_PIN, GPIO_COMBO_I2S_WS_PIN_I2SONLY_MODE); mt_set_gpio_mode(GPIO_COMBO_I2S_DAT_PIN, GPIO_COMBO_I2S_DAT_PIN_I2SONLY_MODE); WMT_DBG_FUNC("WMT-PLAT:<I2S IF>I2S init (I2S0 system) \n"); break; case PIN_STA_IN_L: case PIN_STA_DEINIT: mt_set_gpio_mode(GPIO_COMBO_I2S_CK_PIN, GPIO_COMBO_I2S_CK_PIN_M_GPIO); mt_set_gpio_dir(GPIO_COMBO_I2S_CK_PIN, GPIO_DIR_OUT); mt_set_gpio_out(GPIO_COMBO_I2S_CK_PIN, GPIO_OUT_ZERO); mt_set_gpio_mode(GPIO_COMBO_I2S_WS_PIN, GPIO_COMBO_I2S_WS_PIN_M_GPIO); mt_set_gpio_dir(GPIO_COMBO_I2S_WS_PIN, GPIO_DIR_OUT); mt_set_gpio_out(GPIO_COMBO_I2S_WS_PIN, GPIO_OUT_ZERO); mt_set_gpio_mode(GPIO_COMBO_I2S_DAT_PIN, GPIO_COMBO_I2S_DAT_PIN_M_GPIO); mt_set_gpio_dir(GPIO_COMBO_I2S_DAT_PIN, GPIO_DIR_OUT); mt_set_gpio_out(GPIO_COMBO_I2S_DAT_PIN, GPIO_OUT_ZERO); WMT_DBG_FUNC("WMT-PLAT:<I2S IF>I2S deinit (out 0) \n"); break; default: WMT_WARN_FUNC("WMT-PLAT:<I2S IF>Warnning, invalid state(%d) on I2S Group\n", state); break; } #else WMT_ERR_FUNC( "[MT662x]<I2S IF>Error:FM digital mode set, but no I2S GPIOs defined\n"); #endif #else WMT_INFO_FUNC( "[MT662x]<I2S IF>warnning:FM digital mode is not set, no I2S GPIO settings should be modified by combo driver\n"); #endif } return 0; }
static void tpd_suspend(struct early_suspend *h) { int ret = 0; int iRetry = 5; const char data = 0x3; #ifdef CONFIG_TOUCHSCREEN_SWEEP2WAKE scr_suspended = true; printk("[SWEEP2WAKE]: power suspend\n"); if ((sweep2wake == 0 || sweep2wake == 3) && doubletap2wake == 0) { #endif if ( g_pts ){ CTP_DBG("TPD enter sleep\n"); if (atomic_read(&g_pts->isp_opened)){ CTP_DBG("isp is already opened."); return; } mt_eint_mask(CUST_EINT_TOUCH_PANEL_NUM); mutex_lock(&g_pts->mutex);//Unlock on resume #ifdef CONFIG_TOUCHSCREEN_FT5X05_DISABLE_KEY_WHEN_SLIDE fts_5x06_key_cancel(); #endif #ifdef CONFIG_TOUCHSCREEN_POWER_DOWN_WHEN_SLEEP mt_set_gpio_mode(GPIO_CTP_RST_PIN, GPIO_CTP_RST_PIN_M_GPIO); mt_set_gpio_dir(GPIO_CTP_RST_PIN, GPIO_DIR_OUT); mt_set_gpio_out(GPIO_CTP_RST_PIN, GPIO_OUT_ZERO); msleep(2); #ifdef MT6577 hwPowerDown(MT65XX_POWER_LDO_VGP, "touch"); #else mt_set_gpio_mode(GPIO_CTP_EN_PIN, GPIO_CTP_EN_PIN_M_GPIO); mt_set_gpio_dir(GPIO_CTP_EN_PIN, GPIO_DIR_OUT); mt_set_gpio_out(GPIO_CTP_EN_PIN, GPIO_OUT_ZERO); #endif #else //!CONFIG_TOUCHSCREEN_POWER_DOWN_WHEN_SLEEP //make sure the WakeUp is high before it enter sleep mode, //otherwise the touch can't be resumed. //mt_set_gpio_mode(GPIO_CTP_EN_PIN, GPIO_CTP_EN_PIN_M_GPIO); //mt_set_gpio_dir(GPIO_CTP_EN_PIN, GPIO_DIR_OUT); //mt_set_gpio_out(GPIO_CTP_EN_PIN, GPIO_OUT_ONE); //msleep(1); while (iRetry) { ret = i2c_smbus_write_i2c_block_data(g_pts->client, 0xA5, 1, &data); //TP enter sleep mode if ( ret < 0 ){ TPD_DMESG("Enter sleep mode is %d\n", ret); #ifdef MT6577 hwPowerDown(MT65XX_POWER_LDO_VGP, "touch"); #else mt_set_gpio_mode(GPIO_CTP_EN_PIN, GPIO_CTP_EN_PIN_M_GPIO); mt_set_gpio_dir(GPIO_CTP_EN_PIN, GPIO_DIR_OUT); mt_set_gpio_out(GPIO_CTP_EN_PIN, GPIO_OUT_ZERO); #endif msleep(2); fts_5x06_hw_init(); }else{ break; } iRetry--; msleep(100); } #endif//CONFIG_TOUCHSCREEN_POWER_DOWN_WHEN_SLEEP #if 0//Android 4.0 don't need to report these up events. ft5x06_complete_unfinished_event(); #endif atomic_set( &g_pts->ts_sleepState, 1 ); } #ifdef CONFIG_TOUCHSCREEN_SWEEP2WAKE } else if ((sweep2wake > 0 && sweep2wake < 3) || doubletap2wake > 0) mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM); #endif }
halReturn_t HalInstallIrqHandler(fwIrqHandler_t irqHandler) { //int retStatus; halReturn_t halRet; init_waitqueue_head(&mhl_irq_wq); mhl_irq_task = kthread_create(mhl_irq_kthread, NULL, "mhl_irq_kthread"); wake_up_process(mhl_irq_task); #ifdef MTK_SMARTBOOK_SUPPORT //add by kirby init_waitqueue_head(&smartbook_wq); smartbook_task = kthread_create(smartbook_kthread, NULL, "smartbook_kthread"); wake_up_process(smartbook_task); #endif if(irqHandler == NULL) { SII_DEBUG_PRINT(SII_OSAL_DEBUG_TRACE,"HalInstallIrqHandler: irqHandler cannot be NULL!\n"); return HAL_RET_PARAMETER_ERROR; } halRet = I2cAccessCheck(); if (halRet != HAL_RET_SUCCESS) { return halRet; } #if 0 if(gMhlDevice.pI2cClient->irq == 0) { SII_DEBUG_PRINT(SII_OSAL_DEBUG_TRACE,"HalInstallIrqHandler: No IRQ assigned to I2C device!\n"); return HAL_RET_FAILURE; } #endif #if 0 mt_set_gpio_mode(GPIO_MHL_EINT_PIN, GPIO_MODE_01); mt_set_gpio_dir(GPIO_MHL_EINT_PIN, GPIO_DIR_IN); mt_set_gpio_pull_select(GPIO_MHL_EINT_PIN, GPIO_PULL_UP); mt_set_gpio_pull_enable(GPIO_MHL_EINT_PIN, true); #endif #ifdef CUST_EINT_MHL_NUM ///mt_eint_set_sens(CUST_EINT_MHL_NUM, MT_LEVEL_SENSITIVE); ///mt_eint_set_hw_debounce(CUST_EINT_MHL_NUM, CUST_EINT_MHL_DEBOUNCE_CN); mt_eint_registration(CUST_EINT_MHL_NUM, CUST_EINT_MHL_TYPE, &mhl8338_irq_handler, 0); mt_eint_unmask(CUST_EINT_MHL_NUM); #else printk("%s,%d Error: CUST_EINT_MHL_NUM is not defined\n", __func__, __LINE__); #endif #if 0 gMhlDevice.irqHandler = irqHandler; retStatus = request_threaded_irq(gMhlDevice.pI2cClient->irq, NULL, HalThreadedIrqHandler, IRQF_TRIGGER_LOW | IRQF_ONESHOT, gMhlI2cIdTable[0].name, &gMhlDevice); if(retStatus != 0) { SII_DEBUG_PRINT(SII_OSAL_DEBUG_TRACE,"HalInstallIrqHandler: request_threaded_irq failed, status: %d\n", retStatus); gMhlDevice.irqHandler = NULL; return HAL_RET_FAILURE; } #endif return HAL_RET_SUCCESS; }
static long matv_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { int *user_data_addr; long ret = 0; U8 *pReadData = 0; U8 *pWriteData = 0; U8 *ptr; U8 reg8, bAutoInc; U16 len; switch(cmd) { case TEST_MATV_PRINT : MATV_LOGD("**** mt519x matv ioctl : test\n"); break; case MATV_READ: user_data_addr = (int *)arg; ret = copy_from_user(matv_in_data, user_data_addr, 4); ptr = (U8*)matv_in_data; reg8 = ptr[0]; bAutoInc = ptr[1]; len = ptr[2]; len+= ((U16)ptr[3])<<8; //MATV_LOGD("**** mt519x matv ioctl : read length = %d\n",len); #ifdef _MATV_HIGH_SPEED_DMA_ pReadData = gpDMABuf_va; pa_addr = gpDMABuf_pa; if(!pReadData){ MATV_LOGE("[Error] dma_alloc_coherent failed!\n"); break; } mt519x_dma_read_m_byte(reg8, pReadData, pa_addr, len, bAutoInc); ret = copy_to_user(user_data_addr, pReadData, len); #else pReadData = (U8 *)kmalloc(len,GFP_ATOMIC); if(!pReadData){ MATV_LOGE("[Error] kmalloc failed!\n"); break; } mt519x_read_m_byte(reg8, pReadData, len, bAutoInc); ret = copy_to_user(user_data_addr, pReadData, len); if(pReadData) kfree(pReadData); #endif //#ifdef _MATV_HIGH_SPEED_DMA_ break; case MATV_WRITE: user_data_addr = (int *)arg; ret = copy_from_user(matv_in_data, user_data_addr, 4); ptr = (U8*)matv_in_data; reg8 = ptr[0]; bAutoInc = ptr[1]; len = ptr[2]; len+= ((U16)ptr[3])<<8; //MATV_LOGD("**** mt519x matv ioctl : write length = %d\n",len); #ifdef _MATV_HIGH_SPEED_DMA_ pWriteData = gpDMABuf_va; pa_addr = gpDMABuf_pa; if(!pWriteData){ MATV_LOGE("[Error] dma_alloc_coherent failed!\n"); break; } ret = copy_from_user(pWriteData+1, ((void*)user_data_addr)+4, len); //printk("\n[MATV]Write data = %d\n",*(pWriteData+1)); mt519x_dma_write_m_byte(reg8, pWriteData, pa_addr, len, bAutoInc); #else pWriteData = (U8 *)kmalloc(len,GFP_ATOMIC); if(!pWriteData){ MATV_LOGE("[Error] kmalloc failed!\n"); break; } ret = copy_from_user(pWriteData, ((void*)user_data_addr)+4, len); //printk("\n[MATV]Write data = %d\n",*pWriteData); mt519x_write_m_byte(reg8, pWriteData, len, bAutoInc); //ret = copy_to_user(user_data_addr, pReadData, len); if(pWriteData) kfree(pWriteData); #endif //#ifdef _MATV_HIGH_SPEED_DMA_ break; case MATV_SET_PWR: user_data_addr = (int *)arg; ret = copy_from_user(matv_in_data, user_data_addr, sizeof(int)); //MATV_LOGD("**** mt519x matv ioctl : set pwr = %d\n",user_data_addr[0]); #ifdef GPIO_MATV_PWR_ENABLE if(matv_in_data[0]!=0) mt_set_gpio_out(GPIO_MATV_PWR_ENABLE, GPIO_OUT_ONE); else mt_set_gpio_out(GPIO_MATV_PWR_ENABLE, GPIO_OUT_ZERO); #endif break; case MATV_SET_RST: user_data_addr = (int *)arg; ret = copy_from_user(matv_in_data, user_data_addr, sizeof(int)); //MATV_LOGD("**** mt519x matv ioctl : set rst = %d\n",user_data_addr[0]); #ifdef GPIO_MATV_N_RST if(matv_in_data[0]!=0){ mt_set_gpio_out(GPIO_MATV_N_RST, GPIO_OUT_ONE); } else mt_set_gpio_out(GPIO_MATV_N_RST, GPIO_OUT_ZERO); #endif break; case MATV_SET_STRAP: user_data_addr = (int *)arg; ret = copy_from_user(matv_in_data, user_data_addr, sizeof(int)); #ifdef GPIO_MATV_I2S_DAT_PIN if(matv_in_data[0]==0){ //Enable I2D Data pin and pull low mt_set_gpio_mode(GPIO_MATV_I2S_DAT_PIN,GPIO_MODE_00); mt_set_gpio_dir(GPIO_MATV_I2S_DAT_PIN, GPIO_DIR_OUT); mt_set_gpio_pull_enable(GPIO_MATV_I2S_DAT_PIN,true); mt_set_gpio_out(GPIO_MATV_I2S_DAT_PIN, GPIO_OUT_ZERO); printk("force I2s data pin low \n"); //~ } else if (matv_in_data[0]==1) { //Disable I2D Data pin #ifdef GPIO_MATV_I2S_DAT_PIN_M_I2S0_DAT mt_set_gpio_mode(GPIO_MATV_I2S_DAT_PIN,GPIO_MATV_I2S_DAT_PIN_M_I2S0_DAT); #endif #ifdef GPIO_MATV_I2S_DAT_PIN_M_I2SIN_DAT mt_set_gpio_mode(GPIO_MATV_I2S_DAT_PIN,GPIO_MATV_I2S_DAT_PIN_M_I2SIN_DAT); #endif mt_set_gpio_pull_enable(GPIO_MATV_I2S_DAT_PIN,false); mt_set_gpio_out(GPIO_MATV_I2S_DAT_PIN, GPIO_OUT_ZERO); printk("put I2S data pin back \n"); //~ } #else MATV_LOGD("**** mt519x ioctl : GPIO_MATV_I2S_DAT_PIN is not defined!!!!!!!!!\\n"); #endif break; case MATV_SLEEP: { long timeout_jiff; static wait_queue_head_t matvWaitQueue; struct timeval t1,t2; int time_diff = 0; int timeOut = 0; init_waitqueue_head(&matvWaitQueue); user_data_addr = (int *)arg; ret = copy_from_user(matv_in_data, user_data_addr, sizeof(int)); timeout_jiff = (matv_in_data[0]+2) * HZ / 1000; // wait 80 ms do_gettimeofday(&t1); timeOut = wait_event_interruptible_timeout(matvWaitQueue, NULL, timeout_jiff); if(0 != timeOut) MATV_LOGE("[MATV] Fail to sleep enough time %d\n", timeOut); do_gettimeofday(&t2); time_diff = (t2.tv_sec - t1.tv_sec)*1000000 + (t2.tv_usec - t1.tv_usec); if (time_diff < (matv_in_data[0]-2)*1000){ //MATV_LOGE("[MATV]TimeDiff=%d\n",time_diff); udelay(matv_in_data[0]*1000 - time_diff); } } break; case MATV_SET_TP_MODE: { user_data_addr = (int *)arg; ret = copy_from_user(matv_in_data, user_data_addr, sizeof(int)); MATV_LOGD("[MATV]MATV_SET_TP_MODE = %d\n",matv_in_data[0]); if(matv_in_data[0] == 0) { tpd_switch_single_mode(); } else if(matv_in_data[0] == 1) { tpd_switch_multiple_mode(); } else if(matv_in_data[0] == 2) { tpd_switch_sleep_mode(); } else if(matv_in_data[0] == 3) { tpd_switch_normal_mode(); } else { MATV_LOGE("[MATV] TP's mode value(%d) is wrong!\n",matv_in_data[0]); } } break; case MATV_QUERY_I2S_INFO: { user_data_addr = (int *)arg; ret = copy_to_user(user_data_addr, &i2s_info, sizeof(i2s_info)); } break; default: break; } return 0; }
static void lcm_set_gpio_output(unsigned int GPIO, unsigned int output) { mt_set_gpio_mode(GPIO, GPIO_MODE_00); mt_set_gpio_dir(GPIO, GPIO_DIR_OUT); mt_set_gpio_out(GPIO, (output>0)? GPIO_OUT_ONE: GPIO_OUT_ZERO); }
int kdCISModulePowerOn(CAMERA_DUAL_CAMERA_SENSOR_ENUM SensorIdx, char *currSensorName, BOOL On, char* mode_name) { u32 pinSetIdx = 0;//default main sensor #define IDX_PS_CMRST 0 #define IDX_PS_CMPDN 4 #define IDX_PS_MODE 1 #define IDX_PS_ON 2 #define IDX_PS_OFF 3 u32 pinSet[2][8] = { //for main sensor {GPIO_CAMERA_CMRST_PIN, GPIO_CAMERA_CMRST_PIN_M_GPIO, /* mode */ GPIO_OUT_ONE, /* ON state */ GPIO_OUT_ZERO, /* OFF state */ GPIO_CAMERA_CMPDN_PIN, GPIO_CAMERA_CMPDN_PIN_M_GPIO, GPIO_OUT_ONE, GPIO_OUT_ZERO, }, //for sub sensor {GPIO_CAMERA_CMRST1_PIN, GPIO_CAMERA_CMRST1_PIN_M_GPIO, GPIO_OUT_ONE, GPIO_OUT_ZERO, GPIO_CAMERA_CMPDN1_PIN, GPIO_CAMERA_CMPDN1_PIN_M_GPIO, GPIO_OUT_ONE, GPIO_OUT_ZERO, }, }; if (DUAL_CAMERA_MAIN_SENSOR == SensorIdx){ pinSetIdx = 0; } else if (DUAL_CAMERA_SUB_SENSOR == SensorIdx) { pinSetIdx = 1; } //power ON if (On) { #if 0 //TODO: depends on HW layout. Should be notified by SA. PK_DBG("Set CAMERA_POWER_PULL_PIN for power \n"); if (mt_set_gpio_pull_enable(GPIO_CAMERA_LDO_EN_PIN, GPIO_PULL_DISABLE)) {PK_DBG("[[CAMERA SENSOR] Set CAMERA_POWER_PULL_PIN DISABLE ! \n"); } if(mt_set_gpio_mode(GPIO_CAMERA_LDO_EN_PIN, GPIO_CAMERA_LDO_EN_PIN_M_GPIO)){PK_DBG("[[CAMERA SENSOR] set CAMERA_POWER_PULL_PIN mode failed!! \n");} if(mt_set_gpio_dir(GPIO_CAMERA_LDO_EN_PIN,GPIO_DIR_OUT)){PK_DBG("[[CAMERA SENSOR] set CAMERA_POWER_PULL_PIN dir failed!! \n");} if(mt_set_gpio_out(GPIO_CAMERA_LDO_EN_PIN,GPIO_OUT_ONE)){PK_DBG("[[CAMERA SENSOR] set CAMERA_POWER_PULL_PIN failed!! \n");} #endif PK_DBG("kdCISModulePowerOn -on:currSensorName=%s\n",currSensorName); PK_DBG("kdCISModulePowerOn -on:pinSetIdx=%d\n",pinSetIdx); if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_S5K8AAYX_MIPI_YUV,currSensorName))) { PK_DBG("kdCISModulePowerOn get in--- SENSOR_DRVNAME_S5K8AAYX_MIPI_YUV \n"); //PDN/STBY pin if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST]) { PK_DBG("kdCISModulePowerOn get in--- SENSOR_DRVNAME_S5K8AAYX_MIPI_YUV -init set pdn/rst \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");} mdelay(2); //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(2); } if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800/*VOL_2800*/,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } mdelay(2); if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } mdelay(2); if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1200,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } mdelay(2); //if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A2, VOL_2800,mode_name)) //{ // PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n"); // //return -EIO; // goto _kdCISModulePowerOn_exit_; //} //mdelay(2); //PDN/STBY pin if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST]) { 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_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_ON])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} mdelay(5); } mdelay(50); } else if(currSensorName && (0 == strcmp(SENSOR_DRVNAME_S5K3H7Y_MIPI_RAW,currSensorName))) { //enable active sensor //RST pin PK_DBG("[20121217] RESET is Low\n"); 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");} mdelay(1); } //DVDD = 1V2 PK_DBG("[20121217] DVDD is 1v2\n"); if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1200,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); //return -EIO; //goto _kdCISModulePowerOn_exit_; } //mdelay(10); //AVDD = 2V8 PK_DBG("[20121217] AVDD is 2v8\n"); if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n"); //return -EIO; //goto _kdCISModulePowerOn_exit_; } //mdelay(10); //DOVDD = 1V8 PK_DBG("[20121217] DOVDD is 1v8\n"); if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); //return -EIO; //goto _kdCISModulePowerOn_exit_; } //mdelay(10); //AF_VCC if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A2, VOL_2800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } mdelay(1); PK_DBG("[20121217] RESET is high\n"); 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_ON])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} } mdelay(1); } else { if( !(currSensorName && (0 == strcmp(SENSOR_DRVNAME_S5K3H7Y_MIPI_RAW,currSensorName)))) { //enable active sensor //RST pin 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");} 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(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");} } } //DOVDD if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_OV3640_YUV,currSensorName))) { PK_DBG("[ON_OV3640YUV case 1.5V]sensorIdx:%d \n",SensorIdx); if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); //return -EIO; //goto _kdCISModulePowerOn_exit_; } } else //general case on { PK_DBG("[ON_general 1.8V]sensorIdx:%d \n",SensorIdx); if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); //return -EIO; //goto _kdCISModulePowerOn_exit_; } } mdelay(10); //AVDD if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n"); //return -EIO; //goto _kdCISModulePowerOn_exit_; } mdelay(10); //DVDD if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_S5K3H7Y_MIPI_RAW,currSensorName))) { if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1200,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); //return -EIO; //goto _kdCISModulePowerOn_exit_; } } else { if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); //return -EIO; //goto _kdCISModulePowerOn_exit_; } } mdelay(10); //AF_VCC if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A2, VOL_2800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } #if 1 //enable active sensor 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");} 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(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");} } #endif } } else {//power OFF #if 0 //TODO: depends on HW layout. Should be notified by SA. PK_DBG("Set GPIO 94 for power OFF\n"); if (mt_set_gpio_pull_enable(GPIO_CAMERA_LDO_EN_PIN, GPIO_PULL_DISABLE)) {PK_DBG("[CAMERA SENSOR] Set GPIO94 PULL DISABLE ! \n"); } if(mt_set_gpio_mode(GPIO_CAMERA_LDO_EN_PIN, GPIO_CAMERA_LDO_EN_PIN_M_GPIO)){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");} if(mt_set_gpio_dir(GPIO_CAMERA_LDO_EN_PIN,GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");} if(mt_set_gpio_out(GPIO_CAMERA_LDO_EN_PIN,GPIO_OUT_ZERO)){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} #endif if(currSensorName && (0 == strcmp(SENSOR_DRVNAME_S5K8AAYX_MIPI_YUV,currSensorName))) { PK_DBG("kdCISModulePower--off get in---SENSOR_DRVNAME_S5K8AAYX_MIPI_YUV \n"); 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(2); 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(2); } if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D, mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF digital power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF analog power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D2,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } //if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A2,mode_name)) //{ // PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n"); //return -EIO; // goto _kdCISModulePowerOn_exit_; //} } else if(currSensorName && (0 == strcmp(SENSOR_DRVNAME_S5K3H7Y_MIPI_RAW,currSensorName))) { PK_DBG("[20121217] RESET is Low\n"); 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");} mdelay(5); } if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D2,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF analog power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A2,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A, mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF digital power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } } else { //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 != hwPowerDown(CAMERA_POWER_VCAM_A,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF analog power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A2,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D, mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF digital power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D2,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } }// } return 0; _kdCISModulePowerOn_exit_: return -EIO; }
int kdCISModulePowerOn(CAMERA_DUAL_CAMERA_SENSOR_ENUM SensorIdx, char *currSensorName, BOOL On, char* mode_name) { int pwListIdx,pwIdx; BOOL sensorInPowerList = KAL_FALSE; if (DUAL_CAMERA_MAIN_SENSOR == SensorIdx){ pinSetIdx = 0; } else if (DUAL_CAMERA_SUB_SENSOR == SensorIdx) { pinSetIdx = 1; } else if (DUAL_CAMERA_MAIN_2_SENSOR == SensorIdx) { pinSetIdx = 2; } //power ON if (On) { PK_DBG("kdCISModulePowerOn -on:currSensorName=%s\n",currSensorName); PK_DBG("kdCISModulePowerOn -on:pinSetIdx=%d\n",pinSetIdx); for(pwListIdx=0 ; pwListIdx<16; pwListIdx++) { if(currSensorName && (PowerOnList.PowerSeq[pwListIdx].SensorName!=NULL) && (0 == strcmp(PowerOnList.PowerSeq[pwListIdx].SensorName,currSensorName))) { PK_DBG("kdCISModulePowerOn get in--- \n"); PK_DBG("sensorIdx:%d \n",SensorIdx); sensorInPowerList = KAL_TRUE; for(pwIdx=0;pwIdx<10;pwIdx++) { if(PowerOnList.PowerSeq[pwListIdx].PowerInfo[pwIdx].PowerType != VDD_None) { if(hwpoweron(PowerOnList.PowerSeq[pwListIdx].PowerInfo[pwIdx],mode_name)==FALSE) goto _kdCISModulePowerOn_exit_; } else { PK_DBG("pwIdx=%d \n",pwIdx); break; } } break; } else if(PowerOnList.PowerSeq[pwListIdx].SensorName == NULL) { break; } else{} } // Temp solution: default power on/off sequence if(KAL_FALSE == sensorInPowerList) { PK_DBG("Default power on sequence"); if(pinSetIdx == 0 ) { ISP_MCLK1_EN(1); } else if (pinSetIdx == 1) { ISP_MCLK2_EN(1); } //First Power Pin low and Reset Pin Low if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMPDN]) { 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!! (CMPDN)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! (CMPDN)\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!! (CMPDN)\n");} } if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST]) { if(0 == pinSetIdx) { #ifndef MTK_MT6306_SUPPORT 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!! (CMRST)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\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!! (CMRST)\n");} #else if(mt6306_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\n");} if(mt6306_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! (CMRST)\n");} #endif } else { 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!! (CMRST)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\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!! (CMRST)\n");} } } //VCAM_IO if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800, mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power (VCAM_IO), power id = %d \n", CAMERA_POWER_VCAM_D2); goto _kdCISModulePowerOn_exit_; } //VCAM_A if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power (VCAM_A), power id = %d\n", CAMERA_POWER_VCAM_A); goto _kdCISModulePowerOn_exit_; } if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power (VCAM_D), power id = %d \n", CAMERA_POWER_VCAM_D); goto _kdCISModulePowerOn_exit_; } //AF_VCC if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A2, VOL_2800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power (VCAM_AF), power id = %d \n", CAMERA_POWER_VCAM_A2); goto _kdCISModulePowerOn_exit_; } mdelay(5); //enable active sensor if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMPDN]) { 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!! (CMPDN)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! (CMPDN)\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!! (CMPDN)\n");} } mdelay(1); if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST]) { if(0 == pinSetIdx) { #ifndef MTK_MT6306_SUPPORT 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!! (CMRST)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\n");} 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!! (CMRST)\n");} #else if(mt6306_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\n");} if(mt6306_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_ON])){PK_DBG("[CAMERA SENSOR] set gpio failed!! (CMRST)\n");} #endif } else { 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!! (CMRST)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\n");} 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!! (CMRST)\n");} } } } /* if(pinSetIdx==0) for(;;) {} */ /* if(pinSetIdx==1) for(;;) {} */ } else {//power OFF for(pwListIdx=0 ; pwListIdx<16; pwListIdx++) { if(currSensorName && (PowerOnList.PowerSeq[pwListIdx].SensorName!=NULL) && (0 == strcmp(PowerOnList.PowerSeq[pwListIdx].SensorName,currSensorName))) { PK_DBG("kdCISModulePowerOn get in--- \n"); PK_DBG("sensorIdx:%d \n",SensorIdx); sensorInPowerList = KAL_TRUE; for(pwIdx=9;pwIdx>=0;pwIdx--) { if(PowerOnList.PowerSeq[pwListIdx].PowerInfo[pwIdx].PowerType != VDD_None) { if(hwpowerdown(PowerOnList.PowerSeq[pwListIdx].PowerInfo[pwIdx],mode_name)==FALSE) goto _kdCISModulePowerOn_exit_; if(pwIdx>0) { if(PowerOnList.PowerSeq[pwListIdx].PowerInfo[pwIdx-1].Delay > 0) mdelay(PowerOnList.PowerSeq[pwListIdx].PowerInfo[pwIdx-1].Delay); } } else { PK_DBG("pwIdx=%d \n",pwIdx); } } } else if(PowerOnList.PowerSeq[pwListIdx].SensorName == NULL) { break; } else{} } // Temp solution: default power on/off sequence if(KAL_FALSE == sensorInPowerList) { PK_DBG("Default power off sequence"); if(pinSetIdx == 0 ) { ISP_MCLK1_EN(0); } else if (pinSetIdx == 1) { ISP_MCLK2_EN(0); } //Set Power Pin low and Reset Pin Low if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMPDN]) { 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!! (CMPDN)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! (CMPDN)\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!! (CMPDN)\n");} } if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST]) { if(0 == pinSetIdx) { #ifndef MTK_MT6306_SUPPORT 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!! (CMRST)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\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!! (CMRST)\n");} #else if(mt6306_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\n");} if(mt6306_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! (CMRST)\n");} #endif } else { 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!! (CMRST)\n");} if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! (CMRST)\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!! (CMRST)\n");} } } if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF core power (VCAM_D), power id = %d \n",CAMERA_POWER_VCAM_D); goto _kdCISModulePowerOn_exit_; } //VCAM_A if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF analog power (VCAM_A), power id= (%d) \n", CAMERA_POWER_VCAM_A); //return -EIO; goto _kdCISModulePowerOn_exit_; } //VCAM_IO if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D2, mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF digital power (VCAM_IO), power id = %d \n", CAMERA_POWER_VCAM_D2); //return -EIO; goto _kdCISModulePowerOn_exit_; } //AF_VCC if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A2,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF AF power (VCAM_AF), power id = %d \n", CAMERA_POWER_VCAM_A2); //return -EIO; goto _kdCISModulePowerOn_exit_; } } }// return 0; _kdCISModulePowerOn_exit_: return -EIO; }
int kdCISModulePowerOn(CAMERA_DUAL_CAMERA_SENSOR_ENUM SensorIdx, char *currSensorName, BOOL On, char* mode_name) { u32 pinSetIdx = 0;//default main sensor #define IDX_PS_CMRST 0 #define IDX_PS_CMPDN 4 #define IDX_PS_MODE 1 #define IDX_PS_ON 2 #define IDX_PS_OFF 3 u32 pinSet[3][8] = { //for main sensor {GPIO_CAMERA_CMRST_PIN, GPIO_CAMERA_CMRST_PIN_M_GPIO, /* mode */ GPIO_OUT_ONE, /* ON state */ GPIO_OUT_ZERO, /* OFF state */ GPIO_CAMERA_CMPDN_PIN, GPIO_CAMERA_CMPDN_PIN_M_GPIO, GPIO_OUT_ZERO, GPIO_OUT_ONE, }, //for sub sensor {GPIO_CAMERA_CMRST1_PIN, GPIO_CAMERA_CMRST1_PIN_M_GPIO, GPIO_OUT_ONE, GPIO_OUT_ZERO, GPIO_CAMERA_CMPDN1_PIN, GPIO_CAMERA_CMPDN1_PIN_M_GPIO, GPIO_OUT_ZERO, GPIO_OUT_ONE, }, //for main_2 sensor {GPIO_CAMERA_2_CMRST_PIN, GPIO_CAMERA_2_CMRST_PIN_M_GPIO, /* mode */ GPIO_OUT_ONE, /* ON state */ GPIO_OUT_ZERO, /* OFF state */ GPIO_CAMERA_2_CMPDN_PIN, GPIO_CAMERA_2_CMPDN_PIN_M_GPIO, GPIO_OUT_ZERO, GPIO_OUT_ONE, } }; if (DUAL_CAMERA_MAIN_SENSOR == SensorIdx){ pinSetIdx = 0; } else if (DUAL_CAMERA_SUB_SENSOR == SensorIdx) { pinSetIdx = 1; } else if (DUAL_CAMERA_MAIN_2_SENSOR == SensorIdx) { // pinSetIdx = 2; } //power ON if (On) { printk("ghong hhongyan kdCISModulePowerOn:on,currSensorName=%s, pinSetIdx=%d",currSensorName,pinSetIdx); if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_IMX179_MIPI_RAW, currSensorName))) { PK_DBG("[CAMERA SENSOR] imx179 power on \n"); // pull reset pin low if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST]) { //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], GPIO_OUT_ONE)){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} mdelay(2); if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST], GPIO_OUT_ZERO)){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");} //mdelay(1); } //AVDD if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n"); //return -EIO; //goto _kdCISModulePowerOn_exit_; } mdelay(5); //DOVDD if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); //return -EIO; //goto _kdCISModulePowerOn_exit_; } mdelay(10); //enable active sensor if(mt_set_gpio_mode(GPIO_CAMERA_CMRST_PIN, GPIO_CAMERA_CMRST_PIN_M_GPIO) ){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");} if(mt_set_gpio_dir(GPIO_CAMERA_CMRST_PIN, GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");} if(mt_set_gpio_out(GPIO_CAMERA_CMRST_PIN, GPIO_OUT_ONE)){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} mdelay(2); //DVDD if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1200,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); //return -EIO; //goto _kdCISModulePowerOn_exit_; } mdelay(2); //AF_VCC if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A2, VOL_2800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n"); //return -EIO; goto _kdCISModulePowerOn_exit_; } mdelay(5); //disable inactive sensor if(pinSetIdx == 0 || pinSetIdx == 2) {//disable sub if (GPIO_CAMERA_INVALID != pinSet[1][IDX_PS_CMRST]) { if(mt_set_gpio_mode(pinSet[1][IDX_PS_CMRST], pinSet[1][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");} if(mt_set_gpio_dir(pinSet[1][IDX_PS_CMRST], GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");} if(mt_set_gpio_out(pinSet[1][IDX_PS_CMRST], GPIO_OUT_ZERO)){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensor if(mt_set_gpio_mode(pinSet[1][IDX_PS_CMPDN], pinSet[1][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");} if(mt_set_gpio_dir(pinSet[1][IDX_PS_CMPDN], GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");} if(mt_set_gpio_out(pinSet[1][IDX_PS_CMPDN], GPIO_OUT_ZERO)){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module } } else { if (GPIO_CAMERA_INVALID != pinSet[0][IDX_PS_CMRST]) { if(mt_set_gpio_mode(pinSet[0][IDX_PS_CMRST], pinSet[0][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");} if(mt_set_gpio_dir(pinSet[0][IDX_PS_CMRST], GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");} if(mt_set_gpio_out(pinSet[0][IDX_PS_CMRST], GPIO_OUT_ZERO)){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensor if(mt_set_gpio_mode(pinSet[0][IDX_PS_CMPDN], pinSet[0][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");} if(mt_set_gpio_dir(pinSet[0][IDX_PS_CMPDN], GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");} if(mt_set_gpio_out(pinSet[0][IDX_PS_CMPDN], GPIO_OUT_ZERO)){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module } } //MT9M114_enter_standy(); mdelay(10); } else if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_MT9M114_YUV, currSensorName))) { // pull reset pin low printk("ghong hhongyan mt9m114 power on\n"); if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST]) { //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], GPIO_OUT_ONE)){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} mdelay(2); if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST], GPIO_OUT_ZERO)){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");} //mdelay(1); } //DOVDD if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); //return -EIO; //goto _kdCISModulePowerOn_exit_; } mdelay(2); //DVDD if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n"); //return -EIO; //goto _kdCISModulePowerOn_exit_; } mdelay(2); //AVDD if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n"); //return -EIO; //goto _kdCISModulePowerOn_exit_; } mdelay(10); //enable active sensor if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST]) { //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");} mdelay(1); //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], GPIO_OUT_ONE)){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} } //disable inactive sensor if(pinSetIdx == 0 || pinSetIdx == 2) {//disable sub if (GPIO_CAMERA_INVALID != pinSet[1][IDX_PS_CMRST]) { if(mt_set_gpio_mode(pinSet[1][IDX_PS_CMRST], pinSet[1][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");} if(mt_set_gpio_dir(pinSet[1][IDX_PS_CMRST], GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");} if(mt_set_gpio_out(pinSet[1][IDX_PS_CMRST], GPIO_OUT_ZERO)){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensor if(mt_set_gpio_mode(pinSet[1][IDX_PS_CMPDN], pinSet[1][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");} if(mt_set_gpio_dir(pinSet[1][IDX_PS_CMPDN], GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");} if(mt_set_gpio_out(pinSet[1][IDX_PS_CMPDN], GPIO_OUT_ZERO)){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module } } else { if (GPIO_CAMERA_INVALID != pinSet[0][IDX_PS_CMRST]) { if(mt_set_gpio_mode(pinSet[0][IDX_PS_CMRST], pinSet[0][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");} if(mt_set_gpio_dir(pinSet[0][IDX_PS_CMRST], GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");} if(mt_set_gpio_out(pinSet[0][IDX_PS_CMRST], GPIO_OUT_ZERO)){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensor if(mt_set_gpio_mode(pinSet[0][IDX_PS_CMPDN], pinSet[0][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");} if(mt_set_gpio_dir(pinSet[0][IDX_PS_CMPDN], GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");} if(mt_set_gpio_out(pinSet[0][IDX_PS_CMPDN], GPIO_OUT_ZERO)){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module } } mdelay(50); } } else {//power OFF printk("ghong hhongyan kdCISModulePowerOn:off,currSensorName=%s, pinSetIdx=%d",currSensorName,pinSetIdx); if(currSensorName && (0 == strcmp(SENSOR_DRVNAME_IMX179_MIPI_RAW,currSensorName))) { //reset pull down printk("ghong hhongyan imx179 power off\n"); 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], GPIO_OUT_ZERO)){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensor } if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A2,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n"); //return -EIO; //goto _kdCISModulePowerOn_exit_; } if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D, mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF digital power\n"); //return -EIO; //goto _kdCISModulePowerOn_exit_; } if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D2,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n"); //return -EIO; //goto _kdCISModulePowerOn_exit_; } if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF analog power\n"); //return -EIO; //goto _kdCISModulePowerOn_exit_; } } else if(currSensorName && (0 == strcmp(SENSOR_DRVNAME_MT9M114_YUV,currSensorName))) { //reset pull down printk("ghong hhongyan mt9m114 power off\n"); 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], GPIO_OUT_ZERO)){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 analog power\n"); //return -EIO; //goto _kdCISModulePowerOn_exit_; } if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D, mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF digital power\n"); //return -EIO; //goto _kdCISModulePowerOn_exit_; } if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D2,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n"); //return -EIO; //goto _kdCISModulePowerOn_exit_; } } } mdelay(10); return 0; _kdCISModulePowerOn_exit_: return -EIO; }
/****************************************************************************** Function: which_lcd_module_triple Description: read LCD ID PIN status,could identify three status:high¡¢low¡¢float Input: none Output: none Return: LCD ID1|ID0 value Others: ******************************************************************************/ unsigned char which_lcd_module_triple(void) { unsigned char high_read0 = 0; unsigned char low_read0 = 0; unsigned char high_read1 = 0; unsigned char low_read1 = 0; unsigned char lcd_id0 = 0; unsigned char lcd_id1 = 0; unsigned char lcd_id = 0; //Solve Coverity scan warning : check return value unsigned int ret = 0; //only recognise once if(0xFF != lcd_id_pins_value) { return lcd_id_pins_value; } //Solve Coverity scan warning : check return value ret = mt_set_gpio_mode(GPIO_DISP_ID0_PIN, GPIO_MODE_00); if(0 != ret) { LCD_DEBUG("ID0 mt_set_gpio_mode fail\n"); } ret = mt_set_gpio_dir(GPIO_DISP_ID0_PIN, GPIO_DIR_IN); if(0 != ret) { LCD_DEBUG("ID0 mt_set_gpio_dir fail\n"); } ret = mt_set_gpio_pull_enable(GPIO_DISP_ID0_PIN, GPIO_PULL_ENABLE); if(0 != ret) { LCD_DEBUG("ID0 mt_set_gpio_pull_enable fail\n"); } ret = mt_set_gpio_mode(GPIO_DISP_ID1_PIN, GPIO_MODE_00); if(0 != ret) { LCD_DEBUG("ID1 mt_set_gpio_mode fail\n"); } ret = mt_set_gpio_dir(GPIO_DISP_ID1_PIN, GPIO_DIR_IN); if(0 != ret) { LCD_DEBUG("ID1 mt_set_gpio_dir fail\n"); } ret = mt_set_gpio_pull_enable(GPIO_DISP_ID1_PIN, GPIO_PULL_ENABLE); if(0 != ret) { LCD_DEBUG("ID1 mt_set_gpio_pull_enable fail\n"); } //pull down ID0 ID1 PIN ret = mt_set_gpio_pull_select(GPIO_DISP_ID0_PIN,GPIO_PULL_DOWN); if(0 != ret) { LCD_DEBUG("ID0 mt_set_gpio_pull_select->Down fail\n"); } ret = mt_set_gpio_pull_select(GPIO_DISP_ID1_PIN,GPIO_PULL_DOWN); if(0 != ret) { LCD_DEBUG("ID1 mt_set_gpio_pull_select->Down fail\n"); } //delay 100ms , for discharging capacitance mdelay(100); //get ID0 ID1 status low_read0 = mt_get_gpio_in(GPIO_DISP_ID0_PIN); low_read1 = mt_get_gpio_in(GPIO_DISP_ID1_PIN); //pull up ID0 ID1 PIN ret = mt_set_gpio_pull_select(GPIO_DISP_ID0_PIN,GPIO_PULL_UP); if(0 != ret) { LCD_DEBUG("ID0 mt_set_gpio_pull_select->UP fail\n"); } ret = mt_set_gpio_pull_select(GPIO_DISP_ID1_PIN,GPIO_PULL_UP); if(0 != ret) { LCD_DEBUG("ID1 mt_set_gpio_pull_select->UP fail\n"); } //delay 100ms , for charging capacitance mdelay(100); //get ID0 ID1 status high_read0 = mt_get_gpio_in(GPIO_DISP_ID0_PIN); high_read1 = mt_get_gpio_in(GPIO_DISP_ID1_PIN); if( low_read0 != high_read0 ) { /*float status , pull down ID0 ,to prevent electric leakage*/ ret = mt_set_gpio_pull_select(GPIO_DISP_ID0_PIN,GPIO_PULL_DOWN); if(0 != ret) { LCD_DEBUG("ID0 mt_set_gpio_pull_select->Down fail\n"); } lcd_id0 = LCD_HW_ID_STATUS_FLOAT; } else if((LCD_HW_ID_STATUS_LOW == low_read0) && (LCD_HW_ID_STATUS_LOW == high_read0)) { /*low status , pull down ID0 ,to prevent electric leakage*/ ret = mt_set_gpio_pull_select(GPIO_DISP_ID0_PIN,GPIO_PULL_DOWN); if(0 != ret) { LCD_DEBUG("ID0 mt_set_gpio_pull_select->Down fail\n"); } lcd_id0 = LCD_HW_ID_STATUS_LOW; } else if((LCD_HW_ID_STATUS_HIGH == low_read0) && (LCD_HW_ID_STATUS_HIGH == high_read0)) { /*high status , pull up ID0 ,to prevent electric leakage*/ ret = mt_set_gpio_pull_select(GPIO_DISP_ID0_PIN,GPIO_PULL_UP); if(0 != ret) { LCD_DEBUG("ID0 mt_set_gpio_pull_select->UP fail\n"); } lcd_id0 = LCD_HW_ID_STATUS_HIGH; } else { LCD_DEBUG(" Read LCD_id0 error\n"); ret = mt_set_gpio_pull_select(GPIO_DISP_ID0_PIN,GPIO_PULL_DISABLE); if(0 != ret) { LCD_DEBUG("ID0 mt_set_gpio_pull_select->Disbale fail\n"); } lcd_id0 = LCD_HW_ID_STATUS_ERROR; } if( low_read1 != high_read1 ) { /*float status , pull down ID1 ,to prevent electric leakage*/ ret = mt_set_gpio_pull_select(GPIO_DISP_ID1_PIN,GPIO_PULL_DOWN); if(0 != ret) { LCD_DEBUG("ID1 mt_set_gpio_pull_select->Down fail\n"); } lcd_id1 = LCD_HW_ID_STATUS_FLOAT; } else if((LCD_HW_ID_STATUS_LOW == low_read1) && (LCD_HW_ID_STATUS_LOW == high_read1)) { /*low status , pull down ID1 ,to prevent electric leakage*/ ret = mt_set_gpio_pull_select(GPIO_DISP_ID1_PIN,GPIO_PULL_DOWN); if(0 != ret) { LCD_DEBUG("ID1 mt_set_gpio_pull_select->Down fail\n"); } lcd_id1 = LCD_HW_ID_STATUS_LOW; } else if((LCD_HW_ID_STATUS_HIGH == low_read1) && (LCD_HW_ID_STATUS_HIGH == high_read1)) { /*high status , pull up ID1 ,to prevent electric leakage*/ ret = mt_set_gpio_pull_select(GPIO_DISP_ID1_PIN,GPIO_PULL_UP); if(0 != ret) { LCD_DEBUG("ID1 mt_set_gpio_pull_select->UP fail\n"); } lcd_id1 = LCD_HW_ID_STATUS_HIGH; } else { LCD_DEBUG(" Read LCD_id1 error\n"); ret = mt_set_gpio_pull_select(GPIO_DISP_ID1_PIN,GPIO_PULL_DISABLE); if(0 != ret) { LCD_DEBUG("ID1 mt_set_gpio_pull_select->Disable fail\n"); } lcd_id1 = LCD_HW_ID_STATUS_ERROR; } #ifdef BUILD_LK dprintf(CRITICAL,"which_lcd_module_triple,lcd_id0:%d\n",lcd_id0); dprintf(CRITICAL,"which_lcd_module_triple,lcd_id1:%d\n",lcd_id1); #else printk("which_lcd_module_triple,lcd_id0:%d\n",lcd_id0); printk("which_lcd_module_triple,lcd_id1:%d\n",lcd_id1); #endif lcd_id = lcd_id0 | (lcd_id1 << 2); #ifdef BUILD_LK dprintf(CRITICAL,"which_lcd_module_triple,lcd_id:%d\n",lcd_id); #else printk("which_lcd_module_triple,lcd_id:%d\n",lcd_id); #endif lcd_id_pins_value = lcd_id; return lcd_id; }
static int och165twad_mhall_probe(struct platform_device *pdev) { struct och165twad_mhall_data *obj; int err = 0; MHALL_FUN(); mt_set_gpio_mode(GPIO_MHALL_EINT_PIN, GPIO_MHALL_EINT_PIN_M_EINT); mt_set_gpio_dir(GPIO_MHALL_EINT_PIN, GPIO_DIR_IN); mt_set_gpio_pull_enable(GPIO_MHALL_EINT_PIN, GPIO_PULL_DISABLE); mt_set_gpio_pull_select(GPIO_MHALL_EINT_PIN, GPIO_PULL_DOWN); mt_set_gpio_pull_enable(GPIO_MHALL_EINT_PIN, GPIO_PULL_ENABLE); if((pull_d = mt_get_gpio_in(GPIO_MHALL_EINT_PIN)) != 0) mhall = 1; mt_set_gpio_pull_enable(GPIO_MHALL_EINT_PIN, GPIO_PULL_DISABLE); mt_set_gpio_pull_select(GPIO_MHALL_EINT_PIN, GPIO_PULL_UP); mt_set_gpio_pull_enable(GPIO_MHALL_EINT_PIN, GPIO_PULL_ENABLE); if((pull_u = mt_get_gpio_in(GPIO_MHALL_EINT_PIN)) == 0) mhall = 1; mt_set_gpio_pull_select(GPIO_MHALL_EINT_PIN, GPIO_PULL_DOWN); mt_set_gpio_pull_enable(GPIO_MHALL_EINT_PIN, GPIO_PULL_DISABLE); if(mhall == 0) return -ENODEV; if(!(obj = kzalloc(sizeof(*obj), GFP_KERNEL))) { err = -ENOMEM; goto exit; } #ifdef CONFIG_HAS_EARLYSUSPEND obj->early_drv.level = EARLY_SUSPEND_LEVEL_DISABLE_FB - 1, obj->early_drv.suspend = och165twad_mhall_early_suspend, obj->early_drv.resume = och165twad_mhall_late_resume, register_early_suspend(&obj->early_drv); #endif platform_set_drvdata(pdev, obj); /* initialize and register input device (/dev/input/eventX) */ mhall_input_dev = input_allocate_device(); if (!mhall_input_dev) { err = -ENOMEM; goto exit; } mhall_input_dev->name = MHALL_NAME; __set_bit(EV_KEY, mhall_input_dev->evbit); __set_bit(KEY_MHALL_DOWN, mhall_input_dev->keybit); __set_bit(KEY_MHALL_UP, mhall_input_dev->keybit); err = input_register_device(mhall_input_dev); if (err) { MHALL_ERR( "register mhall_input_dev input device failed (%d)\n", err); input_free_device(mhall_input_dev); goto exit; } msleep(5); och165twad_mhall_eint_config_polarity(0); MHALL_LOG("%s: OK\n", __func__); return 0; exit: MHALL_ERR("%s: err = %d\n", __func__, err); return err; }
static int tpd_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id) { int err = 0; char buffer[2]; int status=0; i2c_client = client; TPD_DMESG("[mtk-tpd], cy8ctma300 tpd_i2c_probe ++++\n"); #ifdef TPD_NO_GPIO u32 temp; temp = *(volatile u32 *) TPD_GPIO_GPO_ADDR; //temp = temp | 0x40; temp = temp |(1<<16) ; temp = temp |(1<<17); //temp = (temp | 1<<16); //mt65xx_reg_sync_write(TPD_GPIO_GPO_ADDR, temp); //*(volatile u32 *) TPD_GPIO_GPO_ADDR = temp; printk("TPD_GPIO_GPO_ADDR:0x%x\n", *(volatile u32 *) TPD_GPIO_GPO_ADDR); temp = *(volatile u32 *) TPD_GPIO_OE_ADDR; //temp = temp | 0x40; temp = temp |(1<<16) ; temp = temp |(1<<17); //temp = (temp | 1<<16) ; //mt65xx_reg_sync_write(TPD_GPIO_OE_ADDR, temp); // *(volatile u32 *) TPD_GPIO_OE_ADDR = temp; printk("TPD_GPIO_OE_ADDR:0x%x\n", *(volatile u32 *) TPD_GPIO_OE_ADDR); #endif #ifndef TPD_NO_GPIO mt_set_gpio_mode(GPIO_CTP_RST_PIN, GPIO_CTP_RST_PIN_M_GPIO); mt_set_gpio_dir(GPIO_CTP_RST_PIN, GPIO_DIR_OUT); mt_set_gpio_out(GPIO_CTP_RST_PIN, GPIO_OUT_ZERO); msleep(10); mt_set_gpio_mode(GPIO_CTP_EN_PIN, GPIO_CTP_EN_PIN_M_GPIO); mt_set_gpio_dir(GPIO_CTP_EN_PIN, GPIO_DIR_OUT); mt_set_gpio_out(GPIO_CTP_EN_PIN, GPIO_OUT_ONE); // mt_set_gpio_mode(GPIO_CTP_RST_PIN, GPIO_CTP_RST_PIN_M_GPIO); // mt_set_gpio_dir(GPIO_CTP_RST_PIN, GPIO_DIR_OUT); // mt_set_gpio_out(GPIO_CTP_RST_PIN, GPIO_OUT_ONE); // msleep(10); mt_set_gpio_out(GPIO_CTP_RST_PIN, GPIO_OUT_ZERO); msleep(1); mt_set_gpio_out(GPIO_CTP_RST_PIN, GPIO_OUT_ONE); mt_set_gpio_mode(GPIO_CTP_EINT_PIN, GPIO_CTP_EINT_PIN_M_EINT); mt_set_gpio_dir(GPIO_CTP_EINT_PIN, GPIO_DIR_IN); mt_set_gpio_pull_enable(GPIO_CTP_EINT_PIN, GPIO_PULL_ENABLE); mt_set_gpio_pull_select(GPIO_CTP_EINT_PIN, GPIO_PULL_UP); #endif msleep(50); // buffer[0]=0x00; // i2c_client->ext_flag = I2C_WR_FLAG; // status=i2c_master_send(i2c_client ,buffer, 0x101); TPD_DMESG("1...........\n"); status = i2c_smbus_read_i2c_block_data(i2c_client, 0x00, 1, &(buffer[0])); if(status<0) { TPD_DMESG("fwq read error\n"); TPD_DMESG("[mtk-tpd], cy8ctma300 tpd_i2c_probe failed!!\n"); status = i2c_smbus_read_i2c_block_data(i2c_client, 0x00, 1, &(buffer[0])); if(status<0) { TPD_DMESG("[mtk-tpd], cy8ctma300 tpd_i2c_probe retry failed!!\n"); return status; } } TPD_DMESG("fwq buffer=%x \n",buffer[0]); TPD_DMESG("[mtk-tpd], cy8ctma300 tpd_i2c_probe success!!\n"); tpd_load_status = 1; if ((buffer[0] & 0x70) != 0x00) { buffer[0] = 0x00; // switch to operation mode i2c_smbus_write_i2c_block_data(i2c_client, 0x00, 1, &(buffer[0])); if(status < 0) { TPD_DMESG("fwq write error\n"); } msleep(50); } thread = kthread_run(touch_event_handler, 0, TPD_DEVICE); if (IS_ERR(thread)) { err = PTR_ERR(thread); TPD_DMESG(TPD_DEVICE " failed to create kernel thread: %d\n", err); } #ifndef POLL_MODE //mt6575t fpga debug 0: enable polling mode mt65xx_eint_set_sens(CUST_EINT_TOUCH_PANEL_NUM, CUST_EINT_TOUCH_PANEL_SENSITIVE); mt65xx_eint_set_hw_debounce(CUST_EINT_TOUCH_PANEL_NUM, CUST_EINT_TOUCH_PANEL_DEBOUNCE_CN); mt65xx_eint_registration(CUST_EINT_TOUCH_PANEL_NUM, CUST_EINT_TOUCH_PANEL_DEBOUNCE_EN, CUST_EINT_TOUCH_PANEL_POLARITY, tpd_eint_interrupt_handler, 1); mt65xx_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM); TPD_DMESG("EINT num=%d\n",CUST_EINT_TOUCH_PANEL_NUM); #endif TPD_DMESG("[mtk-tpd], cy8ctma300 tpd_i2c_probe ----\n"); return 0; }
void cm_relese_rst_signal(void) { mt_set_gpio_out(GPIO_DT_MD_RST_PIN, 1); mt_set_gpio_dir(GPIO_DT_MD_RST_PIN, 0); }
static int io_set_output_mode (unsigned int id){ mt_set_gpio_pull_enable(id, GPIO_PULL_DISABLE); mt_set_gpio_dir(id, GPIO_DIR_OUT); mt_set_gpio_mode(id, GPIO_MODE_GPIO); return 0; }
int cust_matv_power_on(void) { MATV_LOGE("[MATV] cust_matv_power_on Start\n"); ///cust_matv_gpio_on(); u32 pinSetIdx = 0;//default main sensor u32 pinSet[2][4] = { //for main sensor {GPIO_CAMERA_CMRST_PIN, GPIO_CAMERA_CMRST_PIN_M_GPIO, GPIO_CAMERA_CMPDN_PIN, GPIO_CAMERA_CMPDN_PIN_M_GPIO}, //for sub sensor {GPIO_CAMERA_CMRST1_PIN, GPIO_CAMERA_CMRST1_PIN_M_GPIO, GPIO_CAMERA_CMPDN1_PIN, GPIO_CAMERA_CMPDN1_PIN_M_GPIO} }; if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_2800,"MT5192")) { MATV_LOGE("[CAMERA SENSOR] Fail to enable digital power\n"); //return -EIO; return 0; } if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,"MT5192")) { MATV_LOGE("[CAMERA SENSOR] Fail to enable analog power\n"); //return -EIO; return 0; } if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1500,"MT5192")) { MATV_LOGE("[CAMERA SENSOR] Fail to enable digital power\n"); //return -EIO; return 0; } if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A2, VOL_2800,"MT5192")) { MATV_LOGE("[CAMERA SENSOR] Fail to enable analog power\n"); //return -EIO; return 0; } { mt_set_gpio_mode(pinSet[pinSetIdx][0],pinSet[pinSetIdx][1]); mt_set_gpio_dir(pinSet[pinSetIdx][0],GPIO_DIR_OUT); mt_set_gpio_out(pinSet[pinSetIdx][0],GPIO_OUT_ZERO); ///mdelay(10); mt_set_gpio_out(pinSet[pinSetIdx][0],GPIO_OUT_ONE); ///mdelay(1); //PDN pin mt_set_gpio_mode(pinSet[pinSetIdx][2],pinSet[pinSetIdx][3]); mt_set_gpio_dir(pinSet[pinSetIdx][2],GPIO_DIR_OUT); mt_set_gpio_out(pinSet[pinSetIdx][2],GPIO_OUT_ZERO); } return 0; }