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

Commit 687a4202 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: camera: isp: Fix issues in releasing ISP resources" into msm-4.9

parents d923ccba e71fd4aa
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -652,7 +652,7 @@ static int __cam_isp_ctx_release_dev_in_top_state(struct cam_context *ctx,
	ctx->session_hdl = 0;
	ctx->dev_hdl = 0;
	ctx->link_hdl = 0;
	ctx->crm_ctx_intf = NULL;
	ctx->ctx_crm_intf = NULL;
	ctx_isp->frame_id = 0;

	/*
+1 −1
Original line number Diff line number Diff line
@@ -2220,7 +2220,7 @@ static int cam_ife_hw_mgr_handle_camif_error(
		cam_ife_hw_mgr_do_error_recovery(&recovery_data);
		break;
	default:
		CDBG("%s: None error. Error type (%d)", __func__,
		CDBG("%s: None error. Error type (%d)\n", __func__,
			evt_payload->error_type);
	}

+19 −7
Original line number Diff line number Diff line
@@ -983,13 +983,10 @@ static int cam_vfe_bus_release_comp_grp(
		in_rsrc_data->comp_grp_type <= CAM_VFE_BUS_VER2_COMP_GRP_DUAL_5)
		list_add_tail(&comp_grp->list,
			&ver2_bus_priv->free_dual_comp_grp);
	else if (in_rsrc_data->comp_grp_type >= CAM_VFE_BUS_VER2_COMP_GRP_DUAL_0
		&& in_rsrc_data->comp_grp_type <=
		CAM_VFE_BUS_VER2_COMP_GRP_DUAL_5)
	else if (in_rsrc_data->comp_grp_type >= CAM_VFE_BUS_VER2_COMP_GRP_0
		&& in_rsrc_data->comp_grp_type <= CAM_VFE_BUS_VER2_COMP_GRP_5)
		list_add_tail(&comp_grp->list, &ver2_bus_priv->free_comp_grp);

	list_add_tail(&comp_grp->list,
		&ver2_bus_priv->free_comp_grp);
	in_rsrc_data->unique_id = 0;
	in_rsrc_data->comp_grp_local_idx = 0;
	in_rsrc_data->composite_mask = 0;
@@ -997,7 +994,7 @@ static int cam_vfe_bus_release_comp_grp(

	comp_grp->res_state = CAM_ISP_RESOURCE_STATE_AVAILABLE;

	return -ENODEV;
	return 0;
}

static int cam_vfe_bus_start_comp_grp(struct cam_isp_resource_node *comp_grp)
@@ -1333,11 +1330,26 @@ static int cam_vfe_bus_acquire_vfe_out(void *bus_priv, void *acquire_args)
static int cam_vfe_bus_release_vfe_out(void *bus_priv,
	struct cam_isp_resource_node        *vfe_out)
{
	uint32_t i;
	struct cam_vfe_bus_ver2_vfe_out_data  *rsrc_data = vfe_out->res_priv;

	if (vfe_out->res_state != CAM_ISP_RESOURCE_STATE_RESERVED) {
		pr_err("Error! Invalid resource state:%d\n",
			vfe_out->res_state);
	}

	for (i = 0; i < rsrc_data->num_wm; i++)
		cam_vfe_bus_release_wm(bus_priv, rsrc_data->wm_res[i]);
	rsrc_data->num_wm = 0;

	if (rsrc_data->comp_grp)
		cam_vfe_bus_release_comp_grp(bus_priv, rsrc_data->comp_grp);
	rsrc_data->comp_grp = NULL;

	vfe_out->tasklet_info = NULL;
	vfe_out->cdm_ops = NULL;
	rsrc_data->cdm_util_ops = NULL;

	if (vfe_out->res_state == CAM_ISP_RESOURCE_STATE_RESERVED)
		vfe_out->res_state = CAM_ISP_RESOURCE_STATE_AVAILABLE;

@@ -1360,7 +1372,7 @@ static int cam_vfe_bus_start_vfe_out(struct cam_isp_resource_node *vfe_out)
	}

	/* Enable IRQ Mask */
	cam_io_w_mb(0x00001F70, common_data->mem_base + 0x2044);
	cam_io_w_mb(0x00001FE0, common_data->mem_base + 0x2044);
	cam_io_w_mb(0x000FFFE7, common_data->mem_base + 0x2048);
	cam_io_w_mb(0x000000FF, common_data->mem_base + 0x204c);