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

Commit c3b54558 authored by junwen.ye's avatar junwen.ye Committed by android-t1
Browse files

[ALM:10872982] [FP4]:ois position data

 &&&%%%comment:[FP4]:ois position data
 &&&%%%bug number:10872982
 &&&%%%product name:sm7225_r_fp4
 &&&%%%root cause:coding
 &&&%%%Bug category:T2M
 &&&%%%Module_Impact:kernel
 &&&%%%Test_Suggestion:NA
 &&&%%%Solution:NA
 &&&%%%Test_Report:ok in native
 &&&%%%VAL Can Test:NA
parent abb14e89
Loading
Loading
Loading
Loading
+59 −0
Original line number Diff line number Diff line
@@ -703,6 +703,65 @@ static int cam_ois_fw_download(struct cam_ois_ctrl_t *o_ctrl)
 *
 * Returns success or failure
 */
static char ois_read_cmd_buf[32];

ssize_t ois_position_data_show(struct device *dev, struct device_attribute *attr, char *buf){
	
	strcpy(buf,ois_read_cmd_buf);
	return sizeof(ois_read_cmd_buf);
}

ssize_t ois_position_data_store(struct device *dev,  struct device_attribute *attr, const char *buf, size_t count){

	struct cam_ois_ctrl_t *o_ctrl = NULL;
	int32_t 						   rc = 0;
	char cmd_buf[5];
	int32_t flag;
	uint32_t cmd_adress=0,cmd_data=0;
	uint32_t position_data[5];
	struct platform_device *pdev = container_of(dev, struct platform_device, dev);
	memset(cmd_buf,0,5);
	memset(ois_read_cmd_buf,0,sizeof(ois_read_cmd_buf));
	o_ctrl = platform_get_drvdata(pdev);

	if (!o_ctrl) {
		CAM_ERR(CAM_OIS, "Invalid Args");
		return count;
	}
	strcpy(cmd_buf,buf);
	sscanf(cmd_buf,"%d",&flag);

	if (flag == 1) {
		cmd_adress = 0x9CB8;//POSITION_ESTIMATE_X
		rc = camera_io_dev_read(&(o_ctrl->io_master_info),cmd_adress,&cmd_data,CAMERA_SENSOR_I2C_TYPE_WORD,CAMERA_SENSOR_I2C_TYPE_WORD);
		if (rc < 0) {
			CAM_ERR(CAM_OIS, "ois Failed: random read I2C settings: %d",rc);
			return count;
		} 
		else{
	        CAM_DBG(CAM_OIS,"ois read::address: 0x%x  reg_data: 0x%x",cmd_adress,cmd_data);
			position_data[0] = cmd_data;
	    }

		cmd_adress = 0x9CBA;//POSITION_ESTIMATE_Y
		rc = camera_io_dev_read(&(o_ctrl->io_master_info),cmd_adress,&cmd_data,CAMERA_SENSOR_I2C_TYPE_WORD,CAMERA_SENSOR_I2C_TYPE_WORD);
		if (rc < 0) {
			CAM_ERR(CAM_OIS, "ois Failed: random read I2C settings: %d",rc);
			return count;
		} 
		else{
	        CAM_DBG(CAM_OIS,"ois read::address: 0x%x  reg_data: 0x%x",cmd_adress,cmd_data);
			position_data[1] = cmd_data;
	    }
		sprintf(ois_read_cmd_buf,"%.4x%.4x\n",position_data[0],position_data[1]);

		CAM_DBG(CAM_OIS,"ois kernel read::position_X 0x%x,position_Y 0x%x",position_data[0],position_data[1]);
	}

	
	return count;
}


ssize_t ois_gyro_cali_data_show(struct device *dev, struct device_attribute *attr, char *buf){
	
+2 −1
Original line number Diff line number Diff line
@@ -32,7 +32,8 @@ void cam_ois_shutdown(struct cam_ois_ctrl_t *o_ctrl);

ssize_t ois_gyro_cali_data_show(struct device *dev, struct device_attribute *attr, char *buf);
ssize_t ois_gyro_cali_data_store(struct device *dev,  struct device_attribute *attr, const char *buf, size_t count);

ssize_t ois_position_data_show(struct device *dev, struct device_attribute *attr, char *buf);
ssize_t ois_position_data_store(struct device *dev,  struct device_attribute *attr, const char *buf, size_t count);

#endif
/* _CAM_OIS_CORE_H_ */
+9 −4
Original line number Diff line number Diff line
@@ -174,7 +174,7 @@ static int cam_ois_init_subdev_param(struct cam_ois_ctrl_t *o_ctrl)
}

DEVICE_ATTR(ois_gyro_cali_data, 0664, ois_gyro_cali_data_show, ois_gyro_cali_data_store);

DEVICE_ATTR(ois_position_data, 0664, ois_position_data_show, ois_position_data_store);

static int cam_ois_i2c_driver_probe(struct i2c_client *client,
	 const struct i2c_device_id *id)
@@ -322,8 +322,11 @@ static int32_t cam_ois_platform_driver_probe(
	if (rc)
		goto free_soc;

	rc = device_create_file(&pdev->dev, &dev_attr_ois_gyro_cali_data);
	CAM_ERR(CAM_OIS, "creat ois calibration data sys node rc=%d", rc);
	if ((device_create_file(&pdev->dev, &dev_attr_ois_gyro_cali_data)) ||
		(device_create_file(&pdev->dev, &dev_attr_ois_position_data)))
	{
		CAM_ERR(CAM_OIS, "creat ois device_create_file failed rc=%d", rc);
	}

	rc = cam_ois_update_i2c_info(o_ctrl, &soc_private->i2c_info);
	if (rc) {
@@ -365,6 +368,8 @@ static int cam_ois_platform_driver_remove(struct platform_device *pdev)
	device_remove_file(&pdev->dev, &dev_attr_ois_gyro_cali_data);
	CAM_ERR(CAM_OIS, "remove calibration node");
	
	device_remove_file(&pdev->dev, &dev_attr_ois_position_data);
	CAM_ERR(CAM_OIS, "remove position node");

	CAM_INFO(CAM_OIS, "platform driver remove invoked");
	soc_info = &o_ctrl->soc_info;