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