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