2 * Copyright (C) 2013 Red Hat
3 * Author: Rob Clark <robdclark@gmail.com>
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 as published by
7 * the Free Software Foundation.
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 * You should have received a copy of the GNU General Public License along with
15 * this program. If not, see <http://www.gnu.org/licenses/>.
21 #include <linux/clk.h>
22 #include <linux/regulator/consumer.h>
28 /* As there are different display controller blocks depending on the
29 * snapdragon version, the kms support is split out and the appropriate
30 * implementation is loaded at runtime. The kms module is responsible
31 * for constructing the appropriate planes/crtcs/encoders/connectors.
33 struct msm_kms_funcs
{
34 /* hw initialization: */
35 int (*hw_init
)(struct msm_kms
*kms
);
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 /* modeset, bracketing atomic_commit(): */
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
);
47 const struct msm_format
*(*get_format
)(struct msm_kms
*kms
, uint32_t format
);
48 long (*round_pixclk
)(struct msm_kms
*kms
, unsigned long rate
,
49 struct drm_encoder
*encoder
);
51 void (*preclose
)(struct msm_kms
*kms
, struct drm_file
*file
);
52 void (*destroy
)(struct msm_kms
*kms
);
56 const struct msm_kms_funcs
*funcs
;
60 struct list_head irq_list
; /* list of mdp4_irq */
61 uint32_t vblank_mask
; /* irq bits set for userspace vblank */
64 static inline void msm_kms_init(struct msm_kms
*kms
,
65 const struct msm_kms_funcs
*funcs
)
70 struct msm_kms
*mdp4_kms_init(struct drm_device
*dev
);
71 struct msm_kms
*mdp5_kms_init(struct drm_device
*dev
);
73 #endif /* __MSM_KMS_H__ */