1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (C) 2016 Marek Vasut <marex@denx.de> 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * i.MX23/i.MX28/i.MX6SX MXSFB LCD controller driver. 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #ifndef __MXSFB_DRV_H__ 9*4882a593Smuzhiyun #define __MXSFB_DRV_H__ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #include <drm/drm_crtc.h> 12*4882a593Smuzhiyun #include <drm/drm_device.h> 13*4882a593Smuzhiyun #include <drm/drm_encoder.h> 14*4882a593Smuzhiyun #include <drm/drm_plane.h> 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun struct clk; 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun struct mxsfb_devdata { 19*4882a593Smuzhiyun unsigned int transfer_count; 20*4882a593Smuzhiyun unsigned int cur_buf; 21*4882a593Smuzhiyun unsigned int next_buf; 22*4882a593Smuzhiyun unsigned int hs_wdth_mask; 23*4882a593Smuzhiyun unsigned int hs_wdth_shift; 24*4882a593Smuzhiyun bool has_overlay; 25*4882a593Smuzhiyun bool has_ctrl2; 26*4882a593Smuzhiyun }; 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun struct mxsfb_drm_private { 29*4882a593Smuzhiyun const struct mxsfb_devdata *devdata; 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun void __iomem *base; /* registers */ 32*4882a593Smuzhiyun struct clk *clk; 33*4882a593Smuzhiyun struct clk *clk_axi; 34*4882a593Smuzhiyun struct clk *clk_disp_axi; 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun struct drm_device *drm; 37*4882a593Smuzhiyun struct { 38*4882a593Smuzhiyun struct drm_plane primary; 39*4882a593Smuzhiyun struct drm_plane overlay; 40*4882a593Smuzhiyun } planes; 41*4882a593Smuzhiyun struct drm_crtc crtc; 42*4882a593Smuzhiyun struct drm_encoder encoder; 43*4882a593Smuzhiyun struct drm_connector *connector; 44*4882a593Smuzhiyun struct drm_bridge *bridge; 45*4882a593Smuzhiyun }; 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun static inline struct mxsfb_drm_private * to_mxsfb_drm_private(struct drm_device * drm)48*4882a593Smuzhiyunto_mxsfb_drm_private(struct drm_device *drm) 49*4882a593Smuzhiyun { 50*4882a593Smuzhiyun return drm->dev_private; 51*4882a593Smuzhiyun } 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun void mxsfb_enable_axi_clk(struct mxsfb_drm_private *mxsfb); 54*4882a593Smuzhiyun void mxsfb_disable_axi_clk(struct mxsfb_drm_private *mxsfb); 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun int mxsfb_kms_init(struct mxsfb_drm_private *mxsfb); 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun #endif /* __MXSFB_DRV_H__ */ 59