示例#1
0
//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;
}
示例#3
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;
}
示例#4
0
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;
}