]>
Commit | Line | Data |
---|---|---|
119f5173 CH |
1 | /* |
2 | * Copyright (c) 2015 MediaTek Inc. | |
3 | * | |
4 | * This program is free software; you can redistribute it and/or modify | |
5 | * it under the terms of the GNU General Public License version 2 as | |
6 | * published by the Free Software Foundation. | |
7 | * | |
8 | * This program is distributed in the hope that it will be useful, | |
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
11 | * GNU General Public License for more details. | |
12 | */ | |
13 | ||
14 | #ifndef MTK_DRM_DDP_COMP_H | |
15 | #define MTK_DRM_DDP_COMP_H | |
16 | ||
17 | #include <linux/io.h> | |
18 | ||
19 | struct device; | |
20 | struct device_node; | |
21 | struct drm_crtc; | |
22 | struct drm_device; | |
23 | struct mtk_plane_state; | |
2f3f4dda | 24 | struct drm_crtc_state; |
119f5173 CH |
25 | |
26 | enum mtk_ddp_comp_type { | |
27 | MTK_DISP_OVL, | |
28 | MTK_DISP_RDMA, | |
29 | MTK_DISP_WDMA, | |
30 | MTK_DISP_COLOR, | |
31 | MTK_DISP_AAL, | |
32 | MTK_DISP_GAMMA, | |
33 | MTK_DISP_UFOE, | |
34 | MTK_DSI, | |
35 | MTK_DPI, | |
36 | MTK_DISP_PWM, | |
37 | MTK_DISP_MUTEX, | |
38 | MTK_DISP_OD, | |
c37813de | 39 | MTK_DISP_BLS, |
119f5173 CH |
40 | MTK_DDP_COMP_TYPE_MAX, |
41 | }; | |
42 | ||
43 | enum mtk_ddp_comp_id { | |
44 | DDP_COMPONENT_AAL, | |
c37813de | 45 | DDP_COMPONENT_BLS, |
119f5173 CH |
46 | DDP_COMPONENT_COLOR0, |
47 | DDP_COMPONENT_COLOR1, | |
48 | DDP_COMPONENT_DPI0, | |
49 | DDP_COMPONENT_DSI0, | |
50 | DDP_COMPONENT_DSI1, | |
51 | DDP_COMPONENT_GAMMA, | |
52 | DDP_COMPONENT_OD, | |
53 | DDP_COMPONENT_OVL0, | |
54 | DDP_COMPONENT_OVL1, | |
55 | DDP_COMPONENT_PWM0, | |
56 | DDP_COMPONENT_PWM1, | |
57 | DDP_COMPONENT_RDMA0, | |
58 | DDP_COMPONENT_RDMA1, | |
59 | DDP_COMPONENT_RDMA2, | |
60 | DDP_COMPONENT_UFOE, | |
61 | DDP_COMPONENT_WDMA0, | |
62 | DDP_COMPONENT_WDMA1, | |
63 | DDP_COMPONENT_ID_MAX, | |
64 | }; | |
65 | ||
66 | struct mtk_ddp_comp; | |
67 | ||
68 | struct mtk_ddp_comp_funcs { | |
69 | void (*config)(struct mtk_ddp_comp *comp, unsigned int w, | |
72164364 | 70 | unsigned int h, unsigned int vrefresh, unsigned int bpc); |
119f5173 CH |
71 | void (*start)(struct mtk_ddp_comp *comp); |
72 | void (*stop)(struct mtk_ddp_comp *comp); | |
73 | void (*enable_vblank)(struct mtk_ddp_comp *comp, struct drm_crtc *crtc); | |
74 | void (*disable_vblank)(struct mtk_ddp_comp *comp); | |
75 | void (*layer_on)(struct mtk_ddp_comp *comp, unsigned int idx); | |
76 | void (*layer_off)(struct mtk_ddp_comp *comp, unsigned int idx); | |
77 | void (*layer_config)(struct mtk_ddp_comp *comp, unsigned int idx, | |
78 | struct mtk_plane_state *state); | |
2f3f4dda BH |
79 | void (*gamma_set)(struct mtk_ddp_comp *comp, |
80 | struct drm_crtc_state *state); | |
119f5173 CH |
81 | }; |
82 | ||
83 | struct mtk_ddp_comp { | |
84 | struct clk *clk; | |
85 | void __iomem *regs; | |
86 | int irq; | |
87 | struct device *larb_dev; | |
88 | enum mtk_ddp_comp_id id; | |
89 | const struct mtk_ddp_comp_funcs *funcs; | |
90 | }; | |
91 | ||
92 | static inline void mtk_ddp_comp_config(struct mtk_ddp_comp *comp, | |
93 | unsigned int w, unsigned int h, | |
72164364 | 94 | unsigned int vrefresh, unsigned int bpc) |
119f5173 CH |
95 | { |
96 | if (comp->funcs && comp->funcs->config) | |
72164364 | 97 | comp->funcs->config(comp, w, h, vrefresh, bpc); |
119f5173 CH |
98 | } |
99 | ||
100 | static inline void mtk_ddp_comp_start(struct mtk_ddp_comp *comp) | |
101 | { | |
102 | if (comp->funcs && comp->funcs->start) | |
103 | comp->funcs->start(comp); | |
104 | } | |
105 | ||
106 | static inline void mtk_ddp_comp_stop(struct mtk_ddp_comp *comp) | |
107 | { | |
108 | if (comp->funcs && comp->funcs->stop) | |
109 | comp->funcs->stop(comp); | |
110 | } | |
111 | ||
112 | static inline void mtk_ddp_comp_enable_vblank(struct mtk_ddp_comp *comp, | |
113 | struct drm_crtc *crtc) | |
114 | { | |
115 | if (comp->funcs && comp->funcs->enable_vblank) | |
116 | comp->funcs->enable_vblank(comp, crtc); | |
117 | } | |
118 | ||
119 | static inline void mtk_ddp_comp_disable_vblank(struct mtk_ddp_comp *comp) | |
120 | { | |
121 | if (comp->funcs && comp->funcs->disable_vblank) | |
122 | comp->funcs->disable_vblank(comp); | |
123 | } | |
124 | ||
125 | static inline void mtk_ddp_comp_layer_on(struct mtk_ddp_comp *comp, | |
126 | unsigned int idx) | |
127 | { | |
128 | if (comp->funcs && comp->funcs->layer_on) | |
129 | comp->funcs->layer_on(comp, idx); | |
130 | } | |
131 | ||
132 | static inline void mtk_ddp_comp_layer_off(struct mtk_ddp_comp *comp, | |
133 | unsigned int idx) | |
134 | { | |
135 | if (comp->funcs && comp->funcs->layer_off) | |
136 | comp->funcs->layer_off(comp, idx); | |
137 | } | |
138 | ||
139 | static inline void mtk_ddp_comp_layer_config(struct mtk_ddp_comp *comp, | |
140 | unsigned int idx, | |
141 | struct mtk_plane_state *state) | |
142 | { | |
143 | if (comp->funcs && comp->funcs->layer_config) | |
144 | comp->funcs->layer_config(comp, idx, state); | |
145 | } | |
146 | ||
2f3f4dda BH |
147 | static inline void mtk_ddp_gamma_set(struct mtk_ddp_comp *comp, |
148 | struct drm_crtc_state *state) | |
149 | { | |
150 | if (comp->funcs && comp->funcs->gamma_set) | |
151 | comp->funcs->gamma_set(comp, state); | |
152 | } | |
153 | ||
119f5173 CH |
154 | int mtk_ddp_comp_get_id(struct device_node *node, |
155 | enum mtk_ddp_comp_type comp_type); | |
156 | int mtk_ddp_comp_init(struct device *dev, struct device_node *comp_node, | |
157 | struct mtk_ddp_comp *comp, enum mtk_ddp_comp_id comp_id, | |
158 | const struct mtk_ddp_comp_funcs *funcs); | |
159 | int mtk_ddp_comp_register(struct drm_device *drm, struct mtk_ddp_comp *comp); | |
160 | void mtk_ddp_comp_unregister(struct drm_device *drm, struct mtk_ddp_comp *comp); | |
72164364 BH |
161 | void mtk_dither_set(struct mtk_ddp_comp *comp, unsigned int bpc, |
162 | unsigned int CFG); | |
119f5173 CH |
163 | |
164 | #endif /* MTK_DRM_DDP_COMP_H */ |