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

Commit cb9b291e authored by Venkat Chinta's avatar Venkat Chinta Committed by Gerrit - the friendly Code Review server
Browse files

msm: camera: Add IFE 175 hardware support



Add driver support for additional IFE Lite in version
175 HW and maintain backward compatibility.

Change-Id: Id400040aff2787fdfed738fb778d9311f3e60fa3
Signed-off-by: default avatarVenkat Chinta <vchinta@codeaurora.org>
parent dd97afe8
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -15,7 +15,8 @@ First Level Node - CAM IFE CSID device
- compatible
  Usage: required
  Value type: <string>
  Definition: Should be "qcom,csid170" or "qcom,csid-lite170".
  Definition: Should be "qcom,csid170", "qcom,csid175", "qcom,csid-lite170"
              or "qcom,csid-lite175".

- cell-index
  Usage: required
+1 −1
Original line number Diff line number Diff line
@@ -9,4 +9,4 @@ ccflags-y += -Idrivers/media/platform/msm/camera/cam_smmu/
ccflags-y += -Idrivers/media/platform/msm/camera/cam_req_mgr/

obj-$(CONFIG_SPECTRA_CAMERA) += cam_ife_csid_dev.o cam_ife_csid_soc.o cam_ife_csid_core.o
obj-$(CONFIG_SPECTRA_CAMERA) += cam_ife_csid170.o cam_ife_csid_lite170.o
obj-$(CONFIG_SPECTRA_CAMERA) += cam_ife_csid17x.o cam_ife_csid_lite17x.o
+4 −0
Original line number Diff line number Diff line
@@ -29,6 +29,10 @@ static const struct of_device_id cam_ife_csid170_dt_match[] = {
		.compatible = "qcom,csid170",
		.data = &cam_ife_csid170_hw_info,
	},
	{
		.compatible = "qcom,csid175",
		.data = &cam_ife_csid170_hw_info,
	},
	{}
};

+49 −50
Original line number Diff line number Diff line
@@ -355,12 +355,11 @@ static int cam_ife_csid_cid_get(struct cam_ife_csid_hw *csid_hw,
static int cam_ife_csid_global_reset(struct cam_ife_csid_hw *csid_hw)
{
	struct cam_hw_soc_info                *soc_info;
	struct cam_ife_csid_reg_offset  *csid_reg;
	const struct cam_ife_csid_reg_offset  *csid_reg;
	int rc = 0;
	uint32_t val = 0, i;
	uint32_t status;


	soc_info = &csid_hw->hw_info->soc_info;
	csid_reg = csid_hw->csid_info->csid_reg;

@@ -449,7 +448,7 @@ static int cam_ife_csid_path_reset(struct cam_ife_csid_hw *csid_hw,
	int rc = 0;
	struct cam_hw_soc_info                    *soc_info;
	struct cam_isp_resource_node              *res;
	struct cam_ife_csid_reg_offset      *csid_reg;
	const struct cam_ife_csid_reg_offset      *csid_reg;
	uint32_t  reset_strb_addr, reset_strb_val, val, id;
	struct completion  *complete;

@@ -949,7 +948,7 @@ static int cam_ife_csid_path_reserve(struct cam_ife_csid_hw *csid_hw,
static int cam_ife_csid_enable_hw(struct cam_ife_csid_hw  *csid_hw)
{
	int rc = 0;
	struct cam_ife_csid_reg_offset      *csid_reg;
	const struct cam_ife_csid_reg_offset      *csid_reg;
	struct cam_hw_soc_info                    *soc_info;
	uint32_t i, val;

@@ -1031,7 +1030,7 @@ static int cam_ife_csid_disable_hw(struct cam_ife_csid_hw *csid_hw)
{
	int rc = -EINVAL;
	struct cam_hw_soc_info                   *soc_info;
	struct cam_ife_csid_reg_offset     *csid_reg;
	const struct cam_ife_csid_reg_offset     *csid_reg;

	/* Check for refcount */
	if (!csid_hw->hw_info->open_count) {
@@ -1077,7 +1076,7 @@ static int cam_ife_csid_tpg_start(struct cam_ife_csid_hw *csid_hw,
	int rc = 0;
	uint32_t  val = 0;
	struct cam_hw_soc_info    *soc_info;
	struct cam_ife_csid_reg_offset *csid_reg = NULL;
	const struct cam_ife_csid_reg_offset *csid_reg = NULL;

	csid_hw->tpg_start_cnt++;
	if (csid_hw->tpg_start_cnt == 1) {
@@ -1150,7 +1149,7 @@ static int cam_ife_csid_tpg_stop(struct cam_ife_csid_hw *csid_hw,
{
	int rc = 0;
	struct cam_hw_soc_info                 *soc_info;
	struct cam_ife_csid_reg_offset *csid_reg = NULL;
	const struct cam_ife_csid_reg_offset   *csid_reg = NULL;

	if (csid_hw->tpg_start_cnt)
		csid_hw->tpg_start_cnt--;
@@ -1183,7 +1182,7 @@ static int cam_ife_csid_tpg_stop(struct cam_ife_csid_hw *csid_hw,
static int cam_ife_csid_config_tpg(struct cam_ife_csid_hw   *csid_hw,
	struct cam_isp_resource_node       *res)
{
	struct cam_ife_csid_reg_offset *csid_reg;
	const struct cam_ife_csid_reg_offset *csid_reg;
	struct cam_hw_soc_info               *soc_info;
	uint32_t val = 0;

@@ -1239,7 +1238,7 @@ static int cam_ife_csid_enable_csi2(
	struct cam_isp_resource_node    *res)
{
	int rc = 0;
	struct cam_ife_csid_reg_offset       *csid_reg;
	const struct cam_ife_csid_reg_offset       *csid_reg;
	struct cam_hw_soc_info                     *soc_info;
	struct cam_ife_csid_cid_data               *cid_data;
	uint32_t val = 0;
@@ -1338,7 +1337,7 @@ static int cam_ife_csid_disable_csi2(
	struct cam_ife_csid_hw          *csid_hw,
	struct cam_isp_resource_node    *res)
{
	struct cam_ife_csid_reg_offset      *csid_reg;
	const struct cam_ife_csid_reg_offset      *csid_reg;
	struct cam_hw_soc_info                    *soc_info;

	if (res->res_id >= CAM_IFE_CSID_CID_MAX) {
@@ -1373,7 +1372,7 @@ static int cam_ife_csid_init_config_ipp_path(
{
	int rc = 0;
	struct cam_ife_csid_path_cfg           *path_data;
	struct cam_ife_csid_reg_offset         *csid_reg;
	const struct cam_ife_csid_reg_offset   *csid_reg;
	struct cam_hw_soc_info                 *soc_info;
	uint32_t decode_format = 0, plain_format = 0, val = 0;

@@ -1500,7 +1499,7 @@ static int cam_ife_csid_deinit_ipp_path(
	struct cam_isp_resource_node    *res)
{
	int rc = 0;
	struct cam_ife_csid_reg_offset      *csid_reg;
	const struct cam_ife_csid_reg_offset      *csid_reg;
	struct cam_hw_soc_info                    *soc_info;

	csid_reg = csid_hw->csid_info->csid_reg;
@@ -1529,7 +1528,7 @@ static int cam_ife_csid_enable_ipp_path(
	struct cam_ife_csid_hw          *csid_hw,
	struct cam_isp_resource_node    *res)
{
	struct cam_ife_csid_reg_offset    *csid_reg;
	const struct cam_ife_csid_reg_offset    *csid_reg;
	struct cam_hw_soc_info                  *soc_info;
	struct cam_ife_csid_path_cfg            *path_data;
	uint32_t val = 0;
@@ -1604,7 +1603,7 @@ static int cam_ife_csid_disable_ipp_path(
	enum cam_ife_csid_halt_cmd       stop_cmd)
{
	int rc = 0;
	struct cam_ife_csid_reg_offset       *csid_reg;
	const struct cam_ife_csid_reg_offset *csid_reg;
	struct cam_hw_soc_info               *soc_info;
	struct cam_ife_csid_path_cfg         *path_data;

@@ -1662,7 +1661,7 @@ static int cam_ife_csid_init_config_rdi_path(
{
	int rc = 0;
	struct cam_ife_csid_path_cfg           *path_data;
	struct cam_ife_csid_reg_offset         *csid_reg;
	const struct cam_ife_csid_reg_offset   *csid_reg;
	struct cam_hw_soc_info                 *soc_info;
	uint32_t path_format = 0, plain_fmt = 0, val = 0, id;

@@ -1797,7 +1796,7 @@ static int cam_ife_csid_deinit_rdi_path(
{
	int rc = 0;
	uint32_t id;
	struct cam_ife_csid_reg_offset      *csid_reg;
	const struct cam_ife_csid_reg_offset      *csid_reg;
	struct cam_hw_soc_info                    *soc_info;

	csid_reg = csid_hw->csid_info->csid_reg;
@@ -1821,7 +1820,7 @@ static int cam_ife_csid_enable_rdi_path(
	struct cam_ife_csid_hw          *csid_hw,
	struct cam_isp_resource_node    *res)
{
	struct cam_ife_csid_reg_offset      *csid_reg;
	const struct cam_ife_csid_reg_offset      *csid_reg;
	struct cam_hw_soc_info                    *soc_info;
	uint32_t id, val;

@@ -1868,7 +1867,7 @@ static int cam_ife_csid_disable_rdi_path(
{
	int rc = 0;
	uint32_t id;
	struct cam_ife_csid_reg_offset       *csid_reg;
	const struct cam_ife_csid_reg_offset       *csid_reg;
	struct cam_hw_soc_info                     *soc_info;

	csid_reg = csid_hw->csid_info->csid_reg;
@@ -1920,9 +1919,9 @@ static int cam_ife_csid_get_time_stamp(
{
	struct cam_csid_get_time_stamp_args        *time_stamp;
	struct cam_isp_resource_node               *res;
	struct cam_ife_csid_reg_offset       *csid_reg;
	const struct cam_ife_csid_reg_offset       *csid_reg;
	struct cam_hw_soc_info                     *soc_info;
	struct cam_ife_csid_rdi_reg_offset   *rdi_reg;
	const struct cam_ife_csid_rdi_reg_offset   *rdi_reg;
	struct timespec64 ts;
	uint32_t  time_32, id;

@@ -1999,7 +1998,7 @@ static int cam_ife_csid_get_hw_caps(void *hw_priv,
	struct cam_ife_csid_hw_caps           *hw_caps;
	struct cam_ife_csid_hw                *csid_hw;
	struct cam_hw_info                    *csid_hw_info;
	struct cam_ife_csid_reg_offset  *csid_reg;
	const struct cam_ife_csid_reg_offset  *csid_reg;

	if (!hw_priv || !get_hw_cap_args) {
		CAM_ERR(CAM_ISP, "CSID: Invalid args");
@@ -2190,7 +2189,7 @@ static int cam_ife_csid_reset_retain_sw_reg(
	struct cam_ife_csid_hw *csid_hw)
{
	int rc = 0;
	struct cam_ife_csid_reg_offset *csid_reg =
	const struct cam_ife_csid_reg_offset *csid_reg =
		csid_hw->csid_info->csid_reg;

	init_completion(&csid_hw->csid_top_complete);
@@ -2220,7 +2219,7 @@ static int cam_ife_csid_init_hw(void *hw_priv,
	struct cam_ife_csid_hw                 *csid_hw;
	struct cam_hw_info                     *csid_hw_info;
	struct cam_isp_resource_node           *res;
	struct cam_ife_csid_reg_offset         *csid_reg;
	const struct cam_ife_csid_reg_offset   *csid_reg;

	if (!hw_priv || !init_args ||
		(arg_size != sizeof(struct cam_isp_resource_node))) {
@@ -2357,7 +2356,7 @@ static int cam_ife_csid_start(void *hw_priv, void *start_args,
	struct cam_ife_csid_hw                 *csid_hw;
	struct cam_hw_info                     *csid_hw_info;
	struct cam_isp_resource_node           *res;
	struct cam_ife_csid_reg_offset         *csid_reg;
	const struct cam_ife_csid_reg_offset   *csid_reg;

	if (!hw_priv || !start_args ||
		(arg_size != sizeof(struct cam_isp_resource_node))) {
@@ -2524,8 +2523,8 @@ irqreturn_t cam_ife_csid_irq(int irq_num, void *data)
{
	struct cam_ife_csid_hw                         *csid_hw;
	struct cam_hw_soc_info                         *soc_info;
	struct cam_ife_csid_reg_offset  *csid_reg;
	struct cam_ife_csid_csi2_rx_reg_offset *csi2_reg;
	const struct cam_ife_csid_reg_offset           *csid_reg;
	const struct cam_ife_csid_csi2_rx_reg_offset   *csi2_reg;
	uint32_t i, irq_status_top, irq_status_rx, irq_status_ipp = 0;
	uint32_t irq_status_rdi[4] = {0, 0, 0, 0};
	uint32_t val;
+8 −8
Original line number Diff line number Diff line
@@ -296,11 +296,11 @@ struct cam_ife_csid_common_reg_offset {
 *
 */
struct cam_ife_csid_reg_offset {
	struct cam_ife_csid_common_reg_offset   *cmn_reg;
	struct cam_ife_csid_csi2_rx_reg_offset  *csi2_reg;
	struct cam_ife_csid_ipp_reg_offset      *ipp_reg;
	struct cam_ife_csid_rdi_reg_offset      *rdi_reg[CAM_IFE_CSID_RDI_MAX];
	struct cam_ife_csid_csi2_tpg_reg_offset *tpg_reg;
	const struct cam_ife_csid_common_reg_offset   *cmn_reg;
	const struct cam_ife_csid_csi2_rx_reg_offset  *csi2_reg;
	const struct cam_ife_csid_ipp_reg_offset      *ipp_reg;
	const struct cam_ife_csid_rdi_reg_offset *rdi_reg[CAM_IFE_CSID_RDI_MAX];
	const struct cam_ife_csid_csi2_tpg_reg_offset *tpg_reg;
};


@@ -313,7 +313,7 @@ struct cam_ife_csid_reg_offset {
 *
 */
struct cam_ife_csid_hw_info {
	struct cam_ife_csid_reg_offset      *csid_reg;
	const struct cam_ife_csid_reg_offset   *csid_reg;
	uint32_t                                hw_dts_version;
	uint32_t                                csid_max_clk;

Loading