Loading drivers/media/platform/msm/camera/cam_sensor_module/cam_flash/cam_flash_core.c +48 −10 Original line number Diff line number Diff line /* Copyright (c) 2017, The Linux Foundation. All rights reserved. /* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -271,8 +271,8 @@ static int cam_flash_high( static int delete_req(struct cam_flash_ctrl *fctrl, uint64_t req_id) { int i = 0; int frame_offset = 0; struct cam_flash_frame_setting *flash_data = NULL; uint64_t top = 0, del_req_id = 0; if (req_id == 0) { flash_data = &fctrl->nrt_info; Loading @@ -288,16 +288,54 @@ static int delete_req(struct cam_flash_ctrl *fctrl, uint64_t req_id) is_settings_valid = false; } } else { frame_offset = (req_id + MAX_PER_FRAME_ARRAY - CAM_FLASH_PIPELINE_DELAY) % 8; flash_data = &fctrl->per_frame[frame_offset]; if (req_id > flash_data->cmn_attr.request_id) { for (i = 0; i < MAX_PER_FRAME_ARRAY; i++) { flash_data = &fctrl->per_frame[i]; if (req_id >= flash_data->cmn_attr.request_id && flash_data->cmn_attr.is_settings_valid == 1) { if (top < flash_data->cmn_attr.request_id) { del_req_id = top; top = flash_data->cmn_attr.request_id; } else if (top > flash_data->cmn_attr.request_id && del_req_id < flash_data->cmn_attr.request_id) { del_req_id = flash_data->cmn_attr.request_id; } } } if (top < req_id) { if ((((top % MAX_PER_FRAME_ARRAY) - (req_id % MAX_PER_FRAME_ARRAY)) >= BATCH_SIZE_MAX) || (((top % MAX_PER_FRAME_ARRAY) - (req_id % MAX_PER_FRAME_ARRAY)) <= -BATCH_SIZE_MAX)) del_req_id = req_id; } if (!del_req_id) return 0; CAM_DBG(CAM_FLASH, "top: %llu, del_req_id:%llu", top, del_req_id); for (i = 0; i < MAX_PER_FRAME_ARRAY; i++) { flash_data = &fctrl->per_frame[i]; if ((del_req_id == flash_data->cmn_attr.request_id) && (flash_data->cmn_attr. is_settings_valid == 1)) { CAM_DBG(CAM_FLASH, "Deleting request[%d] %llu", i, flash_data->cmn_attr.request_id); flash_data->cmn_attr.request_id = 0; flash_data->cmn_attr.is_settings_valid = false; flash_data->opcode = 0; for (i = 0; i < flash_data->cmn_attr.count; i++) flash_data->led_current_ma[i] = 0; } } } return 0; } Loading drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor/cam_sensor_core.c +44 −17 Original line number Diff line number Diff line Loading @@ -193,8 +193,9 @@ static int32_t cam_sensor_i2c_pkt_parse(struct cam_sensor_ctrl_t *s_ctrl, &i2c_data-> per_frame[csl_packet->header.request_id % MAX_PER_FRAME_ARRAY]; CAM_DBG(CAM_SENSOR, "Received Packet: %lld", csl_packet->header.request_id % MAX_PER_FRAME_ARRAY); CAM_DBG(CAM_SENSOR, "Received Packet: %lld req: %lld", csl_packet->header.request_id % MAX_PER_FRAME_ARRAY, csl_packet->header.request_id); if (i2c_reg_settings->is_settings_valid == 1) { CAM_ERR(CAM_SENSOR, "Already some pkt in offset req : %lld", Loading Loading @@ -1010,7 +1011,8 @@ int cam_sensor_power_down(struct cam_sensor_ctrl_t *s_ctrl) int cam_sensor_apply_settings(struct cam_sensor_ctrl_t *s_ctrl, int64_t req_id, enum cam_sensor_packet_opcodes opcode) { int rc = 0, offset, del_req_id; int rc = 0, offset, i; uint64_t top = 0, del_req_id = 0; struct i2c_settings_array *i2c_set = NULL; struct i2c_settings_list *i2c_list; Loading Loading @@ -1073,23 +1075,48 @@ int cam_sensor_apply_settings(struct cam_sensor_ctrl_t *s_ctrl, "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); /* Change the logic dynamically */ for (i = 0; i < MAX_PER_FRAME_ARRAY; i++) { if ((req_id >= s_ctrl->i2c_data.per_frame[i].request_id) && (top < s_ctrl->i2c_data.per_frame[i].request_id) && (s_ctrl->i2c_data.per_frame[i]. is_settings_valid == 1)) { del_req_id = top; top = s_ctrl->i2c_data.per_frame[i].request_id; } } if (top < req_id) { if ((((top % MAX_PER_FRAME_ARRAY) - (req_id % MAX_PER_FRAME_ARRAY)) >= BATCH_SIZE_MAX) || (((top % MAX_PER_FRAME_ARRAY) - (req_id % MAX_PER_FRAME_ARRAY)) <= -BATCH_SIZE_MAX)) del_req_id = req_id; } if (!del_req_id) return rc; if ((req_id > s_ctrl->i2c_data.per_frame[del_req_id].request_id) && (s_ctrl->i2c_data.per_frame[del_req_id]. CAM_DBG(CAM_SENSOR, "top: %llu, del_req_id:%llu", top, del_req_id); for (i = 0; i < MAX_PER_FRAME_ARRAY; i++) { if ((del_req_id > s_ctrl->i2c_data.per_frame[i].request_id) && (s_ctrl->i2c_data.per_frame[i]. is_settings_valid == 1)) { s_ctrl->i2c_data.per_frame[del_req_id].request_id = 0; s_ctrl->i2c_data.per_frame[i].request_id = 0; rc = delete_request( &(s_ctrl->i2c_data.per_frame[del_req_id])); &(s_ctrl->i2c_data.per_frame[i])); if (rc < 0) CAM_ERR(CAM_SENSOR, "Delete request Fail:%d rc:%d", "Delete request Fail:%lld rc:%d", del_req_id, rc); } } } return rc; } Loading drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor_utils/cam_sensor_cmn_header.h +1 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ #define MAX_POWER_CONFIG 12 #define MAX_PER_FRAME_ARRAY 32 #define BATCH_SIZE_MAX 16 #define CAM_SENSOR_NAME "cam-sensor" #define CAM_ACTUATOR_NAME "cam-actuator" Loading Loading
drivers/media/platform/msm/camera/cam_sensor_module/cam_flash/cam_flash_core.c +48 −10 Original line number Diff line number Diff line /* Copyright (c) 2017, The Linux Foundation. All rights reserved. /* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -271,8 +271,8 @@ static int cam_flash_high( static int delete_req(struct cam_flash_ctrl *fctrl, uint64_t req_id) { int i = 0; int frame_offset = 0; struct cam_flash_frame_setting *flash_data = NULL; uint64_t top = 0, del_req_id = 0; if (req_id == 0) { flash_data = &fctrl->nrt_info; Loading @@ -288,16 +288,54 @@ static int delete_req(struct cam_flash_ctrl *fctrl, uint64_t req_id) is_settings_valid = false; } } else { frame_offset = (req_id + MAX_PER_FRAME_ARRAY - CAM_FLASH_PIPELINE_DELAY) % 8; flash_data = &fctrl->per_frame[frame_offset]; if (req_id > flash_data->cmn_attr.request_id) { for (i = 0; i < MAX_PER_FRAME_ARRAY; i++) { flash_data = &fctrl->per_frame[i]; if (req_id >= flash_data->cmn_attr.request_id && flash_data->cmn_attr.is_settings_valid == 1) { if (top < flash_data->cmn_attr.request_id) { del_req_id = top; top = flash_data->cmn_attr.request_id; } else if (top > flash_data->cmn_attr.request_id && del_req_id < flash_data->cmn_attr.request_id) { del_req_id = flash_data->cmn_attr.request_id; } } } if (top < req_id) { if ((((top % MAX_PER_FRAME_ARRAY) - (req_id % MAX_PER_FRAME_ARRAY)) >= BATCH_SIZE_MAX) || (((top % MAX_PER_FRAME_ARRAY) - (req_id % MAX_PER_FRAME_ARRAY)) <= -BATCH_SIZE_MAX)) del_req_id = req_id; } if (!del_req_id) return 0; CAM_DBG(CAM_FLASH, "top: %llu, del_req_id:%llu", top, del_req_id); for (i = 0; i < MAX_PER_FRAME_ARRAY; i++) { flash_data = &fctrl->per_frame[i]; if ((del_req_id == flash_data->cmn_attr.request_id) && (flash_data->cmn_attr. is_settings_valid == 1)) { CAM_DBG(CAM_FLASH, "Deleting request[%d] %llu", i, flash_data->cmn_attr.request_id); flash_data->cmn_attr.request_id = 0; flash_data->cmn_attr.is_settings_valid = false; flash_data->opcode = 0; for (i = 0; i < flash_data->cmn_attr.count; i++) flash_data->led_current_ma[i] = 0; } } } return 0; } Loading
drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor/cam_sensor_core.c +44 −17 Original line number Diff line number Diff line Loading @@ -193,8 +193,9 @@ static int32_t cam_sensor_i2c_pkt_parse(struct cam_sensor_ctrl_t *s_ctrl, &i2c_data-> per_frame[csl_packet->header.request_id % MAX_PER_FRAME_ARRAY]; CAM_DBG(CAM_SENSOR, "Received Packet: %lld", csl_packet->header.request_id % MAX_PER_FRAME_ARRAY); CAM_DBG(CAM_SENSOR, "Received Packet: %lld req: %lld", csl_packet->header.request_id % MAX_PER_FRAME_ARRAY, csl_packet->header.request_id); if (i2c_reg_settings->is_settings_valid == 1) { CAM_ERR(CAM_SENSOR, "Already some pkt in offset req : %lld", Loading Loading @@ -1010,7 +1011,8 @@ int cam_sensor_power_down(struct cam_sensor_ctrl_t *s_ctrl) int cam_sensor_apply_settings(struct cam_sensor_ctrl_t *s_ctrl, int64_t req_id, enum cam_sensor_packet_opcodes opcode) { int rc = 0, offset, del_req_id; int rc = 0, offset, i; uint64_t top = 0, del_req_id = 0; struct i2c_settings_array *i2c_set = NULL; struct i2c_settings_list *i2c_list; Loading Loading @@ -1073,23 +1075,48 @@ int cam_sensor_apply_settings(struct cam_sensor_ctrl_t *s_ctrl, "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); /* Change the logic dynamically */ for (i = 0; i < MAX_PER_FRAME_ARRAY; i++) { if ((req_id >= s_ctrl->i2c_data.per_frame[i].request_id) && (top < s_ctrl->i2c_data.per_frame[i].request_id) && (s_ctrl->i2c_data.per_frame[i]. is_settings_valid == 1)) { del_req_id = top; top = s_ctrl->i2c_data.per_frame[i].request_id; } } if (top < req_id) { if ((((top % MAX_PER_FRAME_ARRAY) - (req_id % MAX_PER_FRAME_ARRAY)) >= BATCH_SIZE_MAX) || (((top % MAX_PER_FRAME_ARRAY) - (req_id % MAX_PER_FRAME_ARRAY)) <= -BATCH_SIZE_MAX)) del_req_id = req_id; } if (!del_req_id) return rc; if ((req_id > s_ctrl->i2c_data.per_frame[del_req_id].request_id) && (s_ctrl->i2c_data.per_frame[del_req_id]. CAM_DBG(CAM_SENSOR, "top: %llu, del_req_id:%llu", top, del_req_id); for (i = 0; i < MAX_PER_FRAME_ARRAY; i++) { if ((del_req_id > s_ctrl->i2c_data.per_frame[i].request_id) && (s_ctrl->i2c_data.per_frame[i]. is_settings_valid == 1)) { s_ctrl->i2c_data.per_frame[del_req_id].request_id = 0; s_ctrl->i2c_data.per_frame[i].request_id = 0; rc = delete_request( &(s_ctrl->i2c_data.per_frame[del_req_id])); &(s_ctrl->i2c_data.per_frame[i])); if (rc < 0) CAM_ERR(CAM_SENSOR, "Delete request Fail:%d rc:%d", "Delete request Fail:%lld rc:%d", del_req_id, rc); } } } return rc; } Loading
drivers/media/platform/msm/camera/cam_sensor_module/cam_sensor_utils/cam_sensor_cmn_header.h +1 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ #define MAX_POWER_CONFIG 12 #define MAX_PER_FRAME_ARRAY 32 #define BATCH_SIZE_MAX 16 #define CAM_SENSOR_NAME "cam-sensor" #define CAM_ACTUATOR_NAME "cam-actuator" Loading