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 |