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; msm_camera_vreg_disable(); camdev->camera_gpio_off(); return msm_camio_clk_disable(CAMIO_CAM_MCLK_CLK); }
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_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; msm_camera_vreg_disable(); camdev->camera_gpio_off(); return 0; }
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_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 }
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; // 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); }
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; }
int msm_camio_sensor_clk_off(struct platform_device *pdev) { int rc = 0; struct msm_camera_sensor_info *sinfo = pdev->dev.platform_data; msm_camera_vreg_disable(); if (sinfo->sensor_platform_info->privacy_light) { struct msm8960_privacy_light_cfg *privacy_light_config = sinfo->sensor_platform_info->privacy_light_info; pm8xxx_mpp_config(privacy_light_config->mpp, &privacy_light_off_config); } rc = config_gpio_table(0); if (rc < 0) return rc; return msm_camio_clk_disable(CAMIO_CAM_MCLK_CLK); }
int msm_camio_probe_off(void *s_ctrl)//(struct platform_device *pdev) { int rc = 0; struct msm_sensor_ctrl_t* sctrl = (struct msm_sensor_ctrl_t *)s_ctrl; struct msm_camera_sensor_info *sinfo = sctrl->sensordata;//pdev->dev.platform_data; struct msm_camera_device_platform_data *camdev = sinfo->pdata; pr_info("[CAM] %s\n", __func__); msm_camera_vreg_disable(); if (camdev && camdev->camera_csi_off && (!probe_up)) rc = camdev->camera_csi_off(); if (rc < 0) pr_info("[CAM] %s camera_csi_off failed\n", __func__); rc = msm_camio_config_gpio_table(0); return rc; }
int msm_camio_sensor_clk_on(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_clk = camdev->ioclk; camio_ext = camdev->ioext; camdev->camera_gpio_on(); msm_camera_vreg_enable(); msm_camio_clk_enable(CAMIO_CAM_MCLK_CLK); msm_camio_clk_enable(CAMIO_CAMIF_PAD_PBDG_CLK); if (!sinfo->csi_if) { pr_err("%s: %d %d %s", __func__, camio_ext.camifpadphy, camio_ext.camifpadsz, pdev->name); camifpadio = request_mem_region(camio_ext.camifpadphy, camio_ext.camifpadsz, pdev->name); msm_camio_clk_enable(CAMIO_VFE_CLK); if (!camifpadio) { rc = -EBUSY; goto common_fail; } camifpadbase = ioremap(camio_ext.camifpadphy, camio_ext.camifpadsz); if (!camifpadbase) { CDBG("msm_camio_sensor_clk_on fail\n"); rc = -ENOMEM; goto parallel_busy; } } return rc; parallel_busy: release_mem_region(camio_ext.camifpadphy, camio_ext.camifpadsz); goto common_fail; common_fail: msm_camio_clk_disable(CAMIO_CAM_MCLK_CLK); msm_camio_clk_disable(CAMIO_VFE_CLK); msm_camio_clk_disable(CAMIO_CAMIF_PAD_PBDG_CLK); msm_camera_vreg_disable(); camdev->camera_gpio_off(); 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; 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_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); /* Disable CAMIO_CSI1_VFE_CLK, CAMIO_CSI1_CLK, CAMIO_CSI1_PCLK for the secondary sensor */ msm_camera_vreg_disable(); camdev->camera_gpio_off(); }
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; uint32_t val; camio_dev = pdev; camio_ext = camdev->ioext; camio_clk = camdev->ioclk; 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 = request_irq(camio_ext.csiirq, msm_io_csi_irq, IRQF_TRIGGER_RISING, "csi", 0); if (rc < 0) goto csi_irq_fail; 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_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_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; camdev->camera_gpio_on(); msm_camera_vreg_enable(); msm_camio_clk_enable(CAMIO_CAM_MCLK_CLK); 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 = request_irq(camio_ext.csiirq, msm_io_csi_irq, IRQF_TRIGGER_RISING, "csi", 0); if (rc < 0) goto csi_irq_fail; 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_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); /* Disable CAMIO_CSI1_VFE_CLK, CAMIO_CSI1_CLK, CAMIO_CSI1_PCLK for the secondary sensor */ msm_camera_vreg_disable(); camdev->camera_gpio_off(); return rc; }
int msm_camio_enable(struct platform_device *pdev) { int rc = 0; void __iomem *clkbase; 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; clkbase = ioremap(0x4000000, 0x334); msm_io_w(0x0, clkbase + 0x204); msm_io_w(0x0, clkbase + 0x208); msm_io_w(0x0, clkbase + 0x20C); msm_io_w(0x0, clkbase + 0x210); /* TODO */ msm_camio_clk_enable(CAMIO_VFE_CLK); msm_camio_clk_enable(CAMIO_CSI0_VFE_CLK); msm_camio_clk_enable(CAMIO_CSI_SRC_CLK); msm_camio_clk_enable(CAMIO_CSI1_SRC_CLK); msm_camio_clk_enable(CAMIO_CSI0_CLK); msm_camio_clk_enable(CAMIO_CSI1_CLK); msm_camio_clk_enable(CAMIO_CSI_PIX_CLK); msm_camio_clk_enable(CAMIO_CSI_RDI_CLK); msm_camio_clk_enable(CAMIO_CSIPHY0_TIMER_CLK); msm_camio_clk_enable(CAMIO_CSIPHY1_TIMER_CLK); msm_camio_clk_enable(CAMIO_CSI0_PCLK); csidio = request_mem_region(camio_ext.csiphy, camio_ext.csisz, pdev->name); if (!csidio) { rc = -EBUSY; goto common_fail; } csidbase = ioremap(camio_ext.csiphy, camio_ext.csisz); if (!csidbase) { rc = -ENOMEM; goto csi_busy; } rc = request_irq(camio_ext.csiirq, msm_io_csi_irq, IRQF_TRIGGER_RISING, "csid", 0); if (rc < 0) goto csi_irq_fail; csiphyio = request_mem_region(camio_ext.csiphyphy, camio_ext.csiphysz, pdev->name); if (!csidio) { rc = -EBUSY; goto csi_irq_fail; } csiphybase = ioremap(camio_ext.csiphyphy, camio_ext.csiphysz); if (!csiphybase) { rc = -ENOMEM; goto csiphy_busy; } rc = request_irq(camio_ext.csiphyirq , msm_io_csiphy_irq, IRQF_TRIGGER_RISING, "csiphy", 0); if (rc < 0) goto csiphy_irq_fail; rc = msm_ispif_init(pdev); if (rc < 0) goto csiphy_irq_fail; CDBG("camio enable done\n"); return 0; csiphy_irq_fail: iounmap(csiphybase); csiphy_busy: release_mem_region(camio_ext.csiphyphy, camio_ext.csiphysz); csi_irq_fail: iounmap(csidbase); csi_busy: release_mem_region(camio_ext.csiphy, camio_ext.csisz); common_fail: msm_camio_clk_disable(CAMIO_CSI0_PCLK); msm_camio_clk_disable(CAMIO_CSIPHY1_TIMER_CLK); msm_camio_clk_disable(CAMIO_CSIPHY0_TIMER_CLK); msm_camio_clk_disable(CAMIO_CSI_RDI_CLK); msm_camio_clk_disable(CAMIO_CSI_PIX_CLK); msm_camio_clk_disable(CAMIO_CSI1_CLK); msm_camio_clk_disable(CAMIO_CSI0_CLK); msm_camio_clk_disable(CAMIO_CSI1_SRC_CLK); msm_camio_clk_disable(CAMIO_CSI_SRC_CLK); msm_camio_clk_disable(CAMIO_CSI0_VFE_CLK); msm_camio_clk_disable(CAMIO_VFE_CLK); msm_camera_vreg_disable(); camdev->camera_gpio_off(); return rc; }