Commit | Line | Data |
---|---|---|
d219673d BG |
1 | /* |
2 | * Copyright (C) STMicroelectronics SA 2014 | |
3 | * Authors: Benjamin Gaignard <benjamin.gaignard@st.com> | |
4 | * Fabien Dessenne <fabien.dessenne@st.com> | |
5 | * for STMicroelectronics. | |
6 | * License terms: GNU General Public License (GPL), version 2 | |
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_layer.h" | |
16 | #include "sti_mixer.h" | |
17 | ||
18 | #define WAIT_NEXT_VSYNC_MS 50 /*ms*/ | |
19 | ||
20 | #define STI_MAX_LAYER 8 | |
21 | #define STI_MAX_MIXER 2 | |
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 | * @vtg_main: vtg for main data path | |
63 | * @vtg_aux: vtg for auxillary data path | |
64 | * @layer: array of layers | |
65 | * @nb_mixers: number of mixers for this compositor | |
66 | * @nb_layers: number of layers (GDP,VID,...) for this compositor | |
d219673d BG |
67 | * @vtg_vblank_nb: callback for VTG VSYNC notification |
68 | */ | |
69 | struct sti_compositor { | |
70 | struct device *dev; | |
71 | void __iomem *regs; | |
72 | struct sti_compositor_data data; | |
73 | struct clk *clk_compo_main; | |
74 | struct clk *clk_compo_aux; | |
75 | struct clk *clk_pix_main; | |
76 | struct clk *clk_pix_aux; | |
77 | struct reset_control *rst_main; | |
78 | struct reset_control *rst_aux; | |
79 | struct sti_mixer *mixer[STI_MAX_MIXER]; | |
80 | struct sti_vtg *vtg_main; | |
81 | struct sti_vtg *vtg_aux; | |
82 | struct sti_layer *layer[STI_MAX_LAYER]; | |
83 | int nb_mixers; | |
84 | int nb_layers; | |
d219673d BG |
85 | struct notifier_block vtg_vblank_nb; |
86 | }; | |
87 | ||
88 | #endif |