Lines Matching +full:mt8173 +full:- +full:disp

1 // SPDX-License-Identifier: GPL-2.0-only
13 #include <linux/dma-mapping.h>
49 if (info->num_planes != 1) in mtk_drm_mode_fb_create()
50 return ERR_PTR(-EINVAL); in mtk_drm_mode_fb_create()
207 struct mtk_drm_private *private = drm->dev_private; in mtk_drm_kms_init()
214 return -EPROBE_DEFER; in mtk_drm_kms_init()
216 pdev = of_find_device_by_node(private->mutex_node); in mtk_drm_kms_init()
218 dev_err(drm->dev, "Waiting for disp-mutex device %pOF\n", in mtk_drm_kms_init()
219 private->mutex_node); in mtk_drm_kms_init()
220 of_node_put(private->mutex_node); in mtk_drm_kms_init()
221 return -EPROBE_DEFER; in mtk_drm_kms_init()
223 private->mutex_dev = &pdev->dev; in mtk_drm_kms_init()
229 drm->mode_config.min_width = 64; in mtk_drm_kms_init()
230 drm->mode_config.min_height = 64; in mtk_drm_kms_init()
237 drm->mode_config.max_width = 4096; in mtk_drm_kms_init()
238 drm->mode_config.max_height = 4096; in mtk_drm_kms_init()
239 drm->mode_config.funcs = &mtk_drm_mode_config_funcs; in mtk_drm_kms_init()
240 drm->mode_config.helper_private = &mtk_drm_mode_config_helpers; in mtk_drm_kms_init()
242 ret = component_bind_all(drm->dev, drm); in mtk_drm_kms_init()
249 * OVL0 -> COLOR0 -> AAL -> OD -> RDMA0 -> UFOE -> DSI0 ... in mtk_drm_kms_init()
251 ret = mtk_drm_crtc_create(drm, private->data->main_path, in mtk_drm_kms_init()
252 private->data->main_len); in mtk_drm_kms_init()
255 /* ... and OVL1 -> COLOR1 -> GAMMA -> RDMA1 -> DPI0. */ in mtk_drm_kms_init()
256 ret = mtk_drm_crtc_create(drm, private->data->ext_path, in mtk_drm_kms_init()
257 private->data->ext_len); in mtk_drm_kms_init()
261 ret = mtk_drm_crtc_create(drm, private->data->third_path, in mtk_drm_kms_init()
262 private->data->third_len); in mtk_drm_kms_init()
267 np = private->comp_node[private->data->main_path[0]] ?: in mtk_drm_kms_init()
268 private->comp_node[private->data->ext_path[0]]; in mtk_drm_kms_init()
271 ret = -ENODEV; in mtk_drm_kms_init()
272 dev_err(drm->dev, "Need at least one OVL device\n"); in mtk_drm_kms_init()
276 dma_dev = &pdev->dev; in mtk_drm_kms_init()
277 private->dma_dev = dma_dev; in mtk_drm_kms_init()
299 component_unbind_all(drm->dev, drm); in mtk_drm_kms_init()
301 put_device(private->mutex_dev); in mtk_drm_kms_init()
310 component_unbind_all(drm->dev, drm); in mtk_drm_kms_deinit()
317 * not dev->dev, as drm_gem_prime_import() expects.
322 struct mtk_drm_private *private = dev->dev_private; in mtk_drm_gem_prime_import()
324 return drm_gem_prime_import_dev(dev, dma_buf, private->dma_dev); in mtk_drm_gem_prime_import()
348 return dev->of_node == data; in compare_of()
361 drm->dev_private = private; in mtk_drm_bind()
362 private->drm = drm; in mtk_drm_bind()
387 drm_dev_unregister(private->drm); in mtk_drm_unbind()
388 mtk_drm_kms_deinit(private->drm); in mtk_drm_unbind()
389 drm_dev_put(private->drm); in mtk_drm_unbind()
390 private->num_pipes = 0; in mtk_drm_unbind()
391 private->drm = NULL; in mtk_drm_unbind()
400 { .compatible = "mediatek,mt2701-disp-ovl",
402 { .compatible = "mediatek,mt8167-disp-ovl",
404 { .compatible = "mediatek,mt8173-disp-ovl",
406 { .compatible = "mediatek,mt8183-disp-ovl",
408 { .compatible = "mediatek,mt8183-disp-ovl-2l",
410 { .compatible = "mediatek,mt2701-disp-rdma",
412 { .compatible = "mediatek,mt8167-disp-rdma",
414 { .compatible = "mediatek,mt8173-disp-rdma",
416 { .compatible = "mediatek,mt8183-disp-rdma",
418 { .compatible = "mediatek,mt8173-disp-wdma",
420 { .compatible = "mediatek,mt8167-disp-ccorr",
422 { .compatible = "mediatek,mt8183-disp-ccorr",
424 { .compatible = "mediatek,mt2701-disp-color",
426 { .compatible = "mediatek,mt8167-disp-color",
428 { .compatible = "mediatek,mt8173-disp-color",
430 { .compatible = "mediatek,mt8167-disp-aal",
432 { .compatible = "mediatek,mt8173-disp-aal",
434 { .compatible = "mediatek,mt8183-disp-aal",
436 { .compatible = "mediatek,mt8167-disp-gamma",
438 { .compatible = "mediatek,mt8173-disp-gamma",
440 { .compatible = "mediatek,mt8183-disp-gamma",
442 { .compatible = "mediatek,mt8167-disp-dither",
444 { .compatible = "mediatek,mt8183-disp-dither",
446 { .compatible = "mediatek,mt8173-disp-ufoe",
448 { .compatible = "mediatek,mt2701-dsi",
450 { .compatible = "mediatek,mt8167-dsi",
452 { .compatible = "mediatek,mt8173-dsi",
454 { .compatible = "mediatek,mt8183-dsi",
456 { .compatible = "mediatek,mt2701-dpi",
458 { .compatible = "mediatek,mt8173-dpi",
460 { .compatible = "mediatek,mt8183-dpi",
462 { .compatible = "mediatek,mt2701-disp-mutex",
464 { .compatible = "mediatek,mt2712-disp-mutex",
466 { .compatible = "mediatek,mt8167-disp-mutex",
468 { .compatible = "mediatek,mt8173-disp-mutex",
470 { .compatible = "mediatek,mt8183-disp-mutex",
472 { .compatible = "mediatek,mt2701-disp-pwm",
474 { .compatible = "mediatek,mt8167-disp-pwm",
476 { .compatible = "mediatek,mt8173-disp-pwm",
478 { .compatible = "mediatek,mt8173-disp-od",
484 { .compatible = "mediatek,mt2701-mmsys",
486 { .compatible = "mediatek,mt7623-mmsys",
488 { .compatible = "mediatek,mt2712-mmsys",
490 { .compatible = "mediatek,mt8167-mmsys",
492 { .compatible = "mediatek,mt8173-mmsys",
494 { .compatible = "mediatek,mt8183-mmsys",
502 struct device *dev = &pdev->dev; in mtk_drm_probe()
503 struct device_node *phandle = dev->parent->of_node; in mtk_drm_probe()
513 return -ENOMEM; in mtk_drm_probe()
515 private->mmsys_dev = dev->parent; in mtk_drm_probe()
516 if (!private->mmsys_dev) { in mtk_drm_probe()
518 return -ENODEV; in mtk_drm_probe()
523 return -ENODEV; in mtk_drm_probe()
525 private->data = of_id->data; in mtk_drm_probe()
527 /* Iterate over sibling DISP function blocks */ in mtk_drm_probe()
528 for_each_child_of_node(phandle->parent, node) { in mtk_drm_probe()
543 comp_type = (enum mtk_ddp_comp_type)of_id->data; in mtk_drm_probe()
546 private->mutex_node = of_node_get(node); in mtk_drm_probe()
557 private->comp_node[comp_id] = of_node_get(node); in mtk_drm_probe()
579 ret = mtk_ddp_comp_init(node, &private->ddp_comp[comp_id], comp_id); in mtk_drm_probe()
586 if (!private->mutex_node) { in mtk_drm_probe()
587 dev_err(dev, "Failed to find disp-mutex node\n"); in mtk_drm_probe()
588 ret = -ENODEV; in mtk_drm_probe()
605 of_node_put(private->mutex_node); in mtk_drm_probe()
607 of_node_put(private->comp_node[i]); in mtk_drm_probe()
608 if (private->ddp_comp[i].larb_dev) in mtk_drm_probe()
609 put_device(private->ddp_comp[i].larb_dev); in mtk_drm_probe()
619 component_master_del(&pdev->dev, &mtk_drm_ops); in mtk_drm_remove()
620 pm_runtime_disable(&pdev->dev); in mtk_drm_remove()
621 of_node_put(private->mutex_node); in mtk_drm_remove()
623 of_node_put(private->comp_node[i]); in mtk_drm_remove()
632 struct drm_device *drm = private->drm; in mtk_drm_sys_suspend()
643 struct drm_device *drm = private->drm; in mtk_drm_sys_resume()
659 .name = "mediatek-drm",