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

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

Merge "msm: vidc: Add support for FW version check"

parents e96edb0f aadd9757
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1209,7 +1209,7 @@ void hfi_process_sys_property_info(
				version[i] = ' ';
		}
		version[i] = '\0';
		dprintk(VIDC_INFO, "F/W version: %s\n", version);
		dprintk(VIDC_DBG, "F/W version: %s\n", version);
	}

	smem_table_ptr = smem_get_entry(SMEM_IMAGE_VERSION_TABLE,
+1 −10
Original line number Diff line number Diff line
@@ -919,8 +919,6 @@ static int msm_venc_queue_setup(struct vb2_queue *q,
				"Failed to get buffer requirements: %d\n", rc);
			break;
		}
		inst->capability.pixelprocess_capabilities =
			call_hfi_op(hdev, get_core_capabilities);
		*num_planes = 1;
		mutex_lock(&inst->lock);
		*num_buffers = inst->buff_req.buffer[0].buffer_count_actual =
@@ -2044,12 +2042,11 @@ static int msm_venc_op_s_ctrl(struct v4l2_ctrl *ctrl)
{

	int rc = 0, c = 0;
	struct hfi_device *hdev;

	struct msm_vidc_inst *inst = container_of(ctrl->handler,
					struct msm_vidc_inst, ctrl_handler);

	if (!inst || !inst->core || !inst->core->device) {
	if (!inst) {
		dprintk(VIDC_ERR, "%s invalid parameters", __func__);
		return -EINVAL;
	}
@@ -2062,10 +2059,6 @@ static int msm_venc_op_s_ctrl(struct v4l2_ctrl *ctrl)
		goto failed_open_done;
	}

	hdev = inst->core->device;
	inst->capability.pixelprocess_capabilities =
		call_hfi_op(hdev, get_core_capabilities);

	for (c = 0; c < ctrl->ncontrols; ++c) {
		if (ctrl->cluster[c]->is_new) {
			struct v4l2_ctrl *temp = ctrl->cluster[c];
@@ -2403,8 +2396,6 @@ int msm_venc_s_fmt(struct msm_vidc_inst *inst, struct v4l2_format *f)
				dprintk(VIDC_ERR, "Failed to open instance\n");
				goto exit;
			}
			inst->capability.pixelprocess_capabilities =
				call_hfi_op(hdev, get_core_capabilities);
			frame_sz.width = inst->prop.width[CAPTURE_PORT];
			frame_sz.height = inst->prop.height[CAPTURE_PORT];
			frame_sz.buffer_type = HAL_BUFFER_OUTPUT;
+9 −3
Original line number Diff line number Diff line
@@ -426,16 +426,20 @@ static void handle_session_init_done(enum command_response cmd, void *data)
{
	struct msm_vidc_cb_cmd_done *response = data;
	struct msm_vidc_inst *inst = NULL;
	struct hfi_device *hdev;

	if (response) {
		struct vidc_hal_session_init_done *session_init_done =
			(struct vidc_hal_session_init_done *)
			response->data;
		inst = (struct msm_vidc_inst *)response->session_id;
		if (!inst) {
			dprintk(VIDC_ERR, "%s: invalid input parameters",
				__func__);
		if (!inst || !inst->core || !inst->core->device) {
			dprintk(VIDC_ERR, "%s invalid parameters", __func__);
			return;
		}

		hdev = inst->core->device;

		if (!response->status && session_init_done) {
			inst->capability.width = session_init_done->width;
			inst->capability.height = session_init_done->height;
@@ -443,6 +447,8 @@ static void handle_session_init_done(enum command_response cmd, void *data)
				session_init_done->frame_rate;
			inst->capability.scale_x = session_init_done->scale_x;
			inst->capability.scale_y = session_init_done->scale_y;
			inst->capability.pixelprocess_capabilities =
				call_hfi_op(hdev, get_core_capabilities);
			inst->capability.capability_set = true;
			inst->capability.buffer_mode[CAPTURE_PORT] =
				session_init_done->alloc_mode_out;
+31 −4
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@
#include <mach/ocmem.h>
#include <mach/scm.h>
#include <mach/subsystem_restart.h>
#include <mach/msm_smem.h>
#include <asm/memory.h>
#include "hfi_packetization.h"
#include "venus_hfi.h"
@@ -3526,10 +3527,36 @@ int venus_hfi_get_stride_scanline(int color_fmt,

int venus_hfi_get_core_capabilities(void)
{
	return HAL_VIDEO_ENCODER_ROTATION_CAPABILITY |
	int i = 0, rc = 0, j = 0, venus_version_length = 0;
	u32 smem_block_size = 0;
	u8 *smem_table_ptr;
	char version[256];
	char venus_version[] = "VIDEO.VE.1.4";
	u8 version_info[256];
	const u32 smem_image_index_venus = 14 * 128;

	smem_table_ptr = smem_get_entry(SMEM_IMAGE_VERSION_TABLE,
			&smem_block_size);
	if (smem_table_ptr &&
			((smem_image_index_venus + 128) <= smem_block_size))
		memcpy(version_info, smem_table_ptr + smem_image_index_venus,
				128);

	while (version_info[i++] != 'V' && i < 128)
		;

	venus_version_length = strlen(venus_version);
	for (i--, j = 0; i < 128 && j < venus_version_length; i++)
		version[j++] = version_info[i];
	version[venus_version_length] = '\0';
	dprintk(VIDC_DBG, "F/W version retrieved : %s\n", version);

	if (strcmp((const char *)version, (const char *)venus_version) == 0)
		rc = HAL_VIDEO_ENCODER_ROTATION_CAPABILITY |
			HAL_VIDEO_ENCODER_SCALING_CAPABILITY |
			HAL_VIDEO_ENCODER_DEINTERLACE_CAPABILITY |
			HAL_VIDEO_DECODER_MULTI_STREAM_CAPABILITY;
	return rc;
}

int venus_hfi_capability_check(u32 fourcc, u32 width,