Loading drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/hw_utils/irq_controller/cam_irq_controller.c +27 −0 Original line number Diff line number Diff line Loading @@ -607,6 +607,33 @@ static void cam_irq_controller_th_processing( CAM_DBG(CAM_ISP, "Exit"); } irqreturn_t cam_irq_controller_clear_and_mask(int irq_num, void *priv) { struct cam_irq_controller *controller = priv; uint32_t i = 0; if (!controller) return IRQ_NONE; for (i = 0; i < controller->num_registers; i++) { cam_io_w_mb(0x0, controller->mem_base + controller->irq_register_arr[i].clear_reg_offset); } if (controller->global_clear_offset) cam_io_w_mb(controller->global_clear_bitmask, controller->mem_base + controller->global_clear_offset); for (i = 0; i < controller->num_registers; i++) { cam_io_w_mb(0x0, controller->mem_base + controller->irq_register_arr[i].mask_reg_offset); } return IRQ_HANDLED; } irqreturn_t cam_irq_controller_handle_irq(int irq_num, void *priv) { struct cam_irq_controller *controller = priv; Loading drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/hw_utils/irq_controller/cam_irq_controller.h +14 −0 Original line number Diff line number Diff line Loading @@ -250,4 +250,18 @@ int cam_irq_controller_disable_irq(void *irq_controller, uint32_t handle); */ int cam_irq_controller_enable_irq(void *irq_controller, uint32_t handle); /* * cam_irq_controller_clear_and_mask() * * @brief: This function clears and masks all the irq bits * * @irq_num: Number of IRQ line that was set that lead to this * function being called * @priv: Private data registered with request_irq is passed back * here. This private data should be the irq_controller * structure. * * @return: IRQ_HANDLED/IRQ_NONE */ irqreturn_t cam_irq_controller_clear_and_mask(int irq_num, void *priv); #endif /* _CAM_IRQ_CONTROLLER_H_ */ drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/cam_vfe_core.c +2 −0 Original line number Diff line number Diff line Loading @@ -172,6 +172,8 @@ static int cam_vfe_irq_err_top_half(uint32_t evt_id, th_payload->evt_status_arr[1]); cam_irq_controller_disable_irq(core_info->vfe_irq_controller, core_info->irq_err_handle); cam_irq_controller_clear_and_mask(evt_id, core_info->vfe_irq_controller); } rc = cam_vfe_get_evt_payload(handler_priv->core_info, &evt_payload); Loading Loading
drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/hw_utils/irq_controller/cam_irq_controller.c +27 −0 Original line number Diff line number Diff line Loading @@ -607,6 +607,33 @@ static void cam_irq_controller_th_processing( CAM_DBG(CAM_ISP, "Exit"); } irqreturn_t cam_irq_controller_clear_and_mask(int irq_num, void *priv) { struct cam_irq_controller *controller = priv; uint32_t i = 0; if (!controller) return IRQ_NONE; for (i = 0; i < controller->num_registers; i++) { cam_io_w_mb(0x0, controller->mem_base + controller->irq_register_arr[i].clear_reg_offset); } if (controller->global_clear_offset) cam_io_w_mb(controller->global_clear_bitmask, controller->mem_base + controller->global_clear_offset); for (i = 0; i < controller->num_registers; i++) { cam_io_w_mb(0x0, controller->mem_base + controller->irq_register_arr[i].mask_reg_offset); } return IRQ_HANDLED; } irqreturn_t cam_irq_controller_handle_irq(int irq_num, void *priv) { struct cam_irq_controller *controller = priv; Loading
drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/hw_utils/irq_controller/cam_irq_controller.h +14 −0 Original line number Diff line number Diff line Loading @@ -250,4 +250,18 @@ int cam_irq_controller_disable_irq(void *irq_controller, uint32_t handle); */ int cam_irq_controller_enable_irq(void *irq_controller, uint32_t handle); /* * cam_irq_controller_clear_and_mask() * * @brief: This function clears and masks all the irq bits * * @irq_num: Number of IRQ line that was set that lead to this * function being called * @priv: Private data registered with request_irq is passed back * here. This private data should be the irq_controller * structure. * * @return: IRQ_HANDLED/IRQ_NONE */ irqreturn_t cam_irq_controller_clear_and_mask(int irq_num, void *priv); #endif /* _CAM_IRQ_CONTROLLER_H_ */
drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/cam_vfe_core.c +2 −0 Original line number Diff line number Diff line Loading @@ -172,6 +172,8 @@ static int cam_vfe_irq_err_top_half(uint32_t evt_id, th_payload->evt_status_arr[1]); cam_irq_controller_disable_irq(core_info->vfe_irq_controller, core_info->irq_err_handle); cam_irq_controller_clear_and_mask(evt_id, core_info->vfe_irq_controller); } rc = cam_vfe_get_evt_payload(handler_priv->core_info, &evt_payload); Loading