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

Commit d42801f9 authored by Abhijit Trivedi's avatar Abhijit Trivedi
Browse files

UPSTREAM: Merge remote-tracking branch 'quic/dev/msm-4.9-camx' into msm-4.9 mainline



* quic/dev/msm-4.9-camx: 0807 tip
  msm: camera: ife: Update the correct packer format for TP10 format
  msm: camera: correct errors for common logging macros.
  msm: camera: utils: Add APIs for clock round rate, set flags
  msm: camera: core: Pass ctx hw map in start args

Change-Id: I1d5e3be58c1b6363c6d37f0e152f621dbcac241d
Signed-off-by: default avatarAbhijit Trivedi <abhijitt@codeaurora.org>
parents 05e7d36b 2a84a6a4
Loading
Loading
Loading
Loading
+46 −0
Original line number Diff line number Diff line
@@ -34,6 +34,11 @@ int cam_context_buf_done_from_hw(struct cam_context *ctx,
	struct cam_hw_done_event_data *done =
		(struct cam_hw_done_event_data *)done_event_data;

	if (!ctx || !done) {
		CAM_ERR(CAM_CTXT, "Invalid input params %pK %pK", ctx, done);
		return -EINVAL;
	}

	if (list_empty(&ctx->active_req_list)) {
		CAM_ERR(CAM_CTXT, "no active request");
		return -EIO;
@@ -78,6 +83,12 @@ int cam_context_apply_req_to_hw(struct cam_context *ctx,
	struct cam_ctx_request *req;
	struct cam_hw_config_args cfg;

	if (!ctx || !apply) {
		CAM_ERR(CAM_CTXT, "Invalid input params %pK %pK", ctx, apply);
		rc = -EINVAL;
		goto end;
	}

	if (!ctx->hw_mgr_intf) {
		CAM_ERR(CAM_CTXT, "HW interface is not ready");
		rc = -EFAULT;
@@ -119,6 +130,11 @@ static void cam_context_sync_callback(int32_t sync_obj, int status, void *data)
	struct cam_ctx_request *req = NULL;
	struct cam_req_mgr_apply_request apply;

	if (!ctx) {
		CAM_ERR(CAM_CTXT, "Invalid input param");
		return;
	}

	spin_lock(&ctx->lock);
	if (!list_empty(&ctx->pending_req_list))
		req = list_first_entry(&ctx->pending_req_list,
@@ -144,6 +160,11 @@ int32_t cam_context_release_dev_to_hw(struct cam_context *ctx,
	struct cam_hw_release_args arg;
	struct cam_ctx_request *req;

	if (!ctx) {
		CAM_ERR(CAM_CTXT, "Invalid input param");
		return -EINVAL;
	}

	if ((!ctx->hw_mgr_intf) || (!ctx->hw_mgr_intf->hw_release)) {
		CAM_ERR(CAM_CTXT, "HW interface is not ready");
		return -EINVAL;
@@ -209,6 +230,12 @@ int32_t cam_context_prepare_dev_to_hw(struct cam_context *ctx,
	size_t len = 0;
	int32_t i = 0;

	if (!ctx || !cmd) {
		CAM_ERR(CAM_CTXT, "Invalid input params %pK %pK", ctx, cmd);
		rc = -EINVAL;
		goto end;
	}

	if (!ctx->hw_mgr_intf) {
		CAM_ERR(CAM_CTXT, "HW interface is not ready");
		rc = -EFAULT;
@@ -304,6 +331,12 @@ int32_t cam_context_acquire_dev_to_hw(struct cam_context *ctx,
	struct cam_create_dev_hdl req_hdl_param;
	struct cam_hw_release_args release;

	if (!ctx || !cmd) {
		CAM_ERR(CAM_CTXT, "Invalid input params %pK %pK", ctx, cmd);
		rc = -EINVAL;
		goto end;
	}

	if (!ctx->hw_mgr_intf) {
		CAM_ERR(CAM_CTXT, "HW interface is not ready");
		rc = -EFAULT;
@@ -377,6 +410,12 @@ int32_t cam_context_start_dev_to_hw(struct cam_context *ctx,
	int rc = 0;
	struct cam_hw_start_args arg;

	if (!ctx || !cmd) {
		CAM_ERR(CAM_CTXT, "Invalid input params %pK %pK", ctx, cmd);
		rc = -EINVAL;
		goto end;
	}

	if (!ctx->hw_mgr_intf) {
		CAM_ERR(CAM_CTXT, "HW interface is not ready");
		rc = -EFAULT;
@@ -392,6 +431,7 @@ int32_t cam_context_start_dev_to_hw(struct cam_context *ctx,
	}

	if (ctx->hw_mgr_intf->hw_start) {
		arg.ctxt_to_hw_map = ctx->ctxt_to_hw_map;
		rc = ctx->hw_mgr_intf->hw_start(ctx->hw_mgr_intf->hw_mgr_priv,
				&arg);
		if (rc) {
@@ -412,6 +452,12 @@ int32_t cam_context_stop_dev_to_hw(struct cam_context *ctx)
	struct cam_hw_stop_args stop;
	struct cam_ctx_request *req;

	if (!ctx) {
		CAM_ERR(CAM_CTXT, "Invalid input param");
		rc = -EINVAL;
		goto end;
	}

	if (!ctx->hw_mgr_intf) {
		CAM_ERR(CAM_CTXT, "HW interface is not ready");
		rc = -EFAULT;
+35 −24
Original line number Diff line number Diff line
@@ -650,6 +650,8 @@ static enum cam_vfe_bus_packer_format
	switch (out_fmt) {
	case CAM_FORMAT_NV21:
	case CAM_FORMAT_NV12:
	case CAM_FORMAT_UBWC_NV12:
	case CAM_FORMAT_UBWC_NV12_4R:
		return PACKER_FMT_PLAIN_8_LSB_MSB_10;
	case CAM_FORMAT_PLAIN64:
		return PACKER_FMT_PLAIN_64;
@@ -660,10 +662,6 @@ static enum cam_vfe_bus_packer_format
	case CAM_FORMAT_MIPI_RAW_14:
	case CAM_FORMAT_MIPI_RAW_16:
	case CAM_FORMAT_MIPI_RAW_20:
	case CAM_FORMAT_QTI_RAW_8:
	case CAM_FORMAT_QTI_RAW_10:
	case CAM_FORMAT_QTI_RAW_12:
	case CAM_FORMAT_QTI_RAW_14:
	case CAM_FORMAT_PLAIN128:
	case CAM_FORMAT_PLAIN8:
	case CAM_FORMAT_PLAIN16_8:
@@ -675,6 +673,9 @@ static enum cam_vfe_bus_packer_format
	case CAM_FORMAT_PD8:
	case CAM_FORMAT_PD10:
		return PACKER_FMT_PLAIN_128;
	case CAM_FORMAT_UBWC_TP10:
	case CAM_FORMAT_TP10:
		return PACKER_FMT_TP_10;
	default:
		return PACKER_FMT_MAX;
	}
@@ -721,6 +722,7 @@ static int cam_vfe_bus_acquire_wm(
	rsrc_data->height = out_port_info->height;

	if (rsrc_data->index < 3) {
		/* Write master 0-2 refers to RDI 0/ RDI 1/RDI 2 */
		rsrc_data->width = CAM_VFE_RDI_BUS_DEFAULT_WIDTH;
		rsrc_data->height = 0;
		rsrc_data->stride = CAM_VFE_RDI_BUS_DEFAULT_STRIDE;
@@ -728,50 +730,59 @@ static int cam_vfe_bus_acquire_wm(
		rsrc_data->en_cfg = 0x3;
	} else if (rsrc_data->index < 5 ||
		rsrc_data->index == 7 || rsrc_data->index == 8) {
		switch (plane) {
		case PLANE_Y:
		/* Write master 3, 4 - for Full OUT , 7-8  FD OUT */
		switch (rsrc_data->format) {
		case CAM_FORMAT_UBWC_NV12:
		case CAM_FORMAT_UBWC_NV12_4R:
			case CAM_FORMAT_UBWC_TP10:
			rsrc_data->en_ubwc = 1;
			/* Fall through for NV12 */
		case CAM_FORMAT_NV21:
		case CAM_FORMAT_NV12:
			switch (plane) {
			case PLANE_C:
				rsrc_data->height /= 2;
				break;
			default:
			case PLANE_Y:
				break;
			default:
				CAM_ERR(CAM_ISP, "Invalid plane %d\n", plane);
				return -EINVAL;
			}
			break;
		case CAM_FORMAT_UBWC_TP10:
			rsrc_data->en_ubwc = 1;
			/* Fall through for LINEAR TP10 */
		case CAM_FORMAT_TP10:
			rsrc_data->width = rsrc_data->width * 4 / 3;
			switch (plane) {
			case PLANE_C:
			switch (rsrc_data->format) {
			case CAM_FORMAT_NV21:
			case CAM_FORMAT_NV12:
				rsrc_data->height /= 2;
				break;
			case CAM_FORMAT_UBWC_NV12:
			case CAM_FORMAT_UBWC_NV12_4R:
			case CAM_FORMAT_UBWC_TP10:
				rsrc_data->height /= 2;
				rsrc_data->en_ubwc = 1;
			case PLANE_Y:
				break;
			default:
				break;
				CAM_ERR(CAM_ISP, "Invalid plane %d\n", plane);
				return -EINVAL;
			}
			break;
		default:
			CAM_ERR(CAM_ISP, "Invalid plane type %d", plane);
			CAM_ERR(CAM_ISP, "Invalid format %d\n",
				rsrc_data->format);
			return -EINVAL;
		}
		rsrc_data->en_cfg = 0x1;
	} else if (rsrc_data->index >= 11) {
		/* Write master 11-19  stats */
		rsrc_data->width = 0;
		rsrc_data->height = 0;
		rsrc_data->stride = 1;
		rsrc_data->en_cfg = 0x3;
	} else {
		/* Write master 5-6 DS ports , 9 - Raw dump , 10 PDAF */
		rsrc_data->width = rsrc_data->width * 4;
		rsrc_data->height = rsrc_data->height / 2;
		rsrc_data->en_cfg = 0x1;
	}

	if (vfe_out_res_id >= CAM_ISP_IFE_OUT_RES_RDI_0 &&
		vfe_out_res_id <= CAM_ISP_IFE_OUT_RES_RDI_3)
		rsrc_data->frame_based = 1;
+18 −18
Original line number Diff line number Diff line
@@ -145,13 +145,13 @@ static int32_t cam_cci_write_i2c_queue(struct cci_device *cci_dev,
	void __iomem *base = soc_info->reg_map[0].mem_base;

	if (!cci_dev) {
		CAM_ERR(CAM_CCI, "%s: failed %d");
		CAM_ERR(CAM_CCI, "Failed");
		return -EINVAL;
	}

	rc = cam_cci_validate_queue(cci_dev, 1, master, queue);
	if (rc < 0) {
		CAM_ERR(CAM_CCI, "Failed %d");
		CAM_ERR(CAM_CCI, "Failed %d", rc);
		return rc;
	}
	CAM_DBG(CAM_CCI, "CCI_I2C_M0_Q0_LOAD_DATA_ADDR:val 0x%x:0x%x",
@@ -184,42 +184,43 @@ static void cam_cci_dump_registers(struct cci_device *cci_dev,
	uint32_t reg_offset = 0;

	/* CCI Top Registers */
	CCI_DBG(" **** %s : %d CCI TOP Registers ****");
	CAM_DBG(CAM_CCI, "****CCI TOP Registers ****");
	for (i = 0; i < DEBUG_TOP_REG_COUNT; i++) {
		reg_offset = DEBUG_TOP_REG_START + i * 4;
		read_val = cam_io_r_mb(cci_dev->base + reg_offset);
		CCI_DBG("offset = 0x%X value = 0x%X",
		CAM_DBG(CAM_CCI, "offset = 0x%X value = 0x%X",
			reg_offset, read_val);
	}

	/* CCI Master registers */
	CCI_DBG(" ****CCI MASTER %d Registers ****",
	CAM_DBG(CAM_CCI, "****CCI MASTER %d Registers ****",
		master);
	for (i = 0; i < DEBUG_MASTER_REG_COUNT; i++) {
		if (i == 6)
			continue;
		reg_offset = DEBUG_MASTER_REG_START + master*0x100 + i * 4;
		read_val = cam_io_r_mb(cci_dev->base + reg_offset);
		CCI_DBG("offset = 0x%X value = 0x%X", reg_offset, read_val);
		CAM_DBG(CAM_CCI, "offset = 0x%X value = 0x%X",
			reg_offset, read_val);
	}

	/* CCI Master Queue registers */
	CCI_DBG(" **** CCI MASTER%d QUEUE%d Registers ****",
	CAM_DBG(CAM_CCI, " **** CCI MASTER%d QUEUE%d Registers ****",
		master, queue);
	for (i = 0; i < DEBUG_MASTER_QUEUE_REG_COUNT; i++) {
		reg_offset = DEBUG_MASTER_QUEUE_REG_START +  master*0x200 +
			queue*0x100 + i * 4;
		read_val = cam_io_r_mb(cci_dev->base + reg_offset);
		CCI_DBG("offset = 0x%X value = 0x%X",
		CAM_DBG(CAM_CCI, "offset = 0x%X value = 0x%X",
			reg_offset, read_val);
	}

	/* CCI Interrupt registers */
	CCI_DBG(" ****CCI Interrupt Registers ****");
	CAM_DBG(CAM_CCI, " ****CCI Interrupt Registers ****");
	for (i = 0; i < DEBUG_INTR_REG_COUNT; i++) {
		reg_offset = DEBUG_INTR_REG_START + i * 4;
		read_val = cam_io_r_mb(cci_dev->base + reg_offset);
		CCI_DBG("offset = 0x%X value = 0x%X",
		CAM_DBG(CAM_CCI, "offset = 0x%X value = 0x%X",
			reg_offset, read_val);
	}
}
@@ -449,8 +450,7 @@ static int32_t cam_cci_calc_cmd_len(struct cci_device *cci_dev,
	}

	if (len > cci_dev->payload_size) {
		CAM_ERR(CAM_CCI, "%s: %d Len error: %d",
			len);
		CAM_ERR(CAM_CCI, "Len error: %d", len);
		return -EINVAL;
	}

@@ -660,7 +660,7 @@ static int32_t cam_cci_data_queue(struct cci_device *cci_dev,

	rc = cam_cci_lock_queue(cci_dev, master, queue, 1);
	if (rc < 0) {
		CAM_ERR(CAM_CCI, "%s failed line %d");
		CAM_ERR(CAM_CCI, "failed line %d", rc);
		return rc;
	}

@@ -670,7 +670,7 @@ static int32_t cam_cci_data_queue(struct cci_device *cci_dev,
		len = cam_cci_calc_cmd_len(cci_dev, c_ctrl, cmd_size,
			i2c_cmd, &pack);
		if (len <= 0) {
			CAM_ERR(CAM_CCI, "%s failed line %d");
			CAM_ERR(CAM_CCI, "failed");
			return -EINVAL;
		}

@@ -918,7 +918,7 @@ static int32_t cam_cci_read(struct v4l2_subdev *sd,

	val = cam_io_r_mb(base + CCI_I2C_M0_Q0_CUR_WORD_CNT_ADDR
			+ master * 0x200 + queue * 0x100);
	CAM_DBG(CAM_CCI, "%s cur word cnt 0x%x", val);
	CAM_DBG(CAM_CCI, "cur word cnt 0x%x", val);
	cam_io_w_mb(val, base + CCI_I2C_M0_Q0_EXEC_WORD_CNT_ADDR
			+ master * 0x200 + queue * 0x100);

@@ -989,7 +989,7 @@ static int32_t cam_cci_i2c_write(struct v4l2_subdev *sd,
	cci_dev = v4l2_get_subdevdata(sd);

	if (cci_dev->cci_state != CCI_STATE_ENABLED) {
		CAM_ERR(CAM_CCI, "%s invalid cci state %d",
		CAM_ERR(CAM_CCI, "invalid cci state %d",
			cci_dev->cci_state);
		return -EINVAL;
	}
@@ -1013,7 +1013,7 @@ static int32_t cam_cci_i2c_write(struct v4l2_subdev *sd,
		cci_dev->cci_i2c_queue_info[master][queue].max_queue_size-1,
		master, queue);
	if (rc < 0) {
		CAM_ERR(CAM_CCI, "%s:%d Initial validataion failed rc %d",
		CAM_ERR(CAM_CCI, "Initial validataion failed rc %d",
			rc);
		return rc;
	}
+0 −1
Original line number Diff line number Diff line
@@ -218,7 +218,6 @@ int32_t cam_sensor_parse_dt(struct cam_sensor_ctrl_t *s_ctrl)
	/* Initialize mutex */
	mutex_init(&(s_ctrl->cam_sensor_mutex));

	CAM_DBG(CAM_SENSOR, "%s: %d");
	/* Initialize default parameters */
	for (i = 0; i < soc_info->num_clk; i++) {
		soc_info->clk[i] = devm_clk_get(&soc_info->pdev->dev,
+0 −1
Original line number Diff line number Diff line
@@ -206,7 +206,6 @@ int32_t cam_sensor_cci_i2c_util(struct cam_sensor_cci_client *cci_client,
	int32_t rc = 0;
	struct cam_cci_ctrl cci_ctrl;

	CAM_DBG(CAM_SENSOR, "%s line %d");
	cci_ctrl.cmd = cci_cmd;
	cci_ctrl.cci_info = cci_client;
	rc = v4l2_subdev_call(cci_client->cci_subdev,
Loading