Merge "msm: camera: sensor: Turn off the flash while flushing" into camera-kernel.lnx.4.0
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

melakukan
033574a220
@@ -213,6 +213,8 @@ int cam_flash_pmic_flush_request(struct cam_flash_ctrl *fctrl,
|
||||
int rc = 0;
|
||||
int i = 0, j = 0;
|
||||
int frame_offset = 0;
|
||||
bool is_off_needed = false;
|
||||
struct cam_flash_frame_setting *flash_data = NULL;
|
||||
|
||||
if (!fctrl) {
|
||||
CAM_ERR(CAM_FLASH, "Device data is NULL");
|
||||
@@ -222,23 +224,47 @@ int cam_flash_pmic_flush_request(struct cam_flash_ctrl *fctrl,
|
||||
if (type == FLUSH_ALL) {
|
||||
/* flush all requests*/
|
||||
for (i = 0; i < MAX_PER_FRAME_ARRAY; i++) {
|
||||
fctrl->per_frame[i].cmn_attr.request_id = 0;
|
||||
fctrl->per_frame[i].cmn_attr.is_settings_valid = false;
|
||||
fctrl->per_frame[i].cmn_attr.count = 0;
|
||||
flash_data =
|
||||
&fctrl->per_frame[i];
|
||||
if ((flash_data->opcode ==
|
||||
CAMERA_SENSOR_FLASH_OP_OFF) &&
|
||||
(flash_data->cmn_attr.request_id > 0) &&
|
||||
(flash_data->cmn_attr.request_id <= req_id) &&
|
||||
flash_data->cmn_attr.is_settings_valid) {
|
||||
is_off_needed = true;
|
||||
CAM_DBG(CAM_FLASH,
|
||||
"FLASH_ALL: Turn off the flash for req %llu",
|
||||
flash_data->cmn_attr.request_id);
|
||||
}
|
||||
|
||||
flash_data->cmn_attr.request_id = 0;
|
||||
flash_data->cmn_attr.is_settings_valid = false;
|
||||
flash_data->cmn_attr.count = 0;
|
||||
for (j = 0; j < CAM_FLASH_MAX_LED_TRIGGERS; j++)
|
||||
fctrl->per_frame[i].led_current_ma[j] = 0;
|
||||
flash_data->led_current_ma[j] = 0;
|
||||
}
|
||||
|
||||
cam_flash_pmic_flush_nrt(fctrl);
|
||||
} else if ((type == FLUSH_REQ) && (req_id != 0)) {
|
||||
/* flush request with req_id*/
|
||||
frame_offset = req_id % MAX_PER_FRAME_ARRAY;
|
||||
fctrl->per_frame[frame_offset].cmn_attr.request_id = 0;
|
||||
fctrl->per_frame[frame_offset].cmn_attr.is_settings_valid =
|
||||
flash_data =
|
||||
&fctrl->per_frame[frame_offset];
|
||||
|
||||
if (flash_data->opcode ==
|
||||
CAMERA_SENSOR_FLASH_OP_OFF) {
|
||||
is_off_needed = true;
|
||||
CAM_DBG(CAM_FLASH,
|
||||
"FLASH_REQ: Turn off the flash for req %llu",
|
||||
flash_data->cmn_attr.request_id);
|
||||
}
|
||||
|
||||
flash_data->cmn_attr.request_id = 0;
|
||||
flash_data->cmn_attr.is_settings_valid =
|
||||
false;
|
||||
fctrl->per_frame[frame_offset].cmn_attr.count = 0;
|
||||
flash_data->cmn_attr.count = 0;
|
||||
for (i = 0; i < CAM_FLASH_MAX_LED_TRIGGERS; i++)
|
||||
fctrl->per_frame[frame_offset].led_current_ma[i] = 0;
|
||||
flash_data->led_current_ma[i] = 0;
|
||||
} else if ((type == FLUSH_REQ) && (req_id == 0)) {
|
||||
/* Handels NonRealTime usecase */
|
||||
cam_flash_pmic_flush_nrt(fctrl);
|
||||
@@ -247,6 +273,9 @@ int cam_flash_pmic_flush_request(struct cam_flash_ctrl *fctrl,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (is_off_needed)
|
||||
cam_flash_off(fctrl);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -493,7 +522,9 @@ static int cam_flash_i2c_delete_req(struct cam_flash_ctrl *fctrl,
|
||||
CAM_DBG(CAM_FLASH, "top: %llu, del_req_id:%llu",
|
||||
top, del_req_id);
|
||||
}
|
||||
fctrl->func_tbl.flush_req(fctrl, FLUSH_REQ, del_req_id);
|
||||
|
||||
cam_flash_i2c_flush_nrt(fctrl);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -503,6 +534,7 @@ static int cam_flash_pmic_delete_req(struct cam_flash_ctrl *fctrl,
|
||||
int i = 0;
|
||||
struct cam_flash_frame_setting *flash_data = NULL;
|
||||
uint64_t top = 0, del_req_id = 0;
|
||||
int frame_offset = 0;
|
||||
|
||||
if (req_id != 0) {
|
||||
for (i = 0; i < MAX_PER_FRAME_ARRAY; i++) {
|
||||
@@ -538,7 +570,16 @@ static int cam_flash_pmic_delete_req(struct cam_flash_ctrl *fctrl,
|
||||
top, del_req_id);
|
||||
}
|
||||
|
||||
fctrl->func_tbl.flush_req(fctrl, FLUSH_REQ, del_req_id);
|
||||
/* delete the request */
|
||||
frame_offset = del_req_id % MAX_PER_FRAME_ARRAY;
|
||||
flash_data = &fctrl->per_frame[frame_offset];
|
||||
flash_data->cmn_attr.request_id = 0;
|
||||
flash_data->cmn_attr.is_settings_valid = false;
|
||||
flash_data->cmn_attr.count = 0;
|
||||
|
||||
for (i = 0; i < CAM_FLASH_MAX_LED_TRIGGERS; i++)
|
||||
flash_data->led_current_ma[i] = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user