Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

media: camss: Collect information about a number of lite VFEs

VFE lite IPs are found on CAMSS with TITAN_TOP power domains, and in
some aspects these types of VFEs are different, in particular there
is no need to enable VFE power domains to operate over VFE lite IPs.

Signed-off-by: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
Reviewed-by: Robert Foss <robert.foss@linaro.org>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>

authored by

Vladimir Zapolskiy and committed by
Mauro Carvalho Chehab
be11096d 3d658980

+12 -9
+11 -9
drivers/media/platform/qcom/camss/camss.c
··· 1170 1170 } 1171 1171 1172 1172 /* note: SM8250 requires VFE to be initialized before CSID */ 1173 - for (i = 0; i < camss->vfe_num; i++) { 1173 + for (i = 0; i < camss->vfe_num + camss->vfe_lite_num; i++) { 1174 1174 ret = msm_vfe_subdev_init(camss, &camss->vfe[i], 1175 1175 &vfe_res[i], i); 1176 1176 if (ret < 0) { ··· 1242 1242 goto err_reg_ispif; 1243 1243 } 1244 1244 1245 - for (i = 0; i < camss->vfe_num; i++) { 1245 + for (i = 0; i < camss->vfe_num + camss->vfe_lite_num; i++) { 1246 1246 ret = msm_vfe_register_entities(&camss->vfe[i], 1247 1247 &camss->v4l2_dev); 1248 1248 if (ret < 0) { ··· 1314 1314 } 1315 1315 } else { 1316 1316 for (i = 0; i < camss->csid_num; i++) 1317 - for (k = 0; k < camss->vfe_num; k++) 1317 + for (k = 0; k < camss->vfe_num + camss->vfe_lite_num; k++) 1318 1318 for (j = 0; j < camss->vfe[k].line_num; j++) { 1319 1319 struct v4l2_subdev *csid = &camss->csid[i].subdev; 1320 1320 struct v4l2_subdev *vfe = &camss->vfe[k].line[j].subdev; ··· 1338 1338 return 0; 1339 1339 1340 1340 err_link: 1341 - i = camss->vfe_num; 1341 + i = camss->vfe_num + camss->vfe_lite_num; 1342 1342 err_reg_vfe: 1343 1343 for (i--; i >= 0; i--) 1344 1344 msm_vfe_unregister_entities(&camss->vfe[i]); ··· 1377 1377 1378 1378 msm_ispif_unregister_entities(camss->ispif); 1379 1379 1380 - for (i = 0; i < camss->vfe_num; i++) 1380 + for (i = 0; i < camss->vfe_num + camss->vfe_lite_num; i++) 1381 1381 msm_vfe_unregister_entities(&camss->vfe[i]); 1382 1382 } 1383 1383 ··· 1579 1579 camss->version = CAMSS_845; 1580 1580 camss->csiphy_num = 4; 1581 1581 camss->csid_num = 3; 1582 - camss->vfe_num = 3; 1582 + camss->vfe_num = 2; 1583 + camss->vfe_lite_num = 1; 1583 1584 } else if (of_device_is_compatible(dev->of_node, 1584 1585 "qcom,sm8250-camss")) { 1585 1586 camss->version = CAMSS_8250; 1586 1587 camss->csiphy_num = 6; 1587 1588 camss->csid_num = 4; 1588 - camss->vfe_num = 4; 1589 + camss->vfe_num = 2; 1590 + camss->vfe_lite_num = 2; 1589 1591 } else { 1590 1592 return -EINVAL; 1591 1593 } ··· 1609 1607 return -ENOMEM; 1610 1608 } 1611 1609 1612 - camss->vfe = devm_kcalloc(dev, camss->vfe_num, sizeof(*camss->vfe), 1613 - GFP_KERNEL); 1610 + camss->vfe = devm_kcalloc(dev, camss->vfe_num + camss->vfe_lite_num, 1611 + sizeof(*camss->vfe), GFP_KERNEL); 1614 1612 if (!camss->vfe) 1615 1613 return -ENOMEM; 1616 1614
+1
drivers/media/platform/qcom/camss/camss.h
··· 97 97 struct csid_device *csid; 98 98 struct ispif_device *ispif; 99 99 int vfe_num; 100 + int vfe_lite_num; 100 101 struct vfe_device *vfe; 101 102 atomic_t ref_count; 102 103 int genpd_num;