1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#ifndef __MSM_KMS_H__
19#define __MSM_KMS_H__
20
21#include <linux/clk.h>
22#include <linux/regulator/consumer.h>
23
24#include "msm_drv.h"
25
26#define MAX_PLANE 4
27
28
29
30
31
32
33struct msm_kms_funcs {
34
35 int (*hw_init)(struct msm_kms *kms);
36
37 void (*irq_preinstall)(struct msm_kms *kms);
38 int (*irq_postinstall)(struct msm_kms *kms);
39 void (*irq_uninstall)(struct msm_kms *kms);
40 irqreturn_t (*irq)(struct msm_kms *kms);
41 int (*enable_vblank)(struct msm_kms *kms, struct drm_crtc *crtc);
42 void (*disable_vblank)(struct msm_kms *kms, struct drm_crtc *crtc);
43
44 void (*prepare_commit)(struct msm_kms *kms, struct drm_atomic_state *state);
45 void (*complete_commit)(struct msm_kms *kms, struct drm_atomic_state *state);
46
47 void (*wait_for_crtc_commit_done)(struct msm_kms *kms,
48 struct drm_crtc *crtc);
49
50 const struct msm_format *(*get_format)(struct msm_kms *kms, uint32_t format);
51 long (*round_pixclk)(struct msm_kms *kms, unsigned long rate,
52 struct drm_encoder *encoder);
53 int (*set_split_display)(struct msm_kms *kms,
54 struct drm_encoder *encoder,
55 struct drm_encoder *slave_encoder,
56 bool is_cmd_mode);
57
58 void (*destroy)(struct msm_kms *kms);
59};
60
61struct msm_kms {
62 const struct msm_kms_funcs *funcs;
63
64
65 int irq;
66};
67
68static inline void msm_kms_init(struct msm_kms *kms,
69 const struct msm_kms_funcs *funcs)
70{
71 kms->funcs = funcs;
72}
73
74struct msm_kms *mdp4_kms_init(struct drm_device *dev);
75struct msm_kms *mdp5_kms_init(struct drm_device *dev);
76int msm_mdss_init(struct drm_device *dev);
77void msm_mdss_destroy(struct drm_device *dev);
78
79#endif
80