xref: /openbmc/linux/drivers/gpu/drm/sti/sti_mixer.h (revision 4b4193256c8d3bc3a5397b5cd9494c2ad386317d)
1e2842570SBenjamin Gaignard /* SPDX-License-Identifier: GPL-2.0 */
2e21e2193SBenjamin Gaignard /*
3e21e2193SBenjamin Gaignard  * Copyright (C) STMicroelectronics SA 2014
4e21e2193SBenjamin Gaignard  * Authors: Benjamin Gaignard <benjamin.gaignard@st.com>
5e21e2193SBenjamin Gaignard  *          Fabien Dessenne <fabien.dessenne@st.com>
6e21e2193SBenjamin Gaignard  *          for STMicroelectronics.
7e21e2193SBenjamin Gaignard  */
8e21e2193SBenjamin Gaignard 
9e21e2193SBenjamin Gaignard #ifndef _STI_MIXER_H_
10e21e2193SBenjamin Gaignard #define _STI_MIXER_H_
11e21e2193SBenjamin Gaignard 
125e2f97a9SSam Ravnborg #include <drm/drm_crtc.h>
135e2f97a9SSam Ravnborg 
145e2f97a9SSam Ravnborg #include <drm/drm_debugfs.h>
155e2f97a9SSam Ravnborg #include <drm/drm_file.h>
16e21e2193SBenjamin Gaignard 
179e1f05b2SVincent Abriou #include "sti_plane.h"
18e21e2193SBenjamin Gaignard 
195e2f97a9SSam Ravnborg struct device;
205e2f97a9SSam Ravnborg 
21e21e2193SBenjamin Gaignard #define to_sti_mixer(x) container_of(x, struct sti_mixer, drm_crtc)
22e21e2193SBenjamin Gaignard 
2329d1dc62SVincent Abriou enum sti_mixer_status {
2429d1dc62SVincent Abriou 	STI_MIXER_READY,
2529d1dc62SVincent Abriou 	STI_MIXER_DISABLING,
2629d1dc62SVincent Abriou 	STI_MIXER_DISABLED,
2729d1dc62SVincent Abriou };
2829d1dc62SVincent Abriou 
29e21e2193SBenjamin Gaignard /**
30e21e2193SBenjamin Gaignard  * STI Mixer subdevice structure
31e21e2193SBenjamin Gaignard  *
32e21e2193SBenjamin Gaignard  * @dev: driver device
33e21e2193SBenjamin Gaignard  * @regs: mixer registers
34e21e2193SBenjamin Gaignard  * @id: id of the mixer
35e21e2193SBenjamin Gaignard  * @drm_crtc: crtc object link to the mixer
3629d1dc62SVincent Abriou  * @status: to know the status of the mixer
37e21e2193SBenjamin Gaignard  */
38e21e2193SBenjamin Gaignard struct sti_mixer {
39e21e2193SBenjamin Gaignard 	struct device *dev;
40e21e2193SBenjamin Gaignard 	void __iomem *regs;
41e21e2193SBenjamin Gaignard 	int id;
42e21e2193SBenjamin Gaignard 	struct drm_crtc drm_crtc;
4329d1dc62SVincent Abriou 	enum sti_mixer_status status;
44e21e2193SBenjamin Gaignard };
45e21e2193SBenjamin Gaignard 
46e21e2193SBenjamin Gaignard const char *sti_mixer_to_str(struct sti_mixer *mixer);
47e21e2193SBenjamin Gaignard 
48a5f81078SVincent Abriou struct sti_mixer *sti_mixer_create(struct device *dev,
49a5f81078SVincent Abriou 				   struct drm_device *drm_dev,
50a5f81078SVincent Abriou 				   int id,
51e21e2193SBenjamin Gaignard 				   void __iomem *baseaddr);
52e21e2193SBenjamin Gaignard 
53871bcdfeSVincent Abriou int sti_mixer_set_plane_status(struct sti_mixer *mixer,
54871bcdfeSVincent Abriou 			       struct sti_plane *plane, bool status);
55871bcdfeSVincent Abriou int sti_mixer_set_plane_depth(struct sti_mixer *mixer, struct sti_plane *plane);
56e21e2193SBenjamin Gaignard int sti_mixer_active_video_area(struct sti_mixer *mixer,
57e21e2193SBenjamin Gaignard 				struct drm_display_mode *mode);
58e21e2193SBenjamin Gaignard 
59e21e2193SBenjamin Gaignard void sti_mixer_set_background_status(struct sti_mixer *mixer, bool enable);
60e21e2193SBenjamin Gaignard 
61*54ac836bSWambui Karuga void sti_mixer_debugfs_init(struct sti_mixer *mixer, struct drm_minor *minor);
6283af0a48SBenjamin Gaignard 
63e21e2193SBenjamin Gaignard /* depth in Cross-bar control = z order */
64bf60b29fSVincent Abriou #define GAM_MIXER_NB_DEPTH_LEVEL 6
65e21e2193SBenjamin Gaignard 
66e21e2193SBenjamin Gaignard #define STI_MIXER_MAIN 0
67e21e2193SBenjamin Gaignard #define STI_MIXER_AUX  1
68e21e2193SBenjamin Gaignard 
69e21e2193SBenjamin Gaignard #endif
70