int32_t imx175_sensor_power_up(struct msm_sensor_ctrl_t *s_ctrl)
{
	int32_t rc = 0;
	struct msm_camera_sensor_info *data = s_ctrl->sensordata;
	printk("%s: %d\n", __func__, __LINE__);

	printk("%s:sensor_power_on %d\n", __func__, __LINE__);



	printk("imx175_sensor_power_up(1) : i2c_scl: %d, i2c_sda: %d\n",
	 gpio_get_value(13), gpio_get_value(12));
	/* Power on */
	data->sensor_platform_info->sensor_power_on();
	mdelay(3);

	/* MCLK */
	printk("MCLK ON!!!");
	if (s_ctrl->clk_rate != 0)
		cam_clk_info->clk_rate = s_ctrl->clk_rate;

	rc = msm_cam_clk_enable(&s_ctrl->sensor_i2c_client->client->dev,
		cam_clk_info, s_ctrl->cam_clk, ARRAY_SIZE(cam_clk_info), 1);

	mdelay(5);
	

	/* Power on */
	data->sensor_platform_info->sensor_power_on_sub();
	mdelay(5);

    rc = msm_camera_request_gpio_table(data, 1);
	if (rc < 0)
		pr_err("%s: request gpio failed\n", __func__);

	printk("imx175_sensor_power_up(2) : i2c_scl: %d, i2c_sda: %d\n",
		 gpio_get_value(13), gpio_get_value(12));
	
	if (data->sensor_platform_info->i2c_conf &&
		data->sensor_platform_info->i2c_conf->use_i2c_mux)
		msm_sensor_enable_i2c_mux(data->sensor_platform_info->i2c_conf);

	printk("imx175_sensor_power_up(3) : i2c_scl: %d, i2c_sda: %d\n",
		 gpio_get_value(13), gpio_get_value(12));

	
	/* MAIN_CAM_RESET */
	printk("MAIN_CAM_RESET!!!");
	data->sensor_platform_info->
		sensor_pmic_gpio_ctrl(data->sensor_platform_info->reset, 1);

	usleep(50);

	printk("imx175_sensor_power_up(4) : i2c_scl: %d, i2c_sda: %d\n",
		 gpio_get_value(13), gpio_get_value(12));	

	return 0;
}
Beispiel #2
0
static int s5k6b2yx_sensor_power_up(struct msm_sensor_ctrl_t *s_ctrl)
{
	int rc = 0;
/*	int err;
	u32 int_factor;
	int temp = 0; */
	struct msm_camera_sensor_info *data = s_ctrl->sensordata;
	CAM_DEBUG("E");
	CAM_DEBUG("s5k6b2yx_sensor_power_up(1) : i2c_scl: %d, i2c_sda: %d\n",
		 gpio_get_value(85), gpio_get_value(84));


	rc = msm_camera_request_gpio_table(data, 1);
	if (rc < 0)
		pr_err("%s: request gpio failed\n", __func__);

	CAM_DEBUG("s5k6b2yx_sensor_power_up(2) : i2c_scl: %d, i2c_sda: %d\n",
		 gpio_get_value(85), gpio_get_value(84));

	/* Power on */
	data->sensor_platform_info->sensor_power_on();

	if (data->sensor_platform_info->i2c_conf &&
		data->sensor_platform_info->i2c_conf->use_i2c_mux)
		msm_sensor_enable_i2c_mux(data->sensor_platform_info->i2c_conf);

	usleep(1200);

	CAM_DEBUG("s5k6b2yx_sensor_power_up(3) : i2c_scl: %d, i2c_sda: %d\n",
		 gpio_get_value(85), gpio_get_value(84));

	/* VT_CAM_RESET */
	data->sensor_platform_info->
		sensor_pmic_gpio_ctrl(data->sensor_platform_info->reset, 1);

	usleep(50);

	/* MCLK */
	if (s_ctrl->clk_rate != 0)
		cam_clk_info->clk_rate = s_ctrl->clk_rate;

	rc = msm_cam_clk_enable(&s_ctrl->sensor_i2c_client->client->dev,
		cam_clk_info, s_ctrl->cam_clk, ARRAY_SIZE(cam_clk_info), 1);
	if (rc < 0)
		pr_err("%s: clk enable failed\n", __func__);

	CAM_DEBUG("s5k6b2yx_sensor_power_up(4) : i2c_scl: %d, i2c_sda: %d\n",
		 gpio_get_value(85), gpio_get_value(84));

	usleep(5000);
	CAM_DEBUG("X");

	return rc;
}
Beispiel #3
0
int32_t iu091_sensor_power_up(struct msm_sensor_ctrl_t *s_ctrl)
{
    int32_t rc = 0;
    struct msm_camera_sensor_info *data = s_ctrl->sensordata;

    IU091_LOG_INF("START\n");

    
    if (cam_vdig == NULL) {
        cam_vdig = regulator_get(&s_ctrl->sensor_i2c_client->client->dev, "cam_vdig");
        if (IS_ERR(cam_vdig)) {
            IU091_LOG_ERR("VREG CAM VDIG get failed\n");
            cam_vdig = NULL;
            iu091_sensor_power_down(s_ctrl);
            return -EFAULT;
        }
        if (regulator_set_voltage(cam_vdig, CAM_VDIG_MINUV,
            CAM_VDIG_MAXUV)) {
            IU091_LOG_ERR("VREG CAM VDIG set voltage failed\n");
            iu091_sensor_power_down(s_ctrl);
            return -EFAULT;
        }
        if (regulator_set_optimum_mode(cam_vdig,
            CAM_VDIG_LOAD_UA) < 0) {
            IU091_LOG_ERR("VREG CAM VDIG set optimum mode failed\n");
            iu091_sensor_power_down(s_ctrl);
            return -EFAULT;
        }
        if (regulator_enable(cam_vdig)) {
            IU091_LOG_ERR("VREG CAM VDIG enable failed\n");
            iu091_sensor_power_down(s_ctrl);
            return -EFAULT;
        }
    }

    IU091_LOG_DBG("cam_vdig:%d [ON/OFF]",regulator_is_enabled(cam_vdig));
    IU091_LOG_DBG("cam_vdig:%d [V]",regulator_get_voltage(cam_vdig));

    
    IU091_LOG_DBG("wait %d[ms]\n",IU091_WAIT_PWON_VREG_L12);
    mdelay(IU091_WAIT_PWON_VREG_L12);
    camera_iu091_pm_vdig = true;


    
    rc = pm8xxx_gpio_config(IU091_PMGPIO_CAM_V_EN2, &iu091_cam_v_en_on);
    if (rc) {
        
        IU091_LOG_ERR("IU091_PMGPIO_CAM_V_EN2(%d) Error, rc = %d\n", IU091_PMGPIO_CAM_V_EN2, rc);
        iu091_sensor_power_down(s_ctrl);
        return -EFAULT;
    }
    IU091_LOG_DBG("PMGPIO[26]:ON\n");

    
    IU091_LOG_DBG("wait %d[ms]\n",IU091_WAIT_PWON_V_EN2);
    mdelay(IU091_WAIT_PWON_V_EN2);
    camera_iu091_pmgpio_26 = true;


    
    rc = pm8xxx_gpio_config(IU091_PMGPIO_CAM_V_EN1, &iu091_cam_v_en_on);
    if (rc) {
        
        IU091_LOG_ERR("IU091_PMGPIO_CAM_V_EN1(%d) Error, rc = %d\n", IU091_PMGPIO_CAM_V_EN1, rc);
        iu091_sensor_power_down(s_ctrl);
        return -EFAULT;
    }
    IU091_LOG_DBG("PMGPIO[13]:ON\n");

    
    IU091_LOG_DBG("wait %d[ms]\n",IU091_WAIT_PWON_V_EN1);
    mdelay(IU091_WAIT_PWON_V_EN1);
    camera_iu091_pmgpio_13 = true;


    
    if (cam_vana == NULL) {
        cam_vana = regulator_get(&s_ctrl->sensor_i2c_client->client->dev, "cam_vana");
        if (IS_ERR(cam_vana)) {
            IU091_LOG_ERR("VREG CAM VANA get failed\n");
            iu091_sensor_power_down(s_ctrl);
            return -EFAULT;
        }
        if (regulator_set_voltage(cam_vana, CAM_VANA_MINUV,
            CAM_VANA_MAXUV)) {
            IU091_LOG_ERR("VREG CAM VANA set voltage failed\n");
            iu091_sensor_power_down(s_ctrl);
            return -EFAULT;
        }
        if (regulator_set_optimum_mode(cam_vana,
            CAM_VANA_LOAD_UA) < 0) {
            IU091_LOG_ERR("VREG CAM VANA set optimum mode failed\n");
            iu091_sensor_power_down(s_ctrl);
            return -EFAULT;
        }
        if (regulator_enable(cam_vana)) {
            IU091_LOG_ERR("VREG CAM VANA enable failed\n");
            iu091_sensor_power_down(s_ctrl);
            return -EFAULT;
        }
    }

    IU091_LOG_DBG("cam_vana:%d [ON/OFF]",regulator_is_enabled(cam_vana));
    IU091_LOG_DBG("cam_vana:%d [V]",regulator_get_voltage(cam_vana));

    
    IU091_LOG_DBG("wait %d[ms]\n",IU091_WAIT_PWON_VREG_L11);
    mdelay(IU091_WAIT_PWON_VREG_L11);
    camera_iu091_pm_vana = true;


    
    rc = pm8xxx_gpio_config(IU091_PMGPIO_CAM_RST_N, &iu091_cam_v_en_on);
    if (rc) {
        
        IU091_LOG_DBG("IU091_PMGPIO_CAM_RST_N(%d) Error, rc = %d\n", IU091_PMGPIO_CAM_RST_N, rc);
        iu091_sensor_power_down(s_ctrl);
        return -EFAULT;
    }
    IU091_LOG_DBG("PMGPIO[28]:ON\n");

    
    IU091_LOG_DBG("wait %d[ms]\n",IU091_WAIT_PWON_RST_N);
    mdelay(IU091_WAIT_PWON_RST_N);
    camera_iu091_pmgpio_28 = true;


    
    rc = msm_camera_request_gpio_table(data, 1);
    if (rc < 0) {
        IU091_LOG_ERR("request gpio failed\n");
        iu091_sensor_power_down(s_ctrl);
        return -EFAULT;
    }

    if (s_ctrl->clk_rate != 0)
        iu091_cam_clk_info->clk_rate = s_ctrl->clk_rate;




    rc = msm_cam_clk_enable(&s_ctrl->sensor_i2c_client->client->dev,
    iu091_cam_clk_info, s_ctrl->cam_clk, ARRAY_SIZE(iu091_cam_clk_info), 1);

    if (rc < 0) {
        IU091_LOG_ERR("clk enable failed\n");
        iu091_sensor_power_down(s_ctrl);
        return -EFAULT;
    }
    IU091_LOG_DBG("MCLK ENABLE\n");

    
    IU091_LOG_DBG("wait %d[ms]\n",IU091_WAIT_PWON_MCLK);
    mdelay(IU091_WAIT_PWON_MCLK);
    camera_iu091_mclk = true;


    
    if (data->sensor_platform_info->i2c_conf &&
        data->sensor_platform_info->i2c_conf->use_i2c_mux){
        msm_sensor_enable_i2c_mux(data->sensor_platform_info->i2c_conf);
        IU091_LOG_DBG("msm_sensor_enable_i2c_mux()\n");
    }
    camera_iu091_i2c = true;

    IU091_LOG_INF("END\n");
    return rc;
}
static int32_t s5k4e1_sensor_power_up(struct msm_sensor_ctrl_t *s_ctrl)
{
	int32_t rc = 0;
	struct msm_camera_sensor_info *data = s_ctrl->sensordata;
	printk("%s: E, %d\n", __func__, __LINE__); /* LGE_CHANGE, Show log always, 2012-05-24, [email protected] */
	s_ctrl->reg_ptr = kzalloc(sizeof(struct regulator *)
			* data->sensor_platform_info->num_vreg, GFP_KERNEL);
	if (!s_ctrl->reg_ptr) {
		pr_err("%s: could not allocate mem for regulators\n",
			__func__);
		return -ENOMEM;
	}

	rc = msm_camera_request_gpio_table(data, 1);
	if (rc < 0) {
		pr_err("%s: request gpio failed\n", __func__);
		goto request_gpio_failed;
	}

	rc = msm_camera_config_vreg(&s_ctrl->sensor_i2c_client->client->dev,
			s_ctrl->sensordata->sensor_platform_info->cam_vreg,
			s_ctrl->sensordata->sensor_platform_info->num_vreg,
			s_ctrl->reg_ptr, 1);
	if (rc < 0) {
		pr_err("%s: regulator on failed\n", __func__);
		goto config_vreg_failed;
	}

	rc = msm_camera_enable_vreg(&s_ctrl->sensor_i2c_client->client->dev,
			s_ctrl->sensordata->sensor_platform_info->cam_vreg,
			s_ctrl->sensordata->sensor_platform_info->num_vreg,
			s_ctrl->reg_ptr, 1);
	if (rc < 0) {
		pr_err("%s: enable regulator failed\n", __func__);
		goto enable_vreg_failed;
	}
	printk("%s: msm_camera_enable_vreg, %d\n", __func__, __LINE__);
	rc = msm_camera_config_gpio_table(data, 1);
	if (rc < 0) {
		pr_err("%s: config gpio failed\n", __func__);
		goto config_gpio_failed;
	}

	if (s_ctrl->clk_rate != 0)
		cam_clk_info->clk_rate = s_ctrl->clk_rate;

	rc = msm_cam_clk_enable(&s_ctrl->sensor_i2c_client->client->dev,
		cam_clk_info, &s_ctrl->cam_clk, ARRAY_SIZE(cam_clk_info), 1);
	if (rc < 0) {
		pr_err("%s: clk enable failed\n", __func__);
		goto enable_clk_failed;
	}
/* minimum sleep 20ms for EEPROM read */
	msleep(20);

	if (data->sensor_platform_info->ext_power_ctrl != NULL)
		data->sensor_platform_info->ext_power_ctrl(1);

	if (data->sensor_platform_info->i2c_conf &&
		data->sensor_platform_info->i2c_conf->use_i2c_mux)
		msm_sensor_enable_i2c_mux(data->sensor_platform_info->i2c_conf);


	printk("%s: X, %d\n", __func__, __LINE__); /* LGE_CHANGE, Show log always, 2012-05-24, [email protected] */
	return rc;
enable_clk_failed:
		msm_camera_config_gpio_table(data, 0);
config_gpio_failed:
	msm_camera_enable_vreg(&s_ctrl->sensor_i2c_client->client->dev,
			s_ctrl->sensordata->sensor_platform_info->cam_vreg,
			s_ctrl->sensordata->sensor_platform_info->num_vreg,
			s_ctrl->reg_ptr, 0);

enable_vreg_failed:
	msm_camera_config_vreg(&s_ctrl->sensor_i2c_client->client->dev,
		s_ctrl->sensordata->sensor_platform_info->cam_vreg,
		s_ctrl->sensordata->sensor_platform_info->num_vreg,
		s_ctrl->reg_ptr, 0);
config_vreg_failed:
	msm_camera_request_gpio_table(data, 0);
request_gpio_failed:
	kfree(s_ctrl->reg_ptr);
	return rc;
}
Beispiel #5
0
int32_t msm_sensor_power_up(struct msm_sensor_ctrl_t *s_ctrl)
{
	int32_t rc = 0;
	struct msm_camera_sensor_info *data = s_ctrl->sensordata;
	CDBG("%s: %d\n", __func__, __LINE__);
	s_ctrl->reg_ptr = kzalloc(sizeof(struct regulator *)
			* data->sensor_platform_info->num_vreg, GFP_KERNEL);
	if (!s_ctrl->reg_ptr) {
		pr_err("%s: could not allocate mem for regulators\n",
			__func__);
		return -ENOMEM;
	}

	rc = msm_camera_request_gpio_table(data, 1);
	if (rc < 0) {
		pr_err("%s: request gpio failed\n", __func__);
		goto request_gpio_failed;
	}

	rc = msm_camera_config_vreg(&s_ctrl->sensor_i2c_client->client->dev,
			s_ctrl->sensordata->sensor_platform_info->cam_vreg,
			s_ctrl->sensordata->sensor_platform_info->num_vreg,
			s_ctrl->reg_ptr, 1);
	if (rc < 0) {
		pr_err("%s: regulator on failed\n", __func__);
		goto config_vreg_failed;
	}

	rc = msm_camera_enable_vreg(&s_ctrl->sensor_i2c_client->client->dev,
			s_ctrl->sensordata->sensor_platform_info->cam_vreg,
			s_ctrl->sensordata->sensor_platform_info->num_vreg,
			s_ctrl->reg_ptr, 1);
	if (rc < 0) {
		pr_err("%s: enable regulator failed\n", __func__);
		goto enable_vreg_failed;
	}

	if (data->sensor_platform_info->ext_power_ctrl != NULL)
		data->sensor_platform_info->ext_power_ctrl(1);
	usleep_range(1000, 2000);

	rc = msm_camera_config_gpio_table(data, 1);
	if (rc < 0) {
		pr_err("%s: config gpio failed\n", __func__);
		goto config_gpio_failed;
	}

	if (s_ctrl->clk_rate != 0)
		cam_clk_info->clk_rate = s_ctrl->clk_rate;

	rc = msm_cam_clk_enable(&s_ctrl->sensor_i2c_client->client->dev,
		cam_clk_info, &s_ctrl->cam_clk, ARRAY_SIZE(cam_clk_info), 1);
	if (rc < 0) {
		pr_err("%s: clk enable failed\n", __func__);
		goto enable_clk_failed;
	}

	if (data->sensor_platform_info->i2c_conf &&
		data->sensor_platform_info->i2c_conf->use_i2c_mux)
		msm_sensor_enable_i2c_mux(data->sensor_platform_info->i2c_conf);

	return rc;

enable_clk_failed:
		msm_camera_config_gpio_table(data, 0);
config_gpio_failed:
	msm_camera_enable_vreg(&s_ctrl->sensor_i2c_client->client->dev,
			s_ctrl->sensordata->sensor_platform_info->cam_vreg,
			s_ctrl->sensordata->sensor_platform_info->num_vreg,
			s_ctrl->reg_ptr, 0);

enable_vreg_failed:
	msm_camera_config_vreg(&s_ctrl->sensor_i2c_client->client->dev,
		s_ctrl->sensordata->sensor_platform_info->cam_vreg,
		s_ctrl->sensordata->sensor_platform_info->num_vreg,
		s_ctrl->reg_ptr, 0);
config_vreg_failed:
	msm_camera_request_gpio_table(data, 0);
request_gpio_failed:
	kfree(s_ctrl->reg_ptr);
	return rc;
}
int32_t msm_sensor_power_up(struct msm_sensor_ctrl_t *s_ctrl)
{
	int32_t rc = 0;
	struct msm_camera_sensor_info *data = s_ctrl->sensordata;
	CDBG("%s: %d\n", __func__, __LINE__);
	pr_err("%s: E: %s\n", __func__, data->sensor_name); /* LGE_CHANGE, For debugging, 2012-07-03, [email protected] */
	s_ctrl->reg_ptr = kzalloc(sizeof(struct regulator *)
			* data->sensor_platform_info->num_vreg, GFP_KERNEL);
	if (!s_ctrl->reg_ptr) {
		pr_err("%s: could not allocate mem for regulators\n",
			__func__);
		return -ENOMEM;
	}

	rc = msm_camera_request_gpio_table(data, 1);
	if (rc < 0) {
		pr_err("%s: request gpio failed\n", __func__);
		goto request_gpio_failed;
	}

	rc = msm_camera_config_vreg(&s_ctrl->sensor_i2c_client->client->dev,
			s_ctrl->sensordata->sensor_platform_info->cam_vreg,
			s_ctrl->sensordata->sensor_platform_info->num_vreg,
			s_ctrl->reg_ptr, 1);
	if (rc < 0) {
		pr_err("%s: regulator on failed\n", __func__);
		goto config_vreg_failed;
	}

	rc = msm_camera_enable_vreg(&s_ctrl->sensor_i2c_client->client->dev,
			s_ctrl->sensordata->sensor_platform_info->cam_vreg,
			s_ctrl->sensordata->sensor_platform_info->num_vreg,
			s_ctrl->reg_ptr, 1);
	if (rc < 0) {
		pr_err("%s: enable regulator failed\n", __func__);
		goto enable_vreg_failed;
	}

	rc = msm_camera_config_gpio_table(data, 1);
	if (rc < 0) {
		pr_err("%s: config gpio failed\n", __func__);
		goto config_gpio_failed;
	}

	if (s_ctrl->clk_rate != 0)
		cam_clk_info->clk_rate = s_ctrl->clk_rate;

	rc = msm_cam_clk_enable(&s_ctrl->sensor_i2c_client->client->dev,
		cam_clk_info, &s_ctrl->cam_clk, ARRAY_SIZE(cam_clk_info), 1);
	if (rc < 0) {
		pr_err("%s: clk enable failed\n", __func__);
		goto enable_clk_failed;
	}

#ifdef CONFIG_S5K4E1
/* minimum sleep 20ms for EEPROM read */
	msleep(20);
#else
	usleep_range(1000, 2000);
#endif
	if (data->sensor_platform_info->ext_power_ctrl != NULL)
		data->sensor_platform_info->ext_power_ctrl(1);

	if (data->sensor_platform_info->i2c_conf &&
		data->sensor_platform_info->i2c_conf->use_i2c_mux)
		msm_sensor_enable_i2c_mux(data->sensor_platform_info->i2c_conf);

	pr_err("%s: X\n", __func__); /* LGE_CHANGE, For debugging, 2012-07-03, [email protected] */

	return rc;

enable_clk_failed:
		msm_camera_config_gpio_table(data, 0);
config_gpio_failed:
	msm_camera_enable_vreg(&s_ctrl->sensor_i2c_client->client->dev,
			s_ctrl->sensordata->sensor_platform_info->cam_vreg,
			s_ctrl->sensordata->sensor_platform_info->num_vreg,
			s_ctrl->reg_ptr, 0);

enable_vreg_failed:
	msm_camera_config_vreg(&s_ctrl->sensor_i2c_client->client->dev,
		s_ctrl->sensordata->sensor_platform_info->cam_vreg,
		s_ctrl->sensordata->sensor_platform_info->num_vreg,
		s_ctrl->reg_ptr, 0);
config_vreg_failed:
	msm_camera_request_gpio_table(data, 0);
request_gpio_failed:
	kfree(s_ctrl->reg_ptr);
	return rc;
}
Beispiel #7
0
int32_t mt9m114_msm_sensor_power_up(struct msm_sensor_ctrl_t *s_ctrl)
{
	int32_t rc = 0;
	struct msm_camera_sensor_info *data = s_ctrl->sensordata;
	struct device *dev = NULL;
	if (s_ctrl->sensor_device_type == MSM_SENSOR_PLATFORM_DEVICE)
		dev = &s_ctrl->pdev->dev;
	else
		dev = &s_ctrl->sensor_i2c_client->client->dev;

	rc = msm_camera_request_gpio_table(data, 1);
	if (rc < 0) {
		pr_err("%s: request gpio failed\n", __func__);
		goto request_gpio_failed;
	}

if(!mt9m114_IsPowered){
	s_ctrl->reg_ptr = kzalloc(sizeof(struct regulator *)
			* data->sensor_platform_info->num_vreg, GFP_KERNEL);
	if (!s_ctrl->reg_ptr) {
		pr_err("%s: could not allocate mem for regulators\n",
			__func__);
		return -ENOMEM;
	}

	pr_err("%s: power up\n", __func__);

	rc = msm_camera_config_vreg(dev,
		s_ctrl->sensordata->sensor_platform_info->cam_vreg,
		s_ctrl->sensordata->sensor_platform_info->num_vreg,
		s_ctrl->vreg_seq,
		s_ctrl->num_vreg_seq,
		s_ctrl->reg_ptr, 1);
	if (rc < 0) {
		pr_err("%s: regulator on failed\n", __func__);
		goto config_vreg_failed;
	}

	rc = msm_camera_enable_vreg(dev,
		s_ctrl->sensordata->sensor_platform_info->cam_vreg,
		s_ctrl->sensordata->sensor_platform_info->num_vreg,
		s_ctrl->vreg_seq,
		s_ctrl->num_vreg_seq,
		s_ctrl->reg_ptr, 1);
	if (rc < 0) {
		pr_err("%s: enable regulator failed\n", __func__);
		goto enable_vreg_failed;
	}

	mt9m114_IsPowered=1;
}

	rc = msm_camera_config_gpio_table(data, 1);
	if (rc < 0) {
		pr_err("%s: config gpio failed\n", __func__);
		goto config_gpio_failed;
	}

	if (s_ctrl->sensor_device_type == MSM_SENSOR_I2C_DEVICE) {
		if (s_ctrl->clk_rate != 0)
			cam_8960_clk_info->clk_rate = s_ctrl->clk_rate;

		rc = msm_cam_clk_enable(dev, cam_8960_clk_info,
			s_ctrl->cam_clk, ARRAY_SIZE(cam_8960_clk_info), 1);
		if (rc < 0) {
			pr_err("%s: clk enable failed\n", __func__);
			goto enable_clk_failed;
		}
	} else {
		rc = msm_cam_clk_enable(dev, cam_8974_clk_info,
			s_ctrl->cam_clk, ARRAY_SIZE(cam_8974_clk_info), 1);
		if (rc < 0) {
			pr_err("%s: clk enable failed\n", __func__);
			goto enable_clk_failed;
		}
	}

	if (!s_ctrl->power_seq_delay)
		usleep_range(1000, 2000);
	else if (s_ctrl->power_seq_delay < 20)
		usleep_range((s_ctrl->power_seq_delay * 1000),
			((s_ctrl->power_seq_delay * 1000) + 1000));
	else
		msleep(s_ctrl->power_seq_delay);

	if (data->sensor_platform_info->ext_power_ctrl != NULL)
		data->sensor_platform_info->ext_power_ctrl(1);

	if (data->sensor_platform_info->i2c_conf &&
		data->sensor_platform_info->i2c_conf->use_i2c_mux)
		msm_sensor_enable_i2c_mux(data->sensor_platform_info->i2c_conf);

	if (s_ctrl->sensor_device_type == MSM_SENSOR_PLATFORM_DEVICE) {
		rc = msm_sensor_cci_util(s_ctrl->sensor_i2c_client,
			MSM_CCI_INIT);
		if (rc < 0) {
			pr_err("%s cci_init failed\n", __func__);
			goto cci_init_failed;
		}
	}
	s_ctrl->curr_res = MSM_SENSOR_INVALID_RES;
	return rc;

cci_init_failed:
	if (data->sensor_platform_info->i2c_conf &&
		data->sensor_platform_info->i2c_conf->use_i2c_mux)
		msm_sensor_disable_i2c_mux(
			data->sensor_platform_info->i2c_conf);
enable_clk_failed:
		msm_camera_config_gpio_table(data, 0);
config_gpio_failed:
	msm_camera_enable_vreg(dev,
			s_ctrl->sensordata->sensor_platform_info->cam_vreg,
			s_ctrl->sensordata->sensor_platform_info->num_vreg,
			s_ctrl->vreg_seq,
			s_ctrl->num_vreg_seq,
			s_ctrl->reg_ptr, 0);

enable_vreg_failed:
	msm_camera_config_vreg(dev,
		s_ctrl->sensordata->sensor_platform_info->cam_vreg,
		s_ctrl->sensordata->sensor_platform_info->num_vreg,
		s_ctrl->vreg_seq,
		s_ctrl->num_vreg_seq,
		s_ctrl->reg_ptr, 0);

 		if(mt9m114_IsPowered==1)
			mt9m114_IsPowered=0;      
	
config_vreg_failed:
	msm_camera_request_gpio_table(data, 0);
request_gpio_failed:
	kfree(s_ctrl->reg_ptr);
	return rc;
}
Beispiel #8
0
int32_t hm03d5_power_up(struct msm_sensor_ctrl_t *s_ctrl)
{
    int32_t rc = 0;
    struct msm_camera_sensor_info *data = s_ctrl->sensordata;
    struct device *dev = NULL;
    if (s_ctrl->sensor_device_type == MSM_SENSOR_PLATFORM_DEVICE)
        dev = &s_ctrl->pdev->dev;
    else
        dev = &s_ctrl->sensor_i2c_client->client->dev;

    rc = msm_camera_request_gpio_table(data, 1);
    if (rc < 0) {
        pr_err("%s: request gpio failed\n", __func__);
        goto request_gpio_failed;
    }

    rc = msm_camera_config_gpio_table(data, 1);
    if (rc < 0) {
        pr_err("%s: config gpio failed\n", __func__);
        goto config_gpio_failed;
    }

    if (s_ctrl->sensor_device_type == MSM_SENSOR_I2C_DEVICE) {
        if (s_ctrl->clk_rate != 0)
            cam_8960_clk_info->clk_rate = s_ctrl->clk_rate;

        rc = msm_cam_clk_enable(dev, cam_8960_clk_info,
                                s_ctrl->cam_clk, ARRAY_SIZE(cam_8960_clk_info), 1);
        if (rc < 0) {
            pr_err("%s: clk enable failed\n", __func__);
            goto enable_clk_failed;
        }
    } else {
        rc = msm_cam_clk_enable(dev, cam_8974_clk_info,
                                s_ctrl->cam_clk, ARRAY_SIZE(cam_8974_clk_info), 1);
        if (rc < 0) {
            pr_err("%s: clk enable failed\n", __func__);
            goto enable_clk_failed;
        }
    }

    if (!s_ctrl->power_seq_delay)
        usleep_range(1000, 2000);
    else if (s_ctrl->power_seq_delay < 20)
        usleep_range((s_ctrl->power_seq_delay * 1000),
                     ((s_ctrl->power_seq_delay * 1000) + 1000));
    else
        msleep(s_ctrl->power_seq_delay);

    if (data->sensor_platform_info->ext_power_ctrl != NULL)
        data->sensor_platform_info->ext_power_ctrl(1);

    if (data->sensor_platform_info->i2c_conf &&
            data->sensor_platform_info->i2c_conf->use_i2c_mux)
        msm_sensor_enable_i2c_mux(data->sensor_platform_info->i2c_conf);

    if (s_ctrl->sensor_device_type == MSM_SENSOR_PLATFORM_DEVICE) {
        rc = msm_sensor_cci_util(s_ctrl->sensor_i2c_client,
                                 MSM_CCI_INIT);
        if (rc < 0) {
            pr_err("%s cci_init failed\n", __func__);
            goto cci_init_failed;
        }
    }
    s_ctrl->curr_res = MSM_SENSOR_INVALID_RES;
    return rc;

cci_init_failed:
    if (data->sensor_platform_info->i2c_conf &&
            data->sensor_platform_info->i2c_conf->use_i2c_mux)
        msm_sensor_disable_i2c_mux(
            data->sensor_platform_info->i2c_conf);
enable_clk_failed:
    msm_camera_config_gpio_table(data, 0);
config_gpio_failed:
    msm_camera_request_gpio_table(data, 0);
request_gpio_failed:

    return rc;
}
Beispiel #9
0
static int32_t imx135_sensor_power_up(struct msm_sensor_ctrl_t *s_ctrl)
{
    int32_t rc = 0;
    struct msm_camera_sensor_info *data = s_ctrl->sensordata;

    IMX135_LOG_DBG("START\n");

    
    if (cam_vdig == NULL) {
        IMX135_LOG_DBG("cam_vdig ON START\n");
        cam_vdig = regulator_get(&s_ctrl->sensor_i2c_client->client->dev, "cam_vdig");
        if (IS_ERR(cam_vdig)) {
            IMX135_LOG_ERR("VREG CAM VDIG get failed\n");
	      goto vdig_regulator_get_err;
        }
        if (regulator_set_voltage(cam_vdig, CAM_VDIG_MINUV,
            CAM_VDIG_MAXUV)) {
            IMX135_LOG_ERR("VREG CAM VDIG set voltage failed\n");
            goto vdig_set_vol_err;
        }
        if (regulator_set_optimum_mode(cam_vdig,
            CAM_VDIG_LOAD_UA) < 0) {
            IMX135_LOG_ERR("VREG CAM VDIG set optimum mode failed\n");
	      goto vdig_set_optimum_err;
        }
        if (regulator_enable(cam_vdig)) {
            IMX135_LOG_ERR("VREG CAM VDIG enable failed\n");
            goto vdig_regulator_en_err;
        }
    }

    IMX135_LOG_DBG("cam_vdig:%d [ON/OFF]",regulator_is_enabled(cam_vdig));
    IMX135_LOG_DBG("cam_vdig:%d [V]",regulator_get_voltage(cam_vdig));

    
    IMX135_LOG_DBG("wait %d[ms]\n",IMX135_WAIT_PWON_VREG_L12);
    mdelay(IMX135_WAIT_PWON_VREG_L12);


    
    rc = pm8xxx_gpio_config(IMX135_PMGPIO_CAM_V_EN2, &imx135_cam_v_en_on);
    if (rc) {
        
        IMX135_LOG_ERR("IMX135_PMGPIO_CAM_V_EN2(%d) Error, rc = %d\n", IMX135_PMGPIO_CAM_V_EN2, rc);
	  goto pmgpio_26_config_err;
    }
    IMX135_LOG_DBG("PMGPIO[26]:ON\n");

    
    IMX135_LOG_DBG("wait %d[ms]\n",IMX135_WAIT_PWON_V_EN2);
    mdelay(IMX135_WAIT_PWON_V_EN2);


    
    rc = pm8xxx_gpio_config(IMX135_PMGPIO_CAM_V_EN1, &imx135_cam_v_en_on);
    if (rc) {
        
        IMX135_LOG_ERR("IMX135_PMGPIO_CAM_V_EN1(%d) Error, rc = %d\n", IMX135_PMGPIO_CAM_V_EN1, rc);
	  goto pmgpio_13_config_err;
    }
    IMX135_LOG_DBG("PMGPIO[13]:ON\n");

    
    IMX135_LOG_DBG("wait %d[ms]\n",IMX135_WAIT_PWON_V_EN1);
    mdelay(IMX135_WAIT_PWON_V_EN1);


    
    if (cam_vana == NULL) {
        IMX135_LOG_DBG("cam_vana START\n");
        cam_vana = regulator_get(&s_ctrl->sensor_i2c_client->client->dev, "cam_vana");
        if (IS_ERR(cam_vana)) {
            IMX135_LOG_ERR("VREG CAM VANA get failed\n");
	      goto vana_regulator_get_err;
        }
        if (regulator_set_voltage(cam_vana, CAM_VANA_MINUV,
            CAM_VANA_MAXUV)) {
            IMX135_LOG_ERR("VREG CAM VANA set voltage failed\n");
	      goto vana_set_vol_err;
        }
        if (regulator_set_optimum_mode(cam_vana,
            CAM_VANA_LOAD_UA) < 0) {
            IMX135_LOG_ERR("VREG CAM VANA set optimum mode failed\n");
            goto vana_set_optimum_err;
        }
        if (regulator_enable(cam_vana)) {
            IMX135_LOG_ERR("VREG CAM VANA enable failed\n");
            goto vana_regulator_en_err;
        }
    }

    IMX135_LOG_DBG("cam_vana:%d [ON/OFF]",regulator_is_enabled(cam_vana));
    IMX135_LOG_DBG("cam_vana:%d [V]",regulator_get_voltage(cam_vana));

    
    IMX135_LOG_DBG("wait %d[ms]\n",IMX135_WAIT_PWON_VREG_L11);
    mdelay(IMX135_WAIT_PWON_VREG_L11);



    
    rc = pm8xxx_gpio_config(IMX135_PMGPIO_CAM_RST_N, &imx135_cam_v_en_on);
    if (rc) {
        
        IMX135_LOG_DBG("IMX135_PMGPIO_CAM_RST_N(%d) Error, rc = %d\n", IMX135_PMGPIO_CAM_RST_N, rc);
	  goto pmgpio_28_config_err;
    }
    IMX135_LOG_DBG("PMGPIO[28]:ON\n");

    
    IMX135_LOG_DBG("wait %d[ms]\n",IMX135_WAIT_PWON_RST_N);
    mdelay(IMX135_WAIT_PWON_RST_N);


    
    rc = msm_camera_request_gpio_table(data, 1);
    if (rc < 0) {
        IMX135_LOG_ERR("request gpio failed\n");
	  goto mclk_request_gpio_err;
    }

    if (s_ctrl->clk_rate != 0)
        imx135_cam_clk_info->clk_rate = s_ctrl->clk_rate;

    rc = msm_cam_clk_enable(&s_ctrl->sensor_i2c_client->client->dev,
        imx135_cam_clk_info, s_ctrl->cam_clk, ARRAY_SIZE(imx135_cam_clk_info), 1);
    if (rc < 0) {
        IMX135_LOG_ERR("clk enable failed\n");
        goto mclk_enable_err;
    }
    IMX135_LOG_DBG("MCLK ENABLE\n");

    
    IMX135_LOG_DBG("wait %d[ms]\n",IMX135_WAIT_PWON_MCLK);
    mdelay(IMX135_WAIT_PWON_MCLK);

    
    if (data->sensor_platform_info->i2c_conf &&
        data->sensor_platform_info->i2c_conf->use_i2c_mux){
        msm_sensor_enable_i2c_mux(data->sensor_platform_info->i2c_conf);
        IMX135_LOG_DBG("msm_sensor_enable_i2c_mux()\n");
    }
    IMX135_LOG_DBG("END\n");
    return rc;

mclk_enable_err:
    msm_camera_request_gpio_table(data, 0);
mclk_request_gpio_err:
    pm8xxx_gpio_config(IMX135_PMGPIO_CAM_RST_N, &imx135_cam_v_en_off);
pmgpio_28_config_err:
    regulator_disable(cam_vana);
vana_regulator_en_err:
    regulator_set_optimum_mode(cam_vana, 0);
vana_set_optimum_err:
    regulator_set_voltage(cam_vana, 0, CAM_VDIG_MAXUV);
vana_set_vol_err:
    regulator_put(cam_vana);
vana_regulator_get_err:
    cam_vana = NULL;
    pm8xxx_gpio_config(IMX135_PMGPIO_CAM_V_EN1, &imx135_cam_v_en_off);
pmgpio_13_config_err:
    pm8xxx_gpio_config(IMX135_PMGPIO_CAM_V_EN2, &imx135_cam_v_en_off);
pmgpio_26_config_err:
    regulator_disable(cam_vdig);
vdig_regulator_en_err:
    regulator_set_optimum_mode(cam_vdig, 0);
vdig_set_optimum_err:
    regulator_set_voltage(cam_vdig, 0, CAM_VDIG_MAXUV);
vdig_set_vol_err:
    regulator_put(cam_vdig);
vdig_regulator_get_err:
    cam_vdig = NULL;
    IMX135_LOG_ERR("power up imx135 error\n");
    return -EFAULT;
}