Lines Matching +full:zynqmp +full:- +full:dpsub +full:- +full:1
1 // SPDX-License-Identifier: GPL-2.0
3 * ZynqMP DisplayPort Subsystem Driver
5 * Copyright (C) 2017 - 2020 Xilinx, Inc.
8 * - Hyun Woo Kwon <hyun.kwon@xilinx.com>
9 * - Laurent Pinchart <laurent.pinchart@ideasonboard.com>
13 #include <linux/dma-mapping.h>
35 /* -----------------------------------------------------------------------------
43 struct zynqmp_dpsub *dpsub = to_zynqmp_dpsub(drm); in zynqmp_dpsub_dumb_create() local
44 unsigned int pitch = DIV_ROUND_UP(args->width * args->bpp, 8); in zynqmp_dpsub_dumb_create()
47 args->pitch = ALIGN(pitch, dpsub->dma_align); in zynqmp_dpsub_dumb_create()
56 struct zynqmp_dpsub *dpsub = to_zynqmp_dpsub(drm); in zynqmp_dpsub_fb_create() local
62 cmd.pitches[i] = ALIGN(cmd.pitches[i], dpsub->dma_align); in zynqmp_dpsub_fb_create()
73 /* -----------------------------------------------------------------------------
87 .name = "zynqmp-dpsub",
90 .major = 1,
94 static int zynqmp_dpsub_drm_init(struct zynqmp_dpsub *dpsub) in zynqmp_dpsub_drm_init() argument
96 struct drm_device *drm = &dpsub->drm; in zynqmp_dpsub_drm_init()
104 drm->mode_config.funcs = &zynqmp_dpsub_mode_config_funcs; in zynqmp_dpsub_drm_init()
105 drm->mode_config.min_width = 0; in zynqmp_dpsub_drm_init()
106 drm->mode_config.min_height = 0; in zynqmp_dpsub_drm_init()
107 drm->mode_config.max_width = ZYNQMP_DISP_MAX_WIDTH; in zynqmp_dpsub_drm_init()
108 drm->mode_config.max_height = ZYNQMP_DISP_MAX_HEIGHT; in zynqmp_dpsub_drm_init()
110 ret = drm_vblank_init(drm, 1); in zynqmp_dpsub_drm_init()
121 ret = zynqmp_disp_drm_init(dpsub); in zynqmp_dpsub_drm_init()
125 ret = zynqmp_dp_drm_init(dpsub); in zynqmp_dpsub_drm_init()
146 /* -----------------------------------------------------------------------------
152 struct zynqmp_dpsub *dpsub = dev_get_drvdata(dev); in zynqmp_dpsub_suspend() local
154 return drm_mode_config_helper_suspend(&dpsub->drm); in zynqmp_dpsub_suspend()
159 struct zynqmp_dpsub *dpsub = dev_get_drvdata(dev); in zynqmp_dpsub_resume() local
161 return drm_mode_config_helper_resume(&dpsub->drm); in zynqmp_dpsub_resume()
168 /* -----------------------------------------------------------------------------
172 static int zynqmp_dpsub_init_clocks(struct zynqmp_dpsub *dpsub) in zynqmp_dpsub_init_clocks() argument
176 dpsub->apb_clk = devm_clk_get(dpsub->dev, "dp_apb_clk"); in zynqmp_dpsub_init_clocks()
177 if (IS_ERR(dpsub->apb_clk)) in zynqmp_dpsub_init_clocks()
178 return PTR_ERR(dpsub->apb_clk); in zynqmp_dpsub_init_clocks()
180 ret = clk_prepare_enable(dpsub->apb_clk); in zynqmp_dpsub_init_clocks()
182 dev_err(dpsub->dev, "failed to enable the APB clock\n"); in zynqmp_dpsub_init_clocks()
191 struct zynqmp_dpsub *dpsub; in zynqmp_dpsub_probe() local
195 dpsub = devm_drm_dev_alloc(&pdev->dev, &zynqmp_dpsub_drm_driver, in zynqmp_dpsub_probe()
197 if (IS_ERR(dpsub)) in zynqmp_dpsub_probe()
198 return PTR_ERR(dpsub); in zynqmp_dpsub_probe()
200 dpsub->dev = &pdev->dev; in zynqmp_dpsub_probe()
201 platform_set_drvdata(pdev, dpsub); in zynqmp_dpsub_probe()
203 dma_set_mask(dpsub->dev, DMA_BIT_MASK(ZYNQMP_DISP_MAX_DMA_BIT)); in zynqmp_dpsub_probe()
206 of_reserved_mem_device_init(&pdev->dev); in zynqmp_dpsub_probe()
208 ret = zynqmp_dpsub_init_clocks(dpsub); in zynqmp_dpsub_probe()
212 pm_runtime_enable(&pdev->dev); in zynqmp_dpsub_probe()
218 ret = zynqmp_dp_probe(dpsub, &dpsub->drm); in zynqmp_dpsub_probe()
222 ret = zynqmp_disp_probe(dpsub, &dpsub->drm); in zynqmp_dpsub_probe()
226 ret = zynqmp_dpsub_drm_init(dpsub); in zynqmp_dpsub_probe()
230 dev_info(&pdev->dev, "ZynqMP DisplayPort Subsystem driver probed"); in zynqmp_dpsub_probe()
235 zynqmp_disp_remove(dpsub); in zynqmp_dpsub_probe()
237 zynqmp_dp_remove(dpsub); in zynqmp_dpsub_probe()
239 pm_runtime_disable(&pdev->dev); in zynqmp_dpsub_probe()
240 clk_disable_unprepare(dpsub->apb_clk); in zynqmp_dpsub_probe()
242 of_reserved_mem_device_release(&pdev->dev); in zynqmp_dpsub_probe()
248 struct zynqmp_dpsub *dpsub = platform_get_drvdata(pdev); in zynqmp_dpsub_remove() local
249 struct drm_device *drm = &dpsub->drm; in zynqmp_dpsub_remove()
255 zynqmp_disp_remove(dpsub); in zynqmp_dpsub_remove()
256 zynqmp_dp_remove(dpsub); in zynqmp_dpsub_remove()
258 pm_runtime_disable(&pdev->dev); in zynqmp_dpsub_remove()
259 clk_disable_unprepare(dpsub->apb_clk); in zynqmp_dpsub_remove()
260 of_reserved_mem_device_release(&pdev->dev); in zynqmp_dpsub_remove()
267 struct zynqmp_dpsub *dpsub = platform_get_drvdata(pdev); in zynqmp_dpsub_shutdown() local
269 drm_atomic_helper_shutdown(&dpsub->drm); in zynqmp_dpsub_shutdown()
273 { .compatible = "xlnx,zynqmp-dpsub-1.7", },
283 .name = "zynqmp-dpsub",
292 MODULE_DESCRIPTION("ZynqMP DP Subsystem Driver");