From c1b6545f004a8a29ef10b3094d8ef065c568aaa4 Mon Sep 17 00:00:00 2001 From: Jigarkumar Zala Date: Wed, 8 Jul 2020 11:09:52 -0700 Subject: [PATCH] msm: camera: sensor: Add error handling when adding request Currently proper error handling is not present in case of failure in adding request to request manager. This change adding proper result send out to UMD. CRs-Fixed: 2738448 Change-Id: I7fb54c085ac670c197523e4d7cb416eeb414a2ed Signed-off-by: Jigarkumar Zala --- .../cam_actuator/cam_actuator_core.c | 35 +++++++++++++++--- .../cam_flash/cam_flash_core.c | 8 ++++- .../cam_sensor/cam_sensor_core.c | 36 ++++++++++++++----- 3 files changed, 65 insertions(+), 14 deletions(-) diff --git a/drivers/cam_sensor_module/cam_actuator/cam_actuator_core.c b/drivers/cam_sensor_module/cam_actuator/cam_actuator_core.c index 06f98a01d1df..a3fc2d7756ad 100644 --- a/drivers/cam_sensor_module/cam_actuator/cam_actuator_core.c +++ b/drivers/cam_sensor_module/cam_actuator/cam_actuator_core.c @@ -360,10 +360,11 @@ int32_t cam_actuator_establish_link( return 0; } -static void cam_actuator_update_req_mgr( +static int cam_actuator_update_req_mgr( struct cam_actuator_ctrl_t *a_ctrl, struct cam_packet *csl_packet) { + int rc = 0; struct cam_req_mgr_add_request add_req; add_req.link_hdl = a_ctrl->bridge_intf.link_hdl; @@ -374,13 +375,22 @@ static void cam_actuator_update_req_mgr( if (a_ctrl->bridge_intf.crm_cb && a_ctrl->bridge_intf.crm_cb->add_req) { - a_ctrl->bridge_intf.crm_cb->add_req(&add_req); + rc = a_ctrl->bridge_intf.crm_cb->add_req(&add_req); + if (rc) { + CAM_ERR(CAM_ACTUATOR, + "Adding request: %llu failed: rc: %d", + csl_packet->header.request_id, rc); + return rc; + } CAM_DBG(CAM_ACTUATOR, "Request Id: %lld added to CRM", add_req.req_id); } else { CAM_ERR(CAM_ACTUATOR, "Can't add Request ID: %lld to CRM", csl_packet->header.request_id); + rc = -EINVAL; } + + return rc; } int32_t cam_actuator_publish_dev_info(struct cam_req_mgr_device_info *info) @@ -619,7 +629,12 @@ int32_t cam_actuator_i2c_pkt_parse(struct cam_actuator_ctrl_t *a_ctrl, "Auto move lens parsing failed: %d", rc); goto end; } - cam_actuator_update_req_mgr(a_ctrl, csl_packet); + rc = cam_actuator_update_req_mgr(a_ctrl, csl_packet); + if (rc) { + CAM_ERR(CAM_ACTUATOR, + "Failed in adding request to request manager"); + goto end; + } break; case CAM_ACTUATOR_PACKET_MANUAL_MOVE_LENS: if (a_ctrl->cam_act_state < CAM_ACTUATOR_CONFIG) { @@ -651,7 +666,12 @@ int32_t cam_actuator_i2c_pkt_parse(struct cam_actuator_ctrl_t *a_ctrl, goto end; } - cam_actuator_update_req_mgr(a_ctrl, csl_packet); + rc = cam_actuator_update_req_mgr(a_ctrl, csl_packet); + if (rc) { + CAM_ERR(CAM_ACTUATOR, + "Failed in adding request to request manager"); + goto end; + } break; case CAM_PKT_NOP_OPCODE: if (a_ctrl->cam_act_state < CAM_ACTUATOR_CONFIG) { @@ -661,7 +681,12 @@ int32_t cam_actuator_i2c_pkt_parse(struct cam_actuator_ctrl_t *a_ctrl, rc = -EINVAL; goto end; } - cam_actuator_update_req_mgr(a_ctrl, csl_packet); + rc = cam_actuator_update_req_mgr(a_ctrl, csl_packet); + if (rc) { + CAM_ERR(CAM_ACTUATOR, + "Failed in adding request to request manager"); + goto end; + } break; case CAM_ACTUATOR_PACKET_OPCODE_READ: { struct cam_buf_io_cfg *io_cfg; diff --git a/drivers/cam_sensor_module/cam_flash/cam_flash_core.c b/drivers/cam_sensor_module/cam_flash/cam_flash_core.c index 3212c795473e..15def761af55 100644 --- a/drivers/cam_sensor_module/cam_flash/cam_flash_core.c +++ b/drivers/cam_sensor_module/cam_flash/cam_flash_core.c @@ -1275,7 +1275,13 @@ update_req_mgr: if (fctrl->bridge_intf.crm_cb && fctrl->bridge_intf.crm_cb->add_req) - fctrl->bridge_intf.crm_cb->add_req(&add_req); + rc = fctrl->bridge_intf.crm_cb->add_req(&add_req); + if (rc) { + CAM_ERR(CAM_FLASH, + "Failed in adding request: %llu to request manager", + csl_packet->header.request_id); + return rc; + } CAM_DBG(CAM_FLASH, "add req to req_mgr= %lld", add_req.req_id); } return rc; diff --git a/drivers/cam_sensor_module/cam_sensor/cam_sensor_core.c b/drivers/cam_sensor_module/cam_sensor/cam_sensor_core.c index 42f92279f0af..55779be0dac0 100644 --- a/drivers/cam_sensor_module/cam_sensor/cam_sensor_core.c +++ b/drivers/cam_sensor_module/cam_sensor/cam_sensor_core.c @@ -13,25 +13,34 @@ #include "cam_packet_util.h" -static void cam_sensor_update_req_mgr( +static int cam_sensor_update_req_mgr( struct cam_sensor_ctrl_t *s_ctrl, struct cam_packet *csl_packet) { + int rc = 0; struct cam_req_mgr_add_request add_req; add_req.link_hdl = s_ctrl->bridge_intf.link_hdl; add_req.req_id = csl_packet->header.request_id; - CAM_DBG(CAM_SENSOR, " Rxed Req Id: %lld", + CAM_DBG(CAM_SENSOR, " Rxed Req Id: %llu", csl_packet->header.request_id); add_req.dev_hdl = s_ctrl->bridge_intf.device_hdl; add_req.skip_before_applying = 0; add_req.trigger_eof = false; if (s_ctrl->bridge_intf.crm_cb && - s_ctrl->bridge_intf.crm_cb->add_req) - s_ctrl->bridge_intf.crm_cb->add_req(&add_req); + s_ctrl->bridge_intf.crm_cb->add_req) { + rc = s_ctrl->bridge_intf.crm_cb->add_req(&add_req); + if (rc) { + CAM_ERR(CAM_SENSOR, + "Adding request: %llu failed with request manager rc: %d", + csl_packet->header.request_id, rc); + return rc; + } + } - CAM_DBG(CAM_SENSOR, " add req to req mgr: %lld", + CAM_DBG(CAM_SENSOR, "Successfully add req: %llu to req mgr", add_req.req_id); + return rc; } static void cam_sensor_release_stream_rsc( @@ -248,7 +257,10 @@ static int32_t cam_sensor_i2c_pkt_parse(struct cam_sensor_ctrl_t *s_ctrl, * and freeze. If this log is triggered then * fix it. */ - cam_sensor_update_req_mgr(s_ctrl, csl_packet); + rc = cam_sensor_update_req_mgr(s_ctrl, csl_packet); + if (rc) + CAM_ERR(CAM_SENSOR, + "Failed in adding request to req_mgr"); goto end; } break; @@ -277,7 +289,10 @@ static int32_t cam_sensor_i2c_pkt_parse(struct cam_sensor_ctrl_t *s_ctrl, goto end; } - cam_sensor_update_req_mgr(s_ctrl, csl_packet); + rc = cam_sensor_update_req_mgr(s_ctrl, csl_packet); + if (rc) + CAM_ERR(CAM_SENSOR, + "Failed in adding request to req_mgr"); goto end; } default: @@ -301,7 +316,12 @@ static int32_t cam_sensor_i2c_pkt_parse(struct cam_sensor_ctrl_t *s_ctrl, CAM_SENSOR_PACKET_OPCODE_SENSOR_UPDATE) { i2c_reg_settings->request_id = csl_packet->header.request_id; - cam_sensor_update_req_mgr(s_ctrl, csl_packet); + rc = cam_sensor_update_req_mgr(s_ctrl, csl_packet); + if (rc) { + CAM_ERR(CAM_SENSOR, + "Failed in adding request to req_mgr"); + goto end; + } } if ((csl_packet->header.op_code & 0xFFFFFF) ==