1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (C) STMicroelectronics SA 2014 4*4882a593Smuzhiyun * Authors: Benjamin Gaignard <benjamin.gaignard@st.com> 5*4882a593Smuzhiyun * Fabien Dessenne <fabien.dessenne@st.com> 6*4882a593Smuzhiyun * for STMicroelectronics. 7*4882a593Smuzhiyun */ 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #ifndef _STI_COMPOSITOR_H_ 10*4882a593Smuzhiyun #define _STI_COMPOSITOR_H_ 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #include <linux/clk.h> 13*4882a593Smuzhiyun #include <linux/kernel.h> 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #include "sti_mixer.h" 16*4882a593Smuzhiyun #include "sti_plane.h" 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun #define WAIT_NEXT_VSYNC_MS 50 /*ms*/ 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun #define STI_MAX_MIXER 2 21*4882a593Smuzhiyun #define STI_MAX_VID 1 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun enum sti_compositor_subdev_type { 24*4882a593Smuzhiyun STI_MIXER_MAIN_SUBDEV, 25*4882a593Smuzhiyun STI_MIXER_AUX_SUBDEV, 26*4882a593Smuzhiyun STI_GPD_SUBDEV, 27*4882a593Smuzhiyun STI_VID_SUBDEV, 28*4882a593Smuzhiyun STI_CURSOR_SUBDEV, 29*4882a593Smuzhiyun }; 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun struct sti_compositor_subdev_descriptor { 32*4882a593Smuzhiyun enum sti_compositor_subdev_type type; 33*4882a593Smuzhiyun int id; 34*4882a593Smuzhiyun unsigned int offset; 35*4882a593Smuzhiyun }; 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun /** 38*4882a593Smuzhiyun * STI Compositor data structure 39*4882a593Smuzhiyun * 40*4882a593Smuzhiyun * @nb_subdev: number of subdevices supported by the compositor 41*4882a593Smuzhiyun * @subdev_desc: subdev list description 42*4882a593Smuzhiyun */ 43*4882a593Smuzhiyun #define MAX_SUBDEV 9 44*4882a593Smuzhiyun struct sti_compositor_data { 45*4882a593Smuzhiyun unsigned int nb_subdev; 46*4882a593Smuzhiyun struct sti_compositor_subdev_descriptor subdev_desc[MAX_SUBDEV]; 47*4882a593Smuzhiyun }; 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun /** 50*4882a593Smuzhiyun * STI Compositor structure 51*4882a593Smuzhiyun * 52*4882a593Smuzhiyun * @dev: driver device 53*4882a593Smuzhiyun * @regs: registers (main) 54*4882a593Smuzhiyun * @data: device data 55*4882a593Smuzhiyun * @clk_compo_main: clock for main compo 56*4882a593Smuzhiyun * @clk_compo_aux: clock for aux compo 57*4882a593Smuzhiyun * @clk_pix_main: pixel clock for main path 58*4882a593Smuzhiyun * @clk_pix_aux: pixel clock for aux path 59*4882a593Smuzhiyun * @rst_main: reset control of the main path 60*4882a593Smuzhiyun * @rst_aux: reset control of the aux path 61*4882a593Smuzhiyun * @mixer: array of mixers 62*4882a593Smuzhiyun * @vid: array of vids 63*4882a593Smuzhiyun * @vtg: array of vtgs 64*4882a593Smuzhiyun * @vtg_vblank_nb: array of callbacks for VTG VSYNC notification 65*4882a593Smuzhiyun */ 66*4882a593Smuzhiyun struct sti_compositor { 67*4882a593Smuzhiyun struct device *dev; 68*4882a593Smuzhiyun void __iomem *regs; 69*4882a593Smuzhiyun struct sti_compositor_data data; 70*4882a593Smuzhiyun struct clk *clk_compo_main; 71*4882a593Smuzhiyun struct clk *clk_compo_aux; 72*4882a593Smuzhiyun struct clk *clk_pix_main; 73*4882a593Smuzhiyun struct clk *clk_pix_aux; 74*4882a593Smuzhiyun struct reset_control *rst_main; 75*4882a593Smuzhiyun struct reset_control *rst_aux; 76*4882a593Smuzhiyun struct sti_mixer *mixer[STI_MAX_MIXER]; 77*4882a593Smuzhiyun struct sti_vid *vid[STI_MAX_VID]; 78*4882a593Smuzhiyun struct sti_vtg *vtg[STI_MAX_MIXER]; 79*4882a593Smuzhiyun struct notifier_block vtg_vblank_nb[STI_MAX_MIXER]; 80*4882a593Smuzhiyun }; 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun void sti_compositor_debugfs_init(struct sti_compositor *compo, 83*4882a593Smuzhiyun struct drm_minor *minor); 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun #endif 86