|  |  | @ -196,6 +196,13 @@ void sensors_i2c(struct CameraState *s, struct i2c_random_wr_payload* dat, int l | 
			
		
	
		
		
			
				
					
					|  |  |  |   munmap(pkt, size); |  |  |  |   munmap(pkt, size); | 
			
		
	
		
		
			
				
					
					|  |  |  |   release_fd(s->multi_cam_state->video0_fd, cam_packet_handle); |  |  |  |   release_fd(s->multi_cam_state->video0_fd, cam_packet_handle); | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | static cam_cmd_power *power_set_wait(cam_cmd_power *power, int16_t delay_ms) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   cam_cmd_unconditional_wait *unconditional_wait = (cam_cmd_unconditional_wait *)((char *)power + (sizeof(struct cam_cmd_power) + (power->count - 1) * sizeof(struct cam_power_settings))); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   unconditional_wait->cmd_type = CAMERA_SENSOR_CMD_TYPE_WAIT; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   unconditional_wait->delay = delay_ms; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   unconditional_wait->op_code = CAMERA_SENSOR_WAIT_OP_SW_UCND; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   return (struct cam_cmd_power *)(unconditional_wait + 1); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | }; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | void sensors_init(int video0_fd, int sensor_fd, int camera_num) { |  |  |  | void sensors_init(int video0_fd, int sensor_fd, int camera_num) { | 
			
		
	
		
		
			
				
					
					|  |  |  |   uint32_t cam_packet_handle = 0; |  |  |  |   uint32_t cam_packet_handle = 0; | 
			
		
	
	
		
		
			
				
					|  |  | @ -246,11 +253,8 @@ void sensors_init(int video0_fd, int sensor_fd, int camera_num) { | 
			
		
	
		
		
			
				
					
					|  |  |  |   //buf_desc[1].size = buf_desc[1].length = 148;
 |  |  |  |   //buf_desc[1].size = buf_desc[1].length = 148;
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   buf_desc[1].size = buf_desc[1].length = 196; |  |  |  |   buf_desc[1].size = buf_desc[1].length = 196; | 
			
		
	
		
		
			
				
					
					|  |  |  |   buf_desc[1].type = CAM_CMD_BUF_I2C; |  |  |  |   buf_desc[1].type = CAM_CMD_BUF_I2C; | 
			
		
	
		
		
			
				
					
					|  |  |  |   struct cam_cmd_power *power = (struct cam_cmd_power *)alloc_w_mmu_hdl(video0_fd, buf_desc[1].size, (uint32_t*)&buf_desc[1].mem_handle); |  |  |  |   struct cam_cmd_power *power_settings = (struct cam_cmd_power *)alloc_w_mmu_hdl(video0_fd, buf_desc[1].size, (uint32_t*)&buf_desc[1].mem_handle); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   memset(power, 0, buf_desc[1].size); |  |  |  |   memset(power_settings, 0, buf_desc[1].size); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   struct cam_cmd_unconditional_wait *unconditional_wait; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   //void *ptr = power;
 |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   // 7750
 |  |  |  |   // 7750
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   /*power->count = 2;
 |  |  |  |   /*power->count = 2;
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->cmd_type = CAMERA_SENSOR_CMD_TYPE_PWR_UP; |  |  |  |   power->cmd_type = CAMERA_SENSOR_CMD_TYPE_PWR_UP; | 
			
		
	
	
		
		
			
				
					|  |  | @ -259,45 +263,28 @@ void sensors_init(int video0_fd, int sensor_fd, int camera_num) { | 
			
		
	
		
		
			
				
					
					|  |  |  |   power = (void*)power + (sizeof(struct cam_cmd_power) + (power->count-1)*sizeof(struct cam_power_settings));*/ |  |  |  |   power = (void*)power + (sizeof(struct cam_cmd_power) + (power->count-1)*sizeof(struct cam_power_settings));*/ | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   // 885a
 |  |  |  |   // 885a
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   struct cam_cmd_power *power = power_settings; | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->count = 4; |  |  |  |   power->count = 4; | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->cmd_type = CAMERA_SENSOR_CMD_TYPE_PWR_UP; |  |  |  |   power->cmd_type = CAMERA_SENSOR_CMD_TYPE_PWR_UP; | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->power_settings[0].power_seq_type = 3; // clock??
 |  |  |  |   power->power_settings[0].power_seq_type = 3; // clock??
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->power_settings[1].power_seq_type = 1; // analog
 |  |  |  |   power->power_settings[1].power_seq_type = 1; // analog
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->power_settings[2].power_seq_type = 2; // digital
 |  |  |  |   power->power_settings[2].power_seq_type = 2; // digital
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->power_settings[3].power_seq_type = 8; // reset low
 |  |  |  |   power->power_settings[3].power_seq_type = 8; // reset low
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   power = (struct cam_cmd_power *)((char*)power + (sizeof(struct cam_cmd_power) + (power->count-1)*sizeof(struct cam_power_settings))); |  |  |  |   power = power_set_wait(power, 5); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   unconditional_wait = (struct cam_cmd_unconditional_wait *)power; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   unconditional_wait->cmd_type = CAMERA_SENSOR_CMD_TYPE_WAIT; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   unconditional_wait->delay = 5; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   unconditional_wait->op_code = CAMERA_SENSOR_WAIT_OP_SW_UCND; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   power = (struct cam_cmd_power *)((char*)power + sizeof(struct cam_cmd_unconditional_wait)); |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   // set clock
 |  |  |  |   // set clock
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->count = 1; |  |  |  |   power->count = 1; | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->cmd_type = CAMERA_SENSOR_CMD_TYPE_PWR_UP; |  |  |  |   power->cmd_type = CAMERA_SENSOR_CMD_TYPE_PWR_UP; | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->power_settings[0].power_seq_type = 0; |  |  |  |   power->power_settings[0].power_seq_type = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->power_settings[0].config_val_low = 24000000; //Hz
 |  |  |  |   power->power_settings[0].config_val_low = 24000000; //Hz
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   power = (struct cam_cmd_power *)((char*)power + (sizeof(struct cam_cmd_power) + (power->count-1)*sizeof(struct cam_power_settings))); |  |  |  |   power = power_set_wait(power, 10); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   unconditional_wait = (struct cam_cmd_unconditional_wait *)power; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   unconditional_wait->cmd_type = CAMERA_SENSOR_CMD_TYPE_WAIT; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   unconditional_wait->delay = 10; // ms
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   unconditional_wait->op_code = CAMERA_SENSOR_WAIT_OP_SW_UCND; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   power = (struct cam_cmd_power *)((char*)power + sizeof(struct cam_cmd_unconditional_wait)); |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   // 8,1 is this reset?
 |  |  |  |   // 8,1 is this reset?
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->count = 1; |  |  |  |   power->count = 1; | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->cmd_type = CAMERA_SENSOR_CMD_TYPE_PWR_UP; |  |  |  |   power->cmd_type = CAMERA_SENSOR_CMD_TYPE_PWR_UP; | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->power_settings[0].power_seq_type = 8; |  |  |  |   power->power_settings[0].power_seq_type = 8; | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->power_settings[0].config_val_low = 1; |  |  |  |   power->power_settings[0].config_val_low = 1; | 
			
		
	
		
		
			
				
					
					|  |  |  |   power = (struct cam_cmd_power *)((char*)power + (sizeof(struct cam_cmd_power) + (power->count-1)*sizeof(struct cam_power_settings))); |  |  |  |   power = power_set_wait(power, 100); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   unconditional_wait = (struct cam_cmd_unconditional_wait *)power; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   unconditional_wait->cmd_type = CAMERA_SENSOR_CMD_TYPE_WAIT; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   unconditional_wait->delay = 100; // ms
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   unconditional_wait->op_code = CAMERA_SENSOR_WAIT_OP_SW_UCND; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   power = (struct cam_cmd_power *)((char*)power + sizeof(struct cam_cmd_unconditional_wait)); |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   // probe happens here
 |  |  |  |   // probe happens here
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -306,39 +293,21 @@ void sensors_init(int video0_fd, int sensor_fd, int camera_num) { | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->cmd_type = CAMERA_SENSOR_CMD_TYPE_PWR_DOWN; |  |  |  |   power->cmd_type = CAMERA_SENSOR_CMD_TYPE_PWR_DOWN; | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->power_settings[0].power_seq_type = 0; |  |  |  |   power->power_settings[0].power_seq_type = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->power_settings[0].config_val_low = 0; |  |  |  |   power->power_settings[0].config_val_low = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |   power = (struct cam_cmd_power *)((char*)power + (sizeof(struct cam_cmd_power) + (power->count-1)*sizeof(struct cam_power_settings))); |  |  |  |   power = power_set_wait(power, 1); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   unconditional_wait = (struct cam_cmd_unconditional_wait *)power; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   unconditional_wait->cmd_type = CAMERA_SENSOR_CMD_TYPE_WAIT; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   unconditional_wait->delay = 1; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   unconditional_wait->op_code = CAMERA_SENSOR_WAIT_OP_SW_UCND; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   power = (struct cam_cmd_power *)((char*)power + sizeof(struct cam_cmd_unconditional_wait)); |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   // reset high
 |  |  |  |   // reset high
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->count = 1; |  |  |  |   power->count = 1; | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->cmd_type = CAMERA_SENSOR_CMD_TYPE_PWR_DOWN; |  |  |  |   power->cmd_type = CAMERA_SENSOR_CMD_TYPE_PWR_DOWN; | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->power_settings[0].power_seq_type = 8; |  |  |  |   power->power_settings[0].power_seq_type = 8; | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->power_settings[0].config_val_low = 1; |  |  |  |   power->power_settings[0].config_val_low = 1; | 
			
		
	
		
		
			
				
					
					|  |  |  |   power = (struct cam_cmd_power *)((char*)power + (sizeof(struct cam_cmd_power) + (power->count-1)*sizeof(struct cam_power_settings))); |  |  |  |   power = power_set_wait(power, 1); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   unconditional_wait = (struct cam_cmd_unconditional_wait *)power; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   unconditional_wait->cmd_type = CAMERA_SENSOR_CMD_TYPE_WAIT; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   unconditional_wait->delay = 1; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   unconditional_wait->op_code = CAMERA_SENSOR_WAIT_OP_SW_UCND; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   power = (struct cam_cmd_power *)((char*)power + sizeof(struct cam_cmd_unconditional_wait)); |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   // reset low
 |  |  |  |   // reset low
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->count = 1; |  |  |  |   power->count = 1; | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->cmd_type = CAMERA_SENSOR_CMD_TYPE_PWR_DOWN; |  |  |  |   power->cmd_type = CAMERA_SENSOR_CMD_TYPE_PWR_DOWN; | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->power_settings[0].power_seq_type = 8; |  |  |  |   power->power_settings[0].power_seq_type = 8; | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->power_settings[0].config_val_low = 0; |  |  |  |   power->power_settings[0].config_val_low = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |   power = (struct cam_cmd_power *)((char*)power + (sizeof(struct cam_cmd_power) + (power->count-1)*sizeof(struct cam_power_settings))); |  |  |  |   power = power_set_wait(power, 1); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   unconditional_wait = (struct cam_cmd_unconditional_wait *)power; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   unconditional_wait->cmd_type = CAMERA_SENSOR_CMD_TYPE_WAIT; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   unconditional_wait->delay = 1; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   unconditional_wait->op_code = CAMERA_SENSOR_WAIT_OP_SW_UCND; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   power = (struct cam_cmd_power *)((char*)power + sizeof(struct cam_cmd_unconditional_wait)); |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   // 7750
 |  |  |  |   // 7750
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   /*power->count = 1;
 |  |  |  |   /*power->count = 1;
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -352,7 +321,6 @@ void sensors_init(int video0_fd, int sensor_fd, int camera_num) { | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->power_settings[0].power_seq_type = 2; |  |  |  |   power->power_settings[0].power_seq_type = 2; | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->power_settings[1].power_seq_type = 1; |  |  |  |   power->power_settings[1].power_seq_type = 1; | 
			
		
	
		
		
			
				
					
					|  |  |  |   power->power_settings[2].power_seq_type = 3; |  |  |  |   power->power_settings[2].power_seq_type = 3; | 
			
		
	
		
		
			
				
					
					|  |  |  |   power = (struct cam_cmd_power *)((char*)power + (sizeof(struct cam_cmd_power) + (power->count-1)*sizeof(struct cam_power_settings))); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   LOGD("probing the sensor"); |  |  |  |   LOGD("probing the sensor"); | 
			
		
	
		
		
			
				
					
					|  |  |  |   int ret = cam_control(sensor_fd, CAM_SENSOR_PROBE_CMD, (void *)(uintptr_t)cam_packet_handle, 0); |  |  |  |   int ret = cam_control(sensor_fd, CAM_SENSOR_PROBE_CMD, (void *)(uintptr_t)cam_packet_handle, 0); | 
			
		
	
	
		
		
			
				
					|  |  | @ -360,7 +328,7 @@ void sensors_init(int video0_fd, int sensor_fd, int camera_num) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   munmap(i2c_info, buf_desc[0].size); |  |  |  |   munmap(i2c_info, buf_desc[0].size); | 
			
		
	
		
		
			
				
					
					|  |  |  |   release_fd(video0_fd, buf_desc[0].mem_handle); |  |  |  |   release_fd(video0_fd, buf_desc[0].mem_handle); | 
			
		
	
		
		
			
				
					
					|  |  |  |   munmap(power, buf_desc[1].size); |  |  |  |   munmap(power_settings, buf_desc[1].size); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   release_fd(video0_fd, buf_desc[1].mem_handle); |  |  |  |   release_fd(video0_fd, buf_desc[1].mem_handle); | 
			
		
	
		
		
			
				
					
					|  |  |  |   munmap(pkt, size); |  |  |  |   munmap(pkt, size); | 
			
		
	
		
		
			
				
					
					|  |  |  |   release_fd(video0_fd, cam_packet_handle); |  |  |  |   release_fd(video0_fd, cam_packet_handle); | 
			
		
	
	
		
		
			
				
					|  |  | 
 |