msm: camera: icp: lock before updating clock status

Clock status can be updated in two ways, either through
timer or through the recovery. In case the clock is not
available during the recovery then it would try to access
registers which are unclocked. To prevent this before
updating the clock status spinlock should be acquired.

Change-Id: I16aea5e7dafacfe6b520699af195194d5d171c7c
Signed-off-by: Tejas Prajapati <tpraja@codeaurora.org>
Signed-off-by: Jigarkumar Zala <jzala@codeaurora.org>
Dieser Commit ist enthalten in:
Jigarkumar Zala
2019-07-29 12:04:10 -07:00
committet von Gerrit - the friendly Code Review server
Ursprung d707886ae1
Commit 692d184a62
2 geänderte Dateien mit 10 neuen und 0 gelöschten Zeilen

Datei anzeigen

@@ -306,6 +306,7 @@ int cam_bps_process_cmd(void *device_priv, uint32_t cmd_type,
struct cam_bps_device_core_info *core_info = NULL;
struct cam_bps_device_hw_info *hw_info = NULL;
int rc = 0;
unsigned long flags;
if (!device_priv) {
CAM_ERR(CAM_ICP, "Invalid arguments");
@@ -395,12 +396,16 @@ int cam_bps_process_cmd(void *device_priv, uint32_t cmd_type,
}
break;
case CAM_ICP_BPS_CMD_DISABLE_CLK:
spin_lock_irqsave(&bps_dev->hw_lock, flags);
if (core_info->clk_enable == true)
cam_bps_toggle_clk(soc_info, false);
core_info->clk_enable = false;
spin_unlock_irqrestore(&bps_dev->hw_lock, flags);
break;
case CAM_ICP_BPS_CMD_RESET:
spin_lock_irqsave(&bps_dev->hw_lock, flags);
rc = cam_bps_cmd_reset(soc_info, core_info);
spin_unlock_irqrestore(&bps_dev->hw_lock, flags);
break;
default:
CAM_ERR(CAM_ICP, "Invalid Cmd Type:%u", cmd_type);

Datei anzeigen

@@ -305,6 +305,7 @@ int cam_ipe_process_cmd(void *device_priv, uint32_t cmd_type,
struct cam_ipe_device_core_info *core_info = NULL;
struct cam_ipe_device_hw_info *hw_info = NULL;
int rc = 0;
unsigned long flags;
if (!device_priv) {
CAM_ERR(CAM_ICP, "Invalid arguments");
@@ -389,12 +390,16 @@ int cam_ipe_process_cmd(void *device_priv, uint32_t cmd_type,
}
break;
case CAM_ICP_IPE_CMD_DISABLE_CLK:
spin_lock_irqsave(&ipe_dev->hw_lock, flags);
if (core_info->clk_enable == true)
cam_ipe_toggle_clk(soc_info, false);
core_info->clk_enable = false;
spin_unlock_irqrestore(&ipe_dev->hw_lock, flags);
break;
case CAM_ICP_IPE_CMD_RESET:
spin_lock_irqsave(&ipe_dev->hw_lock, flags);
rc = cam_ipe_cmd_reset(soc_info, core_info);
spin_unlock_irqrestore(&ipe_dev->hw_lock, flags);
break;
default:
CAM_ERR(CAM_ICP, "Invalid Cmd Type:%u", cmd_type);