xref: /linux/drivers/gpu/drm/sti/sti_mixer.h (revision 871bcdfea68560991bd650406e47a801ab9d635d)
1e21e2193SBenjamin Gaignard /*
2e21e2193SBenjamin Gaignard  * Copyright (C) STMicroelectronics SA 2014
3e21e2193SBenjamin Gaignard  * Authors: Benjamin Gaignard <benjamin.gaignard@st.com>
4e21e2193SBenjamin Gaignard  *          Fabien Dessenne <fabien.dessenne@st.com>
5e21e2193SBenjamin Gaignard  *          for STMicroelectronics.
6e21e2193SBenjamin Gaignard  * License terms:  GNU General Public License (GPL), version 2
7e21e2193SBenjamin Gaignard  */
8e21e2193SBenjamin Gaignard 
9e21e2193SBenjamin Gaignard #ifndef _STI_MIXER_H_
10e21e2193SBenjamin Gaignard #define _STI_MIXER_H_
11e21e2193SBenjamin Gaignard 
12e21e2193SBenjamin Gaignard #include <drm/drmP.h>
13e21e2193SBenjamin Gaignard 
14*871bcdfeSVincent Abriou #include "sti_drm_plane.h"
15e21e2193SBenjamin Gaignard 
16e21e2193SBenjamin Gaignard #define to_sti_mixer(x) container_of(x, struct sti_mixer, drm_crtc)
17e21e2193SBenjamin Gaignard 
18e21e2193SBenjamin Gaignard /**
19e21e2193SBenjamin Gaignard  * STI Mixer subdevice structure
20e21e2193SBenjamin Gaignard  *
21e21e2193SBenjamin Gaignard  * @dev: driver device
22e21e2193SBenjamin Gaignard  * @regs: mixer registers
23e21e2193SBenjamin Gaignard  * @id: id of the mixer
24e21e2193SBenjamin Gaignard  * @drm_crtc: crtc object link to the mixer
25e21e2193SBenjamin Gaignard  * @pending_event: set if a flip event is pending on crtc
265e03abc5SBenjamin Gaignard  * @enabled: to know if the mixer is active or not
27e21e2193SBenjamin Gaignard  */
28e21e2193SBenjamin Gaignard struct sti_mixer {
29e21e2193SBenjamin Gaignard 	struct device *dev;
30e21e2193SBenjamin Gaignard 	void __iomem *regs;
31e21e2193SBenjamin Gaignard 	int id;
32e21e2193SBenjamin Gaignard 	struct drm_crtc drm_crtc;
33e21e2193SBenjamin Gaignard 	struct drm_pending_vblank_event *pending_event;
345e03abc5SBenjamin Gaignard 	bool enabled;
35e21e2193SBenjamin Gaignard };
36e21e2193SBenjamin Gaignard 
37e21e2193SBenjamin Gaignard const char *sti_mixer_to_str(struct sti_mixer *mixer);
38e21e2193SBenjamin Gaignard 
39e21e2193SBenjamin Gaignard struct sti_mixer *sti_mixer_create(struct device *dev, int id,
40e21e2193SBenjamin Gaignard 				   void __iomem *baseaddr);
41e21e2193SBenjamin Gaignard 
42*871bcdfeSVincent Abriou int sti_mixer_set_plane_status(struct sti_mixer *mixer,
43*871bcdfeSVincent Abriou 			       struct sti_plane *plane, bool status);
44*871bcdfeSVincent Abriou void sti_mixer_clear_all_planes(struct sti_mixer *mixer);
45*871bcdfeSVincent Abriou int sti_mixer_set_plane_depth(struct sti_mixer *mixer, struct sti_plane *plane);
46e21e2193SBenjamin Gaignard int sti_mixer_active_video_area(struct sti_mixer *mixer,
47e21e2193SBenjamin Gaignard 				struct drm_display_mode *mode);
48e21e2193SBenjamin Gaignard 
49e21e2193SBenjamin Gaignard void sti_mixer_set_background_status(struct sti_mixer *mixer, bool enable);
50e21e2193SBenjamin Gaignard 
51e21e2193SBenjamin Gaignard /* depth in Cross-bar control = z order */
52bf60b29fSVincent Abriou #define GAM_MIXER_NB_DEPTH_LEVEL 6
53e21e2193SBenjamin Gaignard 
54e21e2193SBenjamin Gaignard #define STI_MIXER_MAIN 0
55e21e2193SBenjamin Gaignard #define STI_MIXER_AUX  1
56e21e2193SBenjamin Gaignard 
57e21e2193SBenjamin Gaignard #endif
58