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