Lines Matching +full:ahb +full:- +full:lite

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" },
1196 /* VFE2 (lite) */
1220 /* VFE3 (lite) */
1272 .regulators = { "vdda-phy", "vdda-pll" },
1286 .regulators = { "vdda-phy", "vdda-pll" },
1300 .regulators = { "vdda-phy", "vdda-pll" },
1314 .regulators = { "vdda-phy", "vdda-pll" },
1328 .regulators = { "vdda-phy", "vdda-pll" },
1516 /* VFE3 (lite) */
1537 /* VFE4 (lite) */
1562 .name = "ahb",
1631 .regulators = { "vdda-phy", "vdda-pll" },
1647 .regulators = { "vdda-phy", "vdda-pll" },
1663 .regulators = { "vdda-phy", "vdda-pll" },
1679 .regulators = { "vdda-phy", "vdda-pll" },
1695 .regulators = { "vdda-phy", "vdda-pll" },
1711 .regulators = { "vdda-phy", "vdda-pll" },
1727 .regulators = { "vdda-phy", "vdda-pll" },
1743 .regulators = { "vdda-phy", "vdda-pll" },
1942 * camss_add_clock_margin - Add margin to clock frequency rate
1955 * camss_enable_clocks - Enable multiple clocks
1979 for (i--; i >= 0; i--) in camss_enable_clocks()
1986 * camss_disable_clocks - Disable multiple clocks
1994 for (i = nclocks - 1; i >= 0; i--) in camss_disable_clocks()
1999 * camss_find_sensor - Find a linked media entity which represents a sensor
2009 pad = &entity->pads[0]; in camss_find_sensor()
2010 if (!(pad->flags & MEDIA_PAD_FL_SINK)) in camss_find_sensor()
2014 if (!pad || !is_media_entity_v4l2_subdev(pad->entity)) in camss_find_sensor()
2017 entity = pad->entity; in camss_find_sensor()
2019 if (entity->function == MEDIA_ENT_F_CAM_SENSOR) in camss_find_sensor()
2025 * camss_get_link_freq - Get link frequency from sensor
2040 return -ENODEV; in camss_get_link_freq()
2044 return v4l2_get_link_freq(subdev->ctrl_handler, bpp, 2 * lanes); in camss_get_link_freq()
2048 * camss_get_pixel_clock - Get pixel clock rate from sensor
2062 return -ENODEV; in camss_get_pixel_clock()
2066 ctrl = v4l2_ctrl_find(subdev->ctrl_handler, V4L2_CID_PIXEL_RATE); in camss_get_pixel_clock()
2069 return -EINVAL; in camss_get_pixel_clock()
2080 if (id < camss->res->vfe_num) { in camss_pm_domain_on()
2081 struct vfe_device *vfe = &camss->vfe[id]; in camss_pm_domain_on()
2083 ret = vfe->res->hw_ops->pm_domain_on(vfe); in camss_pm_domain_on()
2091 if (id < camss->res->vfe_num) { in camss_pm_domain_off()
2092 struct vfe_device *vfe = &camss->vfe[id]; in camss_pm_domain_off()
2094 vfe->res->hw_ops->pm_domain_off(vfe); in camss_pm_domain_off()
2100 int ret = -EINVAL; in vfe_parent_dev_ops_get()
2102 if (id < camss->res->vfe_num) { in vfe_parent_dev_ops_get()
2103 struct vfe_device *vfe = &camss->vfe[id]; in vfe_parent_dev_ops_get()
2113 if (id < camss->res->vfe_num) { in vfe_parent_dev_ops_put()
2114 struct vfe_device *vfe = &camss->vfe[id]; in vfe_parent_dev_ops_put()
2125 if (id < camss->res->vfe_num) { in vfe_parent_dev_ops_get_base_address()
2126 struct vfe_device *vfe = &camss->vfe[id]; in vfe_parent_dev_ops_get_base_address()
2128 return vfe->base; in vfe_parent_dev_ops_get_base_address()
2141 * camss_of_parse_endpoint_node - Parse port endpoint node
2152 struct csiphy_lanes_cfg *lncfg = &csd->interface.csi2.lane_cfg; in camss_of_parse_endpoint_node()
2162 csd->interface.csiphy_id = vep.base.port; in camss_of_parse_endpoint_node()
2165 lncfg->clk.pos = mipi_csi2->clock_lane; in camss_of_parse_endpoint_node()
2166 lncfg->clk.pol = mipi_csi2->lane_polarities[0]; in camss_of_parse_endpoint_node()
2167 lncfg->num_data = mipi_csi2->num_data_lanes; in camss_of_parse_endpoint_node()
2169 lncfg->data = devm_kcalloc(dev, in camss_of_parse_endpoint_node()
2170 lncfg->num_data, sizeof(*lncfg->data), in camss_of_parse_endpoint_node()
2172 if (!lncfg->data) in camss_of_parse_endpoint_node()
2173 return -ENOMEM; in camss_of_parse_endpoint_node()
2175 for (i = 0; i < lncfg->num_data; i++) { in camss_of_parse_endpoint_node()
2176 lncfg->data[i].pos = mipi_csi2->data_lanes[i]; in camss_of_parse_endpoint_node()
2177 lncfg->data[i].pol = mipi_csi2->lane_polarities[i + 1]; in camss_of_parse_endpoint_node()
2184 * camss_of_parse_ports - Parse ports node
2192 struct device *dev = camss->dev; in camss_of_parse_ports()
2197 for_each_endpoint_of_node(dev->of_node, node) { in camss_of_parse_ports()
2206 ret = -EINVAL; in camss_of_parse_ports()
2210 csd = v4l2_async_nf_add_fwnode(&camss->notifier, in camss_of_parse_ports()
2234 * camss_init_subdevices - Initialize subdev structures and resources
2241 struct platform_device *pdev = to_platform_device(camss->dev); in camss_init_subdevices()
2242 const struct camss_resources *res = camss->res; in camss_init_subdevices()
2246 for (i = 0; i < camss->res->csiphy_num; i++) { in camss_init_subdevices()
2247 ret = msm_csiphy_subdev_init(camss, &camss->csiphy[i], in camss_init_subdevices()
2248 &res->csiphy_res[i], i); in camss_init_subdevices()
2250 dev_err(camss->dev, in camss_init_subdevices()
2251 "Failed to init csiphy%d sub-device: %d\n", in camss_init_subdevices()
2258 for (i = 0; i < camss->res->vfe_num; i++) { in camss_init_subdevices()
2259 ret = msm_vfe_subdev_init(camss, &camss->vfe[i], in camss_init_subdevices()
2260 &res->vfe_res[i], i); in camss_init_subdevices()
2262 dev_err(camss->dev, in camss_init_subdevices()
2263 "Fail to init vfe%d sub-device: %d\n", i, ret); in camss_init_subdevices()
2269 if (res->csid_wrapper_res) { in camss_init_subdevices()
2270 char *reg = res->csid_wrapper_res->reg; in camss_init_subdevices()
2276 camss->csid_wrapper_base = base; in camss_init_subdevices()
2279 for (i = 0; i < camss->res->csid_num; i++) { in camss_init_subdevices()
2280 ret = msm_csid_subdev_init(camss, &camss->csid[i], in camss_init_subdevices()
2281 &res->csid_res[i], i); in camss_init_subdevices()
2283 dev_err(camss->dev, in camss_init_subdevices()
2284 "Failed to init csid%d sub-device: %d\n", in camss_init_subdevices()
2290 ret = msm_ispif_subdev_init(camss, res->ispif_res); in camss_init_subdevices()
2292 dev_err(camss->dev, "Failed to init ispif sub-device: %d\n", in camss_init_subdevices()
2301 * camss_link_entities - Register subdev nodes and create links
2302 * camss_link_err - print error in case link creation fails
2311 dev_err(camss->dev, in camss_link_err()
2312 "Failed to link %s->%s entities: %d\n", in camss_link_err()
2319 * camss_link_entities - Register subdev nodes and create links
2329 for (i = 0; i < camss->res->csiphy_num; i++) { in camss_link_entities()
2330 for (j = 0; j < camss->res->csid_num; j++) { in camss_link_entities()
2331 ret = media_create_pad_link(&camss->csiphy[i].subdev.entity, in camss_link_entities()
2333 &camss->csid[j].subdev.entity, in camss_link_entities()
2338 camss->csiphy[i].subdev.entity.name, in camss_link_entities()
2339 camss->csid[j].subdev.entity.name, in camss_link_entities()
2346 if (camss->ispif) { in camss_link_entities()
2347 for (i = 0; i < camss->res->csid_num; i++) { in camss_link_entities()
2348 for (j = 0; j < camss->ispif->line_num; j++) { in camss_link_entities()
2349 ret = media_create_pad_link(&camss->csid[i].subdev.entity, in camss_link_entities()
2351 &camss->ispif->line[j].subdev.entity, in camss_link_entities()
2356 camss->csid[i].subdev.entity.name, in camss_link_entities()
2357 camss->ispif->line[j].subdev.entity.name, in camss_link_entities()
2364 for (i = 0; i < camss->ispif->line_num; i++) in camss_link_entities()
2365 for (k = 0; k < camss->res->vfe_num; k++) in camss_link_entities()
2366 for (j = 0; j < camss->vfe[k].res->line_num; j++) { in camss_link_entities()
2367 struct v4l2_subdev *ispif = &camss->ispif->line[i].subdev; in camss_link_entities()
2368 struct v4l2_subdev *vfe = &camss->vfe[k].line[j].subdev; in camss_link_entities()
2370 ret = media_create_pad_link(&ispif->entity, in camss_link_entities()
2372 &vfe->entity, in camss_link_entities()
2376 camss_link_err(camss, ispif->entity.name, in camss_link_entities()
2377 vfe->entity.name, in camss_link_entities()
2383 for (i = 0; i < camss->res->csid_num; i++) in camss_link_entities()
2384 for (k = 0; k < camss->res->vfe_num; k++) in camss_link_entities()
2385 for (j = 0; j < camss->vfe[k].res->line_num; j++) { in camss_link_entities()
2386 struct v4l2_subdev *csid = &camss->csid[i].subdev; in camss_link_entities()
2387 struct v4l2_subdev *vfe = &camss->vfe[k].line[j].subdev; in camss_link_entities()
2389 ret = media_create_pad_link(&csid->entity, in camss_link_entities()
2391 &vfe->entity, in camss_link_entities()
2395 camss_link_err(camss, csid->entity.name, in camss_link_entities()
2396 vfe->entity.name, in camss_link_entities()
2407 * camss_register_entities - Register subdev nodes and create links
2417 for (i = 0; i < camss->res->csiphy_num; i++) { in camss_register_entities()
2418 ret = msm_csiphy_register_entity(&camss->csiphy[i], in camss_register_entities()
2419 &camss->v4l2_dev); in camss_register_entities()
2421 dev_err(camss->dev, in camss_register_entities()
2428 for (i = 0; i < camss->res->csid_num; i++) { in camss_register_entities()
2429 ret = msm_csid_register_entity(&camss->csid[i], in camss_register_entities()
2430 &camss->v4l2_dev); in camss_register_entities()
2432 dev_err(camss->dev, in camss_register_entities()
2439 ret = msm_ispif_register_entities(camss->ispif, in camss_register_entities()
2440 &camss->v4l2_dev); in camss_register_entities()
2442 dev_err(camss->dev, "Failed to register ispif entities: %d\n", ret); in camss_register_entities()
2446 for (i = 0; i < camss->res->vfe_num; i++) { in camss_register_entities()
2447 ret = msm_vfe_register_entities(&camss->vfe[i], in camss_register_entities()
2448 &camss->v4l2_dev); in camss_register_entities()
2450 dev_err(camss->dev, in camss_register_entities()
2460 for (i--; i >= 0; i--) in camss_register_entities()
2461 msm_vfe_unregister_entities(&camss->vfe[i]); in camss_register_entities()
2464 msm_ispif_unregister_entities(camss->ispif); in camss_register_entities()
2466 i = camss->res->csid_num; in camss_register_entities()
2468 for (i--; i >= 0; i--) in camss_register_entities()
2469 msm_csid_unregister_entity(&camss->csid[i]); in camss_register_entities()
2471 i = camss->res->csiphy_num; in camss_register_entities()
2473 for (i--; i >= 0; i--) in camss_register_entities()
2474 msm_csiphy_unregister_entity(&camss->csiphy[i]); in camss_register_entities()
2480 * camss_unregister_entities - Unregister subdev nodes
2489 for (i = 0; i < camss->res->csiphy_num; i++) in camss_unregister_entities()
2490 msm_csiphy_unregister_entity(&camss->csiphy[i]); in camss_unregister_entities()
2492 for (i = 0; i < camss->res->csid_num; i++) in camss_unregister_entities()
2493 msm_csid_unregister_entity(&camss->csid[i]); in camss_unregister_entities()
2495 msm_ispif_unregister_entities(camss->ispif); in camss_unregister_entities()
2497 for (i = 0; i < camss->res->vfe_num; i++) in camss_unregister_entities()
2498 msm_vfe_unregister_entities(&camss->vfe[i]); in camss_unregister_entities()
2508 u8 id = csd->interface.csiphy_id; in camss_subdev_notifier_bound()
2509 struct csiphy_device *csiphy = &camss->csiphy[id]; in camss_subdev_notifier_bound()
2511 csiphy->cfg.csi2 = &csd->interface.csi2; in camss_subdev_notifier_bound()
2512 subdev->host_priv = csiphy; in camss_subdev_notifier_bound()
2520 struct v4l2_device *v4l2_dev = &camss->v4l2_dev; in camss_subdev_notifier_complete()
2524 list_for_each_entry(sd, &v4l2_dev->subdevs, list) { in camss_subdev_notifier_complete()
2525 if (sd->host_priv) { in camss_subdev_notifier_complete()
2526 struct media_entity *sensor = &sd->entity; in camss_subdev_notifier_complete()
2528 (struct csiphy_device *) sd->host_priv; in camss_subdev_notifier_complete()
2529 struct media_entity *input = &csiphy->subdev.entity; in camss_subdev_notifier_complete()
2532 for (i = 0; i < sensor->num_pads; i++) { in camss_subdev_notifier_complete()
2533 if (sensor->pads[i].flags & MEDIA_PAD_FL_SOURCE) in camss_subdev_notifier_complete()
2536 if (i == sensor->num_pads) { in camss_subdev_notifier_complete()
2537 dev_err(camss->dev, in camss_subdev_notifier_complete()
2539 return -EINVAL; in camss_subdev_notifier_complete()
2546 camss_link_err(camss, sensor->name, in camss_subdev_notifier_complete()
2547 input->name, in camss_subdev_notifier_complete()
2554 ret = v4l2_device_register_subdev_nodes(&camss->v4l2_dev); in camss_subdev_notifier_complete()
2558 return media_device_register(&camss->media_dev); in camss_subdev_notifier_complete()
2572 const struct camss_resources *res = camss->res; in camss_configure_pd()
2573 struct device *dev = camss->dev; in camss_configure_pd()
2578 camss->genpd_num = of_count_phandle_with_args(dev->of_node, in camss_configure_pd()
2579 "power-domains", in camss_configure_pd()
2580 "#power-domain-cells"); in camss_configure_pd()
2581 if (camss->genpd_num < 0) { in camss_configure_pd()
2583 return camss->genpd_num; in camss_configure_pd()
2591 if (camss->genpd_num == 1) in camss_configure_pd()
2594 /* count the # of VFEs which have flagged power-domain */ in camss_configure_pd()
2595 for (vfepd_num = i = 0; i < camss->res->vfe_num; i++) { in camss_configure_pd()
2596 if (res->vfe_res[i].vfe.has_pd) in camss_configure_pd()
2601 * If the number of power-domains is greater than the number of VFEs in camss_configure_pd()
2602 * then the additional power-domain is for the entire CAMSS block. in camss_configure_pd()
2604 if (!(camss->genpd_num > vfepd_num)) in camss_configure_pd()
2608 * If a power-domain name is defined try to use it. in camss_configure_pd()
2612 if (camss->res->pd_name) { in camss_configure_pd()
2613 camss->genpd = dev_pm_domain_attach_by_name(camss->dev, in camss_configure_pd()
2614 camss->res->pd_name); in camss_configure_pd()
2615 if (IS_ERR(camss->genpd)) in camss_configure_pd()
2616 return PTR_ERR(camss->genpd); in camss_configure_pd()
2619 if (!camss->genpd) { in camss_configure_pd()
2622 * item in the power-domain list. in camss_configure_pd()
2624 camss->genpd = dev_pm_domain_attach_by_id(camss->dev, in camss_configure_pd()
2625 camss->genpd_num - 1); in camss_configure_pd()
2626 if (IS_ERR(camss->genpd)) in camss_configure_pd()
2627 return PTR_ERR(camss->genpd); in camss_configure_pd()
2630 if (!camss->genpd) in camss_configure_pd()
2631 return -ENODEV; in camss_configure_pd()
2633 camss->genpd_link = device_link_add(camss->dev, camss->genpd, in camss_configure_pd()
2636 if (!camss->genpd_link) { in camss_configure_pd()
2637 ret = -EINVAL; in camss_configure_pd()
2644 dev_pm_domain_detach(camss->genpd, true); in camss_configure_pd()
2654 icc_res = camss->res->icc_res; in camss_icc_get()
2656 for (i = 0; i < camss->res->icc_path_num; i++) { in camss_icc_get()
2657 camss->icc_path[i] = devm_of_icc_get(camss->dev, in camss_icc_get()
2659 if (IS_ERR(camss->icc_path[i])) in camss_icc_get()
2660 return PTR_ERR(camss->icc_path[i]); in camss_icc_get()
2670 for (i = 0; i < camss->res->vfe_num; i++) in camss_genpd_subdevice_cleanup()
2671 msm_vfe_genpd_cleanup(&camss->vfe[i]); in camss_genpd_subdevice_cleanup()
2676 if (camss->genpd_num == 1) in camss_genpd_cleanup()
2681 if (camss->genpd_link) in camss_genpd_cleanup()
2682 device_link_del(camss->genpd_link); in camss_genpd_cleanup()
2684 dev_pm_domain_detach(camss->genpd, true); in camss_genpd_cleanup()
2688 * camss_probe - Probe CAMSS platform device
2695 struct device *dev = &pdev->dev; in camss_probe()
2702 return -ENOMEM; in camss_probe()
2704 camss->res = of_device_get_match_data(dev); in camss_probe()
2706 atomic_set(&camss->ref_count, 0); in camss_probe()
2707 camss->dev = dev; in camss_probe()
2710 camss->csiphy = devm_kcalloc(dev, camss->res->csiphy_num, in camss_probe()
2711 sizeof(*camss->csiphy), GFP_KERNEL); in camss_probe()
2712 if (!camss->csiphy) in camss_probe()
2713 return -ENOMEM; in camss_probe()
2715 camss->csid = devm_kcalloc(dev, camss->res->csid_num, sizeof(*camss->csid), in camss_probe()
2717 if (!camss->csid) in camss_probe()
2718 return -ENOMEM; in camss_probe()
2720 if (camss->res->version == CAMSS_8x16 || in camss_probe()
2721 camss->res->version == CAMSS_8x53 || in camss_probe()
2722 camss->res->version == CAMSS_8x96) { in camss_probe()
2723 camss->ispif = devm_kcalloc(dev, 1, sizeof(*camss->ispif), GFP_KERNEL); in camss_probe()
2724 if (!camss->ispif) in camss_probe()
2725 return -ENOMEM; in camss_probe()
2728 camss->vfe = devm_kcalloc(dev, camss->res->vfe_num, in camss_probe()
2729 sizeof(*camss->vfe), GFP_KERNEL); in camss_probe()
2730 if (!camss->vfe) in camss_probe()
2731 return -ENOMEM; in camss_probe()
2751 camss->media_dev.dev = camss->dev; in camss_probe()
2752 strscpy(camss->media_dev.model, "Qualcomm Camera Subsystem", in camss_probe()
2753 sizeof(camss->media_dev.model)); in camss_probe()
2754 camss->media_dev.ops = &camss_media_ops; in camss_probe()
2755 media_device_init(&camss->media_dev); in camss_probe()
2757 camss->v4l2_dev.mdev = &camss->media_dev; in camss_probe()
2758 ret = v4l2_device_register(camss->dev, &camss->v4l2_dev); in camss_probe()
2764 v4l2_async_nf_init(&camss->notifier, &camss->v4l2_dev); in camss_probe()
2778 ret = camss->res->link_entities(camss); in camss_probe()
2783 camss->notifier.ops = &camss_subdev_notifier_ops; in camss_probe()
2785 ret = v4l2_async_nf_register(&camss->notifier); in camss_probe()
2793 ret = v4l2_device_register_subdev_nodes(&camss->v4l2_dev); in camss_probe()
2800 ret = media_device_register(&camss->media_dev); in camss_probe()
2813 v4l2_device_unregister(&camss->v4l2_dev); in camss_probe()
2814 v4l2_async_nf_cleanup(&camss->notifier); in camss_probe()
2824 v4l2_device_unregister(&camss->v4l2_dev); in camss_delete()
2825 media_device_unregister(&camss->media_dev); in camss_delete()
2826 media_device_cleanup(&camss->media_dev); in camss_delete()
2828 pm_runtime_disable(camss->dev); in camss_delete()
2832 * camss_remove - Remove CAMSS platform device
2841 v4l2_async_nf_unregister(&camss->notifier); in camss_remove()
2842 v4l2_async_nf_cleanup(&camss->notifier); in camss_remove()
2845 if (atomic_read(&camss->ref_count) == 0) in camss_remove()
2956 { .compatible = "qcom,msm8916-camss", .data = &msm8916_resources },
2957 { .compatible = "qcom,msm8953-camss", .data = &msm8953_resources },
2958 { .compatible = "qcom,msm8996-camss", .data = &msm8996_resources },
2959 { .compatible = "qcom,sc7280-camss", .data = &sc7280_resources },
2960 { .compatible = "qcom,sc8280xp-camss", .data = &sc8280xp_resources },
2961 { .compatible = "qcom,sdm660-camss", .data = &sdm660_resources },
2962 { .compatible = "qcom,sdm845-camss", .data = &sdm845_resources },
2963 { .compatible = "qcom,sm8250-camss", .data = &sm8250_resources },
2975 for (i = 0; i < camss->res->icc_path_num; i++) { in camss_runtime_suspend()
2976 ret = icc_set_bw(camss->icc_path[i], 0, 0); in camss_runtime_suspend()
2987 const struct resources_icc *icc_res = camss->res->icc_res; in camss_runtime_resume()
2991 for (i = 0; i < camss->res->icc_path_num; i++) { in camss_runtime_resume()
2992 ret = icc_set_bw(camss->icc_path[i], in camss_runtime_resume()
3012 .name = "qcom-camss",
3020 MODULE_ALIAS("platform:qcom-camss");