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

Commit faa3373d authored by Jeyaprakash Soundrapandian's avatar Jeyaprakash Soundrapandian Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: camera: Read EEPROM data on request basis" into dev/msm-4.9-camx

parents ffbcf327 389cf0d2
Loading
Loading
Loading
Loading
+65 −37
Original line number Diff line number Diff line
@@ -311,6 +311,8 @@ int32_t cam_eeprom_parse_read_memory_map(struct device_node *of_node,
data_mem_free:
	kfree(e_ctrl->cal_data.mapdata);
	kfree(e_ctrl->cal_data.map);
	e_ctrl->cal_data.num_data = 0;
	e_ctrl->cal_data.num_map = 0;
	return rc;
}

@@ -484,7 +486,7 @@ static int32_t cam_eeprom_init_pkt_parser(struct cam_eeprom_ctrl_t *e_ctrl,
	uint16_t                        cmd_length_in_bytes = 0;
	struct cam_cmd_i2c_info        *i2c_info = NULL;
	int                             num_map = -1;
	struct cam_eeprom_memory_map_t *map;
	struct cam_eeprom_memory_map_t *map = NULL;
	struct cam_eeprom_soc_private  *soc_private =
		(struct cam_eeprom_soc_private *)e_ctrl->soc_info.soc_private;
	struct cam_sensor_power_ctrl_t *power_info = &soc_private->power_info;
@@ -665,13 +667,21 @@ static int32_t cam_eeprom_pkt_parse(struct cam_eeprom_ctrl_t *e_ctrl, void *arg)
	switch (csl_packet->header.op_code & 0xFFFFFF) {
	case CAM_EEPROM_PACKET_OPCODE_INIT:
		if (e_ctrl->userspace_probe == false) {
			rc = cam_eeprom_parse_read_memory_map(
					e_ctrl->pdev->dev.of_node, e_ctrl);
			if (rc < 0) {
				CAM_ERR(CAM_EEPROM, "Failed: rc : %d", rc);
				return rc;
			}
			rc = cam_eeprom_get_cal_data(e_ctrl, csl_packet);
			CAM_ERR(CAM_EEPROM,
				"Eeprom already probed at kernel boot");
			rc = -EINVAL;
			kfree(e_ctrl->cal_data.mapdata);
			kfree(e_ctrl->cal_data.map);
			e_ctrl->cal_data.num_data = 0;
			e_ctrl->cal_data.num_map = 0;
			CAM_DBG(CAM_EEPROM,
				"Returning the data using kernel probe");
		break;
		}
		if (e_ctrl->cal_data.num_data == 0) {
		rc = cam_eeprom_init_pkt_parser(e_ctrl, csl_packet);
		if (rc) {
			CAM_ERR(CAM_EEPROM,
@@ -703,15 +713,14 @@ static int32_t cam_eeprom_pkt_parse(struct cam_eeprom_ctrl_t *e_ctrl, void *arg)

		rc = cam_eeprom_get_cal_data(e_ctrl, csl_packet);
		rc = cam_eeprom_power_down(e_ctrl);
		} else {
			CAM_DBG(CAM_EEPROM, "Already read eeprom");
		}
		kfree(e_ctrl->cal_data.mapdata);
		kfree(e_ctrl->cal_data.map);
		e_ctrl->cal_data.num_data = 0;
		e_ctrl->cal_data.num_map = 0;
		break;
	default:
		break;
	}
	kfree(e_ctrl->cal_data.mapdata);
	kfree(e_ctrl->cal_data.map);
	return rc;
power_down:
	rc = cam_eeprom_power_down(e_ctrl);
@@ -719,6 +728,8 @@ static int32_t cam_eeprom_pkt_parse(struct cam_eeprom_ctrl_t *e_ctrl, void *arg)
	kfree(e_ctrl->cal_data.mapdata);
error:
	kfree(e_ctrl->cal_data.map);
	e_ctrl->cal_data.num_data = 0;
	e_ctrl->cal_data.num_map = 0;
	return rc;
}

@@ -765,6 +776,23 @@ int32_t cam_eeprom_driver_cmd(struct cam_eeprom_ctrl_t *e_ctrl, void *arg)
			goto release_mutex;
		}
		break;
	case CAM_RELEASE_DEV:
		if (e_ctrl->bridge_intf.device_hdl == -1) {
			CAM_ERR(CAM_EEPROM,
				"Invalid Handles: link hdl: %d device hdl: %d",
				e_ctrl->bridge_intf.device_hdl,
				e_ctrl->bridge_intf.link_hdl);
			rc = -EINVAL;
			goto release_mutex;
		}
		rc = cam_destroy_device_hdl(e_ctrl->bridge_intf.device_hdl);
		if (rc < 0)
			CAM_ERR(CAM_EEPROM,
				"failed in destroying the device hdl");
		e_ctrl->bridge_intf.device_hdl = -1;
		e_ctrl->bridge_intf.link_hdl = -1;
		e_ctrl->bridge_intf.session_hdl = -1;
		break;
	case CAM_CONFIG_DEV:
		rc = cam_eeprom_pkt_parse(e_ctrl, arg);
		if (rc) {
+0 −31
Original line number Diff line number Diff line
@@ -181,15 +181,6 @@ static int cam_eeprom_i2c_driver_probe(struct i2c_client *client,
		goto free_soc;
	}

	if (e_ctrl->userspace_probe == false) {
		rc = cam_eeprom_parse_read_memory_map(soc_info->dev->of_node,
			e_ctrl);
		if (rc) {
			CAM_ERR(CAM_EEPROM, "failed: read mem map rc %d", rc);
			goto free_soc;
		}
	}

	soc_private = (struct cam_eeprom_soc_private *)(id->driver_data);
	if (!soc_private) {
		CAM_ERR(CAM_EEPROM, "board info NULL");
@@ -248,8 +239,6 @@ static int cam_eeprom_i2c_driver_remove(struct i2c_client *client)
		return -EINVAL;
	}

	kfree(e_ctrl->cal_data.mapdata);
	kfree(e_ctrl->cal_data.map);
	if (soc_private) {
		kfree(soc_private->power_info.gpio_num_info);
		kfree(soc_private);
@@ -319,15 +308,6 @@ static int cam_eeprom_spi_setup(struct spi_device *spi)
		goto board_free;
	}

	if (e_ctrl->userspace_probe == false) {
		rc = cam_eeprom_parse_read_memory_map(soc_info->dev->of_node,
			e_ctrl);
		if (rc) {
			CAM_ERR(CAM_EEPROM, "failed: read mem map rc %d", rc);
			goto board_free;
		}
	}

	rc = cam_eeprom_init_subdev(e_ctrl);
	if (rc)
		goto board_free;
@@ -381,8 +361,6 @@ static int cam_eeprom_spi_driver_remove(struct spi_device *sdev)
	}

	kfree(e_ctrl->io_master_info.spi_client);
	kfree(e_ctrl->cal_data.mapdata);
	kfree(e_ctrl->cal_data.map);
	soc_private =
		(struct cam_eeprom_soc_private *)e_ctrl->soc_info.soc_private;
	if (soc_private) {
@@ -440,15 +418,6 @@ static int32_t cam_eeprom_platform_driver_probe(
		goto free_soc;
	}

	if (e_ctrl->userspace_probe == false) {
		rc = cam_eeprom_parse_read_memory_map(pdev->dev.of_node,
			e_ctrl);
		if (rc) {
			CAM_ERR(CAM_EEPROM, "failed: read mem map rc %d", rc);
			goto free_soc;
		}
	}

	rc = cam_eeprom_init_subdev(e_ctrl);
	if (rc)
		goto free_soc;