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