diff options
author | Ramesh V <ramev@codeaurora.org> | 2016-04-05 12:31:41 +0530 |
---|---|---|
committer | Jeevan Shriram <jshriram@codeaurora.org> | 2016-04-22 15:06:18 -0700 |
commit | 3e1bedddbdb7e0e24ff0875c34d40761e15f3936 (patch) | |
tree | 5e5e422633d31c9c6e1496e76a210524d402f057 | |
parent | 82e1a184e63ea6930c793582045a1406e6f1444b (diff) |
msm: camera: Disable CSIPHY IRQ after sof freeze
Issue: CSIPHY IRQ enabled when kernel recivies possible sof freeze
and will not disable if there is no csiphy release call from backend
which inturn leads watchdog bark.
Resolution: Dump the CISPHY IRQ at the time of possible sof freeze
and disable them.
CRs-Fixed: 996571
Change-Id: I3c6040b81c04660d3a0ac7ed707e1f4b22498dbd
Signed-off-by: Ramesh V <ramev@codeaurora.org>
-rw-r--r-- | drivers/media/platform/msm/camera_v2/sensor/csiphy/msm_csiphy.c | 48 |
1 files changed, 45 insertions, 3 deletions
diff --git a/drivers/media/platform/msm/camera_v2/sensor/csiphy/msm_csiphy.c b/drivers/media/platform/msm/camera_v2/sensor/csiphy/msm_csiphy.c index 51763d7d2e0e..d690200b3c57 100644 --- a/drivers/media/platform/msm/camera_v2/sensor/csiphy/msm_csiphy.c +++ b/drivers/media/platform/msm/camera_v2/sensor/csiphy/msm_csiphy.c @@ -48,7 +48,7 @@ #define CSI_3PHASE_HW 1 #define MAX_LANES 4 #define CLOCK_OFFSET 0x700 -#define CSIPHY_SOF_DEBUG_COUNT 3 +#define CSIPHY_SOF_DEBUG_COUNT 2 #undef CDBG #define CDBG(fmt, args...) pr_debug(fmt, ##args) @@ -871,6 +871,47 @@ static int msm_csiphy_lane_config(struct csiphy_device *csiphy_dev, return rc; } +void msm_csiphy_disable_irq( + struct csiphy_device *csiphy_dev) +{ + void __iomem *csiphybase; + + csiphybase = csiphy_dev->base; + msm_camera_io_w(0, + csiphybase + csiphy_dev->ctrl_reg->csiphy_3ph_reg. + mipi_csiphy_3ph_cmn_ctrl11.addr); + msm_camera_io_w(0, + csiphybase + csiphy_dev->ctrl_reg->csiphy_3ph_reg. + mipi_csiphy_3ph_cmn_ctrl12.addr); + msm_camera_io_w(0, + csiphybase + csiphy_dev->ctrl_reg->csiphy_3ph_reg. + mipi_csiphy_3ph_cmn_ctrl13.addr); + msm_camera_io_w(0, + csiphybase + csiphy_dev->ctrl_reg->csiphy_3ph_reg. + mipi_csiphy_3ph_cmn_ctrl14.addr); + msm_camera_io_w(0, + csiphybase + csiphy_dev->ctrl_reg->csiphy_3ph_reg. + mipi_csiphy_3ph_cmn_ctrl15.addr); + msm_camera_io_w(0, + csiphybase + csiphy_dev->ctrl_reg->csiphy_3ph_reg. + mipi_csiphy_3ph_cmn_ctrl16.addr); + msm_camera_io_w(0, + csiphybase + csiphy_dev->ctrl_reg->csiphy_3ph_reg. + mipi_csiphy_3ph_cmn_ctrl17.addr); + msm_camera_io_w(0, + csiphybase + csiphy_dev->ctrl_reg->csiphy_3ph_reg. + mipi_csiphy_3ph_cmn_ctrl18.addr); + msm_camera_io_w(0, + csiphybase + csiphy_dev->ctrl_reg->csiphy_3ph_reg. + mipi_csiphy_3ph_cmn_ctrl19.addr); + msm_camera_io_w(0, + csiphybase + csiphy_dev->ctrl_reg->csiphy_3ph_reg. + mipi_csiphy_3ph_cmn_ctrl20.addr); + msm_camera_io_w(0, + csiphybase + csiphy_dev->ctrl_reg->csiphy_3ph_reg. + mipi_csiphy_3ph_cmn_ctrl21.addr); +} + static irqreturn_t msm_csiphy_irq(int irq_num, void *data) { uint32_t irq; @@ -880,8 +921,10 @@ static irqreturn_t msm_csiphy_irq(int irq_num, void *data) if (csiphy_dev->csiphy_sof_debug == SOF_DEBUG_ENABLE) { if (csiphy_dev->csiphy_sof_debug_count < CSIPHY_SOF_DEBUG_COUNT) csiphy_dev->csiphy_sof_debug_count++; - else + else { + msm_csiphy_disable_irq(csiphy_dev); return IRQ_HANDLED; + } } for (i = 0; i < csiphy_dev->num_irq_registers; i++) { @@ -1275,7 +1318,6 @@ static int msm_csiphy_release(struct csiphy_device *csiphy_dev, void *arg) mipi_csiphy_glbl_pwr_cfg_addr); } if (csiphy_dev->csiphy_sof_debug == SOF_DEBUG_ENABLE) { - csiphy_dev->csiphy_sof_debug = SOF_DEBUG_DISABLE; rc = msm_camera_enable_irq(csiphy_dev->irq, false); } |