int msm_camio_enable(struct platform_device *pdev) { int rc = 0; uint32_t val; struct msm_camera_sensor_info *sinfo = pdev->dev.platform_data; msm_camio_clk_enable(CAMIO_VFE_PBDG_CLK); if (!sinfo->csi_if) msm_camio_clk_enable(CAMIO_VFE_CAMIF_CLK); else { msm_camio_clk_enable(CAMIO_VFE_CLK); csiio = request_mem_region(camio_ext.csiphy, camio_ext.csisz, pdev->name); if (!csiio) { rc = -EBUSY; goto common_fail; } csibase = ioremap(camio_ext.csiphy, camio_ext.csisz); if (!csibase) { rc = -ENOMEM; goto csi_busy; } rc = request_irq(camio_ext.csiirq, msm_io_csi_irq, IRQF_TRIGGER_RISING, "csi", 0); if (rc < 0) goto csi_irq_fail; /* enable required clocks for CSI */ msm_camio_clk_enable(CAMIO_CSI0_PCLK); msm_camio_clk_enable(CAMIO_CSI0_VFE_CLK); msm_camio_clk_enable(CAMIO_CSI0_CLK); msleep(10); val = (20 << MIPI_PHY_D0_CONTROL2_SETTLE_COUNT_SHFT) | (0x0F << MIPI_PHY_D0_CONTROL2_HS_TERM_IMP_SHFT) | (0x0 << MIPI_PHY_D0_CONTROL2_LP_REC_EN_SHFT) | (0x1 << MIPI_PHY_D0_CONTROL2_ERR_SOT_HS_EN_SHFT); CDBG("%s MIPI_PHY_D0_CONTROL2 val=0x%x\n", __func__, val); msm_io_w(val, csibase + MIPI_PHY_D0_CONTROL2); msm_io_w(val, csibase + MIPI_PHY_D1_CONTROL2); msm_io_w(val, csibase + MIPI_PHY_D2_CONTROL2); msm_io_w(val, csibase + MIPI_PHY_D3_CONTROL2); val = (0x0F << MIPI_PHY_CL_CONTROL_HS_TERM_IMP_SHFT) | (0x0 << MIPI_PHY_CL_CONTROL_LP_REC_EN_SHFT); CDBG("%s MIPI_PHY_CL_CONTROL val=0x%x\n", __func__, val); msm_io_w(val, csibase + MIPI_PHY_CL_CONTROL); } return 0; csi_irq_fail: iounmap(csibase); csi_busy: release_mem_region(camio_ext.csiphy, camio_ext.csisz); common_fail: msm_camio_clk_disable(CAMIO_VFE_PBDG_CLK); msm_camio_clk_disable(CAMIO_VFE_CLK); return rc; }
int rawchip_power_up(const struct msm_camera_rawchip_info *pdata) { int rc = 0; CDBG("[CAM] %s\n", __func__); if (pdata->camera_rawchip_power_on == NULL) { pr_err("rawchip power on platform_data didn't register\n"); return -EIO; } rc = pdata->camera_rawchip_power_on(); if (rc < 0) { pr_err("rawchip power on failed\n"); goto enable_power_on_failed; } #ifdef CONFIG_RAWCHIP_MCLK rc = msm_camio_clk_enable(CAMIO_CAM_RAWCHIP_MCLK_CLK); #else rc = msm_camio_clk_enable(CAMIO_CAM_MCLK_CLK); #endif if (rc < 0) { pr_err("enable MCLK failed\n"); goto enable_mclk_failed; } mdelay(1); rc = gpio_request(pdata->rawchip_reset, "rawchip"); if (rc < 0) { pr_err("GPIO(%d) request failed\n", pdata->rawchip_reset); goto enable_reset_failed; } gpio_direction_output(pdata->rawchip_reset, 1); gpio_free(pdata->rawchip_reset); mdelay(1); yushan_spi_write(0x0008, 0x7f); mdelay(1); return rc; enable_reset_failed: #ifdef CONFIG_RAWCHIP_MCLK rc = msm_camio_clk_disable(CAMIO_CAM_RAWCHIP_MCLK_CLK); #else rc = msm_camio_clk_disable(CAMIO_CAM_MCLK_CLK); #endif enable_mclk_failed: if (pdata->camera_rawchip_power_off == NULL) pr_err("rawchip power off platform_data didn't register\n"); else pdata->camera_rawchip_power_off(); enable_power_on_failed: return rc; }
void msm_camio_disable(struct platform_device *pdev) { struct msm_camera_sensor_info *sinfo = pdev->dev.platform_data; struct msm_camera_device_platform_data *camdev = sinfo->pdata; iounmap(appbase); release_mem_region(camio_ext.appphy, camio_ext.appsz); msm_camio_clk_disable(CAMIO_VFE_CLK); msm_camio_clk_disable(CAMIO_MDC_CLK); }
int msm_camio_sensor_clk_off(struct platform_device *pdev) { struct msm_camera_sensor_info *sinfo = pdev->dev.platform_data; struct msm_camera_device_platform_data *camdev = sinfo->pdata; camdev->camera_gpio_off(); iounmap(mdcbase); release_mem_region(camio_ext.mdcphy, camio_ext.mdcsz); msm_camio_clk_disable(CAMIO_VFE_CLK); return msm_camio_clk_disable(CAMIO_VFE_MDC_CLK); }
int msm_camio_jpeg_clk_disable(void) { int rc = 0; if (fs_ijpeg) { regulator_disable(fs_ijpeg); regulator_put(fs_ijpeg); } rc = msm_camio_clk_disable(CAMIO_JPEG_CLK); if (rc < 0) return rc; rc = msm_camio_clk_disable(CAMIO_JPEG_PCLK); return rc; }
void msm_camio_disable(struct platform_device *pdev) { iounmap(appbase); release_mem_region(camio_ext.appphy, camio_ext.appsz); #if 1 //kk0704.park gpio_set_value(0, 0);//RESET msleep(1); msm_camio_clk_sel(MSM_CAMIO_CLK_SRC_INTERNAL); #endif msm_camio_clk_disable(CAMIO_VFE_CLK); msm_camio_clk_disable(CAMIO_MDC_CLK); }
int msm_camio_vpe_clk_disable(void) { int rc = 0; if (fs_vpe) { regulator_disable(fs_vpe); regulator_put(fs_vpe); } rc = msm_camio_clk_disable(CAMIO_VPE_CLK); if (rc < 0) return rc; rc = msm_camio_clk_disable(CAMIO_VPE_PCLK); return rc; }
void msm_camio_disable(struct platform_device *pdev) { struct msm_camera_sensor_info *sinfo = pdev->dev.platform_data; struct msm_camera_device_platform_data *camdev = sinfo->pdata; if (!sinfo->csi_if) { msm_camio_clk_disable(CAMIO_VFE_CAMIF_CLK); iounmap(camifpadbase); release_mem_region(camio_ext.camifpadphy, camio_ext.camifpadsz); } else { free_irq(camio_ext.csiirq, 0); msm_camio_clk_disable(CAMIO_CSI_PCLK); msm_camio_clk_disable(CAMIO_CSI_VFE_CLK); msm_camio_clk_disable(CAMIO_CSI_CLK); iounmap(csibase); release_mem_region(camio_ext.csiphy, camio_ext.csisz); } CDBG("disable clocks\n"); msm_camio_clk_disable(CAMIO_VFE_CLK); msm_camio_clk_disable(CAMIO_CAM_MCLK_CLK); msm_camio_clk_disable(CAMIO_CAMIF_PAD_PBDG_CLK); msm_camio_clk_disable(CAMIO_VFE_PBDG_CLK); camdev->camera_gpio_off(); }
int msm_camio_probe_off(struct platform_device *pdev) { struct msm_camera_sensor_info *sinfo = pdev->dev.platform_data; struct msm_camera_device_platform_data *camdev = sinfo->pdata; #ifdef CONFIG_MACH_GOLFC int rc = 0; rc = msm_camio_clk_disable(CAMIO_CAM_MCLK_CLK); camdev->camera_gpio_off(); return rc; #else camdev->camera_gpio_off(); return msm_camio_clk_disable(CAMIO_CAM_MCLK_CLK); #endif }
int32_t ov2722_power_down(struct msm_sensor_ctrl_t *s_ctrl) { int rc; struct msm_camera_sensor_info *sdata = NULL; pr_info("%s\n", __func__); if (s_ctrl && s_ctrl->sensordata) sdata = s_ctrl->sensordata; else { pr_err("%s: s_ctrl sensordata NULL\n", __func__); return (-1); } if (sdata->camera_power_off == NULL) { pr_err("sensor platform_data didnt register\n"); return -EIO; } if (!sdata->use_rawchip && (sdata->htc_image != HTC_CAMERA_IMAGE_YUSHANII_BOARD)) { msm_camio_clk_disable(sdata,CAMIO_CAM_MCLK_CLK); } rc = sdata->camera_power_off(); if (rc < 0) { pr_err("%s failed to disable power\n", __func__); return rc; } return 0; }
int vga_camera_power_off (void) { struct vreg *vreg_cam_iovdd_1_8v; struct vreg *vreg_cam_dvdd_1_8v; struct vreg *vreg_cam_avdd_2_8v; gpio_set_value(CAM_VGA_GPIO_RESET_N, 0); mdelay(1); gpio_set_value(CAM_VGA_GPIO_PWDN, 0); mdelay(5); msm_camio_clk_disable(CAMIO_CAM_MCLK_CLK); mdelay(5); vreg_cam_dvdd_1_8v = vreg_get(NULL, "gp13"); vreg_disable(vreg_cam_dvdd_1_8v); vreg_cam_avdd_2_8v = vreg_get(NULL, "gp9"); vreg_disable(vreg_cam_avdd_2_8v); vreg_cam_iovdd_1_8v = vreg_get(NULL, "lvsw0"); vreg_disable(vreg_cam_iovdd_1_8v); mdelay(10); printk(KERN_ERR "vga_camera_power_off\n"); return 0; }
int main_camera_power_off (void) { printk(KERN_ERR "%s: main_camera_power_off \n",__func__); gpio_set_value(CAM_MAIN_GPIO_RESET_N, 0); mdelay(1); msm_camio_clk_disable(CAMIO_CAM_MCLK_CLK); mdelay(1); { struct vreg *vreg_cam_iovdd_1_8v; struct vreg *vreg_cam_dvdd_1_8v; struct vreg *vreg_cam_avdd_2_8v; struct vreg *vreg_cam_af_2_8v; vreg_cam_af_2_8v = vreg_get(NULL, "gp2"); vreg_disable(vreg_cam_af_2_8v); vreg_cam_avdd_2_8v = vreg_get(NULL, "gp9"); vreg_disable(vreg_cam_avdd_2_8v); vreg_cam_dvdd_1_8v = vreg_get(NULL, "gp13"); vreg_disable(vreg_cam_dvdd_1_8v); vreg_cam_iovdd_1_8v = vreg_get(NULL, "lvsw0"); vreg_disable(vreg_cam_iovdd_1_8v); } return 0; }
int32_t s5k6a1gx_power_down(struct msm_sensor_ctrl_t *s_ctrl) { int rc; struct msm_camera_sensor_info *sdata = NULL; pr_info("%s\n", __func__); if (s_ctrl && s_ctrl->sensordata) sdata = s_ctrl->sensordata; else { pr_err("%s: s_ctrl sensordata NULL\n", __func__); return (-1); } if (sdata->camera_power_off == NULL) { pr_err("sensor platform_data didnt register\n"); return -EIO; } msm_camio_clk_disable(sdata,CAMIO_CAM_MCLK_CLK); rc = sdata->camera_power_off(); if (rc < 0) { pr_err("%s failed to disable power\n", __func__); return rc; } return 0; }
void msm_camio_disable(struct platform_device *pdev) { struct msm_camera_sensor_info *sinfo = pdev->dev.platform_data; struct msm_camera_device_platform_data *camdev = sinfo->pdata; iounmap(mdcbase); release_mem_region(camio_ext.mdcphy, camio_ext.mdcsz); iounmap(appbase); release_mem_region(camio_ext.appphy, camio_ext.appsz); camdev->camera_gpio_off(); msm_camio_clk_sel(MSM_CAMIO_CLK_SRC_INTERNAL); msm_camio_clk_disable(CAMIO_VFE_CLK); msm_camio_clk_disable(CAMIO_MDC_CLK); msm_camio_clk_disable(CAMIO_VFE_MDC_CLK); }
int msm_camio_probe_off(struct platform_device *pdev) { struct msm_camera_sensor_info *sinfo = pdev->dev.platform_data; struct msm_camera_device_platform_data *camdev = sinfo->pdata; camdev->camera_gpio_off(); return msm_camio_clk_disable(CAMIO_CAM_MCLK_CLK); }
int rawchip_power_down(const struct msm_camera_rawchip_info *pdata) { int rc = 0; CDBG("%s\n", __func__); rc = gpio_request(pdata->rawchip_reset, "rawchip"); if (rc < 0) pr_err("GPIO(%d) request failed\n", pdata->rawchip_reset); gpio_direction_output(pdata->rawchip_reset, 0); gpio_free(pdata->rawchip_reset); mdelay(1); rc = msm_camio_clk_disable(CAMIO_CAM_MCLK_CLK); if (rc < 0) pr_err("disable MCLK failed\n"); if (pdata->camera_rawchip_power_off == NULL) { pr_err("rawchip power off platform_data didn't register\n"); return -EIO; } rc = pdata->camera_rawchip_power_off(); if (rc < 0) pr_err("rawchip power off failed\n"); return rc; }
int32_t ov2722_power_down(struct msm_sensor_ctrl_t *s_ctrl)//(const struct msm_camera_sensor_info *sdata) { int rc; struct msm_camera_sensor_info *sdata = NULL; pr_info("%s\n", __func__); if (s_ctrl && s_ctrl->sensordata) sdata = s_ctrl->sensordata; else { pr_err("%s: s_ctrl sensordata NULL\n", __func__); return (-1); } if (sdata->camera_power_off == NULL) { pr_err("sensor platform_data didnt register\n"); return -EIO; } if (!sdata->use_rawchip) { msm_camio_clk_disable(CAMIO_CAM_MCLK_CLK); } rc = sdata->camera_power_off(); if (rc < 0) { pr_err("%s failed to disable power\n", __func__); return rc; } return 0; /*msm_sensor_power_down(sdata);*/ }
int msm_camio_sensor_clk_off(struct platform_device *pdev) { uint32_t rc = 0; struct msm_camera_sensor_info *sinfo = pdev->dev.platform_data; struct msm_camera_device_platform_data *camdev = sinfo->pdata; camdev->camera_gpio_off(); msm_camera_vreg_disable(); rc = msm_camio_clk_disable(CAMIO_CAM_MCLK_CLK); rc = msm_camio_clk_disable(CAMIO_CAMIF_PAD_PBDG_CLK); if (!sinfo->csi_if) { iounmap(camifpadbase); release_mem_region(camio_ext.camifpadphy, camio_ext.camifpadsz); rc = msm_camio_clk_disable(CAMIO_VFE_CLK); } return rc; }
int32_t ov5693_power_down(struct msm_sensor_ctrl_t *s_ctrl) { int rc = 0; struct msm_camera_sensor_info *sdata = NULL; pr_info(" %s\n", __func__); if (s_ctrl && s_ctrl->sensordata) sdata = s_ctrl->sensordata; else { pr_err(" %s: s_ctrl sensordata NULL\n", __func__); return (-1); } if (sdata->camera_power_off == NULL) { pr_err(" %s: sensor platform_data didn't register\n", __func__); return -EIO; } rc = sdata->camera_power_off(); if (rc < 0) { pr_err(" %s failed to disable power\n", __func__); } rc = msm_sensor_set_power_down(s_ctrl); if (rc < 0) pr_err("%s msm_sensor_power_down failed\n", __func__); if (!sdata->use_rawchip) { msm_camio_clk_disable(sdata,CAMIO_CAM_MCLK_CLK); if (rc < 0) pr_err(" %s: msm_camio_clk_disable failed:%d\n", __func__, rc); } return rc; }
void msm_camio_disable(struct platform_device *pdev) { struct msm_camera_device_platform_data *camdev = pdev->dev.platform_data; iounmap(mdcbase); release_mem_region(camio_ext.mdcphy, camio_ext.mdcsz); iounmap(appbase); release_mem_region(camio_ext.appphy, camio_ext.appsz); camdev->camera_gpio_off(); msm_camio_clk_disable(CAMIO_VFE_CLK); msm_camio_clk_disable(CAMIO_MDC_CLK); msm_camio_clk_disable(CAMIO_VFE_MDC_CLK); }
static int __devinit clkctl_probe(struct platform_device *pdev) { int rc = 0; apps_reset = *(int *)pdev->dev.platform_data; clk_ctrl_mem = platform_get_resource_byname(pdev, IORESOURCE_MEM, "clk_ctl"); if (!clk_ctrl_mem) { pr_err("%s: no mem resource:3?\n", __func__); return -ENODEV; } appbase = ioremap(clk_ctrl_mem->start, resource_size(clk_ctrl_mem)); if (!appbase) { pr_err("clkctl_probe: appbase:err\n"); rc = -ENOMEM; goto ioremap_fail; } return 0; ioremap_fail: msm_camio_clk_disable(CAMIO_CAM_MCLK_CLK); return rc; }
int msm_camio_enable(struct platform_device *pdev) { int rc = 0; struct msm_camera_sensor_info *sinfo = pdev->dev.platform_data; struct msm_camera_device_platform_data *camdev = sinfo->pdata; camio_dev = pdev; camio_ext = camdev->ioext; camio_clk = camdev->ioclk; cam_bus_scale_table = camdev->cam_bus_scale_table; msm_camio_clk_enable(CAMIO_VFE_CLK); msm_camio_clk_enable(CAMIO_CSI0_VFE_CLK); msm_camio_clk_enable(CAMIO_CSI1_VFE_CLK); msm_camio_clk_enable(CAMIO_CSI_SRC_CLK); msm_camio_clk_enable(CAMIO_CSI0_CLK); msm_camio_clk_enable(CAMIO_CSI1_CLK); msm_camio_clk_enable(CAMIO_VFE_PCLK); msm_camio_clk_enable(CAMIO_CSI0_PCLK); msm_camio_clk_enable(CAMIO_CSI1_PCLK); csiio = request_mem_region(camio_ext.csiphy, camio_ext.csisz, pdev->name); if (!csiio) { rc = -EBUSY; goto common_fail; } csibase = ioremap(camio_ext.csiphy, camio_ext.csisz); if (!csibase) { rc = -ENOMEM; goto csi_busy; } rc = csi_request_irq(); if (rc < 0) goto csi_irq_fail; return 0; csi_irq_fail: iounmap(csibase); csibase = NULL; csi_busy: release_mem_region(camio_ext.csiphy, camio_ext.csisz); csibase = NULL; common_fail: msm_camio_clk_disable(CAMIO_CAM_MCLK_CLK); msm_camio_clk_disable(CAMIO_CSI0_VFE_CLK); msm_camio_clk_disable(CAMIO_CSI0_CLK); msm_camio_clk_disable(CAMIO_CSI1_VFE_CLK); msm_camio_clk_disable(CAMIO_CSI1_CLK); msm_camio_clk_disable(CAMIO_VFE_PCLK); msm_camio_clk_disable(CAMIO_CSI0_PCLK); msm_camio_clk_disable(CAMIO_CSI1_PCLK); msm_camera_vreg_disable(); camdev->camera_gpio_off(); return rc; }
int msm_camio_probe_off(struct platform_device *pdev) { struct msm_camera_device_platform_data *camdev = pdev->dev.platform_data; camdev->camera_gpio_off(); return msm_camio_clk_disable(CAMIO_VFE_CLK); }
void msm_camio_disable(struct platform_device *pdev) { uint32_t val; val = (20 << MIPI_PHY_D0_CONTROL2_SETTLE_COUNT_SHFT) | (0x0F << MIPI_PHY_D0_CONTROL2_HS_TERM_IMP_SHFT) | (0x0 << MIPI_PHY_D0_CONTROL2_LP_REC_EN_SHFT) | (0x1 << MIPI_PHY_D0_CONTROL2_ERR_SOT_HS_EN_SHFT); CDBG("%s MIPI_PHY_D0_CONTROL2 val=0x%x\n", __func__, val); msm_io_w(val, csibase + MIPI_PHY_D0_CONTROL2); msm_io_w(val, csibase + MIPI_PHY_D1_CONTROL2); msm_io_w(val, csibase + MIPI_PHY_D2_CONTROL2); msm_io_w(val, csibase + MIPI_PHY_D3_CONTROL2); val = (0x0F << MIPI_PHY_CL_CONTROL_HS_TERM_IMP_SHFT) | (0x0 << MIPI_PHY_CL_CONTROL_LP_REC_EN_SHFT); CDBG("%s MIPI_PHY_CL_CONTROL val=0x%x\n", __func__, val); msm_io_w(val, csibase + MIPI_PHY_CL_CONTROL); msleep(10); free_irq(camio_ext.csiirq, 0); iounmap(csibase); release_mem_region(camio_ext.csiphy, camio_ext.csisz); CDBG("disable clocks\n"); msm_camio_clk_disable(CAMIO_CSI0_VFE_CLK); msm_camio_clk_disable(CAMIO_CSI0_CLK); msm_camio_clk_disable(CAMIO_CSI1_VFE_CLK); msm_camio_clk_disable(CAMIO_CSI1_CLK); msm_camio_clk_disable(CAMIO_VFE_PCLK); msm_camio_clk_disable(CAMIO_CSI0_PCLK); msm_camio_clk_disable(CAMIO_CSI1_PCLK); }
int msm_camio_probe_off(struct platform_device *pdev) { int rc = 0; msm_camera_vreg_disable(); rc = config_gpio_table(0); if (rc < 0) return rc; return msm_camio_clk_disable(CAMIO_CAM_MCLK_CLK); }
int msm_camio_jpeg_clk_disable(void) { int rc = 0; if (fs_ijpeg) { rc = regulator_disable(fs_ijpeg); if (rc < 0) { CDBG("%s: Regulator disable failed %d\n", __func__, rc); return rc; } regulator_put(fs_ijpeg); } rc = msm_camio_clk_disable(CAMIO_JPEG_PCLK); if (rc < 0) return rc; rc = msm_camio_clk_disable(CAMIO_JPEG_CLK); CDBG("%s: exit %d\n", __func__, rc); return rc; }
int msm_camio_sensor_clk_off(struct platform_device *pdev) { uint32_t rc = 0; struct msm_camera_sensor_info *sinfo = pdev->dev.platform_data; struct msm_camera_device_platform_data *camdev = sinfo->pdata; camdev->camera_gpio_off(); #if !defined(CONFIG_SEMC_CAMERA_MODULE) && \ !defined(CONFIG_SEMC_SUB_CAMERA_MODULE) rc = msm_camio_clk_disable(CAMIO_CAM_MCLK_CLK); #endif rc = msm_camio_clk_disable(CAMIO_CAMIF_PAD_PBDG_CLK); if (!sinfo->csi_if) { iounmap(camifpadbase); release_mem_region(camio_ext.camifpadphy, camio_ext.camifpadsz); rc = msm_camio_clk_disable(CAMIO_VFE_CLK); } return rc; }
int msm_camio_sensor_clk_off(struct platform_device *pdev) { struct msm_camera_sensor_info *sinfo = pdev->dev.platform_data; struct msm_camera_device_platform_data *camdev = sinfo->pdata; unsigned int mclk_cfg; #if !defined (CONFIG_SENSOR_ISX012) int rc = 0; #endif pr_info("%s\n", __func__); #if !defined (CONFIG_SENSOR_ISX012) //reset low if (sinfo->sensor_platform_info->sensor_reset) { gpio_set_value_cansleep(sinfo->sensor_platform_info->sensor_reset, 0); } msleep(3); // Disable MCLK mclk_cfg = GPIO_CFG(32, 0, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_UP, GPIO_CFG_2MA); gpio_tlmm_config(mclk_cfg, GPIO_CFG_ENABLE); // ldo off if (sinfo->sensor_platform_info->sensor_power_control(0)){ pr_info("power off ldo fail\n"); // false routine } msm_camera_vreg_disable(); camdev->camera_gpio_off(); rc = msm_camio_clk_disable(CAMIO_CAM_MCLK_CLK); pr_info("%s : X\n", __func__); return rc; #else // Disable MCLK mclk_cfg = GPIO_CFG(32, 0, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_UP, GPIO_CFG_2MA); gpio_tlmm_config(mclk_cfg, GPIO_CFG_ENABLE); msm_camera_vreg_disable(); camdev->camera_gpio_off(); return msm_camio_clk_disable(CAMIO_CAM_MCLK_CLK); #endif }
void msm_camio_disable(struct platform_device *pdev) { uint32_t val; val = (0x0 << MIPI_CALIBRATION_CONTROL_SWCAL_CAL_EN_SHFT) | (0x0 << MIPI_CALIBRATION_CONTROL_SWCAL_STRENGTH_OVERRIDE_EN_SHFT) | (0x0 << MIPI_CALIBRATION_CONTROL_CAL_SW_HW_MODE_SHFT) | (0x0 << MIPI_CALIBRATION_CONTROL_MANUAL_OVERRIDE_EN_SHFT); CDBG("%s MIPI_CALIBRATION_CONTROL val=0x%x\n", __func__, val); msm_io_w(val, csibase + MIPI_CALIBRATION_CONTROL); val = (20 << MIPI_PHY_D0_CONTROL2_SETTLE_COUNT_SHFT) | (0x0F << MIPI_PHY_D0_CONTROL2_HS_TERM_IMP_SHFT) | (0x0 << MIPI_PHY_D0_CONTROL2_LP_REC_EN_SHFT) | (0x1 << MIPI_PHY_D0_CONTROL2_ERR_SOT_HS_EN_SHFT); CDBG("%s MIPI_PHY_D0_CONTROL2 val=0x%x\n", __func__, val); msm_io_w(val, csibase + MIPI_PHY_D0_CONTROL2); msm_io_w(val, csibase + MIPI_PHY_D1_CONTROL2); //msm_io_w(val, csibase + MIPI_PHY_D2_CONTROL2); //msm_io_w(val, csibase + MIPI_PHY_D3_CONTROL2); val = (0x0F << MIPI_PHY_CL_CONTROL_HS_TERM_IMP_SHFT) | (0x0 << MIPI_PHY_CL_CONTROL_LP_REC_EN_SHFT); CDBG("%s MIPI_PHY_CL_CONTROL val=0x%x\n", __func__, val); msm_io_w(val, csibase + MIPI_PHY_CL_CONTROL); msleep(10); val = msm_io_r(csibase + MIPI_PHY_D1_CONTROL); val &= ~((0x1 << MIPI_PHY_D1_CONTROL_MIPI_CLK_PHY_SHUTDOWNB_SHFT) | (0x1 << MIPI_PHY_D1_CONTROL_MIPI_DATA_PHY_SHUTDOWNB_SHFT)); CDBG("%s MIPI_PHY_D1_CONTROL val=0x%x\n", __func__, val); msm_io_w(val, csibase + MIPI_PHY_D1_CONTROL); usleep_range(5000, 6000); free_irq(camio_ext.csiirq, 0); iounmap(csibase); release_mem_region(camio_ext.csiphy, camio_ext.csisz); CDBG("disable clocks\n"); msm_camio_clk_disable(CAMIO_CSI0_VFE_CLK); msm_camio_clk_disable(CAMIO_CSI0_CLK); msm_camio_clk_disable(CAMIO_CSI1_VFE_CLK); msm_camio_clk_disable(CAMIO_CSI1_CLK); msm_camio_clk_disable(CAMIO_VFE_PCLK); msm_camio_clk_disable(CAMIO_CSI0_PCLK); msm_camio_clk_disable(CAMIO_CSI1_PCLK); msm_camio_clk_disable(CAMIO_CSI_SRC_CLK); msm_camio_clk_disable(CAMIO_VFE_CLK); }
void msm_camio_disable(struct platform_device *pdev) { CDBG("disable mipi\n"); msm_camio_csi_disable(); CDBG("disable clocks\n"); msm_camio_clk_disable(CAMIO_CSI0_VFE_CLK); msm_camio_clk_disable(CAMIO_CSI0_CLK); msm_camio_clk_disable(CAMIO_CSI1_VFE_CLK); msm_camio_clk_disable(CAMIO_CSI1_CLK); msm_camio_clk_disable(CAMIO_VFE_PCLK); msm_camio_clk_disable(CAMIO_CSI0_PCLK); msm_camio_clk_disable(CAMIO_CSI1_PCLK); msm_camio_clk_disable(CAMIO_CSI_SRC_CLK); msm_camio_clk_disable(CAMIO_VFE_CLK); }