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) {
|
switch (device_type) {
|
||||||
case CAM_IFE_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);
|
return __cam_isp_ife_sfe_resource_handle_id_to_type(resource_handle);
|
||||||
case CAM_TFE_DEVICE_TYPE:
|
case CAM_TFE_DEVICE_TYPE:
|
||||||
return __cam_isp_tfe_resource_handle_id_to_type(resource_handle);
|
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);
|
CAM_IFE_DEVICE_TYPE);
|
||||||
g_isp_dev.isp_device_type = CAM_IFE_DEVICE_TYPE;
|
g_isp_dev.isp_device_type = CAM_IFE_DEVICE_TYPE;
|
||||||
g_isp_dev.max_context = CAM_IFE_CTX_MAX;
|
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))) {
|
} else if (strnstr(compat_str, "tfe", strlen(compat_str))) {
|
||||||
rc = cam_subdev_probe(&g_isp_dev.sd, pdev, CAM_ISP_DEV_NAME,
|
rc = cam_subdev_probe(&g_isp_dev.sd, pdev, CAM_ISP_DEV_NAME,
|
||||||
CAM_TFE_DEVICE_TYPE);
|
CAM_TFE_DEVICE_TYPE);
|
||||||
@@ -200,7 +205,8 @@ static int cam_isp_dev_component_bind(struct device *dev,
|
|||||||
goto unregister;
|
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) {
|
if (rc != 0) {
|
||||||
CAM_ERR(CAM_ISP, "Can not initialized ISP HW manager!");
|
CAM_ERR(CAM_ISP, "Can not initialized ISP HW manager!");
|
||||||
goto kfree;
|
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.dev_caps[query_isp.num_dev];
|
||||||
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 =
|
ife_full_hw_info->hw_version.major =
|
||||||
hw_mgr->ife_dev_caps[i].major;
|
hw_mgr->ife_dev_caps[i].major;
|
||||||
ife_full_hw_info->hw_version.minor =
|
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 rc = -EFAULT;
|
||||||
int i, j;
|
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.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 */
|
/* fill csid hw intf information */
|
||||||
for (i = 0, j = 0; i < CAM_IFE_CSID_HW_NUM_MAX; i++) {
|
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);
|
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
|
* @num_caches_found Number of caches supported
|
||||||
* @sys_cache_info Sys cache info
|
* @sys_cache_info Sys cache info
|
||||||
* @sfe_cache_info SFE 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_ife_hw_mgr {
|
||||||
struct cam_isp_hw_mgr mgr_common;
|
struct cam_isp_hw_mgr mgr_common;
|
||||||
@@ -505,6 +507,7 @@ struct cam_ife_hw_mgr {
|
|||||||
uint32_t num_caches_found;
|
uint32_t num_caches_found;
|
||||||
struct cam_isp_sys_cache_info sys_cache_info[CAM_LLCC_MAX];
|
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];
|
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
|
* @hw_mgr_intf: IFE hardware manager object returned
|
||||||
* @iommu_hdl: Iommu handle to be 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);
|
void cam_ife_hw_mgr_deinit(void);
|
||||||
|
|
||||||
#endif /* _CAM_IFE_HW_MGR_H_ */
|
#endif /* _CAM_IFE_HW_MGR_H_ */
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0-only
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
|
* 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"
|
#include "cam_isp_hw_mgr_intf.h"
|
||||||
@@ -10,12 +11,13 @@
|
|||||||
|
|
||||||
|
|
||||||
int cam_isp_hw_mgr_init(const char *device_name_str,
|
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;
|
int rc = 0;
|
||||||
|
|
||||||
if (strnstr(device_name_str, "ife", strlen(device_name_str)))
|
if (strnstr(device_name_str, "ife", strlen(device_name_str)) ||
|
||||||
rc = cam_ife_hw_mgr_init(hw_mgr, iommu_hdl);
|
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)))
|
else if (strnstr(device_name_str, "tfe", strlen(device_name_str)))
|
||||||
rc = cam_tfe_hw_mgr_init(hw_mgr, iommu_hdl);
|
rc = cam_tfe_hw_mgr_init(hw_mgr, iommu_hdl);
|
||||||
else {
|
else {
|
||||||
|
@@ -453,9 +453,10 @@ struct cam_isp_lcr_rdi_cfg_args {
|
|||||||
* @hw_mgr: Input/output structure for the ISP hardware manager
|
* @hw_mgr: Input/output structure for the ISP hardware manager
|
||||||
* initialization
|
* initialization
|
||||||
* @iommu_hdl: Iommu handle to be returned
|
* @iommu_hdl: Iommu handle to be returned
|
||||||
|
* @isp_device_type: ISP device type
|
||||||
*/
|
*/
|
||||||
int cam_isp_hw_mgr_init(const char *device_name_str,
|
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);
|
void cam_isp_hw_mgr_deinit(const char *device_name_str);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user