1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | /* |
3 | * ZynqMP Display Driver |
4 | * |
5 | * Copyright (C) 2017 - 2020 Xilinx, Inc. |
6 | * |
7 | * Authors: |
8 | * - Hyun Woo Kwon <hyun.kwon@xilinx.com> |
9 | * - Laurent Pinchart <laurent.pinchart@ideasonboard.com> |
10 | */ |
11 | |
12 | #ifndef _ZYNQMP_DISP_H_ |
13 | #define _ZYNQMP_DISP_H_ |
14 | |
15 | #include <linux/types.h> |
16 | |
17 | /* |
18 | * 3840x2160 is advertised as the maximum resolution, but almost any |
19 | * resolutions under a 300Mhz pixel rate would work. Pick 4096x4096. |
20 | */ |
21 | #define ZYNQMP_DISP_MAX_WIDTH 4096 |
22 | #define ZYNQMP_DISP_MAX_HEIGHT 4096 |
23 | |
24 | /* The DPDMA is limited to 44 bit addressing. */ |
25 | #define ZYNQMP_DISP_MAX_DMA_BIT 44 |
26 | |
27 | struct device; |
28 | struct drm_format_info; |
29 | struct drm_plane_state; |
30 | struct platform_device; |
31 | struct zynqmp_disp; |
32 | struct zynqmp_disp_layer; |
33 | struct zynqmp_dpsub; |
34 | |
35 | /** |
36 | * enum zynqmp_dpsub_layer_id - Layer identifier |
37 | * @ZYNQMP_DPSUB_LAYER_VID: Video layer |
38 | * @ZYNQMP_DPSUB_LAYER_GFX: Graphics layer |
39 | */ |
40 | enum zynqmp_dpsub_layer_id { |
41 | ZYNQMP_DPSUB_LAYER_VID, |
42 | ZYNQMP_DPSUB_LAYER_GFX, |
43 | }; |
44 | |
45 | /** |
46 | * enum zynqmp_dpsub_layer_mode - Layer mode |
47 | * @ZYNQMP_DPSUB_LAYER_NONLIVE: non-live (memory) mode |
48 | * @ZYNQMP_DPSUB_LAYER_LIVE: live (stream) mode |
49 | */ |
50 | enum zynqmp_dpsub_layer_mode { |
51 | ZYNQMP_DPSUB_LAYER_NONLIVE, |
52 | ZYNQMP_DPSUB_LAYER_LIVE, |
53 | }; |
54 | |
55 | void zynqmp_disp_enable(struct zynqmp_disp *disp); |
56 | void zynqmp_disp_disable(struct zynqmp_disp *disp); |
57 | int zynqmp_disp_setup_clock(struct zynqmp_disp *disp, |
58 | unsigned long mode_clock); |
59 | |
60 | void zynqmp_disp_blend_set_global_alpha(struct zynqmp_disp *disp, |
61 | bool enable, u32 alpha); |
62 | |
63 | u32 *zynqmp_disp_layer_drm_formats(struct zynqmp_disp_layer *layer, |
64 | unsigned int *num_formats); |
65 | void zynqmp_disp_layer_enable(struct zynqmp_disp_layer *layer, |
66 | enum zynqmp_dpsub_layer_mode mode); |
67 | void zynqmp_disp_layer_disable(struct zynqmp_disp_layer *layer); |
68 | void zynqmp_disp_layer_set_format(struct zynqmp_disp_layer *layer, |
69 | const struct drm_format_info *info); |
70 | int zynqmp_disp_layer_update(struct zynqmp_disp_layer *layer, |
71 | struct drm_plane_state *state); |
72 | |
73 | int zynqmp_disp_probe(struct zynqmp_dpsub *dpsub); |
74 | void zynqmp_disp_remove(struct zynqmp_dpsub *dpsub); |
75 | |
76 | #endif /* _ZYNQMP_DISP_H_ */ |
77 | |