Merge branch 'fixes' of git://git.armlinux.org.uk/~rmk/linux-arm
[linux-2.6-microblaze.git] / drivers / gpu / drm / amd / display / dc / inc / hw / stream_encoder.h
1 /*
2  * stream_encoder.h
3  *
4  */
5
6 #ifndef STREAM_ENCODER_H_
7 #define STREAM_ENCODER_H_
8
9 #include "audio_types.h"
10
11 struct dc_bios;
12 struct dc_context;
13 struct dc_crtc_timing;
14
15 struct encoder_info_packet {
16         bool valid;
17         uint8_t hb0;
18         uint8_t hb1;
19         uint8_t hb2;
20         uint8_t hb3;
21         uint8_t sb[32];
22 };
23
24 struct encoder_info_frame {
25         /* auxiliary video information */
26         struct encoder_info_packet avi;
27         struct encoder_info_packet gamut;
28         struct encoder_info_packet vendor;
29         /* source product description */
30         struct encoder_info_packet spd;
31         /* video stream configuration */
32         struct encoder_info_packet vsc;
33         /* HDR Static MetaData */
34         struct encoder_info_packet hdrsmd;
35 };
36
37 struct encoder_unblank_param {
38         struct dc_link_settings link_settings;
39         unsigned int pixel_clk_khz;
40 };
41
42 struct encoder_set_dp_phy_pattern_param {
43         enum dp_test_pattern dp_phy_pattern;
44         const uint8_t *custom_pattern;
45         uint32_t custom_pattern_size;
46         enum dp_panel_mode dp_panel_mode;
47 };
48
49 struct stream_encoder {
50         const struct stream_encoder_funcs *funcs;
51         struct dc_context *ctx;
52         struct dc_bios *bp;
53         enum engine_id id;
54 };
55
56 struct stream_encoder_funcs {
57         void (*dp_set_stream_attribute)(
58                 struct stream_encoder *enc,
59                 struct dc_crtc_timing *crtc_timing,
60                 enum dc_color_space output_color_space);
61
62         void (*hdmi_set_stream_attribute)(
63                 struct stream_encoder *enc,
64                 struct dc_crtc_timing *crtc_timing,
65                 int actual_pix_clk_khz,
66                 bool enable_audio);
67
68         void (*dvi_set_stream_attribute)(
69                 struct stream_encoder *enc,
70                 struct dc_crtc_timing *crtc_timing,
71                 bool is_dual_link);
72
73         void (*set_mst_bandwidth)(
74                 struct stream_encoder *enc,
75                 struct fixed31_32 avg_time_slots_per_mtp);
76
77         void (*update_hdmi_info_packets)(
78                 struct stream_encoder *enc,
79                 const struct encoder_info_frame *info_frame);
80
81         void (*stop_hdmi_info_packets)(
82                 struct stream_encoder *enc);
83
84         void (*update_dp_info_packets)(
85                 struct stream_encoder *enc,
86                 const struct encoder_info_frame *info_frame);
87
88         void (*stop_dp_info_packets)(
89                 struct stream_encoder *enc);
90
91         void (*dp_blank)(
92                 struct stream_encoder *enc);
93
94         void (*dp_unblank)(
95                 struct stream_encoder *enc,
96                 const struct encoder_unblank_param *param);
97
98         void (*audio_mute_control)(
99                 struct stream_encoder *enc, bool mute);
100
101         void (*dp_audio_setup)(
102                 struct stream_encoder *enc,
103                 unsigned int az_inst,
104                 struct audio_info *info);
105
106         void (*dp_audio_enable) (
107                         struct stream_encoder *enc);
108
109         void (*dp_audio_disable) (
110                         struct stream_encoder *enc);
111
112         void (*hdmi_audio_setup)(
113                 struct stream_encoder *enc,
114                 unsigned int az_inst,
115                 struct audio_info *info,
116                 struct audio_crtc_info *audio_crtc_info);
117
118         void (*hdmi_audio_disable) (
119                         struct stream_encoder *enc);
120
121         void (*setup_stereo_sync) (
122                         struct stream_encoder *enc,
123                         int tg_inst,
124                         bool enable);
125
126         void (*set_avmute)(
127                 struct stream_encoder *enc, bool enable);
128 };
129
130 #endif /* STREAM_ENCODER_H_ */