1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#ifndef __MSM_KMS_H__
20#define __MSM_KMS_H__
21
22#include <linux/clk.h>
23#include <linux/regulator/consumer.h>
24
25#include "msm_drv.h"
26
27#define MAX_PLANE 4
28
29
30
31
32
33
34struct msm_kms_funcs {
35
36 int (*hw_init)(struct msm_kms *kms);
37
38 void (*irq_preinstall)(struct msm_kms *kms);
39 int (*irq_postinstall)(struct msm_kms *kms);
40 void (*irq_uninstall)(struct msm_kms *kms);
41 irqreturn_t (*irq)(struct msm_kms *kms);
42 int (*enable_vblank)(struct msm_kms *kms, struct drm_crtc *crtc);
43 void (*disable_vblank)(struct msm_kms *kms, struct drm_crtc *crtc);
44
45 void (*prepare_commit)(struct msm_kms *kms, struct drm_atomic_state *state);
46 void (*commit)(struct msm_kms *kms, struct drm_atomic_state *state);
47 void (*complete_commit)(struct msm_kms *kms, struct drm_atomic_state *state);
48
49 void (*wait_for_crtc_commit_done)(struct msm_kms *kms,
50 struct drm_crtc *crtc);
51
52 const struct msm_format *(*get_format)(struct msm_kms *kms,
53 const uint32_t format,
54 const uint64_t modifiers);
55
56 int (*check_modified_format)(const struct msm_kms *kms,
57 const struct msm_format *msm_fmt,
58 const struct drm_mode_fb_cmd2 *cmd,
59 struct drm_gem_object **bos);
60
61 long (*round_pixclk)(struct msm_kms *kms, unsigned long rate,
62 struct drm_encoder *encoder);
63 int (*set_split_display)(struct msm_kms *kms,
64 struct drm_encoder *encoder,
65 struct drm_encoder *slave_encoder,
66 bool is_cmd_mode);
67 void (*set_encoder_mode)(struct msm_kms *kms,
68 struct drm_encoder *encoder,
69 bool cmd_mode);
70
71 void (*destroy)(struct msm_kms *kms);
72#ifdef CONFIG_DEBUG_FS
73
74 int (*debugfs_init)(struct msm_kms *kms, struct drm_minor *minor);
75#endif
76};
77
78struct msm_kms {
79 const struct msm_kms_funcs *funcs;
80
81
82 int irq;
83
84
85 struct msm_gem_address_space *aspace;
86};
87
88static inline void msm_kms_init(struct msm_kms *kms,
89 const struct msm_kms_funcs *funcs)
90{
91 kms->funcs = funcs;
92}
93
94struct msm_kms *mdp4_kms_init(struct drm_device *dev);
95struct msm_kms *mdp5_kms_init(struct drm_device *dev);
96struct msm_kms *dpu_kms_init(struct drm_device *dev);
97
98struct msm_mdss_funcs {
99 int (*enable)(struct msm_mdss *mdss);
100 int (*disable)(struct msm_mdss *mdss);
101 void (*destroy)(struct drm_device *dev);
102};
103
104struct msm_mdss {
105 struct drm_device *dev;
106 const struct msm_mdss_funcs *funcs;
107};
108
109int mdp5_mdss_init(struct drm_device *dev);
110int dpu_mdss_init(struct drm_device *dev);
111
112#endif
113