Эх сурвалжийг харах

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 <[email protected]>
Jigarkumar Zala 5 жил өмнө
parent
commit
c1b6545f00

+ 30 - 5
drivers/cam_sensor_module/cam_actuator/cam_actuator_core.c

@@ -360,10 +360,11 @@ int32_t cam_actuator_establish_link(
 	return 0;
 	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_actuator_ctrl_t *a_ctrl,
 	struct cam_packet *csl_packet)
 	struct cam_packet *csl_packet)
 {
 {
+	int rc = 0;
 	struct cam_req_mgr_add_request add_req;
 	struct cam_req_mgr_add_request add_req;
 
 
 	add_req.link_hdl = a_ctrl->bridge_intf.link_hdl;
 	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 &&
 	if (a_ctrl->bridge_intf.crm_cb &&
 		a_ctrl->bridge_intf.crm_cb->add_req) {
 		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",
 		CAM_DBG(CAM_ACTUATOR, "Request Id: %lld added to CRM",
 			add_req.req_id);
 			add_req.req_id);
 	} else {
 	} else {
 		CAM_ERR(CAM_ACTUATOR, "Can't add Request ID: %lld to CRM",
 		CAM_ERR(CAM_ACTUATOR, "Can't add Request ID: %lld to CRM",
 			csl_packet->header.request_id);
 			csl_packet->header.request_id);
+		rc = -EINVAL;
 	}
 	}
+
+	return rc;
 }
 }
 
 
 int32_t cam_actuator_publish_dev_info(struct cam_req_mgr_device_info *info)
 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);
 				"Auto move lens parsing failed: %d", rc);
 			goto end;
 			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;
 		break;
 	case CAM_ACTUATOR_PACKET_MANUAL_MOVE_LENS:
 	case CAM_ACTUATOR_PACKET_MANUAL_MOVE_LENS:
 		if (a_ctrl->cam_act_state < CAM_ACTUATOR_CONFIG) {
 		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;
 			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;
 		break;
 	case CAM_PKT_NOP_OPCODE:
 	case CAM_PKT_NOP_OPCODE:
 		if (a_ctrl->cam_act_state < CAM_ACTUATOR_CONFIG) {
 		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;
 			rc = -EINVAL;
 			goto end;
 			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;
 		break;
 	case CAM_ACTUATOR_PACKET_OPCODE_READ: {
 	case CAM_ACTUATOR_PACKET_OPCODE_READ: {
 		struct cam_buf_io_cfg *io_cfg;
 		struct cam_buf_io_cfg *io_cfg;

+ 7 - 1
drivers/cam_sensor_module/cam_flash/cam_flash_core.c

@@ -1275,7 +1275,13 @@ update_req_mgr:
 
 
 		if (fctrl->bridge_intf.crm_cb &&
 		if (fctrl->bridge_intf.crm_cb &&
 			fctrl->bridge_intf.crm_cb->add_req)
 			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);
 		CAM_DBG(CAM_FLASH, "add req to req_mgr= %lld", add_req.req_id);
 	}
 	}
 	return rc;
 	return rc;

+ 28 - 8
drivers/cam_sensor_module/cam_sensor/cam_sensor_core.c

@@ -13,25 +13,34 @@
 #include "cam_packet_util.h"
 #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_sensor_ctrl_t *s_ctrl,
 	struct cam_packet *csl_packet)
 	struct cam_packet *csl_packet)
 {
 {
+	int rc = 0;
 	struct cam_req_mgr_add_request add_req;
 	struct cam_req_mgr_add_request add_req;
 
 
 	add_req.link_hdl = s_ctrl->bridge_intf.link_hdl;
 	add_req.link_hdl = s_ctrl->bridge_intf.link_hdl;
 	add_req.req_id = csl_packet->header.request_id;
 	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);
 		csl_packet->header.request_id);
 	add_req.dev_hdl = s_ctrl->bridge_intf.device_hdl;
 	add_req.dev_hdl = s_ctrl->bridge_intf.device_hdl;
 	add_req.skip_before_applying = 0;
 	add_req.skip_before_applying = 0;
 	add_req.trigger_eof = false;
 	add_req.trigger_eof = false;
 	if (s_ctrl->bridge_intf.crm_cb &&
 	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);
 			add_req.req_id);
+	return rc;
 }
 }
 
 
 static void cam_sensor_release_stream_rsc(
 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
 			 * and freeze. If this log is triggered then
 			 * fix it.
 			 * 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;
 			goto end;
 		}
 		}
 		break;
 		break;
@@ -277,7 +289,10 @@ static int32_t cam_sensor_i2c_pkt_parse(struct cam_sensor_ctrl_t *s_ctrl,
 			goto end;
 			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;
 		goto end;
 	}
 	}
 	default:
 	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) {
 		CAM_SENSOR_PACKET_OPCODE_SENSOR_UPDATE) {
 		i2c_reg_settings->request_id =
 		i2c_reg_settings->request_id =
 			csl_packet->header.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) ==
 	if ((csl_packet->header.op_code & 0xFFFFFF) ==