1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | /* |
3 | * Copyright (C) STMicroelectronics SA 2014 |
4 | * Authors: Benjamin Gaignard <benjamin.gaignard@st.com> |
5 | * Fabien Dessenne <fabien.dessenne@st.com> |
6 | * for STMicroelectronics. |
7 | */ |
8 | |
9 | #ifndef _STI_COMPOSITOR_H_ |
10 | #define _STI_COMPOSITOR_H_ |
11 | |
12 | #include <linux/clk.h> |
13 | #include <linux/kernel.h> |
14 | |
15 | #include "sti_mixer.h" |
16 | #include "sti_plane.h" |
17 | |
18 | #define WAIT_NEXT_VSYNC_MS 50 /*ms*/ |
19 | |
20 | #define STI_MAX_MIXER 2 |
21 | #define STI_MAX_VID 1 |
22 | |
23 | enum sti_compositor_subdev_type { |
24 | STI_MIXER_MAIN_SUBDEV, |
25 | STI_MIXER_AUX_SUBDEV, |
26 | STI_GPD_SUBDEV, |
27 | STI_VID_SUBDEV, |
28 | STI_CURSOR_SUBDEV, |
29 | }; |
30 | |
31 | struct sti_compositor_subdev_descriptor { |
32 | enum sti_compositor_subdev_type type; |
33 | int id; |
34 | unsigned int offset; |
35 | }; |
36 | |
37 | /** |
38 | * STI Compositor data structure |
39 | * |
40 | * @nb_subdev: number of subdevices supported by the compositor |
41 | * @subdev_desc: subdev list description |
42 | */ |
43 | #define MAX_SUBDEV 9 |
44 | struct sti_compositor_data { |
45 | unsigned int nb_subdev; |
46 | struct sti_compositor_subdev_descriptor subdev_desc[MAX_SUBDEV]; |
47 | }; |
48 | |
49 | /** |
50 | * STI Compositor structure |
51 | * |
52 | * @dev: driver device |
53 | * @regs: registers (main) |
54 | * @data: device data |
55 | * @clk_compo_main: clock for main compo |
56 | * @clk_compo_aux: clock for aux compo |
57 | * @clk_pix_main: pixel clock for main path |
58 | * @clk_pix_aux: pixel clock for aux path |
59 | * @rst_main: reset control of the main path |
60 | * @rst_aux: reset control of the aux path |
61 | * @mixer: array of mixers |
62 | * @vid: array of vids |
63 | * @vtg: array of vtgs |
64 | * @vtg_vblank_nb: array of callbacks for VTG VSYNC notification |
65 | */ |
66 | struct sti_compositor { |
67 | struct device *dev; |
68 | void __iomem *regs; |
69 | struct sti_compositor_data data; |
70 | struct clk *clk_compo_main; |
71 | struct clk *clk_compo_aux; |
72 | struct clk *clk_pix_main; |
73 | struct clk *clk_pix_aux; |
74 | struct reset_control *rst_main; |
75 | struct reset_control *rst_aux; |
76 | struct sti_mixer *mixer[STI_MAX_MIXER]; |
77 | struct sti_vid *vid[STI_MAX_VID]; |
78 | struct sti_vtg *vtg[STI_MAX_MIXER]; |
79 | struct notifier_block vtg_vblank_nb[STI_MAX_MIXER]; |
80 | }; |
81 | |
82 | void sti_compositor_debugfs_init(struct sti_compositor *compo, |
83 | struct drm_minor *minor); |
84 | |
85 | #endif |
86 | |