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; }
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; }
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; }
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; }
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; }
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; }
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; }