diff --git a/drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid680_110.h b/drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid680_110.h new file mode 100644 index 0000000000..3ea314e145 --- /dev/null +++ b/drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid680_110.h @@ -0,0 +1,64 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved. + */ + +#ifndef _CAM_IFE_CSID_680_110_H_ +#define _CAM_IFE_CSID_680_110_H_ + +#include +#include "cam_ife_csid_dev.h" +#include "camera_main.h" +#include "cam_ife_csid_common.h" +#include "cam_ife_csid_hw_ver2.h" +#include "cam_irq_controller.h" + +static struct cam_ife_csid_ver2_reg_info cam_ife_csid_680_110_reg_info = { + .irq_reg_info = &cam_ife_csid_680_irq_reg_info, + .cmn_reg = &cam_ife_csid_680_cmn_reg_info, + .csi2_reg = &cam_ife_csid_680_csi2_reg_info, + .buf_done_irq_reg_info = + &cam_ife_csid_680_buf_done_irq_reg_info, + .path_reg[CAM_IFE_PIX_PATH_RES_IPP] = &cam_ife_csid_680_ipp_reg_info, + .path_reg[CAM_IFE_PIX_PATH_RES_PPP] = &cam_ife_csid_680_ppp_reg_info, + .path_reg[CAM_IFE_PIX_PATH_RES_RDI_0] = &cam_ife_csid_680_rdi_0_reg_info, + .path_reg[CAM_IFE_PIX_PATH_RES_RDI_1] = &cam_ife_csid_680_rdi_1_reg_info, + .path_reg[CAM_IFE_PIX_PATH_RES_RDI_2] = &cam_ife_csid_680_rdi_2_reg_info, + .path_reg[CAM_IFE_PIX_PATH_RES_RDI_3] = &cam_ife_csid_680_rdi_3_reg_info, + .path_reg[CAM_IFE_PIX_PATH_RES_RDI_4] = &cam_ife_csid_680_rdi_4_reg_info, + .top_reg = &cam_ife_csid_680_top_reg_info, + .input_core_sel = { + { + 0x0, + 0x1, + 0x2, + 0x3, + 0x8, + -1, + -1, + }, + { + 0x0, + 0x1, + 0x2, + 0x3, + -1, + -1, + -1, + }, + { + 0x0, + 0x1, + 0x2, + 0x3, + -1, + 0x9, + -1, + }, + }, + .need_top_cfg = 0x1, + .csid_cust_node_map = {0x1, 0x0, 0x2}, + .rx_irq_desc = cam_ife_csid_680_rx_irq_desc, + .path_irq_desc = cam_ife_csid_680_path_irq_desc, +}; +#endif /*_CAM_IFE_CSID_680_110_H_ */ diff --git a/drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_lite_mod.c b/drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_lite_mod.c index ec98160f75..cc653caaa2 100644 --- a/drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_lite_mod.c +++ b/drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_lite_mod.c @@ -64,6 +64,10 @@ static const struct of_device_id cam_ife_csid_lite_dt_match[] = { .compatible = "qcom,csid-lite680", .data = &cam_ife_csid_lite_680_hw_info, }, + { + .compatible = "qcom,csid-lite680_110", + .data = &cam_ife_csid_lite_680_hw_info, + }, { .compatible = "qcom,csid-lite780", .data = &cam_ife_csid_lite_780_hw_info, diff --git a/drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_mod.c b/drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_mod.c index 532ab918bb..b1337e7bcd 100644 --- a/drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_mod.c +++ b/drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_mod.c @@ -17,6 +17,7 @@ #include "cam_ife_csid570.h" #include "cam_ife_csid580.h" #include "cam_ife_csid680.h" +#include "cam_ife_csid680_110.h" #include "cam_ife_csid780.h" #define CAM_CSID_DRV_NAME "csid" @@ -66,6 +67,11 @@ static struct cam_ife_csid_core_info cam_ife_csid680_hw_info = { .sw_version = CAM_IFE_CSID_VER_2_0, }; +static struct cam_ife_csid_core_info cam_ife_csid680_110_hw_info = { + .csid_reg = &cam_ife_csid_680_reg_info, + .sw_version = CAM_IFE_CSID_VER_2_0, +}; + static struct cam_ife_csid_core_info cam_ife_csid780_hw_info = { .csid_reg = &cam_ife_csid_780_reg_info, .sw_version = CAM_IFE_CSID_VER_2_0, @@ -109,6 +115,10 @@ static const struct of_device_id cam_ife_csid_dt_match[] = { .compatible = "qcom,csid680", .data = &cam_ife_csid680_hw_info, }, + { + .compatible = "qcom,csid680_110", + .data = &cam_ife_csid680_110_hw_info, + }, { .compatible = "qcom,csid780", .data = &cam_ife_csid780_hw_info, diff --git a/drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/vfe17x/cam_vfe.c b/drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/vfe17x/cam_vfe.c index 1687675450..86f6c98f6f 100644 --- a/drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/vfe17x/cam_vfe.c +++ b/drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/vfe17x/cam_vfe.c @@ -12,6 +12,7 @@ #include "cam_vfe570.h" #include "cam_vfe580.h" #include "cam_vfe680.h" +#include "cam_vfe680_110.h" #include "cam_vfe780.h" #include "cam_vfe_lite17x.h" #include "cam_vfe_lite48x.h" @@ -55,6 +56,10 @@ static const struct of_device_id cam_vfe_dt_match[] = { .compatible = "qcom,vfe680", .data = &cam_vfe680_hw_info, }, + { + .compatible = "qcom,vfe680_110", + .data = &cam_vfe680_110_hw_info, + }, { .compatible = "qcom,vfe780", .data = &cam_vfe780_hw_info, @@ -83,6 +88,10 @@ static const struct of_device_id cam_vfe_dt_match[] = { .compatible = "qcom,vfe-lite680", .data = &cam_vfe_lite68x_hw_info, }, + { + .compatible = "qcom,vfe-lite680_110", + .data = &cam_vfe_lite68x_hw_info, + }, { .compatible = "qcom,vfe-lite780", .data = &cam_vfe_lite78x_hw_info, diff --git a/drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/vfe17x/cam_vfe680_110.h b/drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/vfe17x/cam_vfe680_110.h new file mode 100644 index 0000000000..ccb739562f --- /dev/null +++ b/drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/vfe17x/cam_vfe680_110.h @@ -0,0 +1,135 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2019-2021, The Linux Foundation. All rights reserved. + */ + +#ifndef _CAM_VFE680_110_H_ +#define _CAM_VFE680_110_H_ +#include "cam_vfe_top_ver4.h" +#include "cam_vfe_core.h" +#include "cam_vfe_bus_ver3.h" +#include "cam_irq_controller.h" + +#define CAM_VFE_680_110_NUM_DBG_REG 17 + +static struct cam_vfe_top_ver4_reg_offset_common vfe680_110_top_common_reg = { + .hw_version = 0x00000000, + .hw_capability = 0x00000004, + .lens_feature = 0x00000008, + .stats_feature = 0x0000000C, + .color_feature = 0x00000010, + .zoom_feature = 0x00000014, + .core_cfg_0 = 0x00000024, + .core_cfg_1 = 0x00000028, + .core_cfg_2 = 0x0000002C, + .global_reset_cmd = 0x00000030, + .diag_config = 0x00000050, + .diag_sensor_status_0 = 0x00000054, + .diag_sensor_status_1 = 0x00000058, + .diag_frm_cnt_status_0 = 0x0000005C, + .diag_frm_cnt_status_1 = 0x00000060, + .ipp_violation_status = 0x00000064, + .pdaf_violation_status = 0x00000404, + .core_cfg_3 = 0x00000068, + .core_cgc_ovd_0 = 0x00000018, + .core_cgc_ovd_1 = 0x0000001C, + .ahb_cgc_ovd = 0x00000020, + .dsp_status = 0x0000006C, + .stats_throttle_cfg_0 = 0x00000070, + .stats_throttle_cfg_1 = 0x00000074, + .stats_throttle_cfg_2 = 0x00000078, + .core_cfg_4 = 0x00000080, + .core_cfg_5 = 0x00000084, + .core_cfg_6 = 0x00000088, + .period_cfg = 0x0000008C, + .irq_sub_pattern_cfg = 0x00000090, + .epoch0_pattern_cfg = 0x00000094, + .epoch1_pattern_cfg = 0x00000098, + .epoch_height_cfg = 0x0000009C, + .bus_violation_status = 0x00000C64, + .bus_overflow_status = 0x00000C68, + .top_debug_cfg = 0x000000FC, + .num_top_debug_reg = CAM_VFE_680_110_NUM_DBG_REG, + .top_debug = { + 0x000000A0, + 0x000000A4, + 0x000000A8, + 0x000000AC, + 0x000000B0, + 0x000000B4, + 0x000000B8, + 0x000000BC, + 0x000000C0, + 0x000000C4, + 0x000000C8, + 0x000000CC, + 0x000000D0, + 0x000000D4, + 0x000000D8, + 0x000000DC, + 0x000000E0, + }, +}; + +struct cam_vfe_ver4_path_hw_info + vfe680_110_rdi_hw_info_arr[CAM_VFE_RDI_VER2_MAX] = { + { + .common_reg = &vfe680_110_top_common_reg, + .reg_data = &vfe680_vfe_full_rdi_reg_data[0], + }, + { + .common_reg = &vfe680_110_top_common_reg, + .reg_data = &vfe680_vfe_full_rdi_reg_data[1], + }, + { + .common_reg = &vfe680_110_top_common_reg, + .reg_data = &vfe680_vfe_full_rdi_reg_data[2], + }, +}; + +static struct cam_vfe_top_ver4_hw_info vfe680_110_top_hw_info = { + .common_reg = &vfe680_110_top_common_reg, + .vfe_full_hw_info = { + .common_reg = &vfe680_110_top_common_reg, + .reg_data = &vfe_pp_common_reg_data, + }, + .pdlib_hw_info = { + .common_reg = &vfe680_110_top_common_reg, + .reg_data = &vfe680_pdlib_reg_data, + }, + .rdi_hw_info[0] = &vfe680_110_rdi_hw_info_arr[0], + .rdi_hw_info[1] = &vfe680_110_rdi_hw_info_arr[1], + .rdi_hw_info[2] = &vfe680_110_rdi_hw_info_arr[2], + .wr_client_desc = vfe680_wr_client_desc, + .ipp_module_desc = vfe680_ipp_mod_desc, + .num_mux = 5, + .mux_type = { + CAM_VFE_CAMIF_VER_4_0, + CAM_VFE_RDI_VER_1_0, + CAM_VFE_RDI_VER_1_0, + CAM_VFE_RDI_VER_1_0, + CAM_VFE_PDLIB_VER_1_0, + }, + .num_path_port_map = 2, + .path_port_map = { + {CAM_ISP_HW_VFE_IN_PDLIB, CAM_ISP_IFE_OUT_RES_2PD}, + {CAM_ISP_HW_VFE_IN_PDLIB, CAM_ISP_IFE_OUT_RES_PREPROCESS_2PD} + }, + .num_top_errors = ARRAY_SIZE(vfe680_top_irq_err_desc), + .top_err_desc = vfe680_top_irq_err_desc, + .num_pdaf_violation_errors = ARRAY_SIZE(vfe680_pdaf_violation_desc), + .pdaf_violation_desc = vfe680_pdaf_violation_desc, + .debug_reg_info = &vfe680_dbg_reg_info, +}; + +static struct cam_vfe_hw_info cam_vfe680_110_hw_info = { + .irq_hw_info = &vfe680_irq_hw_info, + + .bus_version = CAM_VFE_BUS_VER_3_0, + .bus_hw_info = &vfe680_bus_hw_info, + + .top_version = CAM_VFE_TOP_VER_4_0, + .top_hw_info = &vfe680_110_top_hw_info, +}; + +#endif /* _CAM_VFE680_110_H_ */