Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 114a1f76 authored by Jeyaprakash Soundrapandian's avatar Jeyaprakash Soundrapandian Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: camera: isp: Add api to mask the interrupts" into dev/msm-4.9-camx

parents d2b38c6c 50e0e94b
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -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;
+14 −0
Original line number Diff line number Diff line
@@ -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_ */
+2 −0
Original line number Diff line number Diff line
@@ -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);