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; } 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; } usleep_range(1000, 2000); if (data->sensor_platform_info->ext_power_ctrl != NULL) data->sensor_platform_info->ext_power_ctrl(1); 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_bayer_power_down(struct msm_sensor_ctrl_t *s_ctrl) { int32_t size = 0, index = 0; struct msm_camera_sensor_info *data = s_ctrl->sensordata; struct msm_camera_power_seq_t *power_seq = NULL; CDBG("%s\n", __func__); if (s_ctrl->power_seq) { power_seq = s_ctrl->power_seq; size = s_ctrl->num_power_seq; } else { power_seq = &sensor_power_seq[0]; size = ARRAY_SIZE(sensor_power_seq); } for (index = (size - 1); index >= 0; index--) { switch (power_seq[index].power_config) { case CONFIG_I2C_MUX: if (data->sensor_platform_info->i2c_conf && data->sensor_platform_info->i2c_conf-> use_i2c_mux) msm_sensor_bayer_disable_i2c_mux( data->sensor_platform_info->i2c_conf); break; case CONFIG_EXT_POWER_CTRL: if (data->sensor_platform_info->ext_power_ctrl != NULL) data->sensor_platform_info->ext_power_ctrl(0); break; case CONFIG_CLK: msm_cam_clk_enable(&s_ctrl->sensor_i2c_client->client-> dev, cam_clk_info, s_ctrl->cam_clk, ARRAY_SIZE(cam_clk_info), 0); break; case ENABLE_GPIO: msm_camera_config_gpio_table(data, 0); break; case ENABLE_VREG: 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->vreg_seq, s_ctrl->num_vreg_seq, s_ctrl->reg_ptr, 0); break; case REQUEST_VREG: 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->vreg_seq, s_ctrl->num_vreg_seq, s_ctrl->reg_ptr, 0); break; case REQUEST_GPIO: msm_camera_request_gpio_table(data, 0); break; default: pr_err("%s error power config %d\n", __func__, power_seq[index].power_config); break; } } kfree(s_ctrl->reg_ptr); return 0; }
int hi351_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__); if (data->sensor_platform_info->ext_power_ctrl != NULL) data->sensor_platform_info->ext_power_ctrl(1); rc = msm_camera_request_gpio_table(data, 1); if (rc < 0) { pr_err("%s: request gpio failed\n", __func__); goto request_gpio_failed; } // 1. RESET LOW if (data->sensor_reset_enable) { rc = gpio_request(data->sensor_reset, "hi351_reset"); //msm_camera_request_gpio_table(reset pin already requested) if (rc < 0) pr_err("%s: gpio_request:CAM_RESET %d failed\n", __func__, data->sensor_reset); rc = gpio_direction_output(data->sensor_reset, 0); if (rc < 0) pr_err("%s: gpio:CAM_RESET %d direction can't be set\n", __func__, data->sensor_reset); } // 2. PWDN LOW rc = gpio_request(data->sensor_pwd, "hi351_pwdn"); if (rc < 0) pr_err("%s: gpio_request:CAM_PWDN %d failed\n", __func__, data->sensor_pwd); rc = gpio_direction_output(data->sensor_pwd, 0); if (rc < 0) pr_err("%s: gpio:CAM_PWDN %d direction can't be set\n", __func__, data->sensor_pwd); msleep(1); // 3. CAM PWR ON rc = msm_camera_config_gpio_table(data, 1); if (rc < 0) { pr_err("%s: config gpio failed\n", __func__); goto config_gpio_failed; } msleep(1); // 4. PWDN HIGH rc = gpio_direction_output(data->sensor_pwd, 1); if (rc < 0) { pr_err("%s: gpio:CAM_PWDN %d direction can't be set\n", __func__, data->sensor_pwd); } msleep(1); // 4. MCLK Enable if (s_ctrl->clk_rate != 0) cam_clk_info->clk_rate = s_ctrl->clk_rate; pr_err("MCLK set\n"); 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; } msleep(10); // 6. RESET HIGH rc = gpio_direction_output(data->sensor_reset, 1); if (rc < 0) pr_err("%s: gpio:CAM_RESET %d direction can't be set\n", __func__, data->sensor_reset); msleep(1); printk("%s: X %d\n", __func__, __LINE__); return rc; enable_clk_failed: msm_camera_request_gpio_table(data, 0); request_gpio_failed: msm_camera_config_gpio_table(data, 0); config_gpio_failed: data->sensor_platform_info->ext_power_ctrl(0); return rc; }
int32_t imx119_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; CDBG("%s: %d\n", __func__, __LINE__); if (s_ctrl->sensor_device_type == MSM_SENSOR_PLATFORM_DEVICE) dev = &s_ctrl->pdev->dev; else dev = &s_ctrl->sensor_i2c_client->client->dev; 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: before request gpio, sensor name : %s", __func__, s_ctrl->sensordata->sensor_name); 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(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) { LDBGE("%s: regulator on failed\n", __func__); goto config_vreg_failed; } /* */ rc = gpio_request(MSM_CAM2_RST_EN, "VTCAM_RST_EN"); if (rc) { LDBGE("%s: PM request gpio failed\n", __func__); } /* */ 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) { LDBGE("%s: enable regulator failed\n", __func__); goto enable_vreg_failed; } /* */ usleep(100); rc =pm8xxx_gpio_config(MSM_CAM2_RST_EN, &gpio28_param); if (rc) { LDBGE("%s: pm8xxx_gpio_config on failed\n", __func__); } /* */ rc = gpio_direction_output(MSM_CAM2_RST_EN, 1); rc = msm_camera_config_gpio_table(data, 1); if (rc < 0) { LDBGE("%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) imx119_cam_clk_info->clk_rate = s_ctrl->clk_rate; rc = msm_cam_clk_enable(dev, imx119_cam_clk_info, s_ctrl->cam_clk, ARRAY_SIZE(imx119_cam_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) imx119_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; pr_err( " %s : X sensor name is %s \n",__func__, s_ctrl->sensordata->sensor_name); return rc; cci_init_failed: if (data->sensor_platform_info->i2c_conf && data->sensor_platform_info->i2c_conf->use_i2c_mux) imx119_msm_sensor_disable_i2c_mux( data->sensor_platform_info->i2c_conf); enable_clk_failed: rc = gpio_direction_output(MSM_CAM2_RST_EN, 0); 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); config_vreg_failed: msm_camera_request_gpio_table(data, 0); request_gpio_failed: kfree(s_ctrl->reg_ptr); return rc; }
int32_t msm_sensor_bayer_power_up(struct msm_sensor_ctrl_t *s_ctrl) { int32_t rc = 0, size = 0, index = 0; struct msm_camera_sensor_info *data = s_ctrl->sensordata; struct msm_camera_power_seq_t *power_seq = NULL; CDBG("%s: %d\n", __func__, __LINE__); if (s_ctrl->power_seq) { power_seq = s_ctrl->power_seq; size = s_ctrl->num_power_seq; } else { power_seq = &sensor_power_seq[0]; size = ARRAY_SIZE(sensor_power_seq); } 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; } for (index = 0; index < size; index++) { switch (power_seq[index].power_config) { case REQUEST_GPIO: rc = msm_camera_request_gpio_table(data, 1); if (rc < 0) { pr_err("%s: request gpio failed\n", __func__); goto ERROR; } if (power_seq[index].delay) usleep_range(power_seq[index].delay * 1000, (power_seq[index].delay * 1000) + 1000); break; case REQUEST_VREG: 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->vreg_seq, s_ctrl->num_vreg_seq, s_ctrl->reg_ptr, 1); if (rc < 0) { pr_err("%s: regulator on failed\n", __func__); goto ERROR; } if (power_seq[index].delay) usleep_range(power_seq[index].delay * 1000, (power_seq[index].delay * 1000) + 1000); break; case ENABLE_VREG: 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->vreg_seq, s_ctrl->num_vreg_seq, s_ctrl->reg_ptr, 1); if (rc < 0) { pr_err("%s: enable regulator failed\n", __func__); goto ERROR; } if (power_seq[index].delay) usleep_range(power_seq[index].delay * 1000, (power_seq[index].delay * 1000) + 1000); break; case ENABLE_GPIO: rc = msm_camera_config_gpio_table(data, 1); if (rc < 0) { pr_err("%s: config gpio failed\n", __func__); goto ERROR; } if (power_seq[index].delay) usleep_range(power_seq[index].delay * 1000, (power_seq[index].delay * 1000) + 1000); break; case CONFIG_CLK: 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 ERROR; } if (power_seq[index].delay) usleep_range(power_seq[index].delay * 1000, (power_seq[index].delay * 1000) + 1000); break; case CONFIG_EXT_POWER_CTRL: if (data->sensor_platform_info->ext_power_ctrl != NULL) data->sensor_platform_info->ext_power_ctrl(1); if (power_seq[index].delay) usleep_range(power_seq[index].delay * 1000, (power_seq[index].delay * 1000) + 1000); break; case CONFIG_I2C_MUX: if (data->sensor_platform_info->i2c_conf && data->sensor_platform_info->i2c_conf-> use_i2c_mux) msm_sensor_bayer_enable_i2c_mux( data->sensor_platform_info->i2c_conf); if (power_seq[index].delay) usleep_range(power_seq[index].delay * 1000, (power_seq[index].delay * 1000) + 1000); break; default: pr_err("%s error power config %d\n", __func__, power_seq[index].power_config); rc = -EINVAL; break; } } return rc; ERROR: for (index--; index >= 0; index--) { switch (power_seq[index].power_config) { case CONFIG_I2C_MUX: if (data->sensor_platform_info->i2c_conf && data->sensor_platform_info->i2c_conf-> use_i2c_mux) msm_sensor_bayer_disable_i2c_mux( data->sensor_platform_info->i2c_conf); break; case CONFIG_EXT_POWER_CTRL: if (data->sensor_platform_info->ext_power_ctrl != NULL) data->sensor_platform_info->ext_power_ctrl(0); break; case CONFIG_CLK: msm_cam_clk_enable(&s_ctrl->sensor_i2c_client->client-> dev, cam_clk_info, s_ctrl->cam_clk, ARRAY_SIZE(cam_clk_info), 0); break; case ENABLE_GPIO: msm_camera_config_gpio_table(data, 0); break; case ENABLE_VREG: 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->vreg_seq, s_ctrl->num_vreg_seq, s_ctrl->reg_ptr, 0); break; case REQUEST_VREG: 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->vreg_seq, s_ctrl->num_vreg_seq, s_ctrl->reg_ptr, 0); break; case REQUEST_GPIO: msm_camera_request_gpio_table(data, 0); break; default: pr_err("%s error power config %d\n", __func__, power_seq[index].power_config); break; } } kfree(s_ctrl->reg_ptr); 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__); /* */ 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); /* */ #ifdef LGIT_IEF_SWITCH if(system_state != SYSTEM_BOOTING){ printk("[IEF_OFF] Camera \n"); mipi_lgd_lcd_ief_off(); } #endif /* */ printk("%s: X, %d\n", __func__, __LINE__); /* */ 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 imx132_sensor_power_down(struct msm_sensor_ctrl_t *s_ctrl) { int32_t rc = 0; struct msm_camera_sensor_info *data = s_ctrl->sensordata; CDBG("%s\n", __func__); pr_err("%s\n", __func__); /* LGE_CHANGE_S, [email protected], 2012-10-31, Wise screen / Because of the display engine */ sub_cam_id_for_keep_screen_on = -1; /* LGE_CHANGE_E, [email protected], 2012-10-31, Wise screen / Because of the display engine */ /*LGE_UPDATE_S Color Engine Switch for camera, 2012.11.19, [email protected]*/ #ifdef LGIT_COLOR_ENGINE_SWITCH if(system_state != SYSTEM_BOOTING) { mipi_lgit_lcd_color_engine_on(); } #endif /*LGE_UPDATE_E Color Engine Switch for camera, 2012.11.19, [email protected]*/ if (data->sensor_platform_info->i2c_conf && data->sensor_platform_info->i2c_conf->use_i2c_mux) imx132_msm_sensor_disable_i2c_mux( data->sensor_platform_info->i2c_conf); if (data->sensor_platform_info->ext_power_ctrl != NULL) data->sensor_platform_info->ext_power_ctrl(0); msm_cam_clk_enable(&s_ctrl->sensor_i2c_client->client->dev, imx132_cam_clk_info, s_ctrl->cam_clk, ARRAY_SIZE(imx132_cam_clk_info), 0); /* LGE_CHANGE_S, increase timing margin, 2012.06.19, [email protected] */ usleep(5); /* LGE_CHANGE_E, increase timing margin, 2012.06.19, [email protected] */ #if defined(CONFIG_MACH_APQ8064_GKKT) || defined(CONFIG_MACH_APQ8064_GKSK) || defined(CONFIG_MACH_APQ8064_GKU) || defined(CONFIG_MACH_APQ8064_GKATT) if(lge_get_board_revno() >= HW_REV_C ||lge_get_board_revno() == HW_REV_1_0){ LDBGI("%s: Revision [%d] MSM_CAM2_RST_EN GPIO No.%d\n",__func__, lge_get_board_revno(), MSM_CAM2_RST_EN ); rc = gpio_direction_output(MSM_CAM2_RST_EN, 0 ); } #elif defined(CONFIG_MACH_APQ8064_GVDCM) if(lge_get_board_revno() >= HW_REV_C){ LDBGI("%s: Revision [%d] MSM_CAM2_RST_EN GPIO No.%d\n",__func__, lge_get_board_revno(), MSM_CAM2_RST_EN ); rc = gpio_direction_output(MSM_CAM2_RST_EN, 0 ); } #endif else { msm_camera_config_gpio_table(data, 0); } /* LGE_CHANGE_S, Avoid Kernel Panic, 2012.11.12, jungki.kim[Start] */ if(s_ctrl->reg_ptr != NULL) { 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->vreg_seq, s_ctrl->num_vreg_seq, s_ctrl->reg_ptr, 0); 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->vreg_seq, s_ctrl->num_vreg_seq, s_ctrl->reg_ptr, 0); kfree(s_ctrl->reg_ptr); } else { // NULL! LDBGE("%s: No Regulator Pointer!\n", __func__); } /* LGE_CHANGE_E, Avoid Kernel Panic, 2012.11.12, jungki.kim[End] */ rc = gpio_direction_output(MSM_VT_PWR_EN, 0); if (rc) { pr_err("%s: gpio_direction_output enable failed\n", __func__); } msm_camera_request_gpio_table(data, 0); gpio_free(MSM_VT_PWR_EN); #if defined(CONFIG_MACH_APQ8064_GKKT) || defined(CONFIG_MACH_APQ8064_GKSK) || defined(CONFIG_MACH_APQ8064_GKU) || defined(CONFIG_MACH_APQ8064_GKATT) if(lge_get_board_revno() >= HW_REV_C ||lge_get_board_revno() == HW_REV_1_0){ LDBGI("%s: Revision [%d] MSM_CAM2_RST_EN GPIO No.%d\n",__func__, lge_get_board_revno(), MSM_CAM2_RST_EN ); gpio_free(MSM_CAM2_RST_EN); } #elif defined(CONFIG_MACH_APQ8064_GVDCM) if(lge_get_board_revno() >= HW_REV_C){ pr_err("%s: Revision check! MSM_CAM2_RST_EN GPIO No.%d\n",__func__,MSM_CAM2_RST_EN ); gpio_free(MSM_CAM2_RST_EN); } #endif return 0; }
int32_t imx132_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__); #ifdef LGIT_IEF_SWITCH if(system_state != SYSTEM_BOOTING) { mipi_lgit_lcd_ief_off(); } #endif 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: before request gpio, sensor name : %s", __func__, s_ctrl->sensordata->sensor_name); rc = msm_camera_request_gpio_table(data, 1); if (rc < 0) { pr_err("%s: request gpio failed\n", __func__); goto request_gpio_failed; } rc = gpio_request(MSM_VT_PWR_EN, "VT_PWR_EN"); #if defined(CONFIG_MACH_APQ8064_GKKT) || defined(CONFIG_MACH_APQ8064_GKSK) || defined(CONFIG_MACH_APQ8064_GKU) || defined(CONFIG_MACH_APQ8064_GKATT) if(lge_get_board_revno() >= HW_REV_C ||lge_get_board_revno() == HW_REV_1_0){ LDBGI("%s: Revision [%d] MSM_CAM2_RST_EN GPIO No.%d\n",__func__, lge_get_board_revno(), MSM_CAM2_RST_EN); rc = gpio_request(MSM_CAM2_RST_EN, "VTCAM_RST_EN"); } if (rc) { LDBGE("%s: PM request gpio failed\n", __func__); } #elif defined(CONFIG_MACH_APQ8064_GVDCM) if(lge_get_board_revno() >= HW_REV_C){ LDBGI("%s: Revision [%d] MSM_CAM2_RST_EN GPIO No.%d\n",__func__, lge_get_board_revno(), MSM_CAM2_RST_EN); rc = gpio_request(MSM_CAM2_RST_EN, "VTCAM_RST_EN"); } if (rc) { LDBGE("%s: PM request gpio failed\n", __func__); } #endif 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->vreg_seq, s_ctrl->num_vreg_seq, s_ctrl->reg_ptr, 1); if (rc < 0) { LDBGE("%s: regulator on failed\n", __func__); goto config_vreg_failed; } rc =pm8xxx_gpio_config(MSM_VT_PWR_EN, &gpio35_param); #if defined(CONFIG_MACH_APQ8064_GKKT) || defined(CONFIG_MACH_APQ8064_GKSK) || defined(CONFIG_MACH_APQ8064_GKU) || defined(CONFIG_MACH_APQ8064_GKATT) if(lge_get_board_revno() >= HW_REV_C ||lge_get_board_revno() == HW_REV_1_0){ LDBGI("%s: Revision [%d] MSM_CAM2_RST_EN GPIO No.%d\n",__func__, lge_get_board_revno(), MSM_CAM2_RST_EN ); rc =pm8xxx_gpio_config(MSM_CAM2_RST_EN, &gpio28_param); } if (rc) { LDBGE("%s: pm8xxx_gpio_config on failed\n", __func__); } #elif defined(CONFIG_MACH_APQ8064_GVDCM) if(lge_get_board_revno() >= HW_REV_C){ LDBGI("%s: Revision [%d] MSM_CAM2_RST_EN GPIO No.%d\n",__func__, lge_get_board_revno(), MSM_CAM2_RST_EN ); rc =pm8xxx_gpio_config(MSM_CAM2_RST_EN, &gpio28_param); } if (rc) { LDBGE("%s: pm8xxx_gpio_config on failed\n", __func__); } #endif rc = gpio_direction_output(MSM_VT_PWR_EN, 0); usleep(5); rc = gpio_direction_output(MSM_VT_PWR_EN, 1); if (rc) { LDBGE("%s: gpio_direction_output enable failed\n", __func__); } 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->vreg_seq, s_ctrl->num_vreg_seq, s_ctrl->reg_ptr, 1); if (rc < 0) { LDBGE("%s: enable regulator failed\n", __func__); goto enable_vreg_failed; } usleep(10); #if defined(CONFIG_MACH_APQ8064_GKKT) || defined(CONFIG_MACH_APQ8064_GKSK) || defined(CONFIG_MACH_APQ8064_GKU) || defined(CONFIG_MACH_APQ8064_GKATT) if(lge_get_board_revno() >= HW_REV_C ||lge_get_board_revno() == HW_REV_1_0){ LDBGI("%s: Revision [%d] MSM_CAM2_RST_EN GPIO No.%d\n",__func__, lge_get_board_revno(), MSM_CAM2_RST_EN ); rc = gpio_direction_output(MSM_CAM2_RST_EN, 1); } #elif defined(CONFIG_MACH_APQ8064_GVDCM) if(lge_get_board_revno() >= HW_REV_C){ LDBGI("%s: Revision [%d] MSM_CAM2_RST_EN GPIO No.%d\n",__func__, lge_get_board_revno(), MSM_CAM2_RST_EN ); rc = gpio_direction_output(MSM_CAM2_RST_EN, 1); } #endif else { rc = msm_camera_config_gpio_table(data, 1); if (rc < 0) { LDBGE("%s: config gpio failed\n", __func__); goto config_gpio_failed; } } if (s_ctrl->clk_rate != 0) imx132_cam_clk_info->clk_rate = s_ctrl->clk_rate; rc = msm_cam_clk_enable(&s_ctrl->sensor_i2c_client->client->dev, imx132_cam_clk_info, s_ctrl->cam_clk, ARRAY_SIZE(imx132_cam_clk_info), 1); if (rc < 0) { LDBGE("%s: clk enable failed\n", __func__); goto enable_clk_failed; } usleep_range(1000, 2000); 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) imx132_msm_sensor_enable_i2c_mux(data->sensor_platform_info->i2c_conf); return rc; enable_clk_failed: #if defined(CONFIG_MACH_APQ8064_GKKT) || defined(CONFIG_MACH_APQ8064_GKSK) || defined(CONFIG_MACH_APQ8064_GKU) || defined(CONFIG_MACH_APQ8064_GKATT) if(lge_get_board_revno() >= HW_REV_C ||lge_get_board_revno() == HW_REV_1_0){ LDBGI("%s: Revision [%d] MSM_CAM2_RST_EN GPIO No.%d\n",__func__, lge_get_board_revno(), MSM_CAM2_RST_EN ); rc = gpio_direction_output(MSM_CAM2_RST_EN, 0); } #elif defined(CONFIG_MACH_APQ8064_GVDCM) if(lge_get_board_revno() >= HW_REV_C){ LDBGI("%s: Revision [%d] MSM_CAM2_RST_EN GPIO No.%d\n",__func__, lge_get_board_revno(), MSM_CAM2_RST_EN ); rc = gpio_direction_output(MSM_CAM2_RST_EN, 0); } #endif else { 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->vreg_seq, s_ctrl->num_vreg_seq, 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->vreg_seq, s_ctrl->num_vreg_seq, 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 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; }
int32_t t8ev4_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__); 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; } /* RESET LOW*/ if (data->sensor_reset_enable) { rc = gpio_request(data->sensor_reset, "CAM_RESET"); if (rc < 0) pr_err("%s: gpio_request:CAM_RESET %d failed\n", __func__, data->sensor_reset); rc = gpio_direction_output(data->sensor_reset, 0); if (rc < 0) pr_err("%s: gpio:CAM_RESET %d direction can't be set\n", __func__, data->sensor_reset); } 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; } usleep_range(1000, 2000); /* RESET HIGH */ if (data->sensor_reset_enable) { rc = gpio_direction_output(data->sensor_reset, 1); if (rc < 0) pr_err("%s: gpio:CAM_RESET %d direction can't be set\n", __func__, data->sensor_reset); } if (data->sensor_platform_info->ext_power_ctrl != NULL) data->sensor_platform_info->ext_power_ctrl(1); printk("%s: X %d\n", __func__, __LINE__); return rc; enable_clk_failed: msm_camera_config_gpio_table(data, 0); config_gpio_failed: if (data->sensor_reset_enable) { gpio_direction_output(data->sensor_reset, 0); usleep_range(1000, 2000); } msm_camera_request_gpio_table(data, 0); request_gpio_failed: kfree(s_ctrl->reg_ptr); printk("%s: X %d failed\n", __func__, __LINE__); 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__); #ifdef CONFIG_MT9E013_LGIT if (data->sensor_platform_info->ext_power_ctrl != NULL) data->sensor_platform_info->ext_power_ctrl(1); #endif 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; } usleep_range(1000, 2000); #ifdef CONFIG_MT9E013_LGIT if (data->sensor_platform_info->ext_power_ctrl != NULL) data->sensor_platform_info->ext_power_ctrl(0); mdelay(1); #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; }