//Div2-SW6-MM-MC-ImplementCameraTestModeForTcm9001mdSensor-00+{ static long tcm9001md_set_effect(int mode, int effect) { long rc = 0; printk("%s: mode = %d, effect = %d\n", __func__, mode, effect); switch (effect) { case CAMERA_EFFECT_COLORBAR: { printk("%s: case = CAMERA_EFFECT_COLORBAR ~~ \n", __func__); //Enable test mode for color bar pattern. rc = tcm9001md_i2c_write(tcm9001md_client, 0x53, 0x4C); if (rc < 0) return rc; else printk("%s: Enable test mode for color bar pattern end ~\n", __func__); msleep(500); } break; default: printk("%s: Not support this effect ~\n", __func__); return rc; } return rc; }
static long tcm9001md_set_sensor_mode(int mode) { switch (mode) { case SENSOR_PREVIEW_MODE: { printk(KERN_INFO "tcm9001md_set_sensor_mode: case SENSOR_PREVIEW_MODE.\n"); } break; case SENSOR_SNAPSHOT_MODE: { printk(KERN_INFO "tcm9001md_set_sensor_mode: case SENSOR_SNAPSHOT_MODE.\n"); } break; case SENSOR_RAW_SNAPSHOT_MODE: { printk(KERN_INFO "tcm9001md_set_sensor_mode: case SENSOR_RAW_SNAPSHOT_MODE.\n"); } break; //Div2-SW6-MM-MC-mirrorFront-00+{ case SENSOR_MIRROR_MODE: { printk(KERN_ERR "tcm9001md_msg: case SENSOR_MIRROR_MODE.\n"); if (tcm9001mdinfo->sensor_Orientation == MSM_CAMERA_SENSOR_ORIENTATION_0) { tcm9001md_i2c_write(tcm9001md_client, 0x22, 0x47); } printk("Finish Orientation Setting %d.\n",tcm9001mdinfo->sensor_Orientation); } break; //Div2-SW6-MM-MC-mirrorFront-00+} default: { printk(KERN_ERR "tcm9001md_set_sensor_mode: ERR: Invalid case !\n"); } return -EINVAL; } return 0; }
/* * Write a list of register settings; ff/ff stops the process. */ static int32_t tcm9001md_i2c_write_array(struct tcm9001md_i2c_reg_conf const *reg_conf_tbl, int num_of_items_in_table) { int i; int32_t rc = -EIO; for (i = 0; i < num_of_items_in_table; i++) { rc = tcm9001md_i2c_write(tcm9001md_client, reg_conf_tbl->waddr, reg_conf_tbl->wdata); if (rc < 0) break; if (reg_conf_tbl->mdelay_time != 0) mdelay(reg_conf_tbl->mdelay_time); reg_conf_tbl++; } return rc; }
int tcm9001md_sensor_standby(int on) { int rc = 0; if(on == 1)//Entering stanby mode { //Software standby setting. Set this register with STANDBY. rc = tcm9001md_i2c_write(tcm9001md_client, 0xFF, 0x05);//SLEEP: 0h: ON (Standby), 1h: OFF (Normal) if (rc < 0) return rc; mdelay(1); rc = tcm9001md_i2c_write(tcm9001md_client, 0x18, 0x1C);//STANDBY: 0h: ON (Standby), 1h: OFF (Normal) if (rc < 0) return rc; printk(KERN_INFO "%s: SW standby done . \n", __func__); mdelay(1); // Enter HW standby /* Pull Low REDET = CAM_VGA_RST_N */ rc = fih_cam_output_gpio_control(tcm9001mdinfo->vga_rst_pin, "tcm9001md", 0); if (rc) return rc; mdelay(1); /* Pull hight PWRDWN = CAM_VGA_STANDBY */ rc = fih_cam_output_gpio_control(tcm9001mdinfo->vga_pwdn_pin, "tcm9001md", 1); if (rc) return rc; mdelay(1); /* Disable MCLK = 24MHz */ gpio_tlmm_config(GPIO_CFG(tcm9001mdinfo->MCLK_PIN, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE); rc = fih_cam_output_gpio_control(tcm9001mdinfo->MCLK_PIN, "tcm9001md", 0); if (rc) return rc; printk("%s: Disable mclk\n", __func__); printk(KERN_INFO "%s: Enter Hw standby done . \n", __func__); } else//Exiting stanby mode { /* Setting MCLK = 24MHz */ msm_camio_clk_rate_set(24000000); msm_camio_camif_pad_reg_reset(); printk(KERN_INFO "%s: Setting MCLK = 24MHz \n", __func__); gpio_tlmm_config(GPIO_CFG(tcm9001mdinfo->MCLK_PIN, 1, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA), GPIO_CFG_ENABLE);//Div2-SW6-MM-MC-Camera-ModifiedPowerSequence-01* printk(KERN_INFO "%s: Output MCLK end. \n", __func__); mdelay(1); /* Pull Low PWRDWN = CAM_VGA_STANDBY */ rc = fih_cam_output_gpio_control(tcm9001mdinfo->vga_pwdn_pin, "tcm9001md", 0); if (rc) return rc; mdelay(1); /* Pull High REDET = CAM_VGA_RST_N */ rc = fih_cam_output_gpio_control(tcm9001mdinfo->vga_rst_pin, "tcm9001md", 1); if (rc) return rc; mdelay(5);//Div2-SW6-MM-MC-AddErrorHandlingWhenCameraI2cReadAndWriteFail-00+ //Exit SW standby rc = tcm9001md_i2c_write(tcm9001md_client, 0x18, 0x9C);//STANDBY: 0h: ON (Standby), 1h: OFF (Normal) if (rc < 0) return rc; mdelay(1); rc = tcm9001md_i2c_write(tcm9001md_client, 0xFF, 0x85);//SLEEP: 0h: ON (Standby), 1h: OFF (Normal) if (rc < 0) return rc; printk(KERN_INFO "%s: Exit HW standby done. \n", __func__); } return rc; }