From 4f8f47ab0f9aa550b7cfcddf64aaa07df7cc1e42 Mon Sep 17 00:00:00 2001 From: Mukund Madhusudan Atre Date: Thu, 27 Aug 2020 17:58:52 -0700 Subject: [PATCH] msm: camera: common: Fix enable/disable for dsp clock source Currently, if dsp clock source is not found in device tree, still we are trying to enable/disable clock source. Check for availability of that optional clock before toggling it. CRs-Fixed: 2762106 Change-Id: I2a4467f5383343bdf1e6607712270f574c76e51e Signed-off-by: Mukund Madhusudan Atre --- .../isp_hw_mgr/isp_hw/vfe_hw/cam_vfe_soc.c | 26 +++++++++++++++---- drivers/cam_utils/cam_soc_util.c | 2 +- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/cam_vfe_soc.c b/drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/cam_vfe_soc.c index 6b1bb46b94..b60528dff7 100644 --- a/drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/cam_vfe_soc.c +++ b/drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/cam_vfe_soc.c @@ -298,11 +298,18 @@ int cam_vfe_soc_enable_clk(struct cam_hw_soc_info *soc_info, if (!soc_info) { CAM_ERR(CAM_ISP, "Error Invalid params"); rc = -EINVAL; - return rc; + goto end; } soc_private = soc_info->soc_private; - if (strcmp(clk_name, CAM_VFE_DSP_CLK_NAME) == 0) { + if (!strcmp(clk_name, CAM_VFE_DSP_CLK_NAME)) { + if (soc_private->dsp_clk_index == -1) { + CAM_ERR(CAM_ISP, + "DSP clock not supported for vfe: %d", soc_info->index); + rc = -EPERM; + goto end; + } + rc = cam_soc_util_clk_enable(soc_private->dsp_clk, CAM_VFE_DSP_CLK_NAME, soc_private->dsp_clk_rate); if (rc) @@ -310,6 +317,7 @@ int cam_vfe_soc_enable_clk(struct cam_hw_soc_info *soc_info, "Error enable dsp clk failed rc=%d", rc); } +end: return rc; } @@ -322,18 +330,26 @@ int cam_vfe_soc_disable_clk(struct cam_hw_soc_info *soc_info, if (!soc_info) { CAM_ERR(CAM_ISP, "Error Invalid params"); rc = -EINVAL; - return rc; + goto end; } soc_private = soc_info->soc_private; - if (strcmp(clk_name, CAM_VFE_DSP_CLK_NAME) == 0) { + if (!strcmp(clk_name, CAM_VFE_DSP_CLK_NAME)) { + if (soc_private->dsp_clk_index == -1) { + CAM_ERR(CAM_ISP, + "DSP clock not supported for vfe: %d", soc_info->index); + rc = -EPERM; + goto end; + } + rc = cam_soc_util_clk_disable(soc_private->dsp_clk, CAM_VFE_DSP_CLK_NAME); if (rc) CAM_ERR(CAM_ISP, - "Error enable dsp clk failed rc=%d", rc); + "Error disable dsp clk failed rc=%d", rc); } +end: return rc; } diff --git a/drivers/cam_utils/cam_soc_util.c b/drivers/cam_utils/cam_soc_util.c index 80611f9bff..db2dd9dd77 100644 --- a/drivers/cam_utils/cam_soc_util.c +++ b/drivers/cam_utils/cam_soc_util.c @@ -544,7 +544,6 @@ int cam_soc_util_get_option_clk_by_name(struct cam_hw_soc_info *soc_info, index = of_property_match_string(of_node, "clock-names-option", clk_name); - if (index < 0) { CAM_DBG(CAM_UTIL, "No clk data for %s", clk_name); *clk_index = -1; @@ -557,6 +556,7 @@ int cam_soc_util_get_option_clk_by_name(struct cam_hw_soc_info *soc_info, CAM_ERR(CAM_UTIL, "No clk named %s found. Dev %s", clk_name, soc_info->dev_name); *clk_index = -1; + *clk = NULL; return -EFAULT; } *clk_index = index;