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

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

msm: camera: sensor: Clean Pending requests at the time of streamoff



Move per frame request clean up from release to stop device. Per frame
request need to be clear at the time of streamoff, so streamon can use
all buffers.

Change-Id: I1d96676bf904888fe8f9e876390c355bf1188827
Signed-off-by: default avatarJigarkumar Zala <jzala@codeaurora.org>
parent 82ef231d
Loading
Loading
Loading
Loading
+24 −12
Original line number Diff line number Diff line
@@ -38,49 +38,58 @@ static void cam_sensor_update_req_mgr(
			add_req.req_id);
}

static void cam_sensor_release_resource(
static void cam_sensor_release_stream_rsc(
	struct cam_sensor_ctrl_t *s_ctrl)
{
	struct i2c_settings_array *i2c_set = NULL;
	int i, rc;
	int rc;

	i2c_set = &(s_ctrl->i2c_data.init_settings);
	i2c_set = &(s_ctrl->i2c_data.streamoff_settings);
	if (i2c_set->is_settings_valid == 1) {
		i2c_set->is_settings_valid = -1;
		rc = delete_request(i2c_set);
		if (rc < 0)
			CAM_ERR(CAM_SENSOR,
				"failed while deleting Init settings");
				"failed while deleting Streamoff settings");
	}

	i2c_set = &(s_ctrl->i2c_data.config_settings);
	i2c_set = &(s_ctrl->i2c_data.streamon_settings);
	if (i2c_set->is_settings_valid == 1) {
		i2c_set->is_settings_valid = -1;
		rc = delete_request(i2c_set);
		if (rc < 0)
			CAM_ERR(CAM_SENSOR,
				"failed while deleting Res settings");
				"failed while deleting Streamon settings");
	}
	i2c_set = &(s_ctrl->i2c_data.streamoff_settings);
}

static void cam_sensor_release_resource(
	struct cam_sensor_ctrl_t *s_ctrl)
{
	struct i2c_settings_array *i2c_set = NULL;
	int i, rc;

	i2c_set = &(s_ctrl->i2c_data.init_settings);
	if (i2c_set->is_settings_valid == 1) {
		i2c_set->is_settings_valid = -1;
		rc = delete_request(i2c_set);
		if (rc < 0)
			CAM_ERR(CAM_SENSOR,
				"failed while deleting Streamoff settings");
				"failed while deleting Init settings");
	}
	i2c_set = &(s_ctrl->i2c_data.streamon_settings);

	i2c_set = &(s_ctrl->i2c_data.config_settings);
	if (i2c_set->is_settings_valid == 1) {
		i2c_set->is_settings_valid = -1;
		rc = delete_request(i2c_set);
		if (rc < 0)
			CAM_ERR(CAM_SENSOR,
				"failed while deleting Streamoff settings");
				"failed while deleting Res settings");
	}

	if (s_ctrl->i2c_data.per_frame != NULL) {
		for (i = 0; i < MAX_PER_FRAME_ARRAY; i++) {
			i2c_set = &(s_ctrl->i2c_data.per_frame[i]);

			if (i2c_set->is_settings_valid == 1) {
				i2c_set->is_settings_valid = -1;
				rc = delete_request(i2c_set);
@@ -489,7 +498,7 @@ void cam_sensor_shutdown(struct cam_sensor_ctrl_t *s_ctrl)
		return;

	cam_sensor_release_resource(s_ctrl);

	cam_sensor_release_stream_rsc(s_ctrl);
	if (s_ctrl->sensor_state >= CAM_SENSOR_ACQUIRE)
		cam_sensor_power_down(s_ctrl);

@@ -722,6 +731,7 @@ int32_t cam_sensor_driver_cmd(struct cam_sensor_ctrl_t *s_ctrl,
		}

		cam_sensor_release_resource(s_ctrl);
		cam_sensor_release_stream_rsc(s_ctrl);
		if (s_ctrl->bridge_intf.device_hdl == -1) {
			CAM_ERR(CAM_SENSOR,
				"Invalid Handles: link hdl: %d device hdl: %d",
@@ -793,6 +803,8 @@ int32_t cam_sensor_driver_cmd(struct cam_sensor_ctrl_t *s_ctrl,
				"cannot apply streamoff settings");
			}
		}

		cam_sensor_release_resource(s_ctrl);
		s_ctrl->sensor_state = CAM_SENSOR_ACQUIRE;
	}
		break;