msm: camera: isp: Add new v4l2 tfe subdev
This change registers tfe on v980 as an mc_tfe device for userspace to enumerate. CRs-Fixed: 3321317 Change-Id: Ic7810dc198aece0d1d0fa50e547f69c72218d49a Signed-off-by: Li Sha Lim <quic_lishlim@quicinc.com>
This commit is contained in:

committed by
Camera Software Integration

parent
c75f28c84d
commit
f9c48bc48b
@@ -1183,6 +1183,7 @@ static const char *__cam_isp_resource_handle_id_to_type(
|
||||
{
|
||||
switch (device_type) {
|
||||
case CAM_IFE_DEVICE_TYPE:
|
||||
case CAM_TFE_MC_DEVICE_TYPE:
|
||||
return __cam_isp_ife_sfe_resource_handle_id_to_type(resource_handle);
|
||||
case CAM_TFE_DEVICE_TYPE:
|
||||
return __cam_isp_tfe_resource_handle_id_to_type(resource_handle);
|
||||
|
@@ -162,6 +162,11 @@ static int cam_isp_dev_component_bind(struct device *dev,
|
||||
CAM_IFE_DEVICE_TYPE);
|
||||
g_isp_dev.isp_device_type = CAM_IFE_DEVICE_TYPE;
|
||||
g_isp_dev.max_context = CAM_IFE_CTX_MAX;
|
||||
} else if (strnstr(compat_str, "mc_tfe", strlen(compat_str))) {
|
||||
rc = cam_subdev_probe(&g_isp_dev.sd, pdev, CAM_ISP_DEV_NAME,
|
||||
CAM_TFE_MC_DEVICE_TYPE);
|
||||
g_isp_dev.isp_device_type = CAM_TFE_MC_DEVICE_TYPE;
|
||||
g_isp_dev.max_context = CAM_IFE_CTX_MAX;
|
||||
} else if (strnstr(compat_str, "tfe", strlen(compat_str))) {
|
||||
rc = cam_subdev_probe(&g_isp_dev.sd, pdev, CAM_ISP_DEV_NAME,
|
||||
CAM_TFE_DEVICE_TYPE);
|
||||
@@ -200,7 +205,8 @@ static int cam_isp_dev_component_bind(struct device *dev,
|
||||
goto unregister;
|
||||
}
|
||||
|
||||
rc = cam_isp_hw_mgr_init(compat_str, &hw_mgr_intf, &iommu_hdl);
|
||||
rc = cam_isp_hw_mgr_init(compat_str, &hw_mgr_intf, &iommu_hdl,
|
||||
g_isp_dev.isp_device_type);
|
||||
if (rc != 0) {
|
||||
CAM_ERR(CAM_ISP, "Can not initialized ISP HW manager!");
|
||||
goto kfree;
|
||||
|
@@ -609,7 +609,9 @@ static int cam_ife_mgr_get_hw_caps(void *hw_mgr_priv, void *hw_caps_args)
|
||||
&query_isp.dev_caps[query_isp.num_dev];
|
||||
query_isp.num_dev++;
|
||||
|
||||
ife_full_hw_info->hw_type = CAM_ISP_HW_IFE;
|
||||
ife_full_hw_info->hw_type = (hw_mgr->isp_device_type
|
||||
== CAM_TFE_MC_DEVICE_TYPE) ?
|
||||
CAM_ISP_HW_MC_TFE : CAM_ISP_HW_IFE;
|
||||
ife_full_hw_info->hw_version.major =
|
||||
hw_mgr->ife_dev_caps[i].major;
|
||||
ife_full_hw_info->hw_version.minor =
|
||||
@@ -15373,7 +15375,8 @@ static int cam_ife_mgr_populate_sys_cache_id(void)
|
||||
|
||||
}
|
||||
|
||||
int cam_ife_hw_mgr_init(struct cam_hw_mgr_intf *hw_mgr_intf, int *iommu_hdl)
|
||||
int cam_ife_hw_mgr_init(struct cam_hw_mgr_intf *hw_mgr_intf, int *iommu_hdl,
|
||||
uint32_t isp_device_type)
|
||||
{
|
||||
int rc = -EFAULT;
|
||||
int i, j;
|
||||
@@ -15458,6 +15461,8 @@ int cam_ife_hw_mgr_init(struct cam_hw_mgr_intf *hw_mgr_intf, int *iommu_hdl)
|
||||
}
|
||||
g_ife_hw_mgr.path_port_map.num_entries = path_port_map.num_entries;
|
||||
|
||||
g_ife_hw_mgr.isp_device_type = isp_device_type;
|
||||
|
||||
/* fill csid hw intf information */
|
||||
for (i = 0, j = 0; i < CAM_IFE_CSID_HW_NUM_MAX; i++) {
|
||||
rc = cam_ife_csid_hw_init(&g_ife_hw_mgr.csid_devices[i], i);
|
||||
|
@@ -473,6 +473,8 @@ struct cam_isp_sfe_cache_info {
|
||||
* @num_caches_found Number of caches supported
|
||||
* @sys_cache_info Sys cache info
|
||||
* @sfe_cache_info SFE Cache Info
|
||||
* @isp_device_type: If device supports single-context(ife) or multi-
|
||||
* context(mc_tfe)
|
||||
*/
|
||||
struct cam_ife_hw_mgr {
|
||||
struct cam_isp_hw_mgr mgr_common;
|
||||
@@ -505,6 +507,7 @@ struct cam_ife_hw_mgr {
|
||||
uint32_t num_caches_found;
|
||||
struct cam_isp_sys_cache_info sys_cache_info[CAM_LLCC_MAX];
|
||||
struct cam_isp_sfe_cache_info sfe_cache_info[CAM_SFE_HW_NUM_MAX];
|
||||
uint32_t isp_device_type;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -590,9 +593,12 @@ struct cam_ife_hw_mini_dump_data {
|
||||
*
|
||||
* @hw_mgr_intf: IFE hardware manager object returned
|
||||
* @iommu_hdl: Iommu handle to be returned
|
||||
* @isp_device_type: If device supports single-context(ife) or multi-
|
||||
* context(mc_tfe)
|
||||
*
|
||||
*/
|
||||
int cam_ife_hw_mgr_init(struct cam_hw_mgr_intf *hw_mgr_intf, int *iommu_hdl);
|
||||
int cam_ife_hw_mgr_init(struct cam_hw_mgr_intf *hw_mgr_intf, int *iommu_hdl,
|
||||
uint32_t isp_device_type);
|
||||
void cam_ife_hw_mgr_deinit(void);
|
||||
|
||||
#endif /* _CAM_IFE_HW_MGR_H_ */
|
||||
|
@@ -1,6 +1,7 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include "cam_isp_hw_mgr_intf.h"
|
||||
@@ -10,12 +11,13 @@
|
||||
|
||||
|
||||
int cam_isp_hw_mgr_init(const char *device_name_str,
|
||||
struct cam_hw_mgr_intf *hw_mgr, int *iommu_hdl)
|
||||
struct cam_hw_mgr_intf *hw_mgr, int *iommu_hdl, uint32_t isp_device_type)
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
if (strnstr(device_name_str, "ife", strlen(device_name_str)))
|
||||
rc = cam_ife_hw_mgr_init(hw_mgr, iommu_hdl);
|
||||
if (strnstr(device_name_str, "ife", strlen(device_name_str)) ||
|
||||
strnstr(device_name_str, "mc_tfe", strlen(device_name_str)))
|
||||
rc = cam_ife_hw_mgr_init(hw_mgr, iommu_hdl, isp_device_type);
|
||||
else if (strnstr(device_name_str, "tfe", strlen(device_name_str)))
|
||||
rc = cam_tfe_hw_mgr_init(hw_mgr, iommu_hdl);
|
||||
else {
|
||||
|
@@ -453,9 +453,10 @@ struct cam_isp_lcr_rdi_cfg_args {
|
||||
* @hw_mgr: Input/output structure for the ISP hardware manager
|
||||
* initialization
|
||||
* @iommu_hdl: Iommu handle to be returned
|
||||
* @isp_device_type: ISP device type
|
||||
*/
|
||||
int cam_isp_hw_mgr_init(const char *device_name_str,
|
||||
struct cam_hw_mgr_intf *hw_mgr, int *iommu_hdl);
|
||||
struct cam_hw_mgr_intf *hw_mgr, int *iommu_hdl, uint32_t isp_device_type);
|
||||
|
||||
void cam_isp_hw_mgr_deinit(const char *device_name_str);
|
||||
|
||||
|
Reference in New Issue
Block a user