Lines Matching +full:composite +full:- +full:video +full:- +full:connector

1 // SPDX-License-Identifier: GPL-2.0-or-later
16 #include <linux/soc/amlogic/meson-canvas.h>
43 * DOC: Video Processing Unit
45 * VPU Handles the Global Video Processing, it includes management of the
50 * - Full reset of entire video processing HW blocks
51 * - Scaling and setup of the VPU clock
52 * - Bus clock gates
53 * - Powering up video processing HW blocks
54 * - Powering Up HDMI controller and PHY
70 struct meson_drm *priv = dev->dev_private; in meson_irq()
72 (void)readl_relaxed(priv->io_base + _REG(VENC_INTFLAG)); in meson_irq()
85 args->pitch = ALIGN(DIV_ROUND_UP(args->width * args->bpp, 8), SZ_64); in meson_dumb_create()
86 args->size = PAGE_ALIGN(args->pitch * args->height); in meson_dumb_create()
116 for_each_endpoint_of_node(dev->of_node, ep) { in meson_vpu_has_available_connectors()
143 writel_relaxed(value, priv->io_base + _REG(VPU_RDARB_MODE_L1C1)); in meson_vpu_init()
147 writel_relaxed(value, priv->io_base + _REG(VPU_RDARB_MODE_L1C2)); in meson_vpu_init()
152 writel_relaxed(value, priv->io_base + _REG(VPU_RDARB_MODE_L2C1)); in meson_vpu_init()
156 writel_relaxed(value, priv->io_base + _REG(VPU_WRARB_MODE_L2C1)); in meson_vpu_init()
168 ap->ranges[0].base = 0; in meson_remove_framebuffers()
169 ap->ranges[0].size = ~0; in meson_remove_framebuffers()
171 drm_fb_helper_remove_conflicting_framebuffers(ap, "meson-drm-fb", in meson_remove_framebuffers()
204 /* Checks if an output connector is available */ in meson_drv_bind_master()
206 dev_err(dev, "No output connector available\n"); in meson_drv_bind_master()
207 return -ENODEV; in meson_drv_bind_master()
212 return -ENODEV; in meson_drv_bind_master()
220 ret = -ENOMEM; in meson_drv_bind_master()
223 drm->dev_private = priv; in meson_drv_bind_master()
224 priv->drm = drm; in meson_drv_bind_master()
225 priv->dev = dev; in meson_drv_bind_master()
226 priv->compat = match->compat; in meson_drv_bind_master()
227 priv->afbcd.ops = match->afbcd_ops; in meson_drv_bind_master()
236 priv->io_base = regs; in meson_drv_bind_master()
240 ret = -EINVAL; in meson_drv_bind_master()
244 regs = devm_ioremap(dev, res->start, resource_size(res)); in meson_drv_bind_master()
246 ret = -EADDRNOTAVAIL; in meson_drv_bind_master()
250 priv->hhi = devm_regmap_init_mmio(dev, regs, in meson_drv_bind_master()
252 if (IS_ERR(priv->hhi)) { in meson_drv_bind_master()
253 dev_err(&pdev->dev, "Couldn't create the HHI regmap\n"); in meson_drv_bind_master()
254 ret = PTR_ERR(priv->hhi); in meson_drv_bind_master()
258 priv->canvas = meson_canvas_get(dev); in meson_drv_bind_master()
259 if (IS_ERR(priv->canvas)) { in meson_drv_bind_master()
260 ret = PTR_ERR(priv->canvas); in meson_drv_bind_master()
264 ret = meson_canvas_alloc(priv->canvas, &priv->canvas_id_osd1); in meson_drv_bind_master()
267 ret = meson_canvas_alloc(priv->canvas, &priv->canvas_id_vd1_0); in meson_drv_bind_master()
269 meson_canvas_free(priv->canvas, priv->canvas_id_osd1); in meson_drv_bind_master()
272 ret = meson_canvas_alloc(priv->canvas, &priv->canvas_id_vd1_1); in meson_drv_bind_master()
274 meson_canvas_free(priv->canvas, priv->canvas_id_osd1); in meson_drv_bind_master()
275 meson_canvas_free(priv->canvas, priv->canvas_id_vd1_0); in meson_drv_bind_master()
278 ret = meson_canvas_alloc(priv->canvas, &priv->canvas_id_vd1_2); in meson_drv_bind_master()
280 meson_canvas_free(priv->canvas, priv->canvas_id_osd1); in meson_drv_bind_master()
281 meson_canvas_free(priv->canvas, priv->canvas_id_vd1_0); in meson_drv_bind_master()
282 meson_canvas_free(priv->canvas, priv->canvas_id_vd1_1); in meson_drv_bind_master()
286 priv->vsync_irq = platform_get_irq(pdev, 0); in meson_drv_bind_master()
295 priv->limits = &meson_drm_soc_attrs[i].limits; in meson_drv_bind_master()
306 drm->mode_config.max_width = 3840; in meson_drv_bind_master()
307 drm->mode_config.max_height = 2160; in meson_drv_bind_master()
308 drm->mode_config.funcs = &meson_mode_config_funcs; in meson_drv_bind_master()
309 drm->mode_config.helper_private = &meson_mode_config_helpers; in meson_drv_bind_master()
317 if (priv->afbcd.ops) { in meson_drv_bind_master()
318 ret = priv->afbcd.ops->init(priv); in meson_drv_bind_master()
330 ret = component_bind_all(drm->dev, drm); in meson_drv_bind_master()
332 dev_err(drm->dev, "Couldn't bind all components\n"); in meson_drv_bind_master()
349 ret = drm_irq_install(drm, priv->vsync_irq); in meson_drv_bind_master()
383 struct drm_device *drm = priv->drm; in meson_drv_unbind()
385 if (priv->canvas) { in meson_drv_unbind()
386 meson_canvas_free(priv->canvas, priv->canvas_id_osd1); in meson_drv_unbind()
387 meson_canvas_free(priv->canvas, priv->canvas_id_vd1_0); in meson_drv_unbind()
388 meson_canvas_free(priv->canvas, priv->canvas_id_vd1_1); in meson_drv_unbind()
389 meson_canvas_free(priv->canvas, priv->canvas_id_vd1_2); in meson_drv_unbind()
392 if (priv->afbcd.ops) { in meson_drv_unbind()
393 priv->afbcd.ops->reset(priv); in meson_drv_unbind()
415 return drm_mode_config_helper_suspend(priv->drm); in meson_drv_pm_suspend()
429 if (priv->afbcd.ops) in meson_drv_pm_resume()
430 priv->afbcd.ops->init(priv); in meson_drv_pm_resume()
432 return drm_mode_config_helper_resume(priv->drm); in meson_drv_pm_resume()
438 dev->of_node, data); in compare_of()
440 return dev->of_node == data; in compare_of()
445 { .compatible = "composite-video-connector" },
446 { .compatible = "svideo-connector" },
447 { .compatible = "hdmi-connector" },
448 { .compatible = "dvi-connector" },
460 /* If node is a connector, return and do not add to match table */ in meson_probe_remote()
464 component_match_add(&pdev->dev, match, compare_of, remote); in meson_probe_remote()
486 struct device_node *np = pdev->dev.of_node; in meson_drv_probe()
502 return meson_drv_bind_master(&pdev->dev, false); in meson_drv_probe()
506 dev_info(&pdev->dev, "Queued %d outputs on vpu\n", count); in meson_drv_probe()
508 return component_master_add_with_match(&pdev->dev, in meson_drv_probe()
536 { .compatible = "amlogic,meson-gxbb-vpu",
538 { .compatible = "amlogic,meson-gxl-vpu",
540 { .compatible = "amlogic,meson-gxm-vpu",
542 { .compatible = "amlogic,meson-g12a-vpu",
555 .name = "meson-drm",