0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef __RCAR_DU_CRTC_H__
0011 #define __RCAR_DU_CRTC_H__
0012
0013 #include <linux/mutex.h>
0014 #include <linux/spinlock.h>
0015 #include <linux/wait.h>
0016
0017 #include <drm/drm_crtc.h>
0018 #include <drm/drm_writeback.h>
0019
0020 #include <media/vsp1.h>
0021
0022 struct rcar_du_group;
0023 struct rcar_du_vsp;
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047 struct rcar_du_crtc {
0048 struct drm_crtc crtc;
0049
0050 struct rcar_du_device *dev;
0051 struct clk *clock;
0052 struct clk *extclock;
0053 unsigned int mmio_offset;
0054 unsigned int index;
0055 bool initialized;
0056
0057 u32 dsysr;
0058
0059 bool vblank_enable;
0060 struct drm_pending_vblank_event *event;
0061 wait_queue_head_t flip_wait;
0062
0063 spinlock_t vblank_lock;
0064 wait_queue_head_t vblank_wait;
0065 unsigned int vblank_count;
0066
0067 struct rcar_du_group *group;
0068 struct platform_device *cmm;
0069 struct rcar_du_vsp *vsp;
0070 unsigned int vsp_pipe;
0071
0072 const char *const *sources;
0073 unsigned int sources_count;
0074
0075 struct drm_writeback_connector writeback;
0076 };
0077
0078 #define to_rcar_crtc(c) container_of(c, struct rcar_du_crtc, crtc)
0079 #define wb_to_rcar_crtc(c) container_of(c, struct rcar_du_crtc, writeback)
0080
0081
0082
0083
0084
0085
0086
0087 struct rcar_du_crtc_state {
0088 struct drm_crtc_state state;
0089
0090 struct vsp1_du_crc_config crc;
0091 unsigned int outputs;
0092 };
0093
0094 #define to_rcar_crtc_state(s) container_of(s, struct rcar_du_crtc_state, state)
0095
0096 int rcar_du_crtc_create(struct rcar_du_group *rgrp, unsigned int swindex,
0097 unsigned int hwindex);
0098
0099 void rcar_du_crtc_finish_page_flip(struct rcar_du_crtc *rcrtc);
0100
0101 void rcar_du_crtc_dsysr_clr_set(struct rcar_du_crtc *rcrtc, u32 clr, u32 set);
0102
0103 #endif