Example #1
0
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);
}
Example #2
0
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;
}
Example #3
0
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;

}
Example #4
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

}
Example #6
0
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;
}
Example #8
0
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;
}
Example #10
0
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;
}
Example #11
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;

    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();
}
Example #12
0
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;
}
Example #13
0
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;
}
Example #14
0
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;
}