|
|
|
@ -145,12 +145,11 @@ void sensors_poke(struct CameraState *s, int request_id) { |
|
|
|
|
int size = sizeof(struct cam_packet); |
|
|
|
|
struct cam_packet *pkt = (struct cam_packet *)alloc(s->video0_fd, size, 8, |
|
|
|
|
CAM_MEM_FLAG_KMD_ACCESS | CAM_MEM_FLAG_UMD_ACCESS | CAM_MEM_FLAG_CMD_BUF_TYPE, &cam_packet_handle); |
|
|
|
|
pkt->num_cmd_buf = 1; |
|
|
|
|
pkt->num_cmd_buf = 0; |
|
|
|
|
pkt->kmd_cmd_buf_index = -1; |
|
|
|
|
pkt->header.size = size; |
|
|
|
|
pkt->header.op_code = 0x7f; |
|
|
|
|
pkt->header.request_id = request_id; |
|
|
|
|
//struct cam_cmd_buf_desc *buf_desc = (struct cam_cmd_buf_desc *)&pkt->payload;
|
|
|
|
|
|
|
|
|
|
struct cam_config_dev_cmd config_dev_cmd = {}; |
|
|
|
|
config_dev_cmd.session_handle = s->session_handle; |
|
|
|
@ -177,10 +176,10 @@ void sensors_i2c(struct CameraState *s, struct i2c_random_wr_payload* dat, int l |
|
|
|
|
pkt->header.op_code = op_code; |
|
|
|
|
struct cam_cmd_buf_desc *buf_desc = (struct cam_cmd_buf_desc *)&pkt->payload; |
|
|
|
|
|
|
|
|
|
buf_desc[0].size = buf_desc[0].length = sizeof(struct cam_cmd_i2c_random_wr) + (len-1)*sizeof(struct i2c_random_wr_payload); |
|
|
|
|
buf_desc[0].size = buf_desc[0].length = sizeof(struct i2c_rdwr_header) + len*sizeof(struct i2c_random_wr_payload); |
|
|
|
|
buf_desc[0].type = CAM_CMD_BUF_I2C; |
|
|
|
|
struct cam_cmd_power *power = (struct cam_cmd_power *)alloc(s->video0_fd, buf_desc[0].size, 8, CAM_MEM_FLAG_KMD_ACCESS | CAM_MEM_FLAG_UMD_ACCESS | CAM_MEM_FLAG_CMD_BUF_TYPE, (uint32_t*)&buf_desc[0].mem_handle); |
|
|
|
|
struct cam_cmd_i2c_random_wr *i2c_random_wr = (struct cam_cmd_i2c_random_wr *)power; |
|
|
|
|
|
|
|
|
|
struct cam_cmd_i2c_random_wr *i2c_random_wr = (struct cam_cmd_i2c_random_wr *)alloc(s->video0_fd, buf_desc[0].size, 8, CAM_MEM_FLAG_KMD_ACCESS | CAM_MEM_FLAG_UMD_ACCESS | CAM_MEM_FLAG_CMD_BUF_TYPE, (uint32_t*)&buf_desc[0].mem_handle); |
|
|
|
|
i2c_random_wr->header.count = len; |
|
|
|
|
i2c_random_wr->header.op_code = 1; |
|
|
|
|
i2c_random_wr->header.cmd_type = CAMERA_SENSOR_CMD_TYPE_I2C_RNDM_WR; |
|
|
|
@ -197,7 +196,7 @@ void sensors_i2c(struct CameraState *s, struct i2c_random_wr_payload* dat, int l |
|
|
|
|
int ret = cam_control(s->sensor_fd, CAM_CONFIG_DEV, &config_dev_cmd, sizeof(config_dev_cmd)); |
|
|
|
|
assert(ret == 0); |
|
|
|
|
|
|
|
|
|
munmap(power, buf_desc[0].size); |
|
|
|
|
munmap(i2c_random_wr, buf_desc[0].size); |
|
|
|
|
release_fd(s->video0_fd, buf_desc[0].mem_handle); |
|
|
|
|
munmap(pkt, size); |
|
|
|
|
release_fd(s->video0_fd, cam_packet_handle); |
|
|
|
@ -733,16 +732,18 @@ static void camera_open(CameraState *s) { |
|
|
|
|
LOG("-- Config CSI PHY"); |
|
|
|
|
{ |
|
|
|
|
uint32_t cam_packet_handle = 0; |
|
|
|
|
struct cam_packet *pkt = (struct cam_packet *)alloc(s->video0_fd, sizeof(struct cam_packet)+sizeof(struct cam_cmd_buf_desc)*1, 8, |
|
|
|
|
int size = sizeof(struct cam_packet)+sizeof(struct cam_cmd_buf_desc)*1; |
|
|
|
|
struct cam_packet *pkt = (struct cam_packet *)alloc(s->video0_fd, size, 8, |
|
|
|
|
CAM_MEM_FLAG_KMD_ACCESS | CAM_MEM_FLAG_UMD_ACCESS | CAM_MEM_FLAG_CMD_BUF_TYPE, &cam_packet_handle); |
|
|
|
|
pkt->num_cmd_buf = 1; |
|
|
|
|
pkt->kmd_cmd_buf_index = -1; |
|
|
|
|
pkt->header.size = size; |
|
|
|
|
struct cam_cmd_buf_desc *buf_desc = (struct cam_cmd_buf_desc *)&pkt->payload; |
|
|
|
|
|
|
|
|
|
buf_desc[0].size = buf_desc[0].length = sizeof(struct cam_csiphy_info); |
|
|
|
|
buf_desc[0].type = CAM_CMD_BUF_GENERIC; |
|
|
|
|
struct cam_csiphy_info *csiphy_info = (struct cam_csiphy_info *)alloc(s->video0_fd, buf_desc[0].size, 8, CAM_MEM_FLAG_KMD_ACCESS | CAM_MEM_FLAG_UMD_ACCESS | CAM_MEM_FLAG_CMD_BUF_TYPE, (uint32_t*)&buf_desc[0].mem_handle); |
|
|
|
|
|
|
|
|
|
struct cam_csiphy_info *csiphy_info = (struct cam_csiphy_info *)alloc(s->video0_fd, buf_desc[0].size, 8, CAM_MEM_FLAG_KMD_ACCESS | CAM_MEM_FLAG_UMD_ACCESS | CAM_MEM_FLAG_CMD_BUF_TYPE, (uint32_t*)&buf_desc[0].mem_handle); |
|
|
|
|
csiphy_info->lane_mask = 0x1f; |
|
|
|
|
csiphy_info->lane_assign = 0x3210;// skip clk. How is this 16 bit for 5 channels??
|
|
|
|
|
csiphy_info->csiphy_3phase = 0x0; // no 3 phase, only 2 conductors per lane
|
|
|
|
|