@ -76,12 +76,30 @@ int cam_control(int fd, int op_code, void *handle, int size) {
return ret ;
return ret ;
}
}
std : : optional < int32_t > device_acquire ( int fd , int32_t session_handle , void * data ) {
struct cam_acquire_dev_cmd cmd = {
. session_handle = session_handle ,
. handle_type = CAM_HANDLE_USER_POINTER ,
. num_resources = ( uint32_t ) ( data ? 1 : 0 ) ,
. resource_hdl = ( uint64_t ) data ,
} ;
int err = cam_control ( fd , CAM_ACQUIRE_DEV , & cmd , sizeof ( cmd ) ) ;
return err = = 0 ? std : : make_optional ( cmd . dev_handle ) : std : : nullopt ;
} ;
int device_config ( int fd , int32_t session_handle , int32_t dev_handle , uint64_t packet_handle ) {
struct cam_config_dev_cmd cmd = {
. session_handle = session_handle ,
. dev_handle = dev_handle ,
. packet_handle = packet_handle ,
} ;
return cam_control ( fd , CAM_CONFIG_DEV , & cmd , sizeof ( cmd ) ) ;
}
int device_control ( int fd , int op_code , int session_handle , int dev_handle ) {
int device_control ( int fd , int op_code , int session_handle , int dev_handle ) {
// start stop and release are all the same
// start stop and release are all the same
static struct cam_release_dev_cmd release_dev_cmd ;
struct cam_start_stop_dev_cmd cmd { . session_handle = session_handle , . dev_handle = dev_handle } ;
release_dev_cmd . session_handle = session_handle ;
return cam_control ( fd , op_code , & cmd , sizeof ( cmd ) ) ;
release_dev_cmd . dev_handle = dev_handle ;
return cam_control ( fd , op_code , & release_dev_cmd , sizeof ( release_dev_cmd ) ) ;
}
}
void * alloc_w_mmu_hdl ( int video0_fd , int len , uint32_t * handle , int align = 8 , int flags = CAM_MEM_FLAG_KMD_ACCESS | CAM_MEM_FLAG_UMD_ACCESS | CAM_MEM_FLAG_CMD_BUF_TYPE ,
void * alloc_w_mmu_hdl ( int video0_fd , int len , uint32_t * handle , int align = 8 , int flags = CAM_MEM_FLAG_KMD_ACCESS | CAM_MEM_FLAG_UMD_ACCESS | CAM_MEM_FLAG_CMD_BUF_TYPE ,
@ -151,13 +169,7 @@ void sensors_poke(struct CameraState *s, int request_id) {
pkt - > header . op_code = 0x7f ;
pkt - > header . op_code = 0x7f ;
pkt - > header . request_id = request_id ;
pkt - > header . request_id = request_id ;
struct cam_config_dev_cmd config_dev_cmd = { } ;
int ret = device_config ( s - > sensor_fd , s - > session_handle , s - > sensor_dev_handle , cam_packet_handle ) ;
config_dev_cmd . session_handle = s - > session_handle ;
config_dev_cmd . dev_handle = s - > sensor_dev_handle ;
config_dev_cmd . offset = 0 ;
config_dev_cmd . packet_handle = cam_packet_handle ;
int ret = cam_control ( s - > sensor_fd , CAM_CONFIG_DEV , & config_dev_cmd , sizeof ( config_dev_cmd ) ) ;
assert ( ret = = 0 ) ;
assert ( ret = = 0 ) ;
munmap ( pkt , size ) ;
munmap ( pkt , size ) ;
@ -186,13 +198,7 @@ void sensors_i2c(struct CameraState *s, struct i2c_random_wr_payload* dat, int l
i2c_random_wr - > header . addr_type = CAMERA_SENSOR_I2C_TYPE_WORD ;
i2c_random_wr - > header . addr_type = CAMERA_SENSOR_I2C_TYPE_WORD ;
memcpy ( i2c_random_wr - > random_wr_payload , dat , len * sizeof ( struct i2c_random_wr_payload ) ) ;
memcpy ( i2c_random_wr - > random_wr_payload , dat , len * sizeof ( struct i2c_random_wr_payload ) ) ;
struct cam_config_dev_cmd config_dev_cmd = { } ;
int ret = device_config ( s - > sensor_fd , s - > session_handle , s - > sensor_dev_handle , cam_packet_handle ) ;
config_dev_cmd . session_handle = s - > session_handle ;
config_dev_cmd . dev_handle = s - > sensor_dev_handle ;
config_dev_cmd . offset = 0 ;
config_dev_cmd . packet_handle = cam_packet_handle ;
int ret = cam_control ( s - > sensor_fd , CAM_CONFIG_DEV , & config_dev_cmd , sizeof ( config_dev_cmd ) ) ;
assert ( ret = = 0 ) ;
assert ( ret = = 0 ) ;
munmap ( i2c_random_wr , buf_desc [ 0 ] . size ) ;
munmap ( i2c_random_wr , buf_desc [ 0 ] . size ) ;
@ -432,13 +438,8 @@ void config_isp(struct CameraState *s, int io_mem_handle, int fence, int request
io_cfg [ 0 ] . framedrop_pattern = 0x1 ;
io_cfg [ 0 ] . framedrop_pattern = 0x1 ;
}
}
struct cam_config_dev_cmd config_dev_cmd = { } ;
int ret = device_config ( s - > multi_cam_state - > isp_fd , s - > session_handle , s - > isp_dev_handle , cam_packet_handle ) ;
config_dev_cmd . session_handle = s - > session_handle ;
assert ( ret = = 0 ) ;
config_dev_cmd . dev_handle = s - > isp_dev_handle ;
config_dev_cmd . offset = 0 ;
config_dev_cmd . packet_handle = cam_packet_handle ;
int ret = cam_control ( s - > multi_cam_state - > isp_fd , CAM_CONFIG_DEV , & config_dev_cmd , sizeof ( config_dev_cmd ) ) ;
if ( ret ! = 0 ) {
if ( ret ! = 0 ) {
printf ( " ISP CONFIG FAILED \n " ) ;
printf ( " ISP CONFIG FAILED \n " ) ;
}
}
@ -575,20 +576,12 @@ static void camera_open(CameraState *s) {
// access the sensor
// access the sensor
LOGD ( " -- Accessing sensor " ) ;
LOGD ( " -- Accessing sensor " ) ;
static struct cam_acquire_dev_cmd acquire_dev_cmd = { 0 } ;
auto sensor_dev_handle = device_acquire ( s - > sensor_fd , s - > session_handle , nullptr ) ;
acquire_dev_cmd . session_handle = s - > session_handle ;
assert ( sensor_dev_handle ) ;
acquire_dev_cmd . handle_type = CAM_HANDLE_USER_POINTER ;
s - > sensor_dev_handle = * sensor_dev_handle ;
ret = cam_control ( s - > sensor_fd , CAM_ACQUIRE_DEV , & acquire_dev_cmd , sizeof ( acquire_dev_cmd ) ) ;
LOGD ( " acquire sensor dev " ) ;
LOGD ( " acquire sensor dev: %d " , ret ) ;
s - > sensor_dev_handle = acquire_dev_cmd . dev_handle ;
static struct cam_isp_resource isp_resource = { 0 } ;
static struct cam_isp_resource isp_resource = { 0 } ;
acquire_dev_cmd . session_handle = s - > session_handle ;
acquire_dev_cmd . handle_type = CAM_HANDLE_USER_POINTER ;
acquire_dev_cmd . num_resources = 1 ;
acquire_dev_cmd . resource_hdl = ( uint64_t ) & isp_resource ;
isp_resource . resource_id = CAM_ISP_RES_ID_PORT ;
isp_resource . resource_id = CAM_ISP_RES_ID_PORT ;
isp_resource . length = sizeof ( struct cam_isp_in_port_info ) + sizeof ( struct cam_isp_out_port_info ) * ( 1 - 1 ) ;
isp_resource . length = sizeof ( struct cam_isp_in_port_info ) + sizeof ( struct cam_isp_out_port_info ) * ( 1 - 1 ) ;
isp_resource . handle_type = CAM_HANDLE_USER_POINTER ;
isp_resource . handle_type = CAM_HANDLE_USER_POINTER ;
@ -650,23 +643,17 @@ static void camera_open(CameraState *s) {
. comp_grp_id = 0x0 , . split_point = 0x0 , . secure_mode = 0x0 ,
. comp_grp_id = 0x0 , . split_point = 0x0 , . secure_mode = 0x0 ,
} ;
} ;
ret = cam_control ( s - > multi_cam_state - > isp_fd , CAM_ACQUIRE_DEV , & acquire_dev_cmd , sizeof ( acquire_dev_cmd ) ) ;
auto isp_dev_handle = device_acquire ( s - > multi_cam_state - > isp_fd , s - > session_handle , & isp_resource ) ;
LOGD ( " acquire isp dev: %d " , ret ) ;
assert ( isp_dev_handle ) ;
s - > isp_dev_handle = * isp_dev_handle ;
LOGD ( " acquire isp dev " ) ;
free ( in_port_info ) ;
free ( in_port_info ) ;
s - > isp_dev_handle = acquire_dev_cmd . dev_handle ;
static struct cam_csiphy_acquire_dev_info csiphy_acquire_dev_info = { 0 } ;
struct cam_csiphy_acquire_dev_info csiphy_acquire_dev_info = { . combo_mode = 0 } ;
csiphy_acquire_dev_info . combo_mode = 0 ;
auto csiphy_dev_handle = device_acquire ( s - > csiphy_fd , s - > session_handle , & csiphy_acquire_dev_info ) ;
assert ( csiphy_dev_handle ) ;
acquire_dev_cmd . session_handle = s - > session_handle ;
s - > csiphy_dev_handle = * csiphy_dev_handle ;
acquire_dev_cmd . handle_type = CAM_HANDLE_USER_POINTER ;
LOGD ( " acquire csiphy dev " ) ;
acquire_dev_cmd . num_resources = 1 ;
acquire_dev_cmd . resource_hdl = ( uint64_t ) & csiphy_acquire_dev_info ;
ret = cam_control ( s - > csiphy_fd , CAM_ACQUIRE_DEV , & acquire_dev_cmd , sizeof ( acquire_dev_cmd ) ) ;
LOGD ( " acquire csiphy dev: %d " , ret ) ;
s - > csiphy_dev_handle = acquire_dev_cmd . dev_handle ;
// acquires done
// acquires done
@ -706,13 +693,7 @@ static void camera_open(CameraState *s) {
csiphy_info - > settle_time = MIPI_SETTLE_CNT * 200000000ULL ;
csiphy_info - > settle_time = MIPI_SETTLE_CNT * 200000000ULL ;
csiphy_info - > data_rate = 48000000 ; // Calculated by camera_freqs.py
csiphy_info - > data_rate = 48000000 ; // Calculated by camera_freqs.py
static struct cam_config_dev_cmd config_dev_cmd = { } ;
int ret = device_config ( s - > csiphy_fd , s - > session_handle , s - > csiphy_dev_handle , cam_packet_handle ) ;
config_dev_cmd . session_handle = s - > session_handle ;
config_dev_cmd . dev_handle = s - > csiphy_dev_handle ;
config_dev_cmd . offset = 0 ;
config_dev_cmd . packet_handle = cam_packet_handle ;
int ret = cam_control ( s - > csiphy_fd , CAM_CONFIG_DEV , & config_dev_cmd , sizeof ( config_dev_cmd ) ) ;
assert ( ret = = 0 ) ;
assert ( ret = = 0 ) ;
munmap ( csiphy_info , buf_desc [ 0 ] . size ) ;
munmap ( csiphy_info , buf_desc [ 0 ] . size ) ;