Merge "msm: camera: crm: Handle link setup based on version" into camera-kernel.lnx.1.0
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

commit
57bc692472
@@ -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);
|
||||
|
Reference in New Issue
Block a user