static int msm_csid_init(struct v4l2_subdev *sd, uint32_t *csid_version) { int rc = 0; struct csid_device *csid_dev; csid_dev = v4l2_get_subdevdata(sd); if (csid_dev == NULL) { rc = -ENOMEM; return rc; } csid_dev->base = ioremap(csid_dev->mem->start, resource_size(csid_dev->mem)); if (!csid_dev->base) { rc = -ENOMEM; return rc; } rc = msm_cam_clk_enable(&csid_dev->pdev->dev, csid_clk_info, csid_dev->csid_clk, ARRAY_SIZE(csid_clk_info), 1); if (rc < 0) { iounmap(csid_dev->base); csid_dev->base = NULL; pr_err("%s: regulator enable failed\n", __func__); goto clk_enable_failed; } #if DBG_CSID enable_irq(csid_dev->irq->start); #endif csid_dev->hw_version = msm_io_r(csid_dev->base + CSID_HW_VERSION_ADDR); *csid_version = csid_dev->hw_version; init_completion(&csid_dev->reset_complete); rc = request_irq(csid_dev->irq->start, msm_csid_irq, IRQF_TRIGGER_RISING, "csid", csid_dev); msm_csid_reset(csid_dev); pr_info("%s:%d\n", __func__, __LINE__); return rc; clk_enable_failed: iounmap(csid_dev->base); csid_dev->base = NULL; pr_info("%s:%d\n", __func__, __LINE__); return rc; }
static int msm_csid_config(struct csid_device *csid_dev, struct msm_camera_csid_params *csid_params) { int rc = 0; uint32_t val = 0; void __iomem *csidbase; csidbase = csid_dev->base; if (!csidbase || !csid_params) { pr_err("%s:%d csidbase %p, csid params %p\n", __func__, __LINE__, csidbase, csid_params); return -EINVAL; } CDBG("%s csid_params, lane_cnt = %d, lane_assign = 0x%x\n", __func__, csid_params->lane_cnt, csid_params->lane_assign); CDBG("%s csid_params phy_sel = %d\n", __func__, csid_params->phy_sel); msm_csid_reset(csid_dev); val = csid_params->lane_cnt - 1; val |= csid_params->lane_assign << csid_dev->ctrl_reg->csid_reg.csid_dl_input_sel_shift; if (csid_dev->hw_version < 0x30000000) { val |= (0xF << 10); msm_camera_io_w(val, csidbase + csid_dev->ctrl_reg->csid_reg.csid_core_ctrl_0_addr); } else { msm_camera_io_w(val, csidbase + csid_dev->ctrl_reg->csid_reg.csid_core_ctrl_0_addr); val = csid_params->phy_sel << csid_dev->ctrl_reg->csid_reg.csid_phy_sel_shift; val |= 0xF; msm_camera_io_w(val, csidbase + csid_dev->ctrl_reg->csid_reg.csid_core_ctrl_1_addr); } rc = msm_csid_cid_lut(&csid_params->lut_params, csid_dev); if (rc < 0) return rc; msm_csid_set_debug_reg(csid_dev, csid_params); return rc; }
static int msm_csid_config(struct csid_device *csid_dev, struct msm_camera_csid_params *csid_params) { int rc = 0; uint32_t val = 0; void __iomem *csidbase; csidbase = csid_dev->base; if (!csidbase || !csid_params) { pr_err("%s:%d csidbase %p, csid params %p\n", __func__, __LINE__, csidbase, csid_params); return -EINVAL; } CDBG("%s csid_params, lane_cnt = %d, lane_assign = %x, phy sel = %d\n", __func__, csid_params->lane_cnt, csid_params->lane_assign, csid_params->phy_sel); msm_csid_reset(csid_dev); val = csid_params->lane_cnt - 1; val |= csid_params->lane_assign << CSID_DL_INPUT_SEL_SHIFT; if (csid_dev->hw_version < 0x30000000) { val |= (0xF << 10); msm_camera_io_w(val, csidbase + CSID_CORE_CTRL_0_ADDR); } else { msm_camera_io_w(val, csidbase + CSID_CORE_CTRL_0_ADDR); val = csid_params->phy_sel << CSID_PHY_SEL_SHIFT; val |= 0xF; msm_camera_io_w(val, csidbase + CSID_CORE_CTRL_1_ADDR); } rc = msm_csid_cid_lut(&csid_params->lut_params, csidbase); if (rc < 0) return rc; msm_csid_set_debug_reg(csidbase, csid_params); return rc; }
static int msm_csid_init(struct csid_device *csid_dev, uint32_t *csid_version) { int rc = 0; if (!csid_version) { pr_err("%s:%d csid_version NULL\n", __func__, __LINE__); rc = -EINVAL; return rc; } if (csid_dev->csid_state == CSID_POWER_UP) { pr_err("%s: csid invalid state %d\n", __func__, csid_dev->csid_state); rc = -EINVAL; return rc; } csid_dev->base = ioremap(csid_dev->mem->start, resource_size(csid_dev->mem)); if (!csid_dev->base) { pr_err("%s csid_dev->base NULL\n", __func__); rc = -ENOMEM; return rc; } if (CSID_VERSION <= CSID_VERSION_V2) { rc = msm_camera_config_vreg(&csid_dev->pdev->dev, csid_8960_vreg_info, ARRAY_SIZE(csid_8960_vreg_info), NULL, 0, &csid_dev->csi_vdd, 1); if (rc < 0) { pr_err("%s: regulator on failed\n", __func__); goto vreg_config_failed; } rc = msm_camera_enable_vreg(&csid_dev->pdev->dev, csid_8960_vreg_info, ARRAY_SIZE(csid_8960_vreg_info), NULL, 0, &csid_dev->csi_vdd, 1); if (rc < 0) { pr_err("%s: regulator enable failed\n", __func__); goto vreg_enable_failed; } rc = msm_cam_clk_enable(&csid_dev->pdev->dev, csid_8960_clk_info, csid_dev->csid_clk, ARRAY_SIZE(csid_8960_clk_info), 1); if (rc < 0) { pr_err("%s: clock enable failed\n", __func__); goto clk_enable_failed; } } else if (CSID_VERSION >= CSID_VERSION_V3) { rc = msm_camera_config_vreg(&csid_dev->pdev->dev, csid_vreg_info, ARRAY_SIZE(csid_vreg_info), NULL, 0, &csid_dev->csi_vdd, 1); if (rc < 0) { pr_err("%s: regulator on failed\n", __func__); goto vreg_config_failed; } rc = msm_camera_enable_vreg(&csid_dev->pdev->dev, csid_vreg_info, ARRAY_SIZE(csid_vreg_info), NULL, 0, &csid_dev->csi_vdd, 1); if (rc < 0) { pr_err("%s: regulator enable failed\n", __func__); goto vreg_enable_failed; } rc = msm_cam_clk_enable(&csid_dev->pdev->dev, csid_8974_clk_info, csid_dev->csid_clk, ARRAY_SIZE(csid_8974_clk_info), 1); if (rc < 0) { pr_err("%s: clock enable failed\n", __func__); goto clk_enable_failed; } } CDBG("%s:%d called\n", __func__, __LINE__); csid_dev->hw_version = msm_camera_io_r(csid_dev->base + CSID_HW_VERSION_ADDR); CDBG("%s:%d called csid_dev->hw_version %x\n", __func__, __LINE__, csid_dev->hw_version); *csid_version = csid_dev->hw_version; init_completion(&csid_dev->reset_complete); enable_irq(csid_dev->irq->start); msm_csid_reset(csid_dev); csid_dev->csid_state = CSID_POWER_UP; return rc; clk_enable_failed: if (CSID_VERSION <= CSID_VERSION_V2) { msm_camera_enable_vreg(&csid_dev->pdev->dev, csid_8960_vreg_info, ARRAY_SIZE(csid_8960_vreg_info), NULL, 0, &csid_dev->csi_vdd, 0); } else if (CSID_VERSION >= CSID_VERSION_V3) { msm_camera_enable_vreg(&csid_dev->pdev->dev, csid_vreg_info, ARRAY_SIZE(csid_vreg_info), NULL, 0, &csid_dev->csi_vdd, 0); } vreg_enable_failed: if (CSID_VERSION <= CSID_VERSION_V2) { msm_camera_config_vreg(&csid_dev->pdev->dev, csid_8960_vreg_info, ARRAY_SIZE(csid_8960_vreg_info), NULL, 0, &csid_dev->csi_vdd, 0); } else if (CSID_VERSION >= CSID_VERSION_V3) { msm_camera_config_vreg(&csid_dev->pdev->dev, csid_vreg_info, ARRAY_SIZE(csid_vreg_info), NULL, 0, &csid_dev->csi_vdd, 0); } vreg_config_failed: iounmap(csid_dev->base); csid_dev->base = NULL; return rc; }
static int msm_csid_config(struct csid_device *csid_dev, struct msm_camera_csid_params *csid_params) { int rc = 0; uint32_t val = 0, clk_rate = 0, round_rate = 0; struct clk **csid_clk_ptr; void __iomem *csidbase; csidbase = csid_dev->base; if (!csidbase || !csid_params) { pr_err("%s:%d csidbase %p, csid params %p\n", __func__, __LINE__, csidbase, csid_params); return -EINVAL; } CDBG("%s csid_params, lane_cnt = %d, lane_assign = 0x%x\n", __func__, csid_params->lane_cnt, csid_params->lane_assign); CDBG("%s csid_params phy_sel = %d\n", __func__, csid_params->phy_sel); csid_dev->csid_lane_cnt = csid_params->lane_cnt; msm_csid_reset(csid_dev); csid_clk_ptr = csid_dev->csid_clk; if (!csid_clk_ptr) { pr_err("csi_src_clk get failed\n"); return -EINVAL; } clk_rate = (csid_params->csi_clk > 0) ? (csid_params->csi_clk) : csid_dev->csid_max_clk; round_rate = clk_round_rate(csid_clk_ptr[csid_dev->csid_clk_index], clk_rate); if (round_rate > csid_dev->csid_max_clk) round_rate = csid_dev->csid_max_clk; pr_debug("usr set rate csi_clk clk_rate = %u round_rate = %u\n", clk_rate, round_rate); rc = clk_set_rate(csid_clk_ptr[csid_dev->csid_clk_index], round_rate); if (rc < 0) { pr_err("csi_src_clk set failed\n"); return rc; } val = csid_params->lane_cnt - 1; val |= csid_params->lane_assign << csid_dev->ctrl_reg->csid_reg.csid_dl_input_sel_shift; if (csid_dev->hw_version < 0x30000000) { val |= (0xF << 10); msm_camera_io_w(val, csidbase + csid_dev->ctrl_reg->csid_reg.csid_core_ctrl_0_addr); } else { msm_camera_io_w(val, csidbase + csid_dev->ctrl_reg->csid_reg.csid_core_ctrl_0_addr); val = csid_params->phy_sel << csid_dev->ctrl_reg->csid_reg.csid_phy_sel_shift; val |= 0xF; msm_camera_io_w(val, csidbase + csid_dev->ctrl_reg->csid_reg.csid_core_ctrl_1_addr); } rc = msm_csid_cid_lut(&csid_params->lut_params, csid_dev); if (rc < 0) return rc; msm_csid_set_debug_reg(csid_dev, csid_params); return rc; }
int msm_csid_init(struct csid_device *csid_dev, uint32_t *csid_version, uint32_t bypass) { int rc = 0; uint8_t core_id = 0; if (!csid_version) { pr_err("%s:%d csid_version NULL\n", __func__, __LINE__); rc = -EINVAL; return rc; } pr_debug("%s - %d", __func__, csid_dev->refcnt+1); /* skip if reserved */ if (csid_dev->refcnt++) { return 0; } if (!bypass) { if (csid_dev->csid_state == CSID_POWER_UP) { pr_err("%s: csid invalid state %d\n", __func__, csid_dev->csid_state); rc = -EINVAL; return rc; } } csid_dev->base = ioremap(csid_dev->mem->start, resource_size(csid_dev->mem)); if (!csid_dev->base) { pr_err("%s csid_dev->base NULL\n", __func__); rc = -ENOMEM; return rc; } if (CSID_VERSION <= CSID_VERSION_V2) { if (!bypass) { rc = msm_camera_config_vreg(&csid_dev->pdev->dev, csid_8960_vreg_info, ARRAY_SIZE(csid_8960_vreg_info), NULL, 0, &csid_dev->csi_vdd, 1); if (rc < 0) { pr_err("%s: regulator on failed\n", __func__); goto vreg_config_failed; } rc = msm_camera_enable_vreg(&csid_dev->pdev->dev, csid_8960_vreg_info, ARRAY_SIZE(csid_8960_vreg_info), NULL, 0, &csid_dev->csi_vdd, 1); if (rc < 0) { pr_err("%s: regulator enable failed\n", __func__); goto vreg_enable_failed; } } rc = msm_cam_clk_enable(&csid_dev->pdev->dev, csid_8960_clk_info, csid_dev->csid_clk, ARRAY_SIZE(csid_8960_clk_info), 1); if (rc < 0) { pr_err("%s: clock enable failed\n", __func__); goto clk_enable_failed; } } else if (CSID_VERSION == CSID_VERSION_V3) { if (!bypass) { rc = msm_camera_config_vreg(&csid_dev->pdev->dev, csid_8974_vreg_info, ARRAY_SIZE(csid_8974_vreg_info), NULL, 0, &csid_dev->csi_vdd, 1); if (rc < 0) { pr_err("%s: regulator on failed\n", __func__); goto vreg_config_failed; } rc = msm_camera_enable_vreg(&csid_dev->pdev->dev, csid_8974_vreg_info, ARRAY_SIZE(csid_8974_vreg_info), NULL, 0, &csid_dev->csi_vdd, 1); if (rc < 0) { pr_err("%s: regulator enable failed\n", __func__); goto vreg_enable_failed; } } rc = msm_cam_clk_enable(&csid_dev->pdev->dev, csid_8974_clk_info[0].clk_info, csid_dev->csid0_clk, csid_8974_clk_info[0].num_clk_info, 1); if (rc < 0) { pr_err("%s: clock enable failed\n", __func__); goto csid0_clk_enable_failed; } core_id = csid_dev->pdev->id; if (core_id) { rc = msm_cam_clk_enable(&csid_dev->pdev->dev, csid_8974_clk_info[core_id].clk_info, csid_dev->csid_clk, csid_8974_clk_info[core_id].num_clk_info, 1); if (rc < 0) { pr_err("%s: clock enable failed\n", __func__); goto clk_enable_failed; } } } csid_dev->hw_version = msm_camera_io_r(csid_dev->base + CSID_HW_VERSION_ADDR); *csid_version = csid_dev->hw_version; init_completion(&csid_dev->reset_complete); enable_irq(csid_dev->irq->start); msm_csid_reset(csid_dev); csid_dev->csid_state = CSID_POWER_UP; return rc; clk_enable_failed: if (CSID_VERSION == CSID_VERSION_V3) { msm_cam_clk_enable(&csid_dev->pdev->dev, csid_8974_clk_info[0].clk_info, csid_dev->csid0_clk, csid_8974_clk_info[0].num_clk_info, 0); } csid0_clk_enable_failed: if (CSID_VERSION <= CSID_VERSION_V2) { msm_camera_enable_vreg(&csid_dev->pdev->dev, csid_8960_vreg_info, ARRAY_SIZE(csid_8960_vreg_info), NULL, 0, &csid_dev->csi_vdd, 0); } else if (CSID_VERSION == CSID_VERSION_V3) { msm_camera_enable_vreg(&csid_dev->pdev->dev, csid_8974_vreg_info, ARRAY_SIZE(csid_8974_vreg_info), NULL, 0, &csid_dev->csi_vdd, 0); } vreg_enable_failed: if (CSID_VERSION <= CSID_VERSION_V2) { msm_camera_config_vreg(&csid_dev->pdev->dev, csid_8960_vreg_info, ARRAY_SIZE(csid_8960_vreg_info), NULL, 0, &csid_dev->csi_vdd, 0); } else if (CSID_VERSION == CSID_VERSION_V3) { msm_camera_config_vreg(&csid_dev->pdev->dev, csid_8974_vreg_info, ARRAY_SIZE(csid_8974_vreg_info), NULL, 0, &csid_dev->csi_vdd, 0); } vreg_config_failed: iounmap(csid_dev->base); csid_dev->base = NULL; return rc; }
static int msm_csid_init(struct csid_device *csid_dev, uint32_t *csid_version) { int rc = 0; if (!csid_version) { pr_err("%s:%d csid_version NULL\n", __func__, __LINE__); rc = -EINVAL; return rc; } csid_dev->reg_ptr = NULL; if (csid_dev->csid_state == CSID_POWER_UP) { pr_err("%s: csid invalid state %d\n", __func__, csid_dev->csid_state); rc = -EINVAL; return rc; } csid_dev->base = ioremap(csid_dev->mem->start, resource_size(csid_dev->mem)); if (!csid_dev->base) { pr_err("%s csid_dev->base NULL\n", __func__); rc = -ENOMEM; return rc; } pr_info("%s: CSID_VERSION = 0x%x\n", __func__, csid_dev->ctrl_reg->csid_reg.csid_version); /* power up */ if (csid_dev->ctrl_reg->csid_reg.csid_version < CSID_VERSION_V22) { rc = msm_camera_config_vreg(&csid_dev->pdev->dev, csid_8960_vreg_info, ARRAY_SIZE(csid_8960_vreg_info), NULL, 0, &csid_dev->csi_vdd, 1); } else { rc = msm_camera_config_vreg(&csid_dev->pdev->dev, csid_vreg_info, ARRAY_SIZE(csid_vreg_info), NULL, 0, &csid_dev->csi_vdd, 1); } if (rc < 0) { pr_err("%s: regulator on failed\n", __func__); goto vreg_config_failed; } if (csid_dev->ctrl_reg->csid_reg.csid_version < CSID_VERSION_V22) { rc = msm_camera_enable_vreg(&csid_dev->pdev->dev, csid_8960_vreg_info, ARRAY_SIZE(csid_8960_vreg_info), NULL, 0, &csid_dev->csi_vdd, 1); } else { rc = msm_camera_enable_vreg(&csid_dev->pdev->dev, csid_vreg_info, ARRAY_SIZE(csid_vreg_info), NULL, 0, &csid_dev->csi_vdd, 1); } if (rc < 0) { pr_err("%s: regulator enable failed\n", __func__); goto vreg_enable_failed; } csid_dev->reg_ptr = regulator_get(&(csid_dev->pdev->dev), "qcom,gdscr-vdd"); if (IS_ERR_OR_NULL(csid_dev->reg_ptr)) { pr_debug(" %s: Failed in getting TOP gdscr regulator handle", __func__); } else { rc = regulator_enable(csid_dev->reg_ptr); if (rc) { pr_err(" %s: regulator enable failed for GDSCR\n", __func__); goto gdscr_regulator_enable_failed; } } if (csid_dev->ctrl_reg->csid_reg.csid_version == CSID_VERSION_V22) msm_cam_clk_sel_src(&csid_dev->pdev->dev, &csid_clk_info[3], csid_clk_src_info, csid_dev->num_clk_src_info); rc = msm_cam_clk_enable(&csid_dev->pdev->dev, csid_clk_info, csid_dev->csid_clk, csid_dev->num_clk, 1); if (rc < 0) { pr_err("%s:%d clock enable failed\n", __func__, __LINE__); goto clk_enable_failed; } CDBG("%s:%d called\n", __func__, __LINE__); csid_dev->hw_version = msm_camera_io_r(csid_dev->base + csid_dev->ctrl_reg->csid_reg.csid_hw_version_addr); CDBG("%s:%d called csid_dev->hw_version %x\n", __func__, __LINE__, csid_dev->hw_version); *csid_version = csid_dev->hw_version; init_completion(&csid_dev->reset_complete); enable_irq(csid_dev->irq->start); msm_csid_reset(csid_dev); csid_dev->csid_state = CSID_POWER_UP; return rc; clk_enable_failed: if (csid_dev->ctrl_reg->csid_reg.csid_version < CSID_VERSION_V22) { msm_camera_enable_vreg(&csid_dev->pdev->dev, csid_8960_vreg_info, ARRAY_SIZE(csid_8960_vreg_info), NULL, 0, &csid_dev->csi_vdd, 0); } else { msm_camera_enable_vreg(&csid_dev->pdev->dev, csid_vreg_info, ARRAY_SIZE(csid_vreg_info), NULL, 0, &csid_dev->csi_vdd, 0); } gdscr_regulator_enable_failed: if (!IS_ERR_OR_NULL(csid_dev->reg_ptr)) { regulator_disable(csid_dev->reg_ptr); regulator_put(csid_dev->reg_ptr); csid_dev->reg_ptr = NULL; } vreg_enable_failed: if (csid_dev->ctrl_reg->csid_reg.csid_version < CSID_VERSION_V22) { msm_camera_config_vreg(&csid_dev->pdev->dev, csid_8960_vreg_info, ARRAY_SIZE(csid_8960_vreg_info), NULL, 0, &csid_dev->csi_vdd, 0); } else { msm_camera_config_vreg(&csid_dev->pdev->dev, csid_vreg_info, ARRAY_SIZE(csid_vreg_info), NULL, 0, &csid_dev->csi_vdd, 0); } vreg_config_failed: iounmap(csid_dev->base); csid_dev->base = NULL; return rc; }
static int msm_csid_init(struct csid_device *csid_dev, uint32_t *csid_version) { int rc = 0; struct camera_vreg_t *cam_vreg; if (!csid_version) { pr_err("%s:%d csid_version NULL\n", __func__, __LINE__); rc = -EINVAL; return rc; } if (csid_dev->csid_state == CSID_POWER_UP) { pr_err("%s: csid invalid state %d\n", __func__, csid_dev->csid_state); rc = -EINVAL; return rc; } csid_dev->base = ioremap(csid_dev->mem->start, resource_size(csid_dev->mem)); if (!csid_dev->base) { pr_err("%s csid_dev->base NULL\n", __func__); rc = -ENOMEM; return rc; } if (CSID_VERSION == CSID_VERSION_V20) cam_vreg = csid_8960_vreg_info; else cam_vreg = csid_vreg_info; if (CSID_VERSION < CSID_VERSION_V30) { rc = msm_camera_config_vreg(&csid_dev->pdev->dev, csid_vreg_info, ARRAY_SIZE(csid_vreg_info), NULL, 0, &csid_dev->csi_vdd, 1); if (rc < 0) { pr_err("%s: regulator on failed\n", __func__); goto vreg_config_failed; } rc = msm_camera_enable_vreg(&csid_dev->pdev->dev, csid_vreg_info, ARRAY_SIZE(csid_vreg_info), NULL, 0, &csid_dev->csi_vdd, 1); if (rc < 0) { pr_err("%s: regulator enable failed\n", __func__); goto vreg_enable_failed; } if (CSID_VERSION == CSID_VERSION_V20) { rc = msm_cam_clk_enable(&csid_dev->pdev->dev, csid_8960_clk_info, csid_dev->csid_clk, ARRAY_SIZE(csid_8960_clk_info), 1); if (rc < 0) { pr_err("%s: 8960: clock enable failed\n", __func__); goto clk_enable_failed; } } else { msm_cam_clk_sel_src(&csid_dev->pdev->dev, &csid_8610_clk_info[3], csid_8610_clk_src_info, ARRAY_SIZE(csid_8610_clk_src_info)); rc = msm_cam_clk_enable(&csid_dev->pdev->dev, csid_8610_clk_info, csid_dev->csid_clk, ARRAY_SIZE(csid_8610_clk_info), 1); if (rc < 0) { pr_err("%s: 8610: clock enable failed\n", __func__); goto clk_enable_failed; } } } else if (CSID_VERSION >= CSID_VERSION_V30) { rc = msm_camera_config_vreg(&csid_dev->pdev->dev, csid_vreg_info, ARRAY_SIZE(csid_vreg_info), NULL, 0, &csid_dev->csi_vdd, 1); if (rc < 0) { pr_err("%s: regulator on failed\n", __func__); goto vreg_config_failed; } rc = msm_camera_enable_vreg(&csid_dev->pdev->dev, csid_vreg_info, ARRAY_SIZE(csid_vreg_info), NULL, 0, &csid_dev->csi_vdd, 1); if (rc < 0) { pr_err("%s: regulator enable failed\n", __func__); goto vreg_enable_failed; } rc = msm_cam_clk_enable(&csid_dev->pdev->dev, csid_8974_clk_info, csid_dev->csid_clk, ARRAY_SIZE(csid_8974_clk_info), 1); if (rc < 0) { pr_err("%s: clock enable failed\n", __func__); goto clk_enable_failed; } } CDBG("%s:%d called\n", __func__, __LINE__); csid_dev->hw_version = msm_camera_io_r(csid_dev->base + CSID_HW_VERSION_ADDR); CDBG("%s:%d called csid_dev->hw_version %x\n", __func__, __LINE__, csid_dev->hw_version); *csid_version = csid_dev->hw_version; init_completion(&csid_dev->reset_complete); enable_irq(csid_dev->irq->start); msm_csid_reset(csid_dev); csid_dev->csid_state = CSID_POWER_UP; /* LGE_CHANGE_S [[email protected]][20130625] : To enter the deep sleep after finish camera open , for google talk */ wake_lock_timeout(&csid_dev->csid_wake_lock, 2*HZ); /* LGE_CHANGE_E [[email protected]][20130625] : To enter the deep sleep after finish camera open , for google talk */ return rc; clk_enable_failed: if (CSID_VERSION < CSID_VERSION_V30) { msm_camera_enable_vreg(&csid_dev->pdev->dev, csid_vreg_info, ARRAY_SIZE(csid_vreg_info), NULL, 0, &csid_dev->csi_vdd, 0); } else if (CSID_VERSION >= CSID_VERSION_V30) { msm_camera_enable_vreg(&csid_dev->pdev->dev, csid_vreg_info, ARRAY_SIZE(csid_vreg_info), NULL, 0, &csid_dev->csi_vdd, 0); } vreg_enable_failed: if (CSID_VERSION < CSID_VERSION_V30) { msm_camera_config_vreg(&csid_dev->pdev->dev, csid_vreg_info, ARRAY_SIZE(csid_vreg_info), NULL, 0, &csid_dev->csi_vdd, 0); } else if (CSID_VERSION >= CSID_VERSION_V30) { msm_camera_config_vreg(&csid_dev->pdev->dev, csid_vreg_info, ARRAY_SIZE(csid_vreg_info), NULL, 0, &csid_dev->csi_vdd, 0); } vreg_config_failed: iounmap(csid_dev->base); csid_dev->base = NULL; return rc; }