camerad: refactor camera_open() into separate functions for clarity (#33056)

split function
old-commit-hash: 0fa6745a67
pull/33302/head
Dean Lee 10 months ago committed by GitHub
parent 7382299fda
commit 4d6d229820
  1. 32
      system/camerad/cameras/camera_qcom2.cc
  2. 5
      system/camerad/cameras/camera_qcom2.h

@ -469,6 +469,16 @@ void CameraState::camera_open(MultiCameraState *multi_cam_state_, int camera_num
enabled = enabled_; enabled = enabled_;
if (!enabled) return; if (!enabled) return;
if (!openSensor()) {
return;
}
configISP();
configCSIPHY();
linkDevices();
}
bool CameraState::openSensor() {
sensor_fd = open_v4l_by_name_and_index("cam-sensor-driver", camera_num); sensor_fd = open_v4l_by_name_and_index("cam-sensor-driver", camera_num);
assert(sensor_fd >= 0); assert(sensor_fd >= 0);
LOGD("opened sensor for %d", camera_num); LOGD("opened sensor for %d", camera_num);
@ -493,7 +503,7 @@ void CameraState::camera_open(MultiCameraState *multi_cam_state_, int camera_num
!init_sensor_lambda(new OS04C10)) { !init_sensor_lambda(new OS04C10)) {
LOGE("** sensor %d FAILED bringup, disabling", camera_num); LOGE("** sensor %d FAILED bringup, disabling", camera_num);
enabled = false; enabled = false;
return; return false;
} }
LOGD("-- Probing sensor %d success", camera_num); LOGD("-- Probing sensor %d success", camera_num);
@ -512,7 +522,10 @@ void CameraState::camera_open(MultiCameraState *multi_cam_state_, int camera_num
LOG("-- Configuring sensor"); LOG("-- Configuring sensor");
sensors_i2c(ci->init_reg_array.data(), ci->init_reg_array.size(), CAM_SENSOR_PACKET_OPCODE_SENSOR_CONFIG, ci->data_word); sensors_i2c(ci->init_reg_array.data(), ci->init_reg_array.size(), CAM_SENSOR_PACKET_OPCODE_SENSOR_CONFIG, ci->data_word);
return true;
}
void CameraState::configISP() {
// NOTE: to be able to disable road and wide road, we still have to configure the sensor over i2c // NOTE: to be able to disable road and wide road, we still have to configure the sensor over i2c
// If you don't do this, the strobe GPIO is an output (even in reset it seems!) // If you don't do this, the strobe GPIO is an output (even in reset it seems!)
if (!enabled) return; if (!enabled) return;
@ -570,6 +583,13 @@ void CameraState::camera_open(MultiCameraState *multi_cam_state_, int camera_num
isp_dev_handle = *isp_dev_handle_; isp_dev_handle = *isp_dev_handle_;
LOGD("acquire isp dev"); LOGD("acquire isp dev");
// config ISP
alloc_w_mmu_hdl(multi_cam_state->video0_fd, 984480, (uint32_t*)&buf0_handle, 0x20, CAM_MEM_FLAG_HW_READ_WRITE | CAM_MEM_FLAG_KMD_ACCESS |
CAM_MEM_FLAG_UMD_ACCESS | CAM_MEM_FLAG_CMD_BUF_TYPE, multi_cam_state->device_iommu, multi_cam_state->cdm_iommu);
config_isp(0, 0, 1, buf0_handle, 0);
}
void CameraState::configCSIPHY() {
csiphy_fd = open_v4l_by_name_and_index("cam-csiphy-driver", camera_num); csiphy_fd = open_v4l_by_name_and_index("cam-csiphy-driver", camera_num);
assert(csiphy_fd >= 0); assert(csiphy_fd >= 0);
LOGD("opened csiphy for %d", camera_num); LOGD("opened csiphy for %d", camera_num);
@ -580,11 +600,6 @@ void CameraState::camera_open(MultiCameraState *multi_cam_state_, int camera_num
csiphy_dev_handle = *csiphy_dev_handle_; csiphy_dev_handle = *csiphy_dev_handle_;
LOGD("acquire csiphy dev"); LOGD("acquire csiphy dev");
// config ISP
alloc_w_mmu_hdl(multi_cam_state->video0_fd, 984480, (uint32_t*)&buf0_handle, 0x20, CAM_MEM_FLAG_HW_READ_WRITE | CAM_MEM_FLAG_KMD_ACCESS |
CAM_MEM_FLAG_UMD_ACCESS | CAM_MEM_FLAG_CMD_BUF_TYPE, multi_cam_state->device_iommu, multi_cam_state->cdm_iommu);
config_isp(0, 0, 1, buf0_handle, 0);
// config csiphy // config csiphy
LOG("-- Config CSI PHY"); LOG("-- Config CSI PHY");
{ {
@ -612,15 +627,16 @@ void CameraState::camera_open(MultiCameraState *multi_cam_state_, int camera_num
int ret_ = device_config(csiphy_fd, session_handle, csiphy_dev_handle, cam_packet_handle); int ret_ = device_config(csiphy_fd, session_handle, csiphy_dev_handle, cam_packet_handle);
assert(ret_ == 0); assert(ret_ == 0);
} }
}
// link devices void CameraState::linkDevices() {
LOG("-- Link devices"); LOG("-- Link devices");
struct cam_req_mgr_link_info req_mgr_link_info = {0}; struct cam_req_mgr_link_info req_mgr_link_info = {0};
req_mgr_link_info.session_hdl = session_handle; req_mgr_link_info.session_hdl = session_handle;
req_mgr_link_info.num_devices = 2; req_mgr_link_info.num_devices = 2;
req_mgr_link_info.dev_hdls[0] = isp_dev_handle; req_mgr_link_info.dev_hdls[0] = isp_dev_handle;
req_mgr_link_info.dev_hdls[1] = sensor_dev_handle; req_mgr_link_info.dev_hdls[1] = sensor_dev_handle;
ret = do_cam_control(multi_cam_state->video0_fd, CAM_REQ_MGR_LINK, &req_mgr_link_info, sizeof(req_mgr_link_info)); int ret = do_cam_control(multi_cam_state->video0_fd, CAM_REQ_MGR_LINK, &req_mgr_link_info, sizeof(req_mgr_link_info));
link_handle = req_mgr_link_info.link_hdl; link_handle = req_mgr_link_info.link_hdl;
LOGD("link: %d session: 0x%X isp: 0x%X sensors: 0x%X link: 0x%X", ret, session_handle, isp_dev_handle, sensor_dev_handle, link_handle); LOGD("link: %d session: 0x%X isp: 0x%X sensors: 0x%X link: 0x%X", ret, session_handle, isp_dev_handle, sensor_dev_handle, link_handle);

@ -86,6 +86,11 @@ public:
void sensors_i2c(const struct i2c_random_wr_payload* dat, int len, int op_code, bool data_word); void sensors_i2c(const struct i2c_random_wr_payload* dat, int len, int op_code, bool data_word);
private: private:
bool openSensor();
void configISP();
void configCSIPHY();
void linkDevices();
// for debugging // for debugging
Params params; Params params;
}; };

Loading…
Cancel
Save