Merge "msm: camera: crm: Handle link setup based on version" into camera-kernel.lnx.1.0

This commit is contained in:
Pavan Kumar Chilamkurthi
2019-08-06 15:13:50 -07:00
committed by Gerrit - the friendly Code Review server

View File

@@ -2440,7 +2440,7 @@ static struct cam_req_mgr_crm_cb cam_req_mgr_ops = {
static int __cam_req_mgr_setup_link_info(struct cam_req_mgr_core_link *link,
struct cam_req_mgr_ver_info *link_info)
{
int rc = 0, i = 0;
int rc = 0, i = 0, num_devices = 0;
struct cam_req_mgr_core_dev_link_setup link_data;
struct cam_req_mgr_connected_device *dev;
struct cam_req_mgr_req_tbl *pd_tbl;
@@ -2465,12 +2465,21 @@ static int __cam_req_mgr_setup_link_info(struct cam_req_mgr_core_link *link,
return rc;
max_delay = CAM_PIPELINE_DELAY_0;
for (i = 0; i < link_info->u.link_info_v1.num_devices; i++) {
if (link_info->version == VERSION_1)
num_devices = link_info->u.link_info_v1.num_devices;
else if (link_info->version == VERSION_2)
num_devices = link_info->u.link_info_v2.num_devices;
for (i = 0; i < num_devices; i++) {
dev = &link->l_dev[i];
/* Using dev hdl, get ops ptr to communicate with device */
dev->ops = (struct cam_req_mgr_kmd_ops *)
cam_get_device_ops(
link_info->u.link_info_v1.dev_hdls[i]);
if (link_info->version == VERSION_1)
dev->ops = (struct cam_req_mgr_kmd_ops *)
cam_get_device_ops(
link_info->u.link_info_v1.dev_hdls[i]);
else if (link_info->version == VERSION_2)
dev->ops = (struct cam_req_mgr_kmd_ops *)
cam_get_device_ops(
link_info->u.link_info_v2.dev_hdls[i]);
if (!dev->ops ||
!dev->ops->get_dev_info ||
!dev->ops->link_setup) {
@@ -2478,19 +2487,29 @@ static int __cam_req_mgr_setup_link_info(struct cam_req_mgr_core_link *link,
rc = -ENXIO;
goto error;
}
dev->dev_hdl = link_info->u.link_info_v1.dev_hdls[i];
if (link_info->version == VERSION_1)
dev->dev_hdl = link_info->u.link_info_v1.dev_hdls[i];
else if (link_info->version == VERSION_2)
dev->dev_hdl = link_info->u.link_info_v2.dev_hdls[i];
dev->parent = (void *)link;
dev->dev_info.dev_hdl = dev->dev_hdl;
rc = dev->ops->get_dev_info(&dev->dev_info);
trace_cam_req_mgr_connect_device(link, &dev->dev_info);
CAM_DBG(CAM_CRM,
"%x: connected: %s, id %d, delay %d, trigger %x",
link_info->u.link_info_v1.session_hdl,
dev->dev_info.name,
dev->dev_info.dev_id, dev->dev_info.p_delay,
dev->dev_info.trigger);
if (link_info->version == VERSION_1)
CAM_DBG(CAM_CRM,
"%x: connected: %s, id %d, delay %d, trigger %x",
link_info->u.link_info_v1.session_hdl,
dev->dev_info.name,
dev->dev_info.dev_id, dev->dev_info.p_delay,
dev->dev_info.trigger);
else if (link_info->version == VERSION_2)
CAM_DBG(CAM_CRM,
"%x: connected: %s, id %d, delay %d, trigger %x",
link_info->u.link_info_v2.session_hdl,
dev->dev_info.name,
dev->dev_info.dev_id, dev->dev_info.p_delay,
dev->dev_info.trigger);
if (rc < 0 ||
dev->dev_info.p_delay >=
CAM_PIPELINE_DELAY_MAX ||
@@ -2499,10 +2518,18 @@ static int __cam_req_mgr_setup_link_info(struct cam_req_mgr_core_link *link,
CAM_ERR(CAM_CRM, "get device info failed");
goto error;
} else {
CAM_DBG(CAM_CRM, "%x: connected: %s, delay %d",
link_info->u.link_info_v1.session_hdl,
dev->dev_info.name,
dev->dev_info.p_delay);
if (link_info->version == VERSION_1) {
CAM_DBG(CAM_CRM, "%x: connected: %s, delay %d",
link_info->u.link_info_v1.session_hdl,
dev->dev_info.name,
dev->dev_info.p_delay);
}
else if (link_info->version == VERSION_2) {
CAM_DBG(CAM_CRM, "%x: connected: %s, delay %d",
link_info->u.link_info_v2.session_hdl,
dev->dev_info.name,
dev->dev_info.p_delay);
}
if (dev->dev_info.p_delay > max_delay)
max_delay = dev->dev_info.p_delay;
@@ -2517,7 +2544,7 @@ static int __cam_req_mgr_setup_link_info(struct cam_req_mgr_core_link *link,
link_data.max_delay = max_delay;
link_data.subscribe_event = subscribe_event;
for (i = 0; i < link_info->u.link_info_v1.num_devices; i++) {
for (i = 0; i < num_devices; i++) {
dev = &link->l_dev[i];
link_data.dev_hdl = dev->dev_hdl;
@@ -2560,7 +2587,7 @@ static int __cam_req_mgr_setup_link_info(struct cam_req_mgr_core_link *link,
if (link->max_delay < dev->dev_info.p_delay)
link->max_delay = dev->dev_info.p_delay;
}
link->num_devs = link_info->u.link_info_v1.num_devices;
link->num_devs = num_devices;
/* Assign id for pd tables */
__cam_req_mgr_tbl_set_id(link->req.l_tbl, &link->req);