android MTK camera上电代码优化

2019-04-13 12:56发布

个人一直觉得MTK camera的上电代码可读性不强,也不符合我个人的代码习惯,所以根据个人习惯优化了下代码 如下:
#include #include #include #include #include #include #include #include #include #include "kd_camera_hw.h" #include "kd_imgsensor.h" #include "kd_imgsensor_define.h" #include "kd_camera_feature.h" /****************************************************************************** * Debug configuration ******************************************************************************/ #define PFX "[kd_camera_hw]" #define PK_DBG_NONE(fmt, arg...) do {} while (0) //#define PK_DBG_FUNC(fmt, arg...) printk(KERN_INFO PFX "%s: " fmt, __FUNCTION__ ,##arg) #define PK_DBG_FUNC printk #define DEBUG_CAMERA_HW_K #ifdef DEBUG_CAMERA_HW_K #define PK_DBG PK_DBG_FUNC #define PK_ERR(fmt, arg...) printk(KERN_ERR PFX "%s: " fmt, __FUNCTION__ ,##arg) #define PK_XLOG_INFO(fmt, args...) do { xlog_printk(ANDROID_LOG_INFO, "kd_camera_hw", fmt, ##args); } while(0) #else #define PK_DBG(a,...) #define PK_ERR(a,...) #define PK_XLOG_INFO(fmt, args...) #endif kal_bool searchMainSensor = KAL_TRUE; #define DISABLE_CAM(X) do{ if (GPIO_CAMERA_INVALID != pinSet[(X)][IDX_PS_CMRST]) { if(mt_set_gpio_mode(pinSet[(X)][IDX_PS_CMRST],pinSet[(X)][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! ");} if(mt_set_gpio_mode(pinSet[(X)][IDX_PS_CMPDN],pinSet[(X)][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! ");} if(mt_set_gpio_dir(pinSet[(X)][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! ");} if(mt_set_gpio_dir(pinSet[(X)][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! ");} if(mt_set_gpio_out(pinSet[(X)][IDX_PS_CMRST],pinSet[(X)][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! ");} if(mt_set_gpio_out(pinSet[(X)][IDX_PS_CMPDN],pinSet[(X)][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! ");} } }while(0) #define ENABLE_CAM(X) do{ if(mt_set_gpio_out(pinSet[(X)][IDX_PS_CMPDN],pinSet[(X)][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! ");} if(mt_set_gpio_out(pinSet[(X)][IDX_PS_CMRST],pinSet[(X)][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! ");} if (GPIO_CAMERA_INVALID != pinSet[(X)][IDX_PS_CMRST]) { if(mt_set_gpio_mode(pinSet[(X)][IDX_PS_CMPDN],pinSet[(X)][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! ");} if(mt_set_gpio_dir(pinSet[(X)][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! ");} if(mt_set_gpio_out(pinSet[(X)][IDX_PS_CMPDN],pinSet[(X)][IDX_PS_CMPDN+IDX_PS_ON])){PK_DBG("[CAMERA LENS] set gpio failed!! ");} msleep(10); if(mt_set_gpio_mode(pinSet[(X)][IDX_PS_CMRST],pinSet[(X)][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! ");} if(mt_set_gpio_dir(pinSet[(X)][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! ");} if(mt_set_gpio_out(pinSet[(X)][IDX_PS_CMRST],pinSet[(X)][IDX_PS_CMRST+IDX_PS_ON])){PK_DBG("[CAMERA SENSOR] set gpio failed!! ");} msleep(3); } }while(0) #define ENABLE_CAM_EX(X) do{ if(mt_set_gpio_out(pinSet[(X)][IDX_PS_CMPDN],pinSet[(X)][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! ");} if(mt_set_gpio_out(pinSet[(X)][IDX_PS_CMRST],pinSet[(X)][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! ");} if (GPIO_CAMERA_INVALID != pinSet[(X)][IDX_PS_CMRST]) { if(mt_set_gpio_mode(pinSet[(X)][IDX_PS_CMRST],pinSet[(X)][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! ");} if(mt_set_gpio_dir(pinSet[(X)][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! ");} if(mt_set_gpio_out(pinSet[(X)][IDX_PS_CMRST],pinSet[(X)][IDX_PS_CMRST+IDX_PS_ON])){PK_DBG("[CAMERA SENSOR] set gpio failed!! ");} msleep(10); if(mt_set_gpio_mode(pinSet[(X)][IDX_PS_CMPDN],pinSet[(X)][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! ");} if(mt_set_gpio_dir(pinSet[(X)][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! ");} if(mt_set_gpio_out(pinSet[(X)][IDX_PS_CMPDN],pinSet[(X)][IDX_PS_CMPDN+IDX_PS_ON])){PK_DBG("[CAMERA LENS] set gpio failed!! ");} msleep(3); } }while(0) #define POWERON_AF(X1,X2,X3,X4) do{ if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, X1,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power "); goto _kdCISModulePowerOn_exit_; } mdelay(10); if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, X2,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power "); goto _kdCISModulePowerOn_exit_; } mdelay(10); if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, X3,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power "); goto _kdCISModulePowerOn_exit_; } mdelay(10); if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A2, X4,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power "); goto _kdCISModulePowerOn_exit_; } }while(0) #define POWERON_FF(X1,X2,X3) do{ if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, X1,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power "); goto _kdCISModulePowerOn_exit_; } mdelay(10); if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, X2,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power "); goto _kdCISModulePowerOn_exit_; } mdelay(10); if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, X3,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable digital power "); goto _kdCISModulePowerOn_exit_; } }while(0) #define CAMERA_POWERDOWN(X) do{ if (GPIO_CAMERA_INVALID != pinSet[X][IDX_PS_CMRST]) { if(mt_set_gpio_mode(pinSet[X][IDX_PS_CMRST],pinSet[X][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! ");} if(mt_set_gpio_dir(pinSet[X][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! ");} if(mt_set_gpio_out(pinSet[X][IDX_PS_CMRST],pinSet[X][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! ");} if(mt_set_gpio_mode(pinSet[X][IDX_PS_CMPDN],pinSet[X][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! ");} if(mt_set_gpio_dir(pinSet[X][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! ");} if(mt_set_gpio_out(pinSet[X][IDX_PS_CMPDN],pinSet[X][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! ");} } if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D, mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF digital power "); goto _kdCISModulePowerOn_exit_; } if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to OFF analog power "); goto _kdCISModulePowerOn_exit_; } if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D2,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power "); goto _kdCISModulePowerOn_exit_; } if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A2,mode_name)) { PK_DBG("[CAMERA SENSOR] Fail to enable analog power "); goto _kdCISModulePowerOn_exit_; } }while(0) int kdCISModulePowerOn(CAMERA_DUAL_CAMERA_SENSOR_ENUM SensorIdx, char *currSensorName, BOOL On, char* mode_name) { u32 pinSetIdx = 0;//default main sensor u32 pinSetIdxTmp = 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[4][8] = { {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, }, {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_ZERO, GPIO_OUT_ONE, }, {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; searchMainSensor = KAL_TRUE; } else if (DUAL_CAMERA_SUB_SENSOR == SensorIdx) { pinSetIdx = 1; searchMainSensor = KAL_FALSE; } //####################################################################################################config begin /***************************************************************** The following code needs to be configured according to datasheet ******************************************************************/ //power ON if (On) { if ((pinSetIdx == 0) && currSensorName && (0 == strcmp(SENSOR_DRVNAME_OV5648_MIPI_RAW,currSensorName))) { printk("################################ov5648 poweron################## "); POWERON_FF(VOL_1800,VOL_2800,VOL_1500); mdelay(5); ENABLE_CAM(1); DISABLE_CAM(2); } else if ((pinSetIdx == 0) && currSensorName && (0 == strcmp(SENSOR_DRVNAME_S5K5E2Y_MIPI_RAW,currSensorName))) { printk("################################s5k5e2 poweron################## "); POWERON_FF(VOL_2800,VOL_2800,VOL_1200); mdelay(5); ENABLE_CAM(1); DISABLE_CAM(2); } else if ((pinSetIdx == 0) && currSensorName && (0 == strcmp(SENSOR_DRVNAME_GC2235_MIPI_RAW,currSensorName))) { printk("################################gc2235_MIPI poweron################## "); POWERON_FF(VOL_1800,VOL_2800,VOL_1800); mdelay(5); ENABLE_CAM(0); DISABLE_CAM(2); } else if ((pinSetIdx == 1) && currSensorName && (0 == strcmp(SENSOR_DRVNAME_GC2235_RAW,currSensorName))) { printk("################################gc2235 poweron################## "); mdelay(5); POWERON_FF(VOL_1800,VOL_2800,VOL_1800); ENABLE_CAM(2); DISABLE_CAM(1); } else if ((pinSetIdx == 1) && currSensorName && (0 == strcmp(SENSOR_DRVNAME_GC0329_YUV,currSensorName))) { printk("################################gc0329 poweron################## "); mdelay(5); POWERON_FF(VOL_1800,VOL_2800,VOL_1800); ENABLE_CAM(2); DISABLE_CAM(1); } else if ((pinSetIdx == 1) && currSensorName && (0 == strcmp(SENSOR_DRVNAME_HI257_YUV,currSensorName))) { printk("################################hi257 poweron################## "); mdelay(5); POWERON_FF(VOL_1800,VOL_2800,VOL_1800); ENABLE_CAM(2); DISABLE_CAM(1); } } else {//power OFF PK_DBG("kdCISModulePowerOn -off:currSensorName=%s ",currSensorName); if(currSensorName && (0 == strcmp(SENSOR_DRVNAME_OV5648_MIPI_RAW,currSensorName))) { pinSetIdx = 1; } else if(currSensorName && (0 == strcmp(SENSOR_DRVNAME_S5K5E2Y_MIPI_RAW,currSensorName))) { pinSetIdx = 1; } else if(currSensorName && (0 == strcmp(SENSOR_DRVNAME_GC2235_MIPI_RAW,currSensorName))) { pinSetIdx = 0; } else if(currSensorName && (0 == strcmp(SENSOR_DRVNAME_GC2235_RAW,currSensorName))) { pinSetIdx = 2; } else if(currSensorName && (0 == strcmp(SENSOR_DRVNAME_GC0329_YUV,currSensorName))) { pinSetIdx = 2; } else if(currSensorName && (0 == strcmp(SENSOR_DRVNAME_HI257_YUV,currSensorName))) { pinSetIdx = 2; } CAMERA_POWERDOWN(pinSetIdx); } //####################################################################################################config end return 0; _kdCISModulePowerOn_exit_: return -EIO; } EXPORT_SYMBOL(kdCISModulePowerOn); //!-- //