1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 * Copyright (c) 2020 MediaTek Inc.
4 */
5
6#ifndef _MTK_DISP_DRV_H_
7#define _MTK_DISP_DRV_H_
8
9#include <linux/soc/mediatek/mtk-cmdq.h>
10#include <linux/soc/mediatek/mtk-mmsys.h>
11#include <linux/soc/mediatek/mtk-mutex.h>
12#include "mtk_drm_plane.h"
13#include "mtk_mdp_rdma.h"
14
15int mtk_aal_clk_enable(struct device *dev);
16void mtk_aal_clk_disable(struct device *dev);
17void mtk_aal_config(struct device *dev, unsigned int w,
18		    unsigned int h, unsigned int vrefresh,
19		    unsigned int bpc, struct cmdq_pkt *cmdq_pkt);
20void mtk_aal_gamma_set(struct device *dev, struct drm_crtc_state *state);
21void mtk_aal_start(struct device *dev);
22void mtk_aal_stop(struct device *dev);
23
24void mtk_ccorr_ctm_set(struct device *dev, struct drm_crtc_state *state);
25int mtk_ccorr_clk_enable(struct device *dev);
26void mtk_ccorr_clk_disable(struct device *dev);
27void mtk_ccorr_config(struct device *dev, unsigned int w,
28		      unsigned int h, unsigned int vrefresh,
29		      unsigned int bpc, struct cmdq_pkt *cmdq_pkt);
30void mtk_ccorr_start(struct device *dev);
31void mtk_ccorr_stop(struct device *dev);
32
33void mtk_color_bypass_shadow(struct device *dev);
34int mtk_color_clk_enable(struct device *dev);
35void mtk_color_clk_disable(struct device *dev);
36void mtk_color_config(struct device *dev, unsigned int w,
37		      unsigned int h, unsigned int vrefresh,
38		      unsigned int bpc, struct cmdq_pkt *cmdq_pkt);
39void mtk_color_start(struct device *dev);
40
41void mtk_dither_set_common(void __iomem *regs, struct cmdq_client_reg *cmdq_reg,
42			   unsigned int bpc, unsigned int cfg,
43			   unsigned int dither_en, struct cmdq_pkt *cmdq_pkt);
44
45void mtk_dpi_start(struct device *dev);
46void mtk_dpi_stop(struct device *dev);
47
48void mtk_dsi_ddp_start(struct device *dev);
49void mtk_dsi_ddp_stop(struct device *dev);
50
51int mtk_gamma_clk_enable(struct device *dev);
52void mtk_gamma_clk_disable(struct device *dev);
53void mtk_gamma_config(struct device *dev, unsigned int w,
54		      unsigned int h, unsigned int vrefresh,
55		      unsigned int bpc, struct cmdq_pkt *cmdq_pkt);
56void mtk_gamma_set(struct device *dev, struct drm_crtc_state *state);
57void mtk_gamma_set_common(void __iomem *regs, struct drm_crtc_state *state, bool lut_diff);
58void mtk_gamma_start(struct device *dev);
59void mtk_gamma_stop(struct device *dev);
60
61int mtk_merge_clk_enable(struct device *dev);
62void mtk_merge_clk_disable(struct device *dev);
63void mtk_merge_config(struct device *dev, unsigned int width,
64		      unsigned int height, unsigned int vrefresh,
65		      unsigned int bpc, struct cmdq_pkt *cmdq_pkt);
66void mtk_merge_start(struct device *dev);
67void mtk_merge_stop(struct device *dev);
68void mtk_merge_advance_config(struct device *dev, unsigned int l_w, unsigned int r_w,
69			      unsigned int h, unsigned int vrefresh, unsigned int bpc,
70			      struct cmdq_pkt *cmdq_pkt);
71void mtk_merge_start_cmdq(struct device *dev, struct cmdq_pkt *cmdq_pkt);
72void mtk_merge_stop_cmdq(struct device *dev, struct cmdq_pkt *cmdq_pkt);
73
74void mtk_ovl_bgclr_in_on(struct device *dev);
75void mtk_ovl_bgclr_in_off(struct device *dev);
76void mtk_ovl_bypass_shadow(struct device *dev);
77int mtk_ovl_clk_enable(struct device *dev);
78void mtk_ovl_clk_disable(struct device *dev);
79void mtk_ovl_config(struct device *dev, unsigned int w,
80		    unsigned int h, unsigned int vrefresh,
81		    unsigned int bpc, struct cmdq_pkt *cmdq_pkt);
82int mtk_ovl_layer_check(struct device *dev, unsigned int idx,
83			struct mtk_plane_state *mtk_state);
84void mtk_ovl_layer_config(struct device *dev, unsigned int idx,
85			  struct mtk_plane_state *state,
86			  struct cmdq_pkt *cmdq_pkt);
87unsigned int mtk_ovl_layer_nr(struct device *dev);
88void mtk_ovl_layer_on(struct device *dev, unsigned int idx,
89		      struct cmdq_pkt *cmdq_pkt);
90void mtk_ovl_layer_off(struct device *dev, unsigned int idx,
91		       struct cmdq_pkt *cmdq_pkt);
92void mtk_ovl_start(struct device *dev);
93void mtk_ovl_stop(struct device *dev);
94unsigned int mtk_ovl_supported_rotations(struct device *dev);
95void mtk_ovl_register_vblank_cb(struct device *dev,
96				void (*vblank_cb)(void *),
97				void *vblank_cb_data);
98void mtk_ovl_unregister_vblank_cb(struct device *dev);
99void mtk_ovl_enable_vblank(struct device *dev);
100void mtk_ovl_disable_vblank(struct device *dev);
101const u32 *mtk_ovl_get_formats(struct device *dev);
102size_t mtk_ovl_get_num_formats(struct device *dev);
103
104void mtk_ovl_adaptor_add_comp(struct device *dev, struct mtk_mutex *mutex);
105void mtk_ovl_adaptor_remove_comp(struct device *dev, struct mtk_mutex *mutex);
106void mtk_ovl_adaptor_connect(struct device *dev, struct device *mmsys_dev,
107			     unsigned int next);
108void mtk_ovl_adaptor_disconnect(struct device *dev, struct device *mmsys_dev,
109				unsigned int next);
110int mtk_ovl_adaptor_clk_enable(struct device *dev);
111void mtk_ovl_adaptor_clk_disable(struct device *dev);
112void mtk_ovl_adaptor_config(struct device *dev, unsigned int w,
113			    unsigned int h, unsigned int vrefresh,
114			    unsigned int bpc, struct cmdq_pkt *cmdq_pkt);
115void mtk_ovl_adaptor_layer_config(struct device *dev, unsigned int idx,
116				  struct mtk_plane_state *state,
117				  struct cmdq_pkt *cmdq_pkt);
118void mtk_ovl_adaptor_register_vblank_cb(struct device *dev, void (*vblank_cb)(void *),
119					void *vblank_cb_data);
120void mtk_ovl_adaptor_unregister_vblank_cb(struct device *dev);
121void mtk_ovl_adaptor_enable_vblank(struct device *dev);
122void mtk_ovl_adaptor_disable_vblank(struct device *dev);
123void mtk_ovl_adaptor_start(struct device *dev);
124void mtk_ovl_adaptor_stop(struct device *dev);
125unsigned int mtk_ovl_adaptor_layer_nr(struct device *dev);
126struct device *mtk_ovl_adaptor_dma_dev_get(struct device *dev);
127const u32 *mtk_ovl_adaptor_get_formats(struct device *dev);
128size_t mtk_ovl_adaptor_get_num_formats(struct device *dev);
129
130void mtk_rdma_bypass_shadow(struct device *dev);
131int mtk_rdma_clk_enable(struct device *dev);
132void mtk_rdma_clk_disable(struct device *dev);
133void mtk_rdma_config(struct device *dev, unsigned int width,
134		     unsigned int height, unsigned int vrefresh,
135		     unsigned int bpc, struct cmdq_pkt *cmdq_pkt);
136unsigned int mtk_rdma_layer_nr(struct device *dev);
137void mtk_rdma_layer_config(struct device *dev, unsigned int idx,
138			   struct mtk_plane_state *state,
139			   struct cmdq_pkt *cmdq_pkt);
140void mtk_rdma_start(struct device *dev);
141void mtk_rdma_stop(struct device *dev);
142void mtk_rdma_register_vblank_cb(struct device *dev,
143				 void (*vblank_cb)(void *),
144				 void *vblank_cb_data);
145void mtk_rdma_unregister_vblank_cb(struct device *dev);
146void mtk_rdma_enable_vblank(struct device *dev);
147void mtk_rdma_disable_vblank(struct device *dev);
148const u32 *mtk_rdma_get_formats(struct device *dev);
149size_t mtk_rdma_get_num_formats(struct device *dev);
150
151int mtk_mdp_rdma_clk_enable(struct device *dev);
152void mtk_mdp_rdma_clk_disable(struct device *dev);
153void mtk_mdp_rdma_start(struct device *dev, struct cmdq_pkt *cmdq_pkt);
154void mtk_mdp_rdma_stop(struct device *dev, struct cmdq_pkt *cmdq_pkt);
155void mtk_mdp_rdma_config(struct device *dev, struct mtk_mdp_rdma_cfg *cfg,
156			 struct cmdq_pkt *cmdq_pkt);
157const u32 *mtk_mdp_rdma_get_formats(struct device *dev);
158size_t mtk_mdp_rdma_get_num_formats(struct device *dev);
159
160#endif
161