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

Commit 9b628d2a authored by abhikran's avatar abhikran
Browse files

msm: cvp: Add Qualcomm CVP driver for Kona



Add initial CVP driver source code. CVP driver helps in
interfacing of CVP hardware to be used by clients.
The driver uses CSRs from Kona HPG and IPCAT including
IRQ and HFI handling. This is a new driver deriving
source code from video driver because the functionality
for both drivers are similar.
Creating a separate driver for CVP subsystem provides
flexibility to enrich Computer Vision (CV) features
without impacting video driver. It also provides room
to optimize CV Applications' performance and power.
The initial CVP driver did not introduce any structural
change from the video driver architecture except CSR
programming and removal of non-applicable modules.
Video driver source can be found at
kernel/msm-4.19/drivers/media/platform/msm/vidc/.

Change-Id: Ib6e56617143bf5875d49e39a68c214fbf03a5875
Signed-off-by: default avatarabhikran <abhikran@codeaurora.org>
Signed-off-by: default avatarGeorge Shen <sqiao@codeaurora.org>
parent 4f6a2a79
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ menuconfig SPECTRA_CAMERA
      Enabling this adds support for the camera driver stack including sensor,
      IFE and postprocessing drivers.

source "drivers/media/platform/msm/cvp/Kconfig"
source "drivers/media/platform/msm/sde/Kconfig"
source "drivers/media/platform/msm/vidc/Kconfig"
source "drivers/media/platform/msm/npu/Kconfig"
+1 −0
Original line number Diff line number Diff line
@@ -6,5 +6,6 @@ obj-$(CONFIG_SPECTRA_CAMERA) += camera/
# Makefile for the qti specific video device drivers
# based on V4L2.
#
obj-$(CONFIG_MSM_CVP_V4L2) += cvp/
obj-$(CONFIG_MSM_VIDC_V4L2) += vidc/
obj-$(CONFIG_MSM_NPU) += npu/
+12 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0-only
#
# CVP CORE
#

menuconfig MSM_CVP_V4L2
	tristate "Qualcomm Technologies, Inc. MSM V4L2 based CVP driver"
		depends on ARCH_QCOM && VIDEO_V4L2
		select VIDEOBUF2_CORE
        help
          Enable support of MSM V4L2 CVP driver for
          Qualcomm Technologies, Inc.
+19 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0-only
ccflags-y += -I$(srctree)/drivers/media/platform/msm/cvp/

msm-cvp-objs := msm_v4l2_cvp.o \
				msm_v4l2_private.o \
				msm_cvp_platform.o \
				msm_cvp_common.o \
				msm_cvp_core.o \
				msm_cvp.o \
				msm_smem.o \
				msm_cvp_debug.o \
				msm_cvp_res_parse.o \
				cvp_hfi.o \
				hfi_response_handler.o \
				hfi_packetization.o \
				cvp_core_hfi.o \
				msm_cvp_clocks.o

obj-$(CONFIG_MSM_CVP_V4L2) := msm-cvp.o
+65 −0
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
 */

#include <linux/slab.h>
#include "msm_cvp_debug.h"
#include "cvp_hfi_api.h"
#include "cvp_core_hfi.h"

struct hfi_device *cvp_hfi_initialize(enum msm_cvp_hfi_type hfi_type,
		u32 device_id, struct msm_cvp_platform_resources *res,
		hfi_cmd_response_callback callback)
{
	struct hfi_device *hdev = NULL;
	int rc = 0;

	hdev = kzalloc(sizeof(struct hfi_device), GFP_KERNEL);
	if (!hdev) {
		dprintk(CVP_ERR, "%s: failed to allocate hdev\n", __func__);
		return NULL;
	}

	switch (hfi_type) {
	case CVP_HFI_VENUS:
		rc = cvp_venus_hfi_initialize(hdev, device_id, res, callback);
		break;
	default:
		dprintk(CVP_ERR, "Unsupported host-firmware interface\n");
		goto err_hfi_init;
	}

	if (rc) {
		if (rc != -EPROBE_DEFER)
			dprintk(CVP_ERR, "%s device init failed rc = %d",
				__func__, rc);
		goto err_hfi_init;
	}

	return hdev;

err_hfi_init:
	kfree(hdev);
	return ERR_PTR(rc);
}

void cvp_hfi_deinitialize(enum msm_cvp_hfi_type hfi_type,
			struct hfi_device *hdev)
{
	if (!hdev) {
		dprintk(CVP_ERR, "%s invalid device %pK", __func__, hdev);
		return;
	}

	switch (hfi_type) {
	case CVP_HFI_VENUS:
		cvp_venus_hfi_delete_device(hdev->hfi_device_data);
		break;
	default:
		dprintk(CVP_ERR, "Unsupported host-firmware interface\n");
	}

	kfree(hdev);
}
Loading