Exemple #1
0
int msm_camio_vpe_clk_enable(uint32_t clk_rate)
{
	int rc = 0;
	fs_vpe = regulator_get(NULL, "fs_vpe");
	if (IS_ERR(fs_vpe)) {
		CDBG("%s: Regulator FS_VPE get failed %ld\n", __func__,
			PTR_ERR(fs_vpe));
		fs_vpe = NULL;
	} else if (regulator_enable(fs_vpe)) {
		CDBG("%s: Regulator FS_VPE enable failed\n", __func__);
		regulator_put(fs_vpe);
	}

	vpe_clk_rate = clk_rate;
	rc = msm_camio_clk_enable(CAMIO_VPE_CLK);
	if (rc < 0)
		return rc;

	rc = msm_camio_clk_enable(CAMIO_VPE_PCLK);
	return rc;
}
int msm_camio_jpeg_clk_enable(void)
{
	int rc = 0;
	rc = msm_camio_clk_enable(CAMIO_JPEG_CLK);
	if (rc < 0)
		return rc;
	rc = msm_camio_clk_enable(CAMIO_JPEG_PCLK);
	if (rc < 0)
		return rc;
	fs_ijpeg = regulator_get(NULL, "fs_ijpeg");
	if (IS_ERR(fs_ijpeg)) {
		CDBG("[CAM] %s: Regulator FS_IJPEG get failed %ld\n", __func__,
			PTR_ERR(fs_ijpeg));
		fs_ijpeg = NULL;
	} else if (regulator_enable(fs_ijpeg)) {
		CDBG("[CAM] %s: Regulator FS_IJPEG enable failed\n", __func__);
		regulator_put(fs_ijpeg);
	}
	CDBG("[CAM] %s: exit %d\n", __func__, rc);
	return rc;
}
Exemple #3
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;
	msm_camera_vreg_enable();
	msleep(10);
	rc = camdev->camera_gpio_on();
	if (rc < 0)
		return rc;
	return msm_camio_clk_enable(CAMIO_CAM_MCLK_CLK);
}
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();
#if !defined(CONFIG_SEMC_CAMERA_MODULE) && \
	!defined(CONFIG_SEMC_SUB_CAMERA_MODULE)
	msm_camio_clk_enable(CAMIO_CAM_MCLK_CLK);
#endif
	msm_camio_clk_enable(CAMIO_CAMIF_PAD_PBDG_CLK);
	if (!sinfo->csi_if) {
		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);
	camdev->camera_gpio_off();
	return rc;
}
Exemple #5
0
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 msm_camio_probe_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_dev = pdev;
	camio_clk = camdev->ioclk;

	rc = config_gpio_table(1);
	if (rc < 0)
		return rc;
	msm_camera_vreg_enable(pdev);
	return msm_camio_clk_enable(CAMIO_CAM_MCLK_CLK);
}
Exemple #7
0
int msm_camio_vpe_clk_enable(void)
{
	fs_vpe = regulator_get(NULL, "fs_vpe");
	if (IS_ERR(fs_vpe)) {
		pr_err("%s: Regulator FS_VPE get failed %ld\n", __func__,
			PTR_ERR(fs_vpe));
		fs_vpe = NULL;
	} else if (regulator_enable(fs_vpe)) {
		pr_err("%s: Regulator FS_VPE enable failed\n", __func__);
		regulator_put(fs_vpe);
	}

	msm_camio_clk_enable(CAMIO_VPE_CLK);
	return 0;
}
int msm_sensor_probe_on(struct device *dev)
{
	int rc = 0;
	struct msm_camera_sensor_info *sinfo = dev->platform_data;
	struct msm_camera_device_platform_data *camdev = sinfo->pdata;
	camio_clk = camdev->ioclk;

	rc = camdev->camera_gpio_on();
	if (rc < 0)
		return rc;

	rc = msm_camio_clk_enable(CAMIO_CAM_MCLK_CLK);
	if (rc < 0)
		camdev->camera_gpio_off();

	return rc;
}
Exemple #9
0
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;
	}

	rc = msm_camio_clk_enable(CAMIO_CAM_MCLK_CLK);
	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:
	msm_camio_clk_disable(CAMIO_CAM_MCLK_CLK);
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;
}
int vga_camera_power_on (void)
{
    int rc;

    struct vreg *vreg_cam_iovdd_1_8v;
    struct vreg *vreg_cam_dvdd_1_8v;
    struct vreg *vreg_cam_avdd_2_8v;

    printk(KERN_ERR "vga_camera_power_on\n");

    gpio_set_value(CAM_VGA_GPIO_RESET_N, 1);
    mdelay(1);

    gpio_set_value(CAM_VGA_GPIO_PWDN, 1);
    mdelay(1);

    vreg_cam_iovdd_1_8v = vreg_get(NULL, "lvsw0");
    vreg_enable(vreg_cam_iovdd_1_8v);
    mdelay(1);

    vreg_cam_avdd_2_8v = vreg_get(NULL, "gp9");
    rc = vreg_set_level(vreg_cam_avdd_2_8v, 2800);
    vreg_enable(vreg_cam_avdd_2_8v);
    mdelay(1);
	
    vreg_cam_dvdd_1_8v = vreg_get(NULL, "gp13");
    rc = vreg_set_level(vreg_cam_dvdd_1_8v, 1800);
    vreg_enable(vreg_cam_dvdd_1_8v);
    mdelay(10);

    /* Input MCLK = 24MHz */
    msm_camio_clk_enable(CAMIO_CAM_MCLK_CLK);
    mdelay(10);

    gpio_set_value(CAM_VGA_GPIO_PWDN, 0);
    mdelay(5);

    gpio_set_value(CAM_VGA_GPIO_RESET_N, 0);
    mdelay(10);
    
    gpio_set_value(CAM_VGA_GPIO_RESET_N, 1);
    mdelay(10);

    return 0;
}
Exemple #11
0
int32_t ov2722_power_up(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_on == NULL) {
		pr_err("sensor platform_data didnt register\n");
		return -EIO;
	}

	rc = sdata->camera_power_on();
	if (rc < 0) {
		pr_err("%s failed to enable power\n", __func__);
		return rc;
	}

	if (!sdata->use_rawchip && (sdata->htc_image != HTC_CAMERA_IMAGE_YUSHANII_BOARD)) {
		rc = msm_camio_clk_enable(CAMIO_CAM_MCLK_CLK);
		if (rc < 0) {
			return rc;
		}
	}

#ifdef CONFIG_RAWCHIPII
	Ilp0100_enableIlp0100SensorClock(SENSOR_1);
	mdelay(3);	
#endif

	ov2722_sensor_open_init(sdata);
	pr_info("%s end\n", __func__);

	return 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_dev = pdev;
	camio_clk = camdev->ioclk;

	msm_camera_vreg_enable(pdev);
	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_on_config);
	}
	msleep(20);
	rc = config_gpio_table(1);
	if (rc < 0)
		return rc;
	return msm_camio_clk_enable(CAMIO_CAM_MCLK_CLK);
}
Exemple #13
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;
	unsigned int mclk_cfg;
	
	camio_dev = pdev;
	camio_ext = camdev->ioext;
	camio_clk = camdev->ioclk;

	// 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_enable();
	msleep(10);
	rc = camdev->camera_gpio_on();
	if (rc < 0)
		return rc;
	return msm_camio_clk_enable(CAMIO_CAM_MCLK_CLK);
}
int main_camera_power_on (void)
{
    printk(KERN_ERR "%s: main_camera_power_on \n",__func__);

    gpio_set_value(CAM_MAIN_GPIO_RESET_N, 0);

    {
        int rc;
        
        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_iovdd_1_8v = vreg_get(NULL, "lvsw0");
        vreg_enable(vreg_cam_iovdd_1_8v); 

        vreg_cam_dvdd_1_8v = vreg_get(NULL, "gp13");
        rc = vreg_set_level(vreg_cam_dvdd_1_8v, 1800);
        vreg_enable(vreg_cam_dvdd_1_8v);

        vreg_cam_af_2_8v = vreg_get(NULL, "gp2");
        rc = vreg_set_level(vreg_cam_af_2_8v, 2800);
        vreg_enable(vreg_cam_af_2_8v);

        vreg_cam_avdd_2_8v = vreg_get(NULL, "gp9");
        rc = vreg_set_level(vreg_cam_avdd_2_8v, 2800);
        vreg_enable(vreg_cam_avdd_2_8v);
    }

    mdelay(1);
    msm_camio_clk_enable(CAMIO_CAM_MCLK_CLK);
    mdelay(1);

    gpio_set_value(CAM_MAIN_GPIO_RESET_N, 1);
    mdelay(10);

    return 0;
}
Exemple #15
0
int msm_camio_sensor_clk_on(struct platform_device *pdev)
{
	struct msm_camera_sensor_info *sinfo = pdev->dev.platform_data;
	struct msm_camera_device_platform_data *camdev = sinfo->pdata;
	int32_t rc = 0;
	camio_ext = camdev->ioext;
	mdcio = request_mem_region(camio_ext.mdcphy,
		camio_ext.mdcsz, pdev->name);
	if (!mdcio)
		rc = -EBUSY;
	mdcbase = ioremap(camio_ext.mdcphy,
		camio_ext.mdcsz);
	if (!mdcbase) {
		rc = -EINVAL;
		goto mdc_no_mem;
	}
	camdev->camera_gpio_on();
	return msm_camio_clk_enable(CAMIO_VFE_MDC_CLK);

mdc_no_mem:
	release_mem_region(camio_ext.mdcphy, camio_ext.mdcsz);
	return rc;
}
Exemple #16
0
int32_t ov2722_power_up(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_on == NULL) {
		pr_err("sensor platform_data didnt register\n");
		return -EIO;
	}

	rc = sdata->camera_power_on();
	if (rc < 0) {
		pr_err("%s failed to enable power\n", __func__);
		return rc;
	}

	if (!sdata->use_rawchip) {
		rc = msm_camio_clk_enable(CAMIO_CAM_MCLK_CLK);
		if (rc < 0) {
			return rc;
		}
	}

	ov2722_sensor_open_init(sdata);
	pr_info("%s end\n", __func__);

	return 0;  /*msm_sensor_power_up(sdata)*/
}
Exemple #17
0
int msm_camio_enable(struct platform_device *pdev)
{
    int rc = 0;
    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);
    }
    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;
}
Exemple #18
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;
	}
#ifndef CONFIG_MACH_VERDI_LTE
	rc = request_irq(camio_ext.csiirq, msm_io_csi_irq,
		IRQF_TRIGGER_HIGH, "csi", 0);
	if (rc < 0)
		goto csi_irq_fail;
#endif
	msleep(10);
	val = (settle_cnt<<
		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("[CAM] %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("[CAM] %s MIPI_PHY_CL_CONTROL val=0x%x\n", __func__, val);
	msm_io_w(val, csibase + MIPI_PHY_CL_CONTROL);
	return 0;

#ifndef CONFIG_MACH_VERDI_LTE
csi_irq_fail:
	iounmap(csibase);
#endif
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_fs_disable();
	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_ext = camdev->ioext;

	/*suggest per-sensor driver to config*/
	/* camdev->camera_gpio_on(); */

	msm_camio_clk_enable(CAMIO_VFE_PBDG_CLK);
	msm_camio_clk_enable(CAMIO_CAMIF_PAD_PBDG_CLK);
	if (!sinfo->use_rawchip) {
		msm_camio_clk_enable(CAMIO_CAM_MCLK_CLK);
	}
	if (!sinfo->csi_if) {
		msm_camio_clk_enable(CAMIO_VFE_CLK);
		camifpadio = request_mem_region(camio_ext.camifpadphy,
			camio_ext.camifpadsz, pdev->name);
		if (!camifpadio) {
			rc = -EBUSY;
			goto common_fail;
		}
		camifpadbase = ioremap(camio_ext.camifpadphy,
			camio_ext.camifpadsz);
		if (!camifpadbase) {
			rc = -ENOMEM;
			goto parallel_busy;
		}
		msm_camio_clk_enable(CAMIO_VFE_CAMIF_CLK);
	} else {
		uint32_t val;
		msm_camio_clk_enable(CAMIO_VFE_CLK_FOR_MIPI_2_LANE);
		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_HIGH, "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);

		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("[CAM] %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("[CAM] %s MIPI_PHY_CL_CONTROL val=0x%x\n", __func__, val);
		msm_io_w(val, csibase + MIPI_PHY_CL_CONTROL);
	}
	return 0;

parallel_busy:
	release_mem_region(camio_ext.camifpadphy, camio_ext.camifpadsz);
	goto common_fail;
csi_irq_fail:
	iounmap(csibase);
csi_busy:
	release_mem_region(camio_ext.csiphy, camio_ext.csisz);
common_fail:
	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();
	return rc;
}
Exemple #20
0
int32_t s5k6a2ya_power_up(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_on == NULL) {
		pr_err("sensor platform_data didnt register\n");
		return -EIO;
	}
	rc = sdata->camera_power_on();
	if (rc < 0) {
		pr_err("%s failed to enable power\n", __func__);
		goto enable_power_on_failed;
	}

#ifndef CONFIG_DISABLE_MCLK_RAWCHIP_TO_MAINCAM
	if (!sdata->use_rawchip && (sdata->htc_image != HTC_CAMERA_IMAGE_YUSHANII_BOARD)) {
		rc = msm_camio_clk_enable(sdata,CAMIO_CAM_MCLK_CLK);
		if (rc < 0) {
			pr_err("%s: msm_camio_clk_enable failed:%d\n",
			 __func__, rc);
			goto enable_mclk_failed;
		}
	}

	rc = msm_sensor_set_power_up(s_ctrl);//(sdata);

	if (rc < 0) {
		pr_err("%s msm_sensor_power_up failed\n", __func__);
		goto set_sensor_power_up_failed;
	}
#else
	rc = msm_camio_clk_enable(sdata,CAMIO_CAM_MCLK_CLK);
	if (rc < 0) {
		pr_err("%s msm_camio_clk_enable failed\n", __func__);
		goto enable_mclk_failed;
	}
#endif

#ifdef CONFIG_RAWCHIPII
	Ilp0100_enableIlp0100SensorClock(SENSOR_1);
	mdelay(35); //temp timing setting
#endif

	s5k6a2ya_sensor_open_init(sdata);
	pr_info("%s end\n", __func__);

	return rc;

#ifndef CONFIG_DISABLE_MCLK_RAWCHIP_TO_MAINCAM
set_sensor_power_up_failed:
	msm_camio_clk_disable(sdata,CAMIO_CAM_MCLK_CLK);
#endif
enable_mclk_failed:
	if (sdata->camera_power_off == NULL)
		pr_err("sensor platform_data didnt register\n");
	else
		sdata->camera_power_off();
enable_power_on_failed:
	return rc;
}
int32_t ov5693_power_up(struct msm_sensor_ctrl_t *s_ctrl)
{
	int rc;
	struct sensor_cfg_data cdata;  
	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_on == NULL) {
		pr_err("sensor platform_data didnt register\n");
		return -EIO;
	}

	if (!sdata->use_rawchip) {
		rc = msm_camio_clk_enable(sdata,CAMIO_CAM_MCLK_CLK);
		if (rc < 0) {
			pr_err(" %s: msm_camio_sensor_clk_on failed:%d\n",
			 __func__, rc);
			goto enable_mclk_failed;
		}
	}

	rc = sdata->camera_power_on();
	if (rc < 0) {
		pr_err(" %s failed to enable power\n", __func__);
		goto enable_power_on_failed;
	}

	rc = msm_sensor_set_power_up(s_ctrl);
	if (rc < 0) {
		pr_err(" %s msm_sensor_power_up failed\n", __func__);
		goto enable_sensor_power_up_failed;
	}

	ov5693_sensor_open_init(sdata);
	if (s_ctrl->func_tbl->sensor_i2c_read_fuseid == NULL) {
		rc = -EFAULT;
		return rc;
	}
	rc = s_ctrl->func_tbl->sensor_i2c_read_fuseid(&cdata, s_ctrl);
	if (rc < 0) {
		return rc;
	}
	pr_info(" %s end\n", __func__);

	return rc;

enable_sensor_power_up_failed:
	if (sdata->camera_power_off == NULL)
		pr_err("sensor platform_data didnt register\n");
	else
		sdata->camera_power_off();
enable_power_on_failed:
	msm_camio_clk_disable(sdata,CAMIO_CAM_MCLK_CLK);
enable_mclk_failed:
	return rc;
}
int msm_camio_vpe_clk_enable(uint32_t clk_rate)
{
	vpe_clk_rate = clk_rate;
	msm_camio_clk_enable(CAMIO_VPE_CLK);
	return 0;
}
int msm_camio_jpeg_clk_enable(void)
{
	msm_camio_clk_enable(CAMIO_JPEG_CLK);
	msm_camio_clk_enable(CAMIO_JPEG_PCLK);
	return 0;
}
//Div2-SW6-MM-MC-BringUpHM0357ForSF5PCR-00*{
static int tcm9001md_sensor_probe(const struct msm_camera_sensor_info *info,
				struct msm_sensor_ctrl *s)
{
    unsigned char v;
    int rc = i2c_add_driver(&tcm9001md_i2c_driver);

    printk(KERN_INFO "tcm9001md_sensor_probe: Called.....\n");

    if (rc < 0 || tcm9001md_client == NULL) {
        rc = -ENOTSUPP;
        goto probe_done;
    }
    tcm9001mdinfo= info;

    v = 0;
    /* Init VGA pins state */
#if 0
    gpio_tlmm_config(GPIO_CFG(tcm9001mdinfo->vga_rst_pin, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE);
    printk(KERN_INFO "%s: Re-set config for gpio %d .\n", __func__, tcm9001mdinfo->vga_rst_pin);

    gpio_tlmm_config(GPIO_CFG(tcm9001mdinfo->vga_pwdn_pin, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE);
    printk(KERN_INFO "%s: Re-set config for gpio %d .\n", __func__, tcm9001mdinfo->vga_pwdn_pin);

    gpio_tlmm_config(GPIO_CFG(tcm9001mdinfo->vga_power_en_pin, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE);
    printk(KERN_INFO "%s: Re-set config for gpio %d .\n", __func__, tcm9001mdinfo->vga_power_en_pin);
#endif
    
    rc = fih_cam_output_gpio_control(tcm9001mdinfo->vga_rst_pin, "tcm9001md", 0);
    if (rc)
        return rc;
    
    rc = fih_cam_output_gpio_control(tcm9001mdinfo->vga_pwdn_pin, "tcm9001md", 0);
    if (rc)
        return rc;
    
    rc = fih_cam_output_gpio_control(tcm9001mdinfo->vga_power_en_pin, "tcm9001md", 0);
    if (rc)
        return rc;

    /* Here to check sensor is existence */
    msm_camio_clk_enable(CAMIO_CAM_MCLK_CLK);
    msleep(30);

    /* Setting MCLK = 24MHz */
    msm_camio_clk_rate_set(24000000);
    //msm_camio_camif_pad_reg_reset();
    printk(KERN_INFO "%s: Setting MCLK = 24MHz \n", __func__);

    /* Pull hight power enable = GPIO98  */
    rc = fih_cam_output_gpio_control(tcm9001mdinfo->vga_power_en_pin, "tcm9001md", 1);
    if (rc)
        return rc;

    mdelay(1);  //t1+t2+t3 = 1ms

    /* Pull hight PWRDWN = CAM_VGA_STANDBY  */
    rc = fih_cam_output_gpio_control(tcm9001mdinfo->vga_pwdn_pin, "tcm9001md", 1);
    if (rc)
        return rc;

    mdelay(2);  //t4 = 1ms

    /* Enable  MCLK = 24MHz */
    gpio_tlmm_config(GPIO_CFG(tcm9001mdinfo->MCLK_PIN, 1, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA), GPIO_CFG_ENABLE);
    printk(KERN_INFO "%s: Output MCLK end.  \n", __func__);

    mdelay(2);

    /* Pull Low PWRDWN = CAM_VGA_STANDBY  */
    rc = fih_cam_output_gpio_control(tcm9001mdinfo->vga_pwdn_pin, "tcm9001md", 0);
    if (rc)
        return rc;

    mdelay(2);  //t5 = 2ms

    /* Pull High REDET = CAM_VGA_RST_N  */
    rc = fih_cam_output_gpio_control(tcm9001mdinfo->vga_rst_pin, "tcm9001md", 1);
    if (rc)
        return rc;

    mdelay(2);  //t6 > 2ms

    // Here to check chip version identification.
    rc = tcm9001md_i2c_read(tcm9001md_client, REG_TCM9001MD_MODEL_ID_1, &v);
    if (rc < 0 || v != TCM9001MD_MODEL_ID_1)
    {
        printk("tcm9001md_sensor_probe: ERR: Red MODEL_ID_1 = 0x%x failed !\n", v);
        goto probe_done;
    }
    printk("tcm9001md_sensor_probe: MODEL_ID_1 = 0x%x .\n", v);

    rc = tcm9001md_i2c_read(tcm9001md_client, REG_TCM9001MD_MODEL_ID_2, &v);
    if (rc < 0 || v != TCM9001MD_MODEL_ID_2)
    {
        printk("tcm9001md_sensor_probe: ERR: Red MODEL_ID_2 = 0x%x failed !\n", v);
        goto probe_done;
    }
    printk("tcm9001md_sensor_probe: MODEL_ID_2 = 0x%x .\n", v);

    s->s_init = tcm9001md_sensor_init;
    s->s_release = tcm9001md_sensor_release;
    s->s_config  = tcm9001md_sensor_config;
    s->s_camera_type = FRONT_CAMERA_2D; 
    s->s_mount_angle = 0;

probe_done:
    tcm9001md_power_off();
    msm_camio_clk_disable(CAMIO_CAM_MCLK_CLK);
    CDBG("%s %s:%d\n", __FILE__, __func__, __LINE__);
    return rc;
}
Exemple #25
0
int msm_camio_vpe_clk_enable(void)
{
	msm_camio_clk_enable(CAMIO_VPE_CLK);
	return 0;
}
int main_camera_power_on (struct platform_device *pdev)
{
		int count1, count2, rc;
		struct device *dev = &pdev->dev;
				
    printk(KERN_ERR "%s: main_camera_power_on \n",__func__);

    gpio_set_value(CAM_MAIN_GPIO_RESET_N, 0);

		// Turn On Main Camera Power Part1
		count1 = ARRAY_SIZE(regs_main1);
		rc = regulator_bulk_get(dev, count1, regs_main1);
		if (rc) {
			dev_err(dev, "%s: regs_main1 could not get regulators: %d\n", __func__, rc);
			return 0;
		}
		
		rc = regulator_bulk_set_voltage(count1, regs_main1);
		if (rc) {
			dev_err(dev, "%s: regs_main1 could not set voltages: %d\n", __func__, rc);
			goto reg_free1;
		}
		
		rc = regulator_bulk_enable(count1, regs_main1);
		if (rc) {
			dev_err(dev, "%s: regs_main1 could not enable regulators: %d\n", __func__, rc);
			goto reg_free1;
		}
		
		reg_count_main1 = count1;

    mdelay(20);
		// Supply Clock and Make high on reset
		msm_camio_clk_enable(CAMIO_CAM_MCLK_CLK);
	mdelay(10);

    gpio_set_value(CAM_MAIN_GPIO_RESET_N, 1);
    mdelay(10);
		
		// Turn On Main Camera Power Part2
		count2 = ARRAY_SIZE(regs_main2);
		rc = regulator_bulk_get(dev, count2, regs_main2);
		if (rc) {
			dev_err(dev, "%s: regs_main2 could not get regulators: %d\n", __func__, rc);
			goto reg_free1;;
		}
		
		rc = regulator_bulk_set_voltage(count2, regs_main2);
		if (rc) {
			dev_err(dev, "%s: regs_main2 could not set voltages: %d\n", __func__, rc);
			goto reg_free2;
		}
		
		rc = regulator_bulk_enable(count2, regs_main2);
		if (rc) {
			dev_err(dev, "%s: regs_main2 could not enable regulators: %d\n", __func__, rc);
			goto reg_free2;
		}
		
		reg_count_main2 = count2;

    mdelay(3);

    return 0;
    
reg_free2:
    regulator_bulk_free(count2, regs_main2);
    reg_count_main2 = 0;
    regulator_bulk_disable(reg_count_main1, regs_main1);
reg_free1:
    regulator_bulk_free(count1, regs_main1);
    reg_count_main1 = 0;

    return 0;
}
int vga_camera_power_on (struct platform_device *pdev)
{
    int count1, count2, rc;
		struct device *dev = &pdev->dev;

    printk(KERN_ERR "vga_camera_power_on\n");

    gpio_set_value(CAM_VGA_GPIO_RESET_N, 0);
    mdelay(1);

    gpio_set_value(CAM_VGA_GPIO_PWDN, 0);
    mdelay(1);


		// Turn On Main Camera Power Part1
		count1 = ARRAY_SIZE(regs_vga1);
		rc = regulator_bulk_get(dev, count1, regs_vga1);
		if (rc) {
			dev_err(dev, "%s: regs_vga1 could not get regulators: %d\n", __func__, rc);
			return 0;
		}
		
		rc = regulator_bulk_set_voltage(count1, regs_vga1);
		if (rc) {
			dev_err(dev, "%s: regs_vga1 could not set voltages: %d\n", __func__, rc);
			goto reg_free1;
		}
		
		rc = regulator_bulk_enable(count1, regs_vga1);
		if (rc) {
			dev_err(dev, "%s: regs_vga1 could not enable regulators: %d\n", __func__, rc);
			goto reg_free1;
		}
		
		reg_count_vga1 = count1;

		// Turn On Main Camera Power Part2
		count2 = ARRAY_SIZE(regs_vga2);
		rc = regulator_bulk_get(dev, count2, regs_vga2);
		if (rc) {
			dev_err(dev, "%s: regs_vga2 could not get regulators: %d\n", __func__, rc);
			goto reg_free1;;
		}
		
		rc = regulator_bulk_set_voltage(count2, regs_vga2);
		if (rc) {
			dev_err(dev, "%s: regs_vga2 could not set voltages: %d\n", __func__, rc);
			goto reg_free2;
		}
		
		rc = regulator_bulk_enable(count2, regs_vga2);
		if (rc) {
			dev_err(dev, "%s: regs_vga2 could not enable regulators: %d\n", __func__, rc);
			goto reg_free2;
		}
		
		reg_count_vga2 = count2;

    gpio_set_value(CAM_VGA_GPIO_PWDN, 1);
    mdelay(1);

    msm_camio_clk_enable(CAMIO_CAM_MCLK_CLK);
    mdelay(1);
    
    gpio_set_value(CAM_VGA_GPIO_PWDN, 0);
    mdelay(1);
    
    gpio_set_value(CAM_VGA_GPIO_RESET_N, 1);
    mdelay(10);

    return 0;
    
reg_free2:
    regulator_bulk_free(count2, regs_vga2);
    reg_count_vga2 = 0;
    regulator_bulk_disable(reg_count_vga1, regs_vga1);
reg_free1:
    regulator_bulk_free(count1, regs_vga1);
    reg_count_vga1 = 0;

    return 0;
}
Exemple #28
0
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("[CAM]rawchip power on platform_data didn't register\n");
        return -EIO;
    }
    rc = pdata->camera_rawchip_power_on();
    if (rc < 0) {
        pr_err("[CAM] rawchip power on failed\n");
        goto enable_power_on_failed;
    }

    rc = msm_camio_clk_enable(CAMIO_CAM_MCLK_CLK);
    if (rc < 0) {
        pr_err("[CAM] enable MCLK failed\n");
        goto enable_mclk_failed;
    }
    mdelay(1);

#if ((defined CONFIG_I2C_CPLD) && ((defined CONFIG_MACH_DUMMY) || (defined CONFIG_MACH_DUMMY) || (defined CONFIG_MACH_DUMMY)))
    pr_info("[CAM]%s rawchip reset High", __func__);
    rc = cpld_gpio_write(pdata->rawchip_reset, 1);
    if(rc < 0) {
        pr_err("[CAM]%s: rawchip_reset fail\n", __func__);
        goto enable_reset_failed;
    }
    mdelay(1);
#else
    rc = gpio_request(pdata->rawchip_reset, "rawchip");
    if (rc < 0) {
        pr_err("GPIO(%d) request failed\n", pdata->rawchip_reset);
        goto enable_reset_failed;
    }

    pr_info("[CAM]%s rawchip reset High", __func__);
    gpio_direction_output(pdata->rawchip_reset, 1);
    gpio_free(pdata->rawchip_reset);
    mdelay(1);
#endif

    yushan_spi_write(0x0008, 0x7f);
    mdelay(1);

    {
        uint16_t uwSpiData = 0x1E00;
        SPI_Write(0x1018, 2, (unsigned char*)&uwSpiData);
    }

    return rc;

enable_reset_failed:
    msm_camio_clk_disable(CAMIO_CAM_MCLK_CLK);
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;
}
Exemple #29
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;
}
Exemple #30
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;
}