void msm_camio_cam_mclk_enable(int rate) { struct clk *clk = NULL; camio_cam_m_clk = clk = clk_get(NULL, "cam_m_clk"); msm_camio_clk_rate_set_2(clk, rate); if (!IS_ERR(clk)) clk_enable(clk); }
/* memcpy_toio does not work. Use writel_relaxed for now */ for (i = 0; i < len; i++) writel_relaxed(*s++, d++); } void msm_io_dump(void __iomem *addr, int size) { char line_str[BUFF_SIZE_128], *p_str; int i; u32 *p = (u32 *) addr; u32 data; CDBG("%s: %p %d\n", __func__, addr, size); line_str[0] = '\0'; p_str = line_str; for (i = 0; i < size/4; i++) { if (i % 4 == 0) { snprintf(p_str, 12, "%08x: ", (u32) p); p_str += 10; } data = readl_relaxed(p++); snprintf(p_str, 12, "%08x ", data); p_str += 9; if ((i + 1) % 4 == 0) { CDBG("%s\n", line_str); line_str[0] = '\0'; p_str = line_str; } } if (line_str[0] != '\0') CDBG("%s\n", line_str); } void msm_io_memcpy(void __iomem *dest_addr, void __iomem *src_addr, u32 len) { CDBG("%s: %p %p %d\n", __func__, dest_addr, src_addr, len); msm_io_memcpy_toio(dest_addr, src_addr, len / 4); msm_io_dump(dest_addr, len); } #if 1 /* HTC_START sync the previous project */ static int msm_camera_vreg_enable(struct msm_camera_sensor_info *s_info)//(struct platform_device *pdev) { #if 0 /* HTC_START Hayden Huang 20111005 */ if (mipi_csi_vdd == NULL) { mipi_csi_vdd = regulator_get(&pdev->dev, "mipi_csi_vdd"); if (IS_ERR(mipi_csi_vdd)) { CDBG("%s: VREG MIPI CSI VDD get failed\n", __func__); mipi_csi_vdd = NULL; return -ENODEV; } if (regulator_set_voltage(mipi_csi_vdd, CAM_CSI_VDD_MINUV, CAM_CSI_VDD_MAXUV)) { CDBG("%s: VREG MIPI CSI VDD set voltage failed\n", __func__); goto mipi_csi_vdd_put; } if (regulator_set_optimum_mode(mipi_csi_vdd, CAM_CSI_LOAD_UA) < 0) { CDBG("%s: VREG MIPI CSI set optimum mode failed\n", __func__); goto mipi_csi_vdd_release; } if (regulator_enable(mipi_csi_vdd)) { CDBG("%s: VREG MIPI CSI VDD enable failed\n", __func__); goto mipi_csi_vdd_disable; } } if (cam_vana == NULL) { cam_vana = regulator_get(&pdev->dev, "cam_vana"); if (IS_ERR(cam_vana)) { CDBG("%s: VREG CAM VANA get failed\n", __func__); cam_vana = NULL; goto mipi_csi_vdd_disable; } if (regulator_set_voltage(cam_vana, CAM_VANA_MINUV, CAM_VANA_MAXUV)) { CDBG("%s: VREG CAM VANA set voltage failed\n", __func__); goto cam_vana_put; } if (regulator_set_optimum_mode(cam_vana, CAM_VANA_LOAD_UA) < 0) { CDBG("%s: VREG CAM VANA set optimum mode failed\n", __func__); goto cam_vana_release; } if (regulator_enable(cam_vana)) { CDBG("%s: VREG CAM VANA enable failed\n", __func__); goto cam_vana_disable; } } if (cam_vio == NULL) { cam_vio = regulator_get(&pdev->dev, "cam_vio"); if (IS_ERR(cam_vio)) { CDBG("%s: VREG VIO get failed\n", __func__); cam_vio = NULL; goto cam_vana_disable; } if (regulator_enable(cam_vio)) { CDBG("%s: VREG VIO enable failed\n", __func__); goto cam_vio_put; } } if (cam_vdig == NULL) { cam_vdig = regulator_get(&pdev->dev, "cam_vdig"); if (IS_ERR(cam_vdig)) { CDBG("%s: VREG CAM VDIG get failed\n", __func__); cam_vdig = NULL; goto cam_vio_disable; } if (regulator_set_voltage(cam_vdig, CAM_VDIG_MINUV, CAM_VDIG_MAXUV)) { CDBG("%s: VREG CAM VDIG set voltage failed\n", __func__); goto cam_vdig_put; } if (regulator_set_optimum_mode(cam_vdig, CAM_VDIG_LOAD_UA) < 0) { CDBG("%s: VREG CAM VDIG set optimum mode failed\n", __func__); goto cam_vdig_release; } if (regulator_enable(cam_vdig)) { CDBG("%s: VREG CAM VDIG enable failed\n", __func__); goto cam_vdig_disable; } } if (cam_vaf == NULL) { cam_vaf = regulator_get(&pdev->dev, "cam_vaf"); if (IS_ERR(cam_vaf)) { CDBG("%s: VREG CAM VAF get failed\n", __func__); cam_vaf = NULL; goto cam_vdig_disable; } if (regulator_set_voltage(cam_vaf, CAM_VAF_MINUV, CAM_VAF_MAXUV)) { CDBG("%s: VREG CAM VAF set voltage failed\n", __func__); goto cam_vaf_put; } if (regulator_set_optimum_mode(cam_vaf, CAM_VAF_LOAD_UA) < 0) { CDBG("%s: VREG CAM VAF set optimum mode failed\n", __func__); goto cam_vaf_release; } if (regulator_enable(cam_vaf)) { CDBG("%s: VREG CAM VAF enable failed\n", __func__); goto cam_vaf_disable; } } #endif /* HTC_END Hayden Huang 20111005 */ return 0; #if 0 /* HTC_START Hayden Huang 20111005 */ cam_vaf_disable: regulator_set_optimum_mode(cam_vaf, 0); cam_vaf_release: regulator_set_voltage(cam_vaf, 0, CAM_VAF_MAXUV); regulator_disable(cam_vaf); cam_vaf_put: regulator_put(cam_vaf); cam_vaf = NULL; cam_vdig_disable: regulator_set_optimum_mode(cam_vdig, 0); cam_vdig_release: regulator_set_voltage(cam_vdig, 0, CAM_VDIG_MAXUV); regulator_disable(cam_vdig); cam_vdig_put: regulator_put(cam_vdig); cam_vdig = NULL; cam_vio_disable: regulator_disable(cam_vio); cam_vio_put: regulator_put(cam_vio); cam_vio = NULL; cam_vana_disable: regulator_set_optimum_mode(cam_vana, 0); cam_vana_release: regulator_set_voltage(cam_vana, 0, CAM_VANA_MAXUV); regulator_disable(cam_vana); cam_vana_put: regulator_put(cam_vana); cam_vana = NULL; mipi_csi_vdd_disable: regulator_set_optimum_mode(mipi_csi_vdd, 0); mipi_csi_vdd_release: regulator_set_voltage(mipi_csi_vdd, 0, CAM_CSI_VDD_MAXUV); regulator_disable(mipi_csi_vdd); mipi_csi_vdd_put: regulator_put(mipi_csi_vdd); mipi_csi_vdd = NULL; return -ENODEV; #endif /* HTC_END Hayden Huang 20111005 */ } static void msm_camera_vreg_disable(void) { #if 0 /* HTC_START Hayden Huang 20111005 */ if (mipi_csi_vdd) { regulator_set_voltage(mipi_csi_vdd, 0, CAM_CSI_VDD_MAXUV); regulator_set_optimum_mode(mipi_csi_vdd, 0); regulator_disable(mipi_csi_vdd); regulator_put(mipi_csi_vdd); mipi_csi_vdd = NULL; } if (cam_vana) { regulator_set_voltage(cam_vana, 0, CAM_VANA_MAXUV); regulator_set_optimum_mode(cam_vana, 0); regulator_disable(cam_vana); regulator_put(cam_vana); cam_vana = NULL; } if (cam_vio) { regulator_disable(cam_vio); regulator_put(cam_vio); cam_vio = NULL; } if (cam_vdig) { regulator_set_voltage(cam_vdig, 0, CAM_VDIG_MAXUV); regulator_set_optimum_mode(cam_vdig, 0); regulator_disable(cam_vdig); regulator_put(cam_vdig); cam_vdig = NULL; } if (cam_vaf) { regulator_set_voltage(cam_vaf, 0, CAM_VAF_MAXUV); regulator_set_optimum_mode(cam_vaf, 0); regulator_disable(cam_vaf); regulator_put(cam_vaf); cam_vaf = NULL; } #endif /* HTC_END Hayden Huang 20111005 */ } #endif /* HTC_END */ int msm_camio_clk_enable(enum msm_camio_clk_type clktype) { int rc = 0; struct clk *clk = NULL; switch (clktype) { #if 1 /* HTC_START sync the previous project */ case CAMIO_CAM_MCLK_CLK: camio_cam_clk = clk = clk_get(&(camio_sctrl->sensor_i2c_client->client->dev), "cam_clk");//(&camio_dev->dev, "cam_clk"); pr_info("[CAM] %s: clk(%p) obj.name:%s", __func__, clk, camio_sctrl->sensor_i2c_client->client->dev.kobj.name); if (!IS_ERR(clk)) msm_camio_clk_rate_set_2(clk, camio_clk.mclk_clk_rate); break; #endif /* HTC_END */ #if 1 /* HTC_START add for camera rawchip mclk */ case CAMIO_CAM_RAWCHIP_MCLK_CLK: camio_cam_rawchip_clk = clk = clk_get(NULL, "cam0_clk"); pr_info("[CAM] %s: enable CAMIO_CAM_RAWCHIP_MCLK_CLK", __func__); if (!IS_ERR(clk)) clk_set_rate(clk, 24000000); break; #endif /* HTC_END */ case CAMIO_JPEG_CLK: camio_jpeg_clk = clk = clk_get(NULL, "ijpeg_clk"); clk_set_rate(clk, 228571000); break; case CAMIO_JPEG_PCLK: camio_jpeg_pclk = clk = clk_get(NULL, "ijpeg_pclk"); break; case CAMIO_IMEM_CLK: camio_imem_clk = clk = clk_get(NULL, "imem_clk"); break; default: break; } if (!IS_ERR(clk)) rc = clk_prepare_enable(clk); else rc = PTR_ERR(clk); if (rc < 0) pr_err("%s(%d) failed %d\n", __func__, clktype, rc); return rc; }
int msm_camio_clk_enable(enum msm_camio_clk_type clktype) { int rc = 0; struct clk *clk = NULL; switch (clktype) { case CAMIO_CAM_MCLK_CLK: clk = clk_get(NULL, "cam_m_clk"); camio_cam_clk = clk; msm_camio_clk_rate_set_2(clk, camio_clk.mclk_clk_rate); break; default: break; } if (!IS_ERR(clk)) clk_enable(clk); else rc = -1; return rc; }
int msm_camio_clk_enable(enum msm_camio_clk_type clktype) { int rc = 0; struct clk *clk = NULL; switch (clktype) { case CAMIO_CAM_MCLK_CLK: camio_cam_clk = clk = clk_get(&camio_dev->dev, "cam_clk"); msm_camio_clk_rate_set_2(clk, camio_clk.mclk_clk_rate); break; case CAMIO_JPEG_CLK: camio_jpeg_clk = clk = clk_get(NULL, "ijpeg_clk"); clk_set_rate(clk, 153600000); break; case CAMIO_JPEG_PCLK: camio_jpeg_pclk = clk = clk_get(NULL, "ijpeg_pclk"); break; default: break; } if (!IS_ERR(clk)) rc = clk_enable(clk); else rc = PTR_ERR(clk); if (rc < 0) pr_err("%s(%d) failed %d\n", __func__, clktype, rc); return rc; }
int msm_camio_clk_enable(enum msm_camio_clk_type clktype) { int rc = 0; struct clk *clk = NULL; switch (clktype) { case CAMIO_CAM_MCLK_CLK: camio_cam_clk = clk = clk_get(NULL, "cam_clk"); msm_camio_clk_rate_set_2(clk, camio_clk.mclk_clk_rate); break; case CAMIO_VFE_CLK: camio_vfe_clk = clk = clk_get(NULL, "vfe_clk"); msm_camio_clk_rate_set_2(clk, camio_clk.vfe_clk_rate); break; case CAMIO_CSI0_VFE_CLK: camio_csi0_vfe_clk = clk = clk_get(NULL, "csi_vfe_clk"); break; case CAMIO_CSI1_VFE_CLK: camio_csi1_vfe_clk = clk = clk_get(&camio_dev->dev, "csi_vfe_clk"); break; case CAMIO_CSI_SRC_CLK: camio_csi_src_clk = clk = clk_get(NULL, "csi_src_clk"); msm_camio_clk_rate_set_2(clk, 384000000); break; case CAMIO_CSI0_CLK: camio_csi0_clk = clk = clk_get(NULL, "csi_clk"); break; case CAMIO_CSI1_CLK: camio_csi1_clk = clk = clk_get(&camio_dev->dev, "csi_clk"); break; case CAMIO_VFE_PCLK: camio_vfe_pclk = clk = clk_get(NULL, "vfe_pclk"); break; case CAMIO_CSI0_PCLK: camio_csi0_pclk = clk = clk_get(NULL, "csi_pclk"); break; case CAMIO_CSI1_PCLK: camio_csi1_pclk = clk = clk_get(&camio_dev->dev, "csi_pclk"); break; case CAMIO_JPEG_CLK: camio_jpeg_clk = clk = clk_get(NULL, "ijpeg_clk"); msm_camio_clk_rate_set_2(clk, 228571000); break; case CAMIO_JPEG_PCLK: camio_jpeg_pclk = clk = clk_get(NULL, "ijpeg_pclk"); break; case CAMIO_VPE_CLK: camio_vpe_clk = clk = clk_get(NULL, "vpe_clk"); vpe_clk_rate = clk_round_rate(camio_vpe_clk, vpe_clk_rate); clk_set_rate(camio_vpe_clk, vpe_clk_rate); break; case CAMIO_VPE_PCLK: camio_vpe_pclk = clk = clk_get(NULL, "vpe_pclk"); break; default: break; } if (!IS_ERR(clk)) clk_enable(clk); else rc = -1; return rc; }
int msm_camio_clk_enable(enum msm_camio_clk_type clktype) { int rc = 0; struct clk *clk = NULL; pr_info("[CAM] %s clktype:%d", __func__, clktype); switch (clktype) { case CAMIO_VFE_MDC_CLK: camio_vfe_mdc_clk = clk = clk_get(NULL, "vfe_mdc_clk"); break; case CAMIO_MDC_CLK: camio_mdc_clk = clk = clk_get(NULL, "mdc_clk"); break; case CAMIO_VFE_CLK: camio_vfe_clk = clk = clk_get(NULL, "vfe_clk"); msm_camio_clk_rate_set_2(clk, 122880000); break; case CAMIO_VFE_CLK_FOR_MIPI_2_LANE: camio_vfe_clk = clk = clk_get(NULL, "vfe_clk"); msm_camio_clk_rate_set_2(clk, 153600000); break; case CAMIO_VFE_CAMIF_CLK: camio_vfe_camif_clk = clk = clk_get(NULL, "vfe_camif_clk"); break; case CAMIO_VFE_PBDG_CLK: camio_vfe_pbdg_clk = clk = clk_get(NULL, "vfe_pclk"); break; case CAMIO_CAM_MCLK_CLK: camio_cam_m_clk = clk = clk_get(NULL, "cam_m_clk"); msm_camio_clk_rate_set_2(clk, 24000000); break; case CAMIO_CAMIF_PAD_PBDG_CLK: camio_camif_pad_pbdg_clk = clk = clk_get(NULL, "camif_pad_pclk"); break; case CAMIO_CSI0_CLK: camio_csi_clk = clk = clk_get(NULL, "csi_clk"); msm_camio_clk_rate_set_2(clk, 153600000); break; case CAMIO_CSI0_VFE_CLK: camio_csi_vfe_clk = clk = clk_get(NULL, "csi_vfe_clk"); break; case CAMIO_CSI0_PCLK: camio_csi_pclk = clk = clk_get(NULL, "csi_pclk"); break; default: break; } if (clk && !IS_ERR(clk)) clk_enable(clk); else rc = -1; return rc; }
int msm_camio_clk_enable(enum msm_camio_clk_type clktype) { int rc = 0; struct clk *clk = NULL; switch (clktype) { case CAMIO_VFE_MDC_CLK: camio_vfe_mdc_clk = clk = clk_get(NULL, "vfe_mdc_clk"); break; case CAMIO_MDC_CLK: camio_mdc_clk = clk = clk_get(NULL, "mdc_clk"); break; case CAMIO_VFE_CLK: camio_vfe_clk = clk = clk_get(NULL, "vfe_clk"); msm_camio_clk_rate_set_2(clk, camio_clk.vfe_clk_rate); break; case CAMIO_VFE_CAMIF_CLK: camio_vfe_camif_clk = clk = clk_get(NULL, "vfe_camif_clk"); break; case CAMIO_VFE_PBDG_CLK: camio_vfe_pbdg_clk = clk = clk_get(NULL, "vfe_pclk"); break; case CAMIO_CAM_MCLK_CLK: camio_cam_m_clk = clk = clk_get(NULL, "cam_m_clk"); msm_camio_clk_rate_set_2(clk, camio_clk.mclk_clk_rate); break; case CAMIO_CAMIF_PAD_PBDG_CLK: camio_camif_pad_pbdg_clk = clk = clk_get(NULL, "camif_pad_pclk"); break; case CAMIO_CSI0_CLK: camio_csi_clk = clk = clk_get(NULL, "csi_clk"); msm_camio_clk_rate_set_2(clk, 153600000); break; case CAMIO_CSI0_VFE_CLK: camio_csi_vfe_clk = clk = clk_get(NULL, "csi_vfe_clk"); break; case CAMIO_CSI0_PCLK: camio_csi_pclk = clk = clk_get(NULL, "csi_pclk"); break; case CAMIO_JPEG_CLK: camio_jpeg_clk = clk = clk_get(NULL, "jpeg_clk"); clk_set_min_rate(clk, 144000000); break; case CAMIO_JPEG_PCLK: camio_jpeg_pclk = clk = clk_get(NULL, "jpeg_pclk"); break; case CAMIO_VPE_CLK: camio_vpe_clk = clk = clk_get(NULL, "vpe_clk"); msm_camio_clk_set_min_rate(clk, vpe_clk_rate); break; default: break; } if (!IS_ERR(clk)) clk_enable(clk); else rc = -1; return rc; }
int msm_camio_clk_disable(enum msm_camio_clk_type clktype) { int rc = 0; struct clk *clk = NULL; switch (clktype) { case CAMIO_VFE_MDC_CLK: clk = camio_vfe_mdc_clk; break; case CAMIO_MDC_CLK: clk = camio_mdc_clk; break; case CAMIO_VFE_CLK: clk = camio_vfe_clk; if (camio_clk.vfe_clk_rate == 192000000) msm_camio_clk_rate_set_2(clk, 153600000); break; case CAMIO_VFE_CAMIF_CLK: clk = camio_vfe_camif_clk; break; case CAMIO_VFE_PBDG_CLK: clk = camio_vfe_pbdg_clk; break; case CAMIO_CAM_MCLK_CLK: clk = camio_cam_m_clk; break; case CAMIO_CAMIF_PAD_PBDG_CLK: clk = camio_camif_pad_pbdg_clk; break; case CAMIO_CSI0_CLK: clk = camio_csi_clk; break; case CAMIO_CSI0_VFE_CLK: clk = camio_csi_vfe_clk; break; case CAMIO_CSI0_PCLK: clk = camio_csi_pclk; break; case CAMIO_JPEG_CLK: clk = camio_jpeg_clk; break; case CAMIO_JPEG_PCLK: clk = camio_jpeg_pclk; break; case CAMIO_VPE_CLK: clk = camio_vpe_clk; break; default: break; } if (!IS_ERR(clk)) { clk_disable(clk); clk_put(clk); } else rc = -1; return rc; }
int msm_camio_clk_enable(enum msm_camio_clk_type clktype) { int rc = 0; struct clk *clk = NULL; switch (clktype) { case CAMIO_CAM_MCLK_CLK: camio_cam_clk = clk = clk_get(NULL, "cam_clk"); msm_camio_clk_rate_set_2(clk, camio_clk.mclk_clk_rate); break; case CAMIO_VFE_CLK: camio_vfe_clk = clk = clk_get(NULL, "vfe_clk"); msm_camio_clk_rate_set_2(clk, camio_clk.vfe_clk_rate); break; case CAMIO_CSI0_VFE_CLK: camio_csi0_vfe_clk = clk = clk_get(NULL, "csi_vfe_clk"); break; /* case CAMIO_CSI1_VFE_CLK: camio_csi1_vfe_clk = clk = clk_get(&camio_dev->dev, "csi_vfe_clk"); break; */ case CAMIO_CSI_SRC_CLK: camio_csi_src_clk = clk = clk_get(NULL, "csi_src_clk"); msm_camio_clk_rate_set_2(clk, 384000000); break; case CAMIO_CSI1_SRC_CLK: camio_csi1_src_clk = clk = clk_get(NULL, "csi_src_clk"); msm_camio_clk_rate_set_2(clk, 384000000); break; case CAMIO_CSI0_CLK: camio_csi0_clk = clk = clk_get(NULL, "csi_clk"); break; case CAMIO_CSI1_CLK: camio_csi1_clk = clk = clk_get(&camio_dev->dev, "csi_clk"); break; case CAMIO_CSI_PIX_CLK: camio_csi_pix_clk = clk = clk_get(NULL, "csi_pix_clk"); break; case CAMIO_CSI_RDI_CLK: camio_csi_rdi_clk = clk = clk_get(NULL, "csi_rdi_clk"); break; case CAMIO_CSIPHY0_TIMER_CLK: camio_csiphy0_timer_clk = clk = clk_get(NULL, "csiphy0_timer_clk"); break; case CAMIO_CSIPHY1_TIMER_CLK: camio_csiphy1_timer_clk = clk = clk_get(&camio_dev->dev, "csiphy1_timer_clk"); break; case CAMIO_CSI0_PCLK: camio_csi0_pclk = clk = clk_get(NULL, "csi_pclk"); break; case CAMIO_JPEG_CLK: camio_jpeg_clk = clk = clk_get(NULL, "ijpeg_clk"); clk_set_min_rate(clk, 144000000); break; case CAMIO_JPEG_PCLK: camio_jpeg_pclk = clk = clk_get(NULL, "ijpeg_pclk"); break; case CAMIO_VPE_CLK: camio_vpe_clk = clk = clk_get(NULL, "vpe_clk"); msm_camio_clk_set_min_rate(clk, 150000000); break; case CAMIO_VPE_PCLK: camio_vpe_pclk = clk = clk_get(NULL, "vpe_pclk"); break; default: break; } if (!IS_ERR(clk)) clk_enable(clk); else rc = -1; return rc; }
int msm_camio_clk_enable(enum msm_camio_clk_type clktype) { int rc = 0; struct clk *clk = NULL; switch (clktype) { case CAMIO_VFE_MDC_CLK: pr_err("CLK Enable: CAMIO_VFE_MDC_CLK"); camio_vfe_mdc_clk = clk = clk_get(NULL, "vfe_mdc_clk"); break; case CAMIO_MDC_CLK: pr_err("CLK Enable: CAMIO_MDC_CLK"); camio_mdc_clk = clk = clk_get(NULL, "mdc_clk"); break; case CAMIO_VFE_CLK: pr_err("CLK Enable: CAMIO_VFE_CLK"); camio_vfe_clk = clk = clk_get(NULL, "vfe_clk"); msm_camio_clk_rate_set_2(clk, camio_clk.vfe_clk_rate); break; case CAMIO_VFE_CAMIF_CLK: pr_err("CLK Enable: CAMIO_VFE_CAMIF_CLK"); camio_vfe_camif_clk = clk = clk_get(NULL, "vfe_camif_clk"); break; case CAMIO_VFE_PBDG_CLK: pr_err("CLK Enable: CAMIO_VFE_PBDG_CLK"); camio_vfe_pbdg_clk = clk = clk_get(NULL, "vfe_pclk"); break; case CAMIO_CAM_MCLK_CLK: pr_err("CLK Enable: CAMIO_CAM_MCLK_CLK"); camio_cam_m_clk = clk = clk_get(NULL, "cam_m_clk"); msm_camio_clk_rate_set_2(clk, camio_clk.mclk_clk_rate); break; case CAMIO_CAMIF_PAD_PBDG_CLK: pr_err("CLK Enable: CAMIO_PAD_PBDG_CLK"); camio_camif_pad_pbdg_clk = clk = clk_get(NULL, "camif_pad_pclk"); break; case CAMIO_CSI0_CLK: pr_err("CLK Enable: CAMIO_CSI0_CLK"); camio_csi_clk = clk = clk_get(NULL, "csi_clk"); msm_camio_clk_rate_set_2(clk, 153600000); break; case CAMIO_CSI0_VFE_CLK: pr_err("CLK Enable: CAMIO_VFE_CLK"); camio_csi_vfe_clk = clk = clk_get(NULL, "csi_vfe_clk"); break; case CAMIO_CSI0_PCLK: pr_err("CLK Enable: CAMIO_CSI0_CLK"); camio_csi_pclk = clk = clk_get(NULL, "csi_pclk"); break; case CAMIO_JPEG_CLK: pr_err("CLK Enable: CAMIO_JPEG_CLK"); camio_jpeg_clk = clk = clk_get(NULL, "jpeg_clk"); clk_set_min_rate(clk, 144000000); break; case CAMIO_JPEG_PCLK: pr_err("CLK Enable: CAMIO_JPEG_PCLK"); camio_jpeg_pclk = clk = clk_get(NULL, "jpeg_pclk"); break; case CAMIO_VPE_CLK: pr_err("CLK Enable: CAMIO_VPE_CLK"); camio_vpe_clk = clk = clk_get(NULL, "vpe_clk"); msm_camio_clk_set_min_rate(clk, 150000000); break; default: pr_err("CLK Enable: NO DEFINED CLOCK (CLKTYPE: %d)", clktype); break; } if (!IS_ERR(clk)) { pr_err("CLK Enabled"); clk_enable(clk); } else { pr_err("CLK ERROR on check"); rc = -1; } return rc; }