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

Commit 7f1e5039 authored by Jigarkumar Zala's avatar Jigarkumar Zala Committed by Gerrit - the friendly Code Review server
Browse files

msm: camera: correct frame setting update logic



Correct applying/deleting/updating frame settings logic for
image sensor and flash module.

Change-Id: Ia8e7986780ea24c864ed4c60c2b8da8016506ea9
Signed-off-by: default avatarJigarkumar Zala <jzala@codeaurora.org>
parent 2c714287
Loading
Loading
Loading
Loading
+31 −6
Original line number Diff line number Diff line
@@ -334,7 +334,8 @@ int cam_flash_apply_setting(struct cam_flash_ctrl *fctrl,
		flash_data = &fctrl->per_frame[frame_offset];

		if ((flash_data->opcode == CAMERA_SENSOR_FLASH_OP_FIREHIGH) &&
			(flash_data->cmn_attr.is_settings_valid)) {
			(flash_data->cmn_attr.is_settings_valid) &&
			(flash_data->cmn_attr.request_id == req_id)) {
			/* Turn On Flash */
			if (fctrl->flash_state == CAM_FLASH_STATE_INIT) {
				rc = cam_flash_high(fctrl, flash_data);
@@ -348,7 +349,8 @@ int cam_flash_apply_setting(struct cam_flash_ctrl *fctrl,
			}
		} else if ((flash_data->opcode ==
			CAMERA_SENSOR_FLASH_OP_FIRELOW) &&
			(flash_data->cmn_attr.is_settings_valid)) {
			(flash_data->cmn_attr.is_settings_valid) &&
			(flash_data->cmn_attr.request_id == req_id)) {
			/* Turn On Torch */
			if (fctrl->flash_state == CAM_FLASH_STATE_INIT) {
				rc = cam_flash_low(fctrl, flash_data);
@@ -361,7 +363,8 @@ int cam_flash_apply_setting(struct cam_flash_ctrl *fctrl,
				fctrl->flash_state = CAM_FLASH_STATE_LOW;
			}
		} else if ((flash_data->opcode == CAMERA_SENSOR_FLASH_OP_OFF) &&
			(flash_data->cmn_attr.is_settings_valid)) {
			(flash_data->cmn_attr.is_settings_valid) &&
			(flash_data->cmn_attr.request_id == req_id)) {
			if ((fctrl->flash_state != CAM_FLASH_STATE_RELEASE) ||
				(fctrl->flash_state != CAM_FLASH_STATE_INIT)) {
				rc = cam_flash_off(fctrl);
@@ -374,8 +377,7 @@ int cam_flash_apply_setting(struct cam_flash_ctrl *fctrl,
				}
			}
		} else {
			CAM_DBG(CAM_FLASH, "NOP opcode");
			return rc;
			CAM_DBG(CAM_FLASH, "NOP opcode: req_id: %u", req_id);
		}
	}

@@ -468,6 +470,19 @@ int cam_flash_parser(struct cam_flash_ctrl *fctrl, void *arg)
			csl_packet->cmd_buf_offset);
		frame_offset = csl_packet->header.request_id %
			MAX_PER_FRAME_ARRAY;
		if (fctrl->per_frame[frame_offset].cmn_attr.is_settings_valid
			== true) {
			fctrl->per_frame[frame_offset].cmn_attr.request_id = 0;
			fctrl->per_frame[frame_offset].
				cmn_attr.is_settings_valid = false;
			for (i = 0;
			i < fctrl->per_frame[frame_offset].cmn_attr.count;
			i++) {
				fctrl->per_frame[frame_offset].
					led_current_ma[i] = 0;
			}
		}

		fctrl->per_frame[frame_offset].cmn_attr.request_id =
			csl_packet->header.request_id;
		fctrl->per_frame[frame_offset].cmn_attr.is_settings_valid =
@@ -477,6 +492,10 @@ int cam_flash_parser(struct cam_flash_ctrl *fctrl, void *arg)
			(uint64_t *)&generic_ptr, &len_of_buffer);
		cmd_buf = (uint32_t *)((uint8_t *)generic_ptr +
			cmd_desc->offset);

		if (!cmd_buf)
			return -EINVAL;

		cmn_hdr = (struct common_header *)cmd_buf;

		switch (cmn_hdr->cmd_type) {
@@ -485,6 +504,11 @@ int cam_flash_parser(struct cam_flash_ctrl *fctrl, void *arg)
				"CAMERA_FLASH_CMD_TYPE_OPS case called");
			flash_operation_info =
				(struct cam_flash_set_on_off *) cmd_buf;
			if (!flash_operation_info) {
				CAM_ERR(CAM_FLASH, "flash_operation_info Null");
				return -EINVAL;
			}

			fctrl->per_frame[frame_offset].opcode =
				flash_operation_info->opcode;
			fctrl->per_frame[frame_offset].cmn_attr.count =
@@ -500,7 +524,6 @@ int cam_flash_parser(struct cam_flash_ctrl *fctrl, void *arg)
				cmn_hdr->cmd_type);
			return -EINVAL;
		}

		break;
	}
	case CAM_FLASH_PACKET_OPCODE_NON_REALTIME_SET_OPS: {
@@ -594,6 +617,8 @@ int cam_flash_parser(struct cam_flash_ctrl *fctrl, void *arg)
		break;
	}
	case CAM_PKT_NOP_OPCODE: {
		CAM_DBG(CAM_FLASH, "NOP Packet is Received: req_id: %u",
			csl_packet->header.request_id);
		goto update_req_mgr;
	}
	default:
+17 −19
Original line number Diff line number Diff line
@@ -813,29 +813,27 @@ int cam_sensor_apply_settings(struct cam_sensor_ctrl_t *s_ctrl,
					return rc;
				}
			}
			del_req_id = (req_id +
				MAX_PER_FRAME_ARRAY -
				MAX_SYSTEM_PIPELINE_DELAY) %
				MAX_PER_FRAME_ARRAY;
			CAM_DBG(CAM_SENSOR, "Deleting the Request: %d",
				del_req_id);
			if (req_id >
				s_ctrl->i2c_data.per_frame[del_req_id].
				request_id) {
				s_ctrl->i2c_data.per_frame[del_req_id].
					request_id = 0;
		} else {
			CAM_DBG(CAM_SENSOR,
				"Invalid/NOP request to apply: %lld", req_id);
		}

		del_req_id = (req_id + MAX_PER_FRAME_ARRAY -
			MAX_SYSTEM_PIPELINE_DELAY) % MAX_PER_FRAME_ARRAY;
		CAM_DBG(CAM_SENSOR, "Deleting the Request: %d", del_req_id);

		if ((req_id >
			 s_ctrl->i2c_data.per_frame[del_req_id].request_id) &&
			(s_ctrl->i2c_data.per_frame[del_req_id].
				is_settings_valid == 1)) {
			s_ctrl->i2c_data.per_frame[del_req_id].request_id = 0;
			rc = delete_request(
					&(s_ctrl->i2c_data.
					per_frame[del_req_id]));
				&(s_ctrl->i2c_data.per_frame[del_req_id]));
			if (rc < 0)
				CAM_ERR(CAM_SENSOR,
					"Delete request Fail:%d rc:%d",
					del_req_id, rc);
		}
		} else {
			CAM_DBG(CAM_SENSOR,
				"Invalid/NOP request to apply: %lld", req_id);
		}
	}
	return rc;
}
+1 −1
Original line number Diff line number Diff line
@@ -38,7 +38,7 @@ int32_t cam_cci_i2c_read(struct cam_sensor_cci_client *cci_client,
	rc = v4l2_subdev_call(cci_client->cci_subdev,
		core, ioctl, VIDIOC_MSM_CCI_CFG, &cci_ctrl);
	if (rc < 0) {
		CAM_ERR(CAM_SENSOR, "line %d rc = %d", rc);
		CAM_ERR(CAM_SENSOR, "rc = %d", rc);
		return rc;
	}