Lines Matching +full:s +full:- +full:ahb

1 // SPDX-License-Identifier: GPL-2.0
5 * Qualcomm MSM Camera Subsystem - Core
8 * Copyright (C) 2015-2018 Linaro Ltd.
12 #include <linux/media-bus-format.h>
24 #include <media/media-device.h>
25 #include <media/v4l2-async.h>
26 #include <media/v4l2-device.h>
27 #include <media/v4l2-mc.h>
28 #include <media/v4l2-fwnode.h>
41 .clock = { "top_ahb", "ispif_ahb", "ahb", "csiphy0_timer" },
57 .clock = { "top_ahb", "ispif_ahb", "ahb", "csiphy1_timer" },
75 .clock = { "top_ahb", "ispif_ahb", "csi0_ahb", "ahb",
97 .clock = { "top_ahb", "ispif_ahb", "csi1_ahb", "ahb",
119 .clock = { "top_ahb", "ahb", "ispif_ahb",
132 "vfe_ahb", "vfe_axi", "ahb" },
159 .clock = { "top_ahb", "ispif_ahb", "csi0_ahb", "ahb",
182 .clock = { "top_ahb", "ispif_ahb", "csi1_ahb", "ahb",
205 .clock = { "top_ahb", "ispif_ahb", "csi2_ahb", "ahb",
228 .clock = { "top_ahb", "ahb", "ispif_ahb",
241 .clock = { "top_ahb", "ahb", "ispif_ahb",
267 .clock = { "top_ahb", "ahb", "ispif_ahb",
313 .clock = { "top_ahb", "ispif_ahb", "ahb", "csiphy0_timer" },
329 .clock = { "top_ahb", "ispif_ahb", "ahb", "csiphy1_timer" },
345 .clock = { "top_ahb", "ispif_ahb", "ahb", "csiphy2_timer" },
363 .clock = { "top_ahb", "ispif_ahb", "csi0_ahb", "ahb",
385 .clock = { "top_ahb", "ispif_ahb", "csi1_ahb", "ahb",
407 .clock = { "top_ahb", "ispif_ahb", "csi2_ahb", "ahb",
429 .clock = { "top_ahb", "ispif_ahb", "csi3_ahb", "ahb",
451 .clock = { "top_ahb", "ahb", "ispif_ahb",
465 .clock = { "top_ahb", "ahb", "vfe0", "csi_vfe0", "vfe_ahb",
490 .clock = { "top_ahb", "ahb", "vfe1", "csi_vfe1", "vfe_ahb",
517 .clock = { "top_ahb", "ispif_ahb", "ahb", "csiphy0_timer",
535 .clock = { "top_ahb", "ispif_ahb", "ahb", "csiphy1_timer",
553 .clock = { "top_ahb", "ispif_ahb", "ahb", "csiphy2_timer",
573 .clock = { "top_ahb", "ispif_ahb", "csi0_ahb", "ahb",
598 .clock = { "top_ahb", "ispif_ahb", "csi1_ahb", "ahb",
623 .clock = { "top_ahb", "ispif_ahb", "csi2_ahb", "ahb",
648 .clock = { "top_ahb", "ispif_ahb", "csi3_ahb", "ahb",
673 .clock = { "top_ahb", "ahb", "ispif_ahb",
687 .clock = { "throttle_axi", "top_ahb", "ahb", "vfe0",
715 .clock = { "throttle_axi", "top_ahb", "ahb", "vfe1",
834 .regulators = { "vdda-phy", "vdda-pll" },
859 .regulators = { "vdda-phy", "vdda-pll" },
884 .regulators = { "vdda-phy", "vdda-pll" },
964 /* VFE-lite */
994 .regulators = { "vdda-phy", "vdda-pll" },
1007 .regulators = { "vdda-phy", "vdda-pll" },
1020 .regulators = { "vdda-phy", "vdda-pll" },
1033 .regulators = { "vdda-phy", "vdda-pll" },
1046 .regulators = { "vdda-phy", "vdda-pll" },
1059 .regulators = { "vdda-phy", "vdda-pll" },
1327 .regulators = { "vdda-phy", "vdda-pll" },
1343 .regulators = { "vdda-phy", "vdda-pll" },
1359 .regulators = { "vdda-phy", "vdda-pll" },
1375 .regulators = { "vdda-phy", "vdda-pll" },
1391 .regulators = { "vdda-phy", "vdda-pll" },
1407 .regulators = { "vdda-phy", "vdda-pll" },
1423 .regulators = { "vdda-phy", "vdda-pll" },
1439 .regulators = { "vdda-phy", "vdda-pll" },
1638 * camss_add_clock_margin - Add margin to clock frequency rate
1651 * camss_enable_clocks - Enable multiple clocks
1675 for (i--; i >= 0; i--) in camss_enable_clocks()
1682 * camss_disable_clocks - Disable multiple clocks
1690 for (i = nclocks - 1; i >= 0; i--) in camss_disable_clocks()
1695 * camss_find_sensor - Find a linked media entity which represents a sensor
1705 pad = &entity->pads[0]; in camss_find_sensor()
1706 if (!(pad->flags & MEDIA_PAD_FL_SINK)) in camss_find_sensor()
1710 if (!pad || !is_media_entity_v4l2_subdev(pad->entity)) in camss_find_sensor()
1713 entity = pad->entity; in camss_find_sensor()
1715 if (entity->function == MEDIA_ENT_F_CAM_SENSOR) in camss_find_sensor()
1721 * camss_get_link_freq - Get link frequency from sensor
1736 return -ENODEV; in camss_get_link_freq()
1740 return v4l2_get_link_freq(subdev->ctrl_handler, bpp, 2 * lanes); in camss_get_link_freq()
1744 * camss_get_pixel_clock - Get pixel clock rate from sensor
1758 return -ENODEV; in camss_get_pixel_clock()
1762 ctrl = v4l2_ctrl_find(subdev->ctrl_handler, V4L2_CID_PIXEL_RATE); in camss_get_pixel_clock()
1765 return -EINVAL; in camss_get_pixel_clock()
1776 if (id < camss->res->vfe_num) { in camss_pm_domain_on()
1777 struct vfe_device *vfe = &camss->vfe[id]; in camss_pm_domain_on()
1779 ret = vfe->res->hw_ops->pm_domain_on(vfe); in camss_pm_domain_on()
1787 if (id < camss->res->vfe_num) { in camss_pm_domain_off()
1788 struct vfe_device *vfe = &camss->vfe[id]; in camss_pm_domain_off()
1790 vfe->res->hw_ops->pm_domain_off(vfe); in camss_pm_domain_off()
1796 int ret = -EINVAL; in vfe_parent_dev_ops_get()
1798 if (id < camss->res->vfe_num) { in vfe_parent_dev_ops_get()
1799 struct vfe_device *vfe = &camss->vfe[id]; in vfe_parent_dev_ops_get()
1809 if (id < camss->res->vfe_num) { in vfe_parent_dev_ops_put()
1810 struct vfe_device *vfe = &camss->vfe[id]; in vfe_parent_dev_ops_put()
1821 if (id < camss->res->vfe_num) { in vfe_parent_dev_ops_get_base_address()
1822 struct vfe_device *vfe = &camss->vfe[id]; in vfe_parent_dev_ops_get_base_address()
1824 return vfe->base; in vfe_parent_dev_ops_get_base_address()
1837 * camss_of_parse_endpoint_node - Parse port endpoint node
1848 struct csiphy_lanes_cfg *lncfg = &csd->interface.csi2.lane_cfg; in camss_of_parse_endpoint_node()
1858 csd->interface.csiphy_id = vep.base.port; in camss_of_parse_endpoint_node()
1861 lncfg->clk.pos = mipi_csi2->clock_lane; in camss_of_parse_endpoint_node()
1862 lncfg->clk.pol = mipi_csi2->lane_polarities[0]; in camss_of_parse_endpoint_node()
1863 lncfg->num_data = mipi_csi2->num_data_lanes; in camss_of_parse_endpoint_node()
1865 lncfg->data = devm_kcalloc(dev, in camss_of_parse_endpoint_node()
1866 lncfg->num_data, sizeof(*lncfg->data), in camss_of_parse_endpoint_node()
1868 if (!lncfg->data) in camss_of_parse_endpoint_node()
1869 return -ENOMEM; in camss_of_parse_endpoint_node()
1871 for (i = 0; i < lncfg->num_data; i++) { in camss_of_parse_endpoint_node()
1872 lncfg->data[i].pos = mipi_csi2->data_lanes[i]; in camss_of_parse_endpoint_node()
1873 lncfg->data[i].pol = mipi_csi2->lane_polarities[i + 1]; in camss_of_parse_endpoint_node()
1880 * camss_of_parse_ports - Parse ports node
1888 struct device *dev = camss->dev; in camss_of_parse_ports()
1893 for_each_endpoint_of_node(dev->of_node, node) { in camss_of_parse_ports()
1902 ret = -EINVAL; in camss_of_parse_ports()
1906 csd = v4l2_async_nf_add_fwnode(&camss->notifier, in camss_of_parse_ports()
1930 * camss_init_subdevices - Initialize subdev structures and resources
1937 struct platform_device *pdev = to_platform_device(camss->dev); in camss_init_subdevices()
1938 const struct camss_resources *res = camss->res; in camss_init_subdevices()
1942 for (i = 0; i < camss->res->csiphy_num; i++) { in camss_init_subdevices()
1943 ret = msm_csiphy_subdev_init(camss, &camss->csiphy[i], in camss_init_subdevices()
1944 &res->csiphy_res[i], i); in camss_init_subdevices()
1946 dev_err(camss->dev, in camss_init_subdevices()
1947 "Failed to init csiphy%d sub-device: %d\n", in camss_init_subdevices()
1954 for (i = 0; i < camss->res->vfe_num; i++) { in camss_init_subdevices()
1955 ret = msm_vfe_subdev_init(camss, &camss->vfe[i], in camss_init_subdevices()
1956 &res->vfe_res[i], i); in camss_init_subdevices()
1958 dev_err(camss->dev, in camss_init_subdevices()
1959 "Fail to init vfe%d sub-device: %d\n", i, ret); in camss_init_subdevices()
1965 if (res->csid_wrapper_res) { in camss_init_subdevices()
1966 char *reg = res->csid_wrapper_res->reg; in camss_init_subdevices()
1972 camss->csid_wrapper_base = base; in camss_init_subdevices()
1975 for (i = 0; i < camss->res->csid_num; i++) { in camss_init_subdevices()
1976 ret = msm_csid_subdev_init(camss, &camss->csid[i], in camss_init_subdevices()
1977 &res->csid_res[i], i); in camss_init_subdevices()
1979 dev_err(camss->dev, in camss_init_subdevices()
1980 "Failed to init csid%d sub-device: %d\n", in camss_init_subdevices()
1986 ret = msm_ispif_subdev_init(camss, res->ispif_res); in camss_init_subdevices()
1988 dev_err(camss->dev, "Failed to init ispif sub-device: %d\n", in camss_init_subdevices()
1997 * camss_link_entities - Register subdev nodes and create links
2007 for (i = 0; i < camss->res->csiphy_num; i++) { in camss_link_entities()
2008 for (j = 0; j < camss->res->csid_num; j++) { in camss_link_entities()
2009 ret = media_create_pad_link(&camss->csiphy[i].subdev.entity, in camss_link_entities()
2011 &camss->csid[j].subdev.entity, in camss_link_entities()
2015 dev_err(camss->dev, in camss_link_entities()
2016 "Failed to link %s->%s entities: %d\n", in camss_link_entities()
2017 camss->csiphy[i].subdev.entity.name, in camss_link_entities()
2018 camss->csid[j].subdev.entity.name, in camss_link_entities()
2025 if (camss->ispif) { in camss_link_entities()
2026 for (i = 0; i < camss->res->csid_num; i++) { in camss_link_entities()
2027 for (j = 0; j < camss->ispif->line_num; j++) { in camss_link_entities()
2028 ret = media_create_pad_link(&camss->csid[i].subdev.entity, in camss_link_entities()
2030 &camss->ispif->line[j].subdev.entity, in camss_link_entities()
2034 dev_err(camss->dev, in camss_link_entities()
2035 "Failed to link %s->%s entities: %d\n", in camss_link_entities()
2036 camss->csid[i].subdev.entity.name, in camss_link_entities()
2037 camss->ispif->line[j].subdev.entity.name, in camss_link_entities()
2044 for (i = 0; i < camss->ispif->line_num; i++) in camss_link_entities()
2045 for (k = 0; k < camss->res->vfe_num; k++) in camss_link_entities()
2046 for (j = 0; j < camss->vfe[k].res->line_num; j++) { in camss_link_entities()
2047 struct v4l2_subdev *ispif = &camss->ispif->line[i].subdev; in camss_link_entities()
2048 struct v4l2_subdev *vfe = &camss->vfe[k].line[j].subdev; in camss_link_entities()
2050 ret = media_create_pad_link(&ispif->entity, in camss_link_entities()
2052 &vfe->entity, in camss_link_entities()
2056 dev_err(camss->dev, in camss_link_entities()
2057 "Failed to link %s->%s entities: %d\n", in camss_link_entities()
2058 ispif->entity.name, in camss_link_entities()
2059 vfe->entity.name, in camss_link_entities()
2065 for (i = 0; i < camss->res->csid_num; i++) in camss_link_entities()
2066 for (k = 0; k < camss->res->vfe_num; k++) in camss_link_entities()
2067 for (j = 0; j < camss->vfe[k].res->line_num; j++) { in camss_link_entities()
2068 struct v4l2_subdev *csid = &camss->csid[i].subdev; in camss_link_entities()
2069 struct v4l2_subdev *vfe = &camss->vfe[k].line[j].subdev; in camss_link_entities()
2071 ret = media_create_pad_link(&csid->entity, in camss_link_entities()
2073 &vfe->entity, in camss_link_entities()
2077 dev_err(camss->dev, in camss_link_entities()
2078 "Failed to link %s->%s entities: %d\n", in camss_link_entities()
2079 csid->entity.name, in camss_link_entities()
2080 vfe->entity.name, in camss_link_entities()
2091 * camss_register_entities - Register subdev nodes and create links
2101 for (i = 0; i < camss->res->csiphy_num; i++) { in camss_register_entities()
2102 ret = msm_csiphy_register_entity(&camss->csiphy[i], in camss_register_entities()
2103 &camss->v4l2_dev); in camss_register_entities()
2105 dev_err(camss->dev, in camss_register_entities()
2112 for (i = 0; i < camss->res->csid_num; i++) { in camss_register_entities()
2113 ret = msm_csid_register_entity(&camss->csid[i], in camss_register_entities()
2114 &camss->v4l2_dev); in camss_register_entities()
2116 dev_err(camss->dev, in camss_register_entities()
2123 ret = msm_ispif_register_entities(camss->ispif, in camss_register_entities()
2124 &camss->v4l2_dev); in camss_register_entities()
2126 dev_err(camss->dev, "Failed to register ispif entities: %d\n", ret); in camss_register_entities()
2130 for (i = 0; i < camss->res->vfe_num; i++) { in camss_register_entities()
2131 ret = msm_vfe_register_entities(&camss->vfe[i], in camss_register_entities()
2132 &camss->v4l2_dev); in camss_register_entities()
2134 dev_err(camss->dev, in camss_register_entities()
2144 for (i--; i >= 0; i--) in camss_register_entities()
2145 msm_vfe_unregister_entities(&camss->vfe[i]); in camss_register_entities()
2148 msm_ispif_unregister_entities(camss->ispif); in camss_register_entities()
2150 i = camss->res->csid_num; in camss_register_entities()
2152 for (i--; i >= 0; i--) in camss_register_entities()
2153 msm_csid_unregister_entity(&camss->csid[i]); in camss_register_entities()
2155 i = camss->res->csiphy_num; in camss_register_entities()
2157 for (i--; i >= 0; i--) in camss_register_entities()
2158 msm_csiphy_unregister_entity(&camss->csiphy[i]); in camss_register_entities()
2164 * camss_unregister_entities - Unregister subdev nodes
2173 for (i = 0; i < camss->res->csiphy_num; i++) in camss_unregister_entities()
2174 msm_csiphy_unregister_entity(&camss->csiphy[i]); in camss_unregister_entities()
2176 for (i = 0; i < camss->res->csid_num; i++) in camss_unregister_entities()
2177 msm_csid_unregister_entity(&camss->csid[i]); in camss_unregister_entities()
2179 msm_ispif_unregister_entities(camss->ispif); in camss_unregister_entities()
2181 for (i = 0; i < camss->res->vfe_num; i++) in camss_unregister_entities()
2182 msm_vfe_unregister_entities(&camss->vfe[i]); in camss_unregister_entities()
2192 u8 id = csd->interface.csiphy_id; in camss_subdev_notifier_bound()
2193 struct csiphy_device *csiphy = &camss->csiphy[id]; in camss_subdev_notifier_bound()
2195 csiphy->cfg.csi2 = &csd->interface.csi2; in camss_subdev_notifier_bound()
2196 subdev->host_priv = csiphy; in camss_subdev_notifier_bound()
2204 struct v4l2_device *v4l2_dev = &camss->v4l2_dev; in camss_subdev_notifier_complete()
2208 list_for_each_entry(sd, &v4l2_dev->subdevs, list) { in camss_subdev_notifier_complete()
2209 if (sd->host_priv) { in camss_subdev_notifier_complete()
2210 struct media_entity *sensor = &sd->entity; in camss_subdev_notifier_complete()
2212 (struct csiphy_device *) sd->host_priv; in camss_subdev_notifier_complete()
2213 struct media_entity *input = &csiphy->subdev.entity; in camss_subdev_notifier_complete()
2216 for (i = 0; i < sensor->num_pads; i++) { in camss_subdev_notifier_complete()
2217 if (sensor->pads[i].flags & MEDIA_PAD_FL_SOURCE) in camss_subdev_notifier_complete()
2220 if (i == sensor->num_pads) { in camss_subdev_notifier_complete()
2221 dev_err(camss->dev, in camss_subdev_notifier_complete()
2223 return -EINVAL; in camss_subdev_notifier_complete()
2230 dev_err(camss->dev, in camss_subdev_notifier_complete()
2231 "Failed to link %s->%s entities: %d\n", in camss_subdev_notifier_complete()
2232 sensor->name, input->name, ret); in camss_subdev_notifier_complete()
2238 ret = v4l2_device_register_subdev_nodes(&camss->v4l2_dev); in camss_subdev_notifier_complete()
2242 return media_device_register(&camss->media_dev); in camss_subdev_notifier_complete()
2256 const struct camss_resources *res = camss->res; in camss_configure_pd()
2257 struct device *dev = camss->dev; in camss_configure_pd()
2262 camss->genpd_num = of_count_phandle_with_args(dev->of_node, in camss_configure_pd()
2263 "power-domains", in camss_configure_pd()
2264 "#power-domain-cells"); in camss_configure_pd()
2265 if (camss->genpd_num < 0) { in camss_configure_pd()
2267 return camss->genpd_num; in camss_configure_pd()
2275 if (camss->genpd_num == 1) in camss_configure_pd()
2278 /* count the # of VFEs which have flagged power-domain */ in camss_configure_pd()
2279 for (vfepd_num = i = 0; i < camss->res->vfe_num; i++) { in camss_configure_pd()
2280 if (res->vfe_res[i].vfe.has_pd) in camss_configure_pd()
2285 * If the number of power-domains is greater than the number of VFEs in camss_configure_pd()
2286 * then the additional power-domain is for the entire CAMSS block. in camss_configure_pd()
2288 if (!(camss->genpd_num > vfepd_num)) in camss_configure_pd()
2292 * If a power-domain name is defined try to use it. in camss_configure_pd()
2296 if (camss->res->pd_name) { in camss_configure_pd()
2297 camss->genpd = dev_pm_domain_attach_by_name(camss->dev, in camss_configure_pd()
2298 camss->res->pd_name); in camss_configure_pd()
2299 if (IS_ERR(camss->genpd)) in camss_configure_pd()
2300 return PTR_ERR(camss->genpd); in camss_configure_pd()
2303 if (!camss->genpd) { in camss_configure_pd()
2306 * item in the power-domain list. in camss_configure_pd()
2308 camss->genpd = dev_pm_domain_attach_by_id(camss->dev, in camss_configure_pd()
2309 camss->genpd_num - 1); in camss_configure_pd()
2310 if (IS_ERR(camss->genpd)) in camss_configure_pd()
2311 return PTR_ERR(camss->genpd); in camss_configure_pd()
2314 if (!camss->genpd) in camss_configure_pd()
2315 return -ENODEV; in camss_configure_pd()
2317 camss->genpd_link = device_link_add(camss->dev, camss->genpd, in camss_configure_pd()
2320 if (!camss->genpd_link) { in camss_configure_pd()
2321 ret = -EINVAL; in camss_configure_pd()
2328 dev_pm_domain_detach(camss->genpd, true); in camss_configure_pd()
2338 icc_res = camss->res->icc_res; in camss_icc_get()
2340 for (i = 0; i < camss->res->icc_path_num; i++) { in camss_icc_get()
2341 camss->icc_path[i] = devm_of_icc_get(camss->dev, in camss_icc_get()
2343 if (IS_ERR(camss->icc_path[i])) in camss_icc_get()
2344 return PTR_ERR(camss->icc_path[i]); in camss_icc_get()
2354 for (i = 0; i < camss->res->vfe_num; i++) in camss_genpd_subdevice_cleanup()
2355 msm_vfe_genpd_cleanup(&camss->vfe[i]); in camss_genpd_subdevice_cleanup()
2360 if (camss->genpd_num == 1) in camss_genpd_cleanup()
2365 if (camss->genpd_link) in camss_genpd_cleanup()
2366 device_link_del(camss->genpd_link); in camss_genpd_cleanup()
2368 dev_pm_domain_detach(camss->genpd, true); in camss_genpd_cleanup()
2372 * camss_probe - Probe CAMSS platform device
2379 struct device *dev = &pdev->dev; in camss_probe()
2386 return -ENOMEM; in camss_probe()
2388 camss->res = of_device_get_match_data(dev); in camss_probe()
2390 atomic_set(&camss->ref_count, 0); in camss_probe()
2391 camss->dev = dev; in camss_probe()
2394 camss->csiphy = devm_kcalloc(dev, camss->res->csiphy_num, in camss_probe()
2395 sizeof(*camss->csiphy), GFP_KERNEL); in camss_probe()
2396 if (!camss->csiphy) in camss_probe()
2397 return -ENOMEM; in camss_probe()
2399 camss->csid = devm_kcalloc(dev, camss->res->csid_num, sizeof(*camss->csid), in camss_probe()
2401 if (!camss->csid) in camss_probe()
2402 return -ENOMEM; in camss_probe()
2404 if (camss->res->version == CAMSS_8x16 || in camss_probe()
2405 camss->res->version == CAMSS_8x53 || in camss_probe()
2406 camss->res->version == CAMSS_8x96) { in camss_probe()
2407 camss->ispif = devm_kcalloc(dev, 1, sizeof(*camss->ispif), GFP_KERNEL); in camss_probe()
2408 if (!camss->ispif) in camss_probe()
2409 return -ENOMEM; in camss_probe()
2412 camss->vfe = devm_kcalloc(dev, camss->res->vfe_num, in camss_probe()
2413 sizeof(*camss->vfe), GFP_KERNEL); in camss_probe()
2414 if (!camss->vfe) in camss_probe()
2415 return -ENOMEM; in camss_probe()
2435 camss->media_dev.dev = camss->dev; in camss_probe()
2436 strscpy(camss->media_dev.model, "Qualcomm Camera Subsystem", in camss_probe()
2437 sizeof(camss->media_dev.model)); in camss_probe()
2438 camss->media_dev.ops = &camss_media_ops; in camss_probe()
2439 media_device_init(&camss->media_dev); in camss_probe()
2441 camss->v4l2_dev.mdev = &camss->media_dev; in camss_probe()
2442 ret = v4l2_device_register(camss->dev, &camss->v4l2_dev); in camss_probe()
2448 v4l2_async_nf_init(&camss->notifier, &camss->v4l2_dev); in camss_probe()
2462 ret = camss->res->link_entities(camss); in camss_probe()
2467 camss->notifier.ops = &camss_subdev_notifier_ops; in camss_probe()
2469 ret = v4l2_async_nf_register(&camss->notifier); in camss_probe()
2477 ret = v4l2_device_register_subdev_nodes(&camss->v4l2_dev); in camss_probe()
2484 ret = media_device_register(&camss->media_dev); in camss_probe()
2497 v4l2_device_unregister(&camss->v4l2_dev); in camss_probe()
2498 v4l2_async_nf_cleanup(&camss->notifier); in camss_probe()
2508 v4l2_device_unregister(&camss->v4l2_dev); in camss_delete()
2509 media_device_unregister(&camss->media_dev); in camss_delete()
2510 media_device_cleanup(&camss->media_dev); in camss_delete()
2512 pm_runtime_disable(camss->dev); in camss_delete()
2516 * camss_remove - Remove CAMSS platform device
2525 v4l2_async_nf_unregister(&camss->notifier); in camss_remove()
2526 v4l2_async_nf_cleanup(&camss->notifier); in camss_remove()
2529 if (atomic_read(&camss->ref_count) == 0) in camss_remove()
2626 { .compatible = "qcom,msm8916-camss", .data = &msm8916_resources },
2627 { .compatible = "qcom,msm8953-camss", .data = &msm8953_resources },
2628 { .compatible = "qcom,msm8996-camss", .data = &msm8996_resources },
2629 { .compatible = "qcom,sdm660-camss", .data = &sdm660_resources },
2630 { .compatible = "qcom,sdm845-camss", .data = &sdm845_resources },
2631 { .compatible = "qcom,sm8250-camss", .data = &sm8250_resources },
2632 { .compatible = "qcom,sc8280xp-camss", .data = &sc8280xp_resources },
2644 for (i = 0; i < camss->res->icc_path_num; i++) { in camss_runtime_suspend()
2645 ret = icc_set_bw(camss->icc_path[i], 0, 0); in camss_runtime_suspend()
2656 const struct resources_icc *icc_res = camss->res->icc_res; in camss_runtime_resume()
2660 for (i = 0; i < camss->res->icc_path_num; i++) { in camss_runtime_resume()
2661 ret = icc_set_bw(camss->icc_path[i], in camss_runtime_resume()
2681 .name = "qcom-camss",
2689 MODULE_ALIAS("platform:qcom-camss");