f13d597370a30dc1b14c630ee00145256052ba56
[linux-2.6-block.git] / include / drm / drm_connector.h
1 /*
2  * Copyright (c) 2016 Intel Corporation
3  *
4  * Permission to use, copy, modify, distribute, and sell this software and its
5  * documentation for any purpose is hereby granted without fee, provided that
6  * the above copyright notice appear in all copies and that both that copyright
7  * notice and this permission notice appear in supporting documentation, and
8  * that the name of the copyright holders not be used in advertising or
9  * publicity pertaining to distribution of the software without specific,
10  * written prior permission.  The copyright holders make no representations
11  * about the suitability of this software for any purpose.  It is provided "as
12  * is" without express or implied warranty.
13  *
14  * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
16  * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
17  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
18  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
19  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
20  * OF THIS SOFTWARE.
21  */
22
23 #ifndef __DRM_CONNECTOR_H__
24 #define __DRM_CONNECTOR_H__
25
26 #include <linux/list.h>
27 #include <linux/llist.h>
28 #include <linux/ctype.h>
29 #include <linux/hdmi.h>
30 #include <linux/notifier.h>
31 #include <drm/drm_mode_object.h>
32 #include <drm/drm_util.h>
33 #include <drm/drm_property.h>
34
35 #include <uapi/drm/drm_mode.h>
36
37 struct drm_connector_helper_funcs;
38 struct drm_modeset_acquire_ctx;
39 struct drm_device;
40 struct drm_crtc;
41 struct drm_display_mode;
42 struct drm_encoder;
43 struct drm_panel;
44 struct drm_property;
45 struct drm_property_blob;
46 struct drm_printer;
47 struct drm_privacy_screen;
48 struct drm_edid;
49 struct edid;
50 struct hdmi_codec_daifmt;
51 struct hdmi_codec_params;
52 struct i2c_adapter;
53
54 enum drm_connector_force {
55         DRM_FORCE_UNSPECIFIED,
56         DRM_FORCE_OFF,
57         DRM_FORCE_ON,         /* force on analog part normally */
58         DRM_FORCE_ON_DIGITAL, /* for DVI-I use digital connector */
59 };
60
61 /**
62  * enum drm_connector_status - status for a &drm_connector
63  *
64  * This enum is used to track the connector status. There are no separate
65  * #defines for the uapi!
66  */
67 enum drm_connector_status {
68         /**
69          * @connector_status_connected: The connector is definitely connected to
70          * a sink device, and can be enabled.
71          */
72         connector_status_connected = 1,
73         /**
74          * @connector_status_disconnected: The connector isn't connected to a
75          * sink device which can be autodetect. For digital outputs like DP or
76          * HDMI (which can be realiable probed) this means there's really
77          * nothing there. It is driver-dependent whether a connector with this
78          * status can be lit up or not.
79          */
80         connector_status_disconnected = 2,
81         /**
82          * @connector_status_unknown: The connector's status could not be
83          * reliably detected. This happens when probing would either cause
84          * flicker (like load-detection when the connector is in use), or when a
85          * hardware resource isn't available (like when load-detection needs a
86          * free CRTC). It should be possible to light up the connector with one
87          * of the listed fallback modes. For default configuration userspace
88          * should only try to light up connectors with unknown status when
89          * there's not connector with @connector_status_connected.
90          */
91         connector_status_unknown = 3,
92 };
93
94 /**
95  * enum drm_connector_registration_state - userspace registration status for
96  * a &drm_connector
97  *
98  * This enum is used to track the status of initializing a connector and
99  * registering it with userspace, so that DRM can prevent bogus modesets on
100  * connectors that no longer exist.
101  */
102 enum drm_connector_registration_state {
103         /**
104          * @DRM_CONNECTOR_INITIALIZING: The connector has just been created,
105          * but has yet to be exposed to userspace. There should be no
106          * additional restrictions to how the state of this connector may be
107          * modified.
108          */
109         DRM_CONNECTOR_INITIALIZING = 0,
110
111         /**
112          * @DRM_CONNECTOR_REGISTERED: The connector has been fully initialized
113          * and registered with sysfs, as such it has been exposed to
114          * userspace. There should be no additional restrictions to how the
115          * state of this connector may be modified.
116          */
117         DRM_CONNECTOR_REGISTERED = 1,
118
119         /**
120          * @DRM_CONNECTOR_UNREGISTERED: The connector has either been exposed
121          * to userspace and has since been unregistered and removed from
122          * userspace, or the connector was unregistered before it had a chance
123          * to be exposed to userspace (e.g. still in the
124          * @DRM_CONNECTOR_INITIALIZING state). When a connector is
125          * unregistered, there are additional restrictions to how its state
126          * may be modified:
127          *
128          * - An unregistered connector may only have its DPMS changed from
129          *   On->Off. Once DPMS is changed to Off, it may not be switched back
130          *   to On.
131          * - Modesets are not allowed on unregistered connectors, unless they
132          *   would result in disabling its assigned CRTCs. This means
133          *   disabling a CRTC on an unregistered connector is OK, but enabling
134          *   one is not.
135          * - Removing a CRTC from an unregistered connector is OK, but new
136          *   CRTCs may never be assigned to an unregistered connector.
137          */
138         DRM_CONNECTOR_UNREGISTERED = 2,
139 };
140
141 enum subpixel_order {
142         SubPixelUnknown = 0,
143         SubPixelHorizontalRGB,
144         SubPixelHorizontalBGR,
145         SubPixelVerticalRGB,
146         SubPixelVerticalBGR,
147         SubPixelNone,
148
149 };
150
151 /**
152  * enum drm_connector_tv_mode - Analog TV output mode
153  *
154  * This enum is used to indicate the TV output mode used on an analog TV
155  * connector.
156  *
157  * WARNING: The values of this enum is uABI since they're exposed in the
158  * "TV mode" connector property.
159  */
160 enum drm_connector_tv_mode {
161         /**
162          * @DRM_MODE_TV_MODE_NTSC: CCIR System M (aka 525-lines)
163          * together with the NTSC Color Encoding.
164          */
165         DRM_MODE_TV_MODE_NTSC,
166
167         /**
168          * @DRM_MODE_TV_MODE_NTSC_443: Variant of
169          * @DRM_MODE_TV_MODE_NTSC. Uses a color subcarrier frequency
170          * of 4.43 MHz.
171          */
172         DRM_MODE_TV_MODE_NTSC_443,
173
174         /**
175          * @DRM_MODE_TV_MODE_NTSC_J: Variant of @DRM_MODE_TV_MODE_NTSC
176          * used in Japan. Uses a black level equals to the blanking
177          * level.
178          */
179         DRM_MODE_TV_MODE_NTSC_J,
180
181         /**
182          * @DRM_MODE_TV_MODE_PAL: CCIR System B together with the PAL
183          * color system.
184          */
185         DRM_MODE_TV_MODE_PAL,
186
187         /**
188          * @DRM_MODE_TV_MODE_PAL_M: CCIR System M (aka 525-lines)
189          * together with the PAL color encoding
190          */
191         DRM_MODE_TV_MODE_PAL_M,
192
193         /**
194          * @DRM_MODE_TV_MODE_PAL_N: CCIR System N together with the PAL
195          * color encoding. It uses 625 lines, but has a color subcarrier
196          * frequency of 3.58MHz, the SECAM color space, and narrower
197          * channels compared to most of the other PAL variants.
198          */
199         DRM_MODE_TV_MODE_PAL_N,
200
201         /**
202          * @DRM_MODE_TV_MODE_SECAM: CCIR System B together with the
203          * SECAM color system.
204          */
205         DRM_MODE_TV_MODE_SECAM,
206
207         /**
208          * @DRM_MODE_TV_MODE_MONOCHROME: Use timings appropriate to
209          * the DRM mode, including equalizing pulses for a 525-line
210          * or 625-line mode, with no pedestal or color encoding.
211          */
212         DRM_MODE_TV_MODE_MONOCHROME,
213
214         /**
215          * @DRM_MODE_TV_MODE_MAX: Number of analog TV output modes.
216          *
217          * Internal implementation detail; this is not uABI.
218          */
219         DRM_MODE_TV_MODE_MAX,
220 };
221
222 /**
223  * struct drm_scrambling: sink's scrambling support.
224  */
225 struct drm_scrambling {
226         /**
227          * @supported: scrambling supported for rates > 340 Mhz.
228          */
229         bool supported;
230         /**
231          * @low_rates: scrambling supported for rates <= 340 Mhz.
232          */
233         bool low_rates;
234 };
235
236 /*
237  * struct drm_scdc - Information about scdc capabilities of a HDMI 2.0 sink
238  *
239  * Provides SCDC register support and capabilities related information on a
240  * HDMI 2.0 sink. In case of a HDMI 1.4 sink, all parameter must be 0.
241  */
242 struct drm_scdc {
243         /**
244          * @supported: status control & data channel present.
245          */
246         bool supported;
247         /**
248          * @read_request: sink is capable of generating scdc read request.
249          */
250         bool read_request;
251         /**
252          * @scrambling: sink's scrambling capabilities
253          */
254         struct drm_scrambling scrambling;
255 };
256
257 /**
258  * struct drm_hdmi_dsc_cap - DSC capabilities of HDMI sink
259  *
260  * Describes the DSC support provided by HDMI 2.1 sink.
261  * The information is fetched fom additional HFVSDB blocks defined
262  * for HDMI 2.1.
263  */
264 struct drm_hdmi_dsc_cap {
265         /** @v_1p2: flag for dsc1.2 version support by sink */
266         bool v_1p2;
267
268         /** @native_420: Does sink support DSC with 4:2:0 compression */
269         bool native_420;
270
271         /**
272          * @all_bpp: Does sink support all bpp with 4:4:4: or 4:2:2
273          * compressed formats
274          */
275         bool all_bpp;
276
277         /**
278          * @bpc_supported: compressed bpc supported by sink : 10, 12 or 16 bpc
279          */
280         u8 bpc_supported;
281
282         /** @max_slices: maximum number of Horizontal slices supported by */
283         u8 max_slices;
284
285         /** @clk_per_slice : max pixel clock in MHz supported per slice */
286         int clk_per_slice;
287
288         /** @max_lanes : dsc max lanes supported for Fixed rate Link training */
289         u8 max_lanes;
290
291         /** @max_frl_rate_per_lane : maximum frl rate with DSC per lane */
292         u8 max_frl_rate_per_lane;
293
294         /** @total_chunk_kbytes: max size of chunks in KBs supported per line*/
295         u8 total_chunk_kbytes;
296 };
297
298 /**
299  * struct drm_hdmi_info - runtime information about the connected HDMI sink
300  *
301  * Describes if a given display supports advanced HDMI 2.0 features.
302  * This information is available in CEA-861-F extension blocks (like HF-VSDB).
303  */
304 struct drm_hdmi_info {
305         /** @scdc: sink's scdc support and capabilities */
306         struct drm_scdc scdc;
307
308         /**
309          * @y420_vdb_modes: bitmap of modes which can support ycbcr420
310          * output only (not normal RGB/YCBCR444/422 outputs). The max VIC
311          * defined by the CEA-861-G spec is 219, so the size is 256 bits to map
312          * up to 256 VICs.
313          */
314         unsigned long y420_vdb_modes[BITS_TO_LONGS(256)];
315
316         /**
317          * @y420_cmdb_modes: bitmap of modes which can support ycbcr420
318          * output also, along with normal HDMI outputs. The max VIC defined by
319          * the CEA-861-G spec is 219, so the size is 256 bits to map up to 256
320          * VICs.
321          */
322         unsigned long y420_cmdb_modes[BITS_TO_LONGS(256)];
323
324         /** @y420_dc_modes: bitmap of deep color support index */
325         u8 y420_dc_modes;
326
327         /** @max_frl_rate_per_lane: support fixed rate link */
328         u8 max_frl_rate_per_lane;
329
330         /** @max_lanes: supported by sink */
331         u8 max_lanes;
332
333         /** @dsc_cap: DSC capabilities of the sink */
334         struct drm_hdmi_dsc_cap dsc_cap;
335 };
336
337 /**
338  * enum drm_link_status - connector's link_status property value
339  *
340  * This enum is used as the connector's link status property value.
341  * It is set to the values defined in uapi.
342  *
343  * @DRM_LINK_STATUS_GOOD: DP Link is Good as a result of successful
344  *                        link training
345  * @DRM_LINK_STATUS_BAD: DP Link is BAD as a result of link training
346  *                       failure
347  */
348 enum drm_link_status {
349         DRM_LINK_STATUS_GOOD = DRM_MODE_LINK_STATUS_GOOD,
350         DRM_LINK_STATUS_BAD = DRM_MODE_LINK_STATUS_BAD,
351 };
352
353 /**
354  * enum drm_panel_orientation - panel_orientation info for &drm_display_info
355  *
356  * This enum is used to track the (LCD) panel orientation. There are no
357  * separate #defines for the uapi!
358  *
359  * @DRM_MODE_PANEL_ORIENTATION_UNKNOWN: The drm driver has not provided any
360  *                                      panel orientation information (normal
361  *                                      for non panels) in this case the "panel
362  *                                      orientation" connector prop will not be
363  *                                      attached.
364  * @DRM_MODE_PANEL_ORIENTATION_NORMAL:  The top side of the panel matches the
365  *                                      top side of the device's casing.
366  * @DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP: The top side of the panel matches the
367  *                                      bottom side of the device's casing, iow
368  *                                      the panel is mounted upside-down.
369  * @DRM_MODE_PANEL_ORIENTATION_LEFT_UP: The left side of the panel matches the
370  *                                      top side of the device's casing.
371  * @DRM_MODE_PANEL_ORIENTATION_RIGHT_UP: The right side of the panel matches the
372  *                                      top side of the device's casing.
373  */
374 enum drm_panel_orientation {
375         DRM_MODE_PANEL_ORIENTATION_UNKNOWN = -1,
376         DRM_MODE_PANEL_ORIENTATION_NORMAL = 0,
377         DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP,
378         DRM_MODE_PANEL_ORIENTATION_LEFT_UP,
379         DRM_MODE_PANEL_ORIENTATION_RIGHT_UP,
380 };
381
382 /**
383  * enum drm_hdmi_broadcast_rgb - Broadcast RGB Selection for an HDMI @drm_connector
384  */
385 enum drm_hdmi_broadcast_rgb {
386         /**
387          * @DRM_HDMI_BROADCAST_RGB_AUTO: The RGB range is selected
388          * automatically based on the mode.
389          */
390         DRM_HDMI_BROADCAST_RGB_AUTO,
391
392         /**
393          * @DRM_HDMI_BROADCAST_RGB_FULL: Full range RGB is forced.
394          */
395         DRM_HDMI_BROADCAST_RGB_FULL,
396
397         /**
398          * @DRM_HDMI_BROADCAST_RGB_LIMITED: Limited range RGB is forced.
399          */
400         DRM_HDMI_BROADCAST_RGB_LIMITED,
401 };
402
403 const char *
404 drm_hdmi_connector_get_broadcast_rgb_name(enum drm_hdmi_broadcast_rgb broadcast_rgb);
405 const char *
406 drm_hdmi_connector_get_output_format_name(enum hdmi_colorspace fmt);
407
408 /**
409  * struct drm_monitor_range_info - Panel's Monitor range in EDID for
410  * &drm_display_info
411  *
412  * This struct is used to store a frequency range supported by panel
413  * as parsed from EDID's detailed monitor range descriptor block.
414  *
415  * @min_vfreq: This is the min supported refresh rate in Hz from
416  *             EDID's detailed monitor range.
417  * @max_vfreq: This is the max supported refresh rate in Hz from
418  *             EDID's detailed monitor range
419  */
420 struct drm_monitor_range_info {
421         u16 min_vfreq;
422         u16 max_vfreq;
423 };
424
425 /**
426  * struct drm_luminance_range_info - Panel's luminance range for
427  * &drm_display_info. Calculated using data in EDID
428  *
429  * This struct is used to store a luminance range supported by panel
430  * as calculated using data from EDID's static hdr metadata.
431  *
432  * @min_luminance: This is the min supported luminance value
433  *
434  * @max_luminance: This is the max supported luminance value
435  */
436 struct drm_luminance_range_info {
437         u32 min_luminance;
438         u32 max_luminance;
439 };
440
441 /**
442  * enum drm_privacy_screen_status - privacy screen status
443  *
444  * This enum is used to track and control the state of the integrated privacy
445  * screen present on some display panels, via the "privacy-screen sw-state"
446  * and "privacy-screen hw-state" properties. Note the _LOCKED enum values
447  * are only valid for the "privacy-screen hw-state" property.
448  *
449  * @PRIVACY_SCREEN_DISABLED:
450  *  The privacy-screen on the panel is disabled
451  * @PRIVACY_SCREEN_ENABLED:
452  *  The privacy-screen on the panel is enabled
453  * @PRIVACY_SCREEN_DISABLED_LOCKED:
454  *  The privacy-screen on the panel is disabled and locked (cannot be changed)
455  * @PRIVACY_SCREEN_ENABLED_LOCKED:
456  *  The privacy-screen on the panel is enabled and locked (cannot be changed)
457  */
458 enum drm_privacy_screen_status {
459         PRIVACY_SCREEN_DISABLED = 0,
460         PRIVACY_SCREEN_ENABLED,
461         PRIVACY_SCREEN_DISABLED_LOCKED,
462         PRIVACY_SCREEN_ENABLED_LOCKED,
463 };
464
465 /**
466  * enum drm_colorspace - color space
467  *
468  * This enum is a consolidated colorimetry list supported by HDMI and
469  * DP protocol standard. The respective connectors will register
470  * a property with the subset of this list (supported by that
471  * respective protocol). Userspace will set the colorspace through
472  * a colorspace property which will be created and exposed to
473  * userspace.
474  *
475  * DP definitions come from the DP v2.0 spec
476  * HDMI definitions come from the CTA-861-H spec
477   *
478  * @DRM_MODE_COLORIMETRY_DEFAULT:
479  *   Driver specific behavior.
480  * @DRM_MODE_COLORIMETRY_NO_DATA:
481  *   Driver specific behavior.
482  * @DRM_MODE_COLORIMETRY_SMPTE_170M_YCC:
483  *   (HDMI)
484  *   SMPTE ST 170M colorimetry format
485  * @DRM_MODE_COLORIMETRY_BT709_YCC:
486  *   (HDMI, DP)
487  *   ITU-R BT.709 colorimetry format
488  * @DRM_MODE_COLORIMETRY_XVYCC_601:
489  *   (HDMI, DP)
490  *   xvYCC601 colorimetry format
491  * @DRM_MODE_COLORIMETRY_XVYCC_709:
492  *   (HDMI, DP)
493  *   xvYCC709 colorimetry format
494  * @DRM_MODE_COLORIMETRY_SYCC_601:
495  *   (HDMI, DP)
496  *   sYCC601 colorimetry format
497  * @DRM_MODE_COLORIMETRY_OPYCC_601:
498  *   (HDMI, DP)
499  *   opYCC601 colorimetry format
500  * @DRM_MODE_COLORIMETRY_OPRGB:
501  *   (HDMI, DP)
502  *   opRGB colorimetry format
503  * @DRM_MODE_COLORIMETRY_BT2020_CYCC:
504  *   (HDMI, DP)
505  *   ITU-R BT.2020 Y'c C'bc C'rc (constant luminance) colorimetry format
506  * @DRM_MODE_COLORIMETRY_BT2020_RGB:
507  *   (HDMI, DP)
508  *   ITU-R BT.2020 R' G' B' colorimetry format
509  * @DRM_MODE_COLORIMETRY_BT2020_YCC:
510  *   (HDMI, DP)
511  *   ITU-R BT.2020 Y' C'b C'r colorimetry format
512  * @DRM_MODE_COLORIMETRY_DCI_P3_RGB_D65:
513  *   (HDMI)
514  *   SMPTE ST 2113 P3D65 colorimetry format
515  * @DRM_MODE_COLORIMETRY_DCI_P3_RGB_THEATER:
516  *   (HDMI)
517  *   SMPTE ST 2113 P3DCI colorimetry format
518  * @DRM_MODE_COLORIMETRY_RGB_WIDE_FIXED:
519  *   (DP)
520  *   RGB wide gamut fixed point colorimetry format
521  * @DRM_MODE_COLORIMETRY_RGB_WIDE_FLOAT:
522  *   (DP)
523  *   RGB wide gamut floating point
524  *   (scRGB (IEC 61966-2-2)) colorimetry format
525  * @DRM_MODE_COLORIMETRY_BT601_YCC:
526  *   (DP)
527  *   ITU-R BT.601 colorimetry format
528  *   The DP spec does not say whether this is the 525 or the 625
529  *   line version.
530  * @DRM_MODE_COLORIMETRY_COUNT:
531  *   Not a valid value; merely used four counting
532  */
533 enum drm_colorspace {
534         /* For Default case, driver will set the colorspace */
535         DRM_MODE_COLORIMETRY_DEFAULT            = 0,
536         /* CEA 861 Normal Colorimetry options */
537         DRM_MODE_COLORIMETRY_NO_DATA            = 0,
538         DRM_MODE_COLORIMETRY_SMPTE_170M_YCC     = 1,
539         DRM_MODE_COLORIMETRY_BT709_YCC          = 2,
540         /* CEA 861 Extended Colorimetry Options */
541         DRM_MODE_COLORIMETRY_XVYCC_601          = 3,
542         DRM_MODE_COLORIMETRY_XVYCC_709          = 4,
543         DRM_MODE_COLORIMETRY_SYCC_601           = 5,
544         DRM_MODE_COLORIMETRY_OPYCC_601          = 6,
545         DRM_MODE_COLORIMETRY_OPRGB              = 7,
546         DRM_MODE_COLORIMETRY_BT2020_CYCC        = 8,
547         DRM_MODE_COLORIMETRY_BT2020_RGB         = 9,
548         DRM_MODE_COLORIMETRY_BT2020_YCC         = 10,
549         /* Additional Colorimetry extension added as part of CTA 861.G */
550         DRM_MODE_COLORIMETRY_DCI_P3_RGB_D65     = 11,
551         DRM_MODE_COLORIMETRY_DCI_P3_RGB_THEATER = 12,
552         /* Additional Colorimetry Options added for DP 1.4a VSC Colorimetry Format */
553         DRM_MODE_COLORIMETRY_RGB_WIDE_FIXED     = 13,
554         DRM_MODE_COLORIMETRY_RGB_WIDE_FLOAT     = 14,
555         DRM_MODE_COLORIMETRY_BT601_YCC          = 15,
556         DRM_MODE_COLORIMETRY_COUNT
557 };
558
559 /**
560  * enum drm_bus_flags - bus_flags info for &drm_display_info
561  *
562  * This enum defines signal polarities and clock edge information for signals on
563  * a bus as bitmask flags.
564  *
565  * The clock edge information is conveyed by two sets of symbols,
566  * DRM_BUS_FLAGS_*_DRIVE_\* and DRM_BUS_FLAGS_*_SAMPLE_\*. When this enum is
567  * used to describe a bus from the point of view of the transmitter, the
568  * \*_DRIVE_\* flags should be used. When used from the point of view of the
569  * receiver, the \*_SAMPLE_\* flags should be used. The \*_DRIVE_\* and
570  * \*_SAMPLE_\* flags alias each other, with the \*_SAMPLE_POSEDGE and
571  * \*_SAMPLE_NEGEDGE flags being equal to \*_DRIVE_NEGEDGE and \*_DRIVE_POSEDGE
572  * respectively. This simplifies code as signals are usually sampled on the
573  * opposite edge of the driving edge. Transmitters and receivers may however
574  * need to take other signal timings into account to convert between driving
575  * and sample edges.
576  */
577 enum drm_bus_flags {
578         /**
579          * @DRM_BUS_FLAG_DE_LOW:
580          *
581          * The Data Enable signal is active low
582          */
583         DRM_BUS_FLAG_DE_LOW = BIT(0),
584
585         /**
586          * @DRM_BUS_FLAG_DE_HIGH:
587          *
588          * The Data Enable signal is active high
589          */
590         DRM_BUS_FLAG_DE_HIGH = BIT(1),
591
592         /**
593          * @DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE:
594          *
595          * Data is driven on the rising edge of the pixel clock
596          */
597         DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE = BIT(2),
598
599         /**
600          * @DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE:
601          *
602          * Data is driven on the falling edge of the pixel clock
603          */
604         DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE = BIT(3),
605
606         /**
607          * @DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE:
608          *
609          * Data is sampled on the rising edge of the pixel clock
610          */
611         DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE = DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE,
612
613         /**
614          * @DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE:
615          *
616          * Data is sampled on the falling edge of the pixel clock
617          */
618         DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE = DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
619
620         /**
621          * @DRM_BUS_FLAG_DATA_MSB_TO_LSB:
622          *
623          * Data is transmitted MSB to LSB on the bus
624          */
625         DRM_BUS_FLAG_DATA_MSB_TO_LSB = BIT(4),
626
627         /**
628          * @DRM_BUS_FLAG_DATA_LSB_TO_MSB:
629          *
630          * Data is transmitted LSB to MSB on the bus
631          */
632         DRM_BUS_FLAG_DATA_LSB_TO_MSB = BIT(5),
633
634         /**
635          * @DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE:
636          *
637          * Sync signals are driven on the rising edge of the pixel clock
638          */
639         DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE = BIT(6),
640
641         /**
642          * @DRM_BUS_FLAG_SYNC_DRIVE_NEGEDGE:
643          *
644          * Sync signals are driven on the falling edge of the pixel clock
645          */
646         DRM_BUS_FLAG_SYNC_DRIVE_NEGEDGE = BIT(7),
647
648         /**
649          * @DRM_BUS_FLAG_SYNC_SAMPLE_POSEDGE:
650          *
651          * Sync signals are sampled on the rising edge of the pixel clock
652          */
653         DRM_BUS_FLAG_SYNC_SAMPLE_POSEDGE = DRM_BUS_FLAG_SYNC_DRIVE_NEGEDGE,
654
655         /**
656          * @DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE:
657          *
658          * Sync signals are sampled on the falling edge of the pixel clock
659          */
660         DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE = DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE,
661
662         /**
663          * @DRM_BUS_FLAG_SHARP_SIGNALS:
664          *
665          *  Set if the Sharp-specific signals (SPL, CLS, PS, REV) must be used
666          */
667         DRM_BUS_FLAG_SHARP_SIGNALS = BIT(8),
668 };
669
670 /**
671  * struct drm_display_info - runtime data about the connected sink
672  *
673  * Describes a given display (e.g. CRT or flat panel) and its limitations. For
674  * fixed display sinks like built-in panels there's not much difference between
675  * this and &struct drm_connector. But for sinks with a real cable this
676  * structure is meant to describe all the things at the other end of the cable.
677  *
678  * For sinks which provide an EDID this can be filled out by calling
679  * drm_add_edid_modes().
680  */
681 struct drm_display_info {
682         /**
683          * @width_mm: Physical width in mm.
684          */
685         unsigned int width_mm;
686
687         /**
688          * @height_mm: Physical height in mm.
689          */
690         unsigned int height_mm;
691
692         /**
693          * @bpc: Maximum bits per color channel. Used by HDMI and DP outputs.
694          */
695         unsigned int bpc;
696
697         /**
698          * @subpixel_order: Subpixel order of LCD panels.
699          */
700         enum subpixel_order subpixel_order;
701
702 #define DRM_COLOR_FORMAT_RGB444         (1<<0)
703 #define DRM_COLOR_FORMAT_YCBCR444       (1<<1)
704 #define DRM_COLOR_FORMAT_YCBCR422       (1<<2)
705 #define DRM_COLOR_FORMAT_YCBCR420       (1<<3)
706
707         /**
708          * @panel_orientation: Read only connector property for built-in panels,
709          * indicating the orientation of the panel vs the device's casing.
710          * drm_connector_init() sets this to DRM_MODE_PANEL_ORIENTATION_UNKNOWN.
711          * When not UNKNOWN this gets used by the drm_fb_helpers to rotate the
712          * fb to compensate and gets exported as prop to userspace.
713          */
714         int panel_orientation;
715
716         /**
717          * @color_formats: HDMI Color formats, selects between RGB and YCrCb
718          * modes. Used DRM_COLOR_FORMAT\_ defines, which are _not_ the same ones
719          * as used to describe the pixel format in framebuffers, and also don't
720          * match the formats in @bus_formats which are shared with v4l.
721          */
722         u32 color_formats;
723
724         /**
725          * @bus_formats: Pixel data format on the wire, somewhat redundant with
726          * @color_formats. Array of size @num_bus_formats encoded using
727          * MEDIA_BUS_FMT\_ defines shared with v4l and media drivers.
728          */
729         const u32 *bus_formats;
730         /**
731          * @num_bus_formats: Size of @bus_formats array.
732          */
733         unsigned int num_bus_formats;
734
735         /**
736          * @bus_flags: Additional information (like pixel signal polarity) for
737          * the pixel data on the bus, using &enum drm_bus_flags values
738          * DRM_BUS_FLAGS\_.
739          */
740         u32 bus_flags;
741
742         /**
743          * @max_tmds_clock: Maximum TMDS clock rate supported by the
744          * sink in kHz. 0 means undefined.
745          */
746         int max_tmds_clock;
747
748         /**
749          * @dvi_dual: Dual-link DVI sink?
750          */
751         bool dvi_dual;
752
753         /**
754          * @is_hdmi: True if the sink is an HDMI device.
755          *
756          * This field shall be used instead of calling
757          * drm_detect_hdmi_monitor() when possible.
758          */
759         bool is_hdmi;
760
761         /**
762          * @has_audio: True if the sink supports audio.
763          *
764          * This field shall be used instead of calling
765          * drm_detect_monitor_audio() when possible.
766          */
767         bool has_audio;
768
769         /**
770          * @has_hdmi_infoframe: Does the sink support the HDMI infoframe?
771          */
772         bool has_hdmi_infoframe;
773
774         /**
775          * @rgb_quant_range_selectable: Does the sink support selecting
776          * the RGB quantization range?
777          */
778         bool rgb_quant_range_selectable;
779
780         /**
781          * @edid_hdmi_rgb444_dc_modes: Mask of supported hdmi deep color modes
782          * in RGB 4:4:4. Even more stuff redundant with @bus_formats.
783          */
784         u8 edid_hdmi_rgb444_dc_modes;
785
786         /**
787          * @edid_hdmi_ycbcr444_dc_modes: Mask of supported hdmi deep color
788          * modes in YCbCr 4:4:4. Even more stuff redundant with @bus_formats.
789          */
790         u8 edid_hdmi_ycbcr444_dc_modes;
791
792         /**
793          * @cea_rev: CEA revision of the HDMI sink.
794          */
795         u8 cea_rev;
796
797         /**
798          * @hdmi: advance features of a HDMI sink.
799          */
800         struct drm_hdmi_info hdmi;
801
802         /**
803          * @non_desktop: Non desktop display (HMD).
804          */
805         bool non_desktop;
806
807         /**
808          * @monitor_range: Frequency range supported by monitor range descriptor
809          */
810         struct drm_monitor_range_info monitor_range;
811
812         /**
813          * @luminance_range: Luminance range supported by panel
814          */
815         struct drm_luminance_range_info luminance_range;
816
817         /**
818          * @mso_stream_count: eDP Multi-SST Operation (MSO) stream count from
819          * the DisplayID VESA vendor block. 0 for conventional Single-Stream
820          * Transport (SST), or 2 or 4 MSO streams.
821          */
822         u8 mso_stream_count;
823
824         /**
825          * @mso_pixel_overlap: eDP MSO segment pixel overlap, 0-8 pixels.
826          */
827         u8 mso_pixel_overlap;
828
829         /**
830          * @max_dsc_bpp: Maximum DSC target bitrate, if it is set to 0 the
831          * monitor's default value is used instead.
832          */
833         u32 max_dsc_bpp;
834
835         /**
836          * @vics: Array of vics_len VICs. Internal to EDID parsing.
837          */
838         u8 *vics;
839
840         /**
841          * @vics_len: Number of elements in vics. Internal to EDID parsing.
842          */
843         int vics_len;
844
845         /**
846          * @quirks: EDID based quirks. Internal to EDID parsing.
847          */
848         u32 quirks;
849
850         /**
851          * @source_physical_address: Source Physical Address from HDMI
852          * Vendor-Specific Data Block, for CEC usage.
853          *
854          * Defaults to CEC_PHYS_ADDR_INVALID (0xffff).
855          */
856         u16 source_physical_address;
857 };
858
859 int drm_display_info_set_bus_formats(struct drm_display_info *info,
860                                      const u32 *formats,
861                                      unsigned int num_formats);
862
863 /**
864  * struct drm_connector_tv_margins - TV connector related margins
865  *
866  * Describes the margins in pixels to put around the image on TV
867  * connectors to deal with overscan.
868  */
869 struct drm_connector_tv_margins {
870         /**
871          * @bottom: Bottom margin in pixels.
872          */
873         unsigned int bottom;
874
875         /**
876          * @left: Left margin in pixels.
877          */
878         unsigned int left;
879
880         /**
881          * @right: Right margin in pixels.
882          */
883         unsigned int right;
884
885         /**
886          * @top: Top margin in pixels.
887          */
888         unsigned int top;
889 };
890
891 /**
892  * struct drm_tv_connector_state - TV connector related states
893  * @select_subconnector: selected subconnector
894  * @subconnector: detected subconnector
895  * @margins: TV margins
896  * @legacy_mode: Legacy TV mode, driver specific value
897  * @mode: TV mode
898  * @brightness: brightness in percent
899  * @contrast: contrast in percent
900  * @flicker_reduction: flicker reduction in percent
901  * @overscan: overscan in percent
902  * @saturation: saturation in percent
903  * @hue: hue in percent
904  */
905 struct drm_tv_connector_state {
906         enum drm_mode_subconnector select_subconnector;
907         enum drm_mode_subconnector subconnector;
908         struct drm_connector_tv_margins margins;
909         unsigned int legacy_mode;
910         unsigned int mode;
911         unsigned int brightness;
912         unsigned int contrast;
913         unsigned int flicker_reduction;
914         unsigned int overscan;
915         unsigned int saturation;
916         unsigned int hue;
917 };
918
919 /**
920  * struct drm_connector_hdmi_infoframe - HDMI Infoframe container
921  */
922 struct drm_connector_hdmi_infoframe {
923         /**
924          * @data: HDMI Infoframe structure
925          */
926         union hdmi_infoframe data;
927
928         /**
929          * @set: Is the content of @data valid?
930          */
931         bool set;
932 };
933
934 /*
935  * struct drm_connector_hdmi_state - HDMI state container
936  */
937 struct drm_connector_hdmi_state {
938         /**
939          * @broadcast_rgb: Connector property to pass the
940          * Broadcast RGB selection value.
941          */
942         enum drm_hdmi_broadcast_rgb broadcast_rgb;
943
944         /**
945          * @infoframes: HDMI Infoframes matching that state
946          */
947         struct {
948                 /**
949                  * @avi: AVI Infoframes structure matching our
950                  * state.
951                  */
952                 struct drm_connector_hdmi_infoframe avi;
953
954                 /**
955                  * @hdr_drm: DRM (Dynamic Range and Mastering)
956                  * Infoframes structure matching our state.
957                  */
958                 struct drm_connector_hdmi_infoframe hdr_drm;
959
960                 /**
961                  * @spd: SPD Infoframes structure matching our
962                  * state.
963                  */
964                 struct drm_connector_hdmi_infoframe spd;
965
966                 /**
967                  * @vendor: HDMI Vendor Infoframes structure
968                  * matching our state.
969                  */
970                 struct drm_connector_hdmi_infoframe hdmi;
971         } infoframes;
972
973         /**
974          * @is_limited_range: Is the output supposed to use a limited
975          * RGB Quantization Range or not?
976          */
977         bool is_limited_range;
978
979         /**
980          * @output_bpc: Bits per color channel to output.
981          */
982         unsigned int output_bpc;
983
984         /**
985          * @output_format: Pixel format to output in.
986          */
987         enum hdmi_colorspace output_format;
988
989         /**
990          * @tmds_char_rate: TMDS Character Rate, in Hz.
991          */
992         unsigned long long tmds_char_rate;
993 };
994
995 /**
996  * struct drm_connector_state - mutable connector state
997  */
998 struct drm_connector_state {
999         /** @connector: backpointer to the connector */
1000         struct drm_connector *connector;
1001
1002         /**
1003          * @crtc: CRTC to connect connector to, NULL if disabled.
1004          *
1005          * Do not change this directly, use drm_atomic_set_crtc_for_connector()
1006          * instead.
1007          */
1008         struct drm_crtc *crtc;
1009
1010         /**
1011          * @best_encoder:
1012          *
1013          * Used by the atomic helpers to select the encoder, through the
1014          * &drm_connector_helper_funcs.atomic_best_encoder or
1015          * &drm_connector_helper_funcs.best_encoder callbacks.
1016          *
1017          * This is also used in the atomic helpers to map encoders to their
1018          * current and previous connectors, see
1019          * drm_atomic_get_old_connector_for_encoder() and
1020          * drm_atomic_get_new_connector_for_encoder().
1021          *
1022          * NOTE: Atomic drivers must fill this out (either themselves or through
1023          * helpers), for otherwise the GETCONNECTOR and GETENCODER IOCTLs will
1024          * not return correct data to userspace.
1025          */
1026         struct drm_encoder *best_encoder;
1027
1028         /**
1029          * @link_status: Connector link_status to keep track of whether link is
1030          * GOOD or BAD to notify userspace if retraining is necessary.
1031          */
1032         enum drm_link_status link_status;
1033
1034         /** @state: backpointer to global drm_atomic_state */
1035         struct drm_atomic_state *state;
1036
1037         /**
1038          * @commit: Tracks the pending commit to prevent use-after-free conditions.
1039          *
1040          * Is only set when @crtc is NULL.
1041          */
1042         struct drm_crtc_commit *commit;
1043
1044         /** @tv: TV connector state */
1045         struct drm_tv_connector_state tv;
1046
1047         /**
1048          * @self_refresh_aware:
1049          *
1050          * This tracks whether a connector is aware of the self refresh state.
1051          * It should be set to true for those connector implementations which
1052          * understand the self refresh state. This is needed since the crtc
1053          * registers the self refresh helpers and it doesn't know if the
1054          * connectors downstream have implemented self refresh entry/exit.
1055          *
1056          * Drivers should set this to true in atomic_check if they know how to
1057          * handle self_refresh requests.
1058          */
1059         bool self_refresh_aware;
1060
1061         /**
1062          * @picture_aspect_ratio: Connector property to control the
1063          * HDMI infoframe aspect ratio setting.
1064          *
1065          * The %DRM_MODE_PICTURE_ASPECT_\* values much match the
1066          * values for &enum hdmi_picture_aspect
1067          */
1068         enum hdmi_picture_aspect picture_aspect_ratio;
1069
1070         /**
1071          * @content_type: Connector property to control the
1072          * HDMI infoframe content type setting.
1073          * The %DRM_MODE_CONTENT_TYPE_\* values much
1074          * match the values.
1075          */
1076         unsigned int content_type;
1077
1078         /**
1079          * @hdcp_content_type: Connector property to pass the type of
1080          * protected content. This is most commonly used for HDCP.
1081          */
1082         unsigned int hdcp_content_type;
1083
1084         /**
1085          * @scaling_mode: Connector property to control the
1086          * upscaling, mostly used for built-in panels.
1087          */
1088         unsigned int scaling_mode;
1089
1090         /**
1091          * @content_protection: Connector property to request content
1092          * protection. This is most commonly used for HDCP.
1093          */
1094         unsigned int content_protection;
1095
1096         /**
1097          * @colorspace: State variable for Connector property to request
1098          * colorspace change on Sink. This is most commonly used to switch
1099          * to wider color gamuts like BT2020.
1100          */
1101         enum drm_colorspace colorspace;
1102
1103         /**
1104          * @writeback_job: Writeback job for writeback connectors
1105          *
1106          * Holds the framebuffer and out-fence for a writeback connector. As
1107          * the writeback completion may be asynchronous to the normal commit
1108          * cycle, the writeback job lifetime is managed separately from the
1109          * normal atomic state by this object.
1110          *
1111          * See also: drm_writeback_queue_job() and
1112          * drm_writeback_signal_completion()
1113          */
1114         struct drm_writeback_job *writeback_job;
1115
1116         /**
1117          * @max_requested_bpc: Connector property to limit the maximum bit
1118          * depth of the pixels.
1119          */
1120         u8 max_requested_bpc;
1121
1122         /**
1123          * @max_bpc: Connector max_bpc based on the requested max_bpc property
1124          * and the connector bpc limitations obtained from edid.
1125          */
1126         u8 max_bpc;
1127
1128         /**
1129          * @privacy_screen_sw_state: See :ref:`Standard Connector
1130          * Properties<standard_connector_properties>`
1131          */
1132         enum drm_privacy_screen_status privacy_screen_sw_state;
1133
1134         /**
1135          * @hdr_output_metadata:
1136          * DRM blob property for HDR output metadata
1137          */
1138         struct drm_property_blob *hdr_output_metadata;
1139
1140         /**
1141          * @hdmi: HDMI-related variable and properties. Filled by
1142          * @drm_atomic_helper_connector_hdmi_check().
1143          */
1144         struct drm_connector_hdmi_state hdmi;
1145 };
1146
1147 struct drm_connector_hdmi_audio_funcs {
1148         /**
1149          * @startup:
1150          *
1151          * Called when ASoC starts an audio stream setup. The
1152          * @startup() is optional.
1153          *
1154          * Returns:
1155          * 0 on success, a negative error code otherwise
1156          */
1157         int (*startup)(struct drm_connector *connector);
1158
1159         /**
1160          * @prepare:
1161          * Configures HDMI-encoder for audio stream. Can be called
1162          * multiple times for each setup. Mandatory.
1163          *
1164          * Returns:
1165          * 0 on success, a negative error code otherwise
1166          */
1167         int (*prepare)(struct drm_connector *connector,
1168                        struct hdmi_codec_daifmt *fmt,
1169                        struct hdmi_codec_params *hparms);
1170
1171         /**
1172          * @shutdown:
1173          *
1174          * Shut down the audio stream. Mandatory.
1175          *
1176          * Returns:
1177          * 0 on success, a negative error code otherwise
1178          */
1179         void (*shutdown)(struct drm_connector *connector);
1180
1181         /**
1182          * @mute_stream:
1183          *
1184          * Mute/unmute HDMI audio stream. The @mute_stream callback is
1185          * optional.
1186          *
1187          * Returns:
1188          * 0 on success, a negative error code otherwise
1189          */
1190         int (*mute_stream)(struct drm_connector *connector,
1191                            bool enable, int direction);
1192 };
1193
1194 /**
1195  * struct drm_connector_hdmi_funcs - drm_hdmi_connector control functions
1196  */
1197 struct drm_connector_hdmi_funcs {
1198         /**
1199          * @tmds_char_rate_valid:
1200          *
1201          * This callback is invoked at atomic_check time to figure out
1202          * whether a particular TMDS character rate is supported by the
1203          * driver.
1204          *
1205          * The @tmds_char_rate_valid callback is optional.
1206          *
1207          * Returns:
1208          *
1209          * Either &drm_mode_status.MODE_OK or one of the failure reasons
1210          * in &enum drm_mode_status.
1211          */
1212         enum drm_mode_status
1213         (*tmds_char_rate_valid)(const struct drm_connector *connector,
1214                                 const struct drm_display_mode *mode,
1215                                 unsigned long long tmds_rate);
1216
1217         /**
1218          * @clear_infoframe:
1219          *
1220          * This callback is invoked through
1221          * @drm_atomic_helper_connector_hdmi_update_infoframes during a
1222          * commit to clear the infoframes into the hardware. It will be
1223          * called multiple times, once for every disabled infoframe
1224          * type.
1225          *
1226          * The @clear_infoframe callback is optional.
1227          *
1228          * Returns:
1229          * 0 on success, a negative error code otherwise
1230          */
1231         int (*clear_infoframe)(struct drm_connector *connector,
1232                                enum hdmi_infoframe_type type);
1233
1234         /**
1235          * @write_infoframe:
1236          *
1237          * This callback is invoked through
1238          * @drm_atomic_helper_connector_hdmi_update_infoframes during a
1239          * commit to program the infoframes into the hardware. It will
1240          * be called multiple times, once for every updated infoframe
1241          * type.
1242          *
1243          * The @write_infoframe callback is mandatory.
1244          *
1245          * Returns:
1246          * 0 on success, a negative error code otherwise
1247          */
1248         int (*write_infoframe)(struct drm_connector *connector,
1249                                enum hdmi_infoframe_type type,
1250                                const u8 *buffer, size_t len);
1251
1252         /**
1253          * @read_edid:
1254          *
1255          * This callback is used by the framework as a replacement for reading
1256          * the EDID from connector->ddc. It is still recommended to provide
1257          * connector->ddc instead of implementing this callback. Returned EDID
1258          * should be freed via the drm_edid_free().
1259          *
1260          * The @read_edid callback is optional.
1261          *
1262          * Returns:
1263          * Valid EDID on success, NULL in case of failure.
1264          */
1265         const struct drm_edid *(*read_edid)(struct drm_connector *connector);
1266 };
1267
1268 /**
1269  * struct drm_connector_funcs - control connectors on a given device
1270  *
1271  * Each CRTC may have one or more connectors attached to it.  The functions
1272  * below allow the core DRM code to control connectors, enumerate available modes,
1273  * etc.
1274  */
1275 struct drm_connector_funcs {
1276         /**
1277          * @dpms:
1278          *
1279          * Legacy entry point to set the per-connector DPMS state. Legacy DPMS
1280          * is exposed as a standard property on the connector, but diverted to
1281          * this callback in the drm core. Note that atomic drivers don't
1282          * implement the 4 level DPMS support on the connector any more, but
1283          * instead only have an on/off "ACTIVE" property on the CRTC object.
1284          *
1285          * This hook is not used by atomic drivers, remapping of the legacy DPMS
1286          * property is entirely handled in the DRM core.
1287          *
1288          * RETURNS:
1289          *
1290          * 0 on success or a negative error code on failure.
1291          */
1292         int (*dpms)(struct drm_connector *connector, int mode);
1293
1294         /**
1295          * @reset:
1296          *
1297          * Reset connector hardware and software state to off. This function isn't
1298          * called by the core directly, only through drm_mode_config_reset().
1299          * It's not a helper hook only for historical reasons.
1300          *
1301          * Atomic drivers can use drm_atomic_helper_connector_reset() to reset
1302          * atomic state using this hook.
1303          */
1304         void (*reset)(struct drm_connector *connector);
1305
1306         /**
1307          * @detect:
1308          *
1309          * Check to see if anything is attached to the connector. The parameter
1310          * force is set to false whilst polling, true when checking the
1311          * connector due to a user request. force can be used by the driver to
1312          * avoid expensive, destructive operations during automated probing.
1313          *
1314          * This callback is optional, if not implemented the connector will be
1315          * considered as always being attached.
1316          *
1317          * FIXME:
1318          *
1319          * Note that this hook is only called by the probe helper. It's not in
1320          * the helper library vtable purely for historical reasons. The only DRM
1321          * core entry point to probe connector state is @fill_modes.
1322          *
1323          * Note that the helper library will already hold
1324          * &drm_mode_config.connection_mutex. Drivers which need to grab additional
1325          * locks to avoid races with concurrent modeset changes need to use
1326          * &drm_connector_helper_funcs.detect_ctx instead.
1327          *
1328          * Also note that this callback can be called no matter the
1329          * state the connector is in. Drivers that need the underlying
1330          * device to be powered to perform the detection will first need
1331          * to make sure it's been properly enabled.
1332          *
1333          * RETURNS:
1334          *
1335          * drm_connector_status indicating the connector's status.
1336          */
1337         enum drm_connector_status (*detect)(struct drm_connector *connector,
1338                                             bool force);
1339
1340         /**
1341          * @force:
1342          *
1343          * This function is called to update internal encoder state when the
1344          * connector is forced to a certain state by userspace, either through
1345          * the sysfs interfaces or on the kernel cmdline. In that case the
1346          * @detect callback isn't called.
1347          *
1348          * FIXME:
1349          *
1350          * Note that this hook is only called by the probe helper. It's not in
1351          * the helper library vtable purely for historical reasons. The only DRM
1352          * core entry point to probe connector state is @fill_modes.
1353          */
1354         void (*force)(struct drm_connector *connector);
1355
1356         /**
1357          * @fill_modes:
1358          *
1359          * Entry point for output detection and basic mode validation. The
1360          * driver should reprobe the output if needed (e.g. when hotplug
1361          * handling is unreliable), add all detected modes to &drm_connector.modes
1362          * and filter out any the device can't support in any configuration. It
1363          * also needs to filter out any modes wider or higher than the
1364          * parameters max_width and max_height indicate.
1365          *
1366          * The drivers must also prune any modes no longer valid from
1367          * &drm_connector.modes. Furthermore it must update
1368          * &drm_connector.status and &drm_connector.edid.  If no EDID has been
1369          * received for this output connector->edid must be NULL.
1370          *
1371          * Drivers using the probe helpers should use
1372          * drm_helper_probe_single_connector_modes() to implement this
1373          * function.
1374          *
1375          * RETURNS:
1376          *
1377          * The number of modes detected and filled into &drm_connector.modes.
1378          */
1379         int (*fill_modes)(struct drm_connector *connector, uint32_t max_width, uint32_t max_height);
1380
1381         /**
1382          * @set_property:
1383          *
1384          * This is the legacy entry point to update a property attached to the
1385          * connector.
1386          *
1387          * This callback is optional if the driver does not support any legacy
1388          * driver-private properties. For atomic drivers it is not used because
1389          * property handling is done entirely in the DRM core.
1390          *
1391          * RETURNS:
1392          *
1393          * 0 on success or a negative error code on failure.
1394          */
1395         int (*set_property)(struct drm_connector *connector, struct drm_property *property,
1396                              uint64_t val);
1397
1398         /**
1399          * @late_register:
1400          *
1401          * This optional hook can be used to register additional userspace
1402          * interfaces attached to the connector, light backlight control, i2c,
1403          * DP aux or similar interfaces. It is called late in the driver load
1404          * sequence from drm_connector_register() when registering all the
1405          * core drm connector interfaces. Everything added from this callback
1406          * should be unregistered in the early_unregister callback.
1407          *
1408          * This is called while holding &drm_connector.mutex.
1409          *
1410          * Returns:
1411          *
1412          * 0 on success, or a negative error code on failure.
1413          */
1414         int (*late_register)(struct drm_connector *connector);
1415
1416         /**
1417          * @early_unregister:
1418          *
1419          * This optional hook should be used to unregister the additional
1420          * userspace interfaces attached to the connector from
1421          * late_register(). It is called from drm_connector_unregister(),
1422          * early in the driver unload sequence to disable userspace access
1423          * before data structures are torndown.
1424          *
1425          * This is called while holding &drm_connector.mutex.
1426          */
1427         void (*early_unregister)(struct drm_connector *connector);
1428
1429         /**
1430          * @destroy:
1431          *
1432          * Clean up connector resources. This is called at driver unload time
1433          * through drm_mode_config_cleanup(). It can also be called at runtime
1434          * when a connector is being hot-unplugged for drivers that support
1435          * connector hotplugging (e.g. DisplayPort MST).
1436          */
1437         void (*destroy)(struct drm_connector *connector);
1438
1439         /**
1440          * @atomic_duplicate_state:
1441          *
1442          * Duplicate the current atomic state for this connector and return it.
1443          * The core and helpers guarantee that any atomic state duplicated with
1444          * this hook and still owned by the caller (i.e. not transferred to the
1445          * driver by calling &drm_mode_config_funcs.atomic_commit) will be
1446          * cleaned up by calling the @atomic_destroy_state hook in this
1447          * structure.
1448          *
1449          * This callback is mandatory for atomic drivers.
1450          *
1451          * Atomic drivers which don't subclass &struct drm_connector_state should use
1452          * drm_atomic_helper_connector_duplicate_state(). Drivers that subclass the
1453          * state structure to extend it with driver-private state should use
1454          * __drm_atomic_helper_connector_duplicate_state() to make sure shared state is
1455          * duplicated in a consistent fashion across drivers.
1456          *
1457          * It is an error to call this hook before &drm_connector.state has been
1458          * initialized correctly.
1459          *
1460          * NOTE:
1461          *
1462          * If the duplicate state references refcounted resources this hook must
1463          * acquire a reference for each of them. The driver must release these
1464          * references again in @atomic_destroy_state.
1465          *
1466          * RETURNS:
1467          *
1468          * Duplicated atomic state or NULL when the allocation failed.
1469          */
1470         struct drm_connector_state *(*atomic_duplicate_state)(struct drm_connector *connector);
1471
1472         /**
1473          * @atomic_destroy_state:
1474          *
1475          * Destroy a state duplicated with @atomic_duplicate_state and release
1476          * or unreference all resources it references
1477          *
1478          * This callback is mandatory for atomic drivers.
1479          */
1480         void (*atomic_destroy_state)(struct drm_connector *connector,
1481                                      struct drm_connector_state *state);
1482
1483         /**
1484          * @atomic_set_property:
1485          *
1486          * Decode a driver-private property value and store the decoded value
1487          * into the passed-in state structure. Since the atomic core decodes all
1488          * standardized properties (even for extensions beyond the core set of
1489          * properties which might not be implemented by all drivers) this
1490          * requires drivers to subclass the state structure.
1491          *
1492          * Such driver-private properties should really only be implemented for
1493          * truly hardware/vendor specific state. Instead it is preferred to
1494          * standardize atomic extension and decode the properties used to expose
1495          * such an extension in the core.
1496          *
1497          * Do not call this function directly, use
1498          * drm_atomic_connector_set_property() instead.
1499          *
1500          * This callback is optional if the driver does not support any
1501          * driver-private atomic properties.
1502          *
1503          * NOTE:
1504          *
1505          * This function is called in the state assembly phase of atomic
1506          * modesets, which can be aborted for any reason (including on
1507          * userspace's request to just check whether a configuration would be
1508          * possible). Drivers MUST NOT touch any persistent state (hardware or
1509          * software) or data structures except the passed in @state parameter.
1510          *
1511          * Also since userspace controls in which order properties are set this
1512          * function must not do any input validation (since the state update is
1513          * incomplete and hence likely inconsistent). Instead any such input
1514          * validation must be done in the various atomic_check callbacks.
1515          *
1516          * RETURNS:
1517          *
1518          * 0 if the property has been found, -EINVAL if the property isn't
1519          * implemented by the driver (which shouldn't ever happen, the core only
1520          * asks for properties attached to this connector). No other validation
1521          * is allowed by the driver. The core already checks that the property
1522          * value is within the range (integer, valid enum value, ...) the driver
1523          * set when registering the property.
1524          */
1525         int (*atomic_set_property)(struct drm_connector *connector,
1526                                    struct drm_connector_state *state,
1527                                    struct drm_property *property,
1528                                    uint64_t val);
1529
1530         /**
1531          * @atomic_get_property:
1532          *
1533          * Reads out the decoded driver-private property. This is used to
1534          * implement the GETCONNECTOR IOCTL.
1535          *
1536          * Do not call this function directly, use
1537          * drm_atomic_connector_get_property() instead.
1538          *
1539          * This callback is optional if the driver does not support any
1540          * driver-private atomic properties.
1541          *
1542          * RETURNS:
1543          *
1544          * 0 on success, -EINVAL if the property isn't implemented by the
1545          * driver (which shouldn't ever happen, the core only asks for
1546          * properties attached to this connector).
1547          */
1548         int (*atomic_get_property)(struct drm_connector *connector,
1549                                    const struct drm_connector_state *state,
1550                                    struct drm_property *property,
1551                                    uint64_t *val);
1552
1553         /**
1554          * @atomic_print_state:
1555          *
1556          * If driver subclasses &struct drm_connector_state, it should implement
1557          * this optional hook for printing additional driver specific state.
1558          *
1559          * Do not call this directly, use drm_atomic_connector_print_state()
1560          * instead.
1561          */
1562         void (*atomic_print_state)(struct drm_printer *p,
1563                                    const struct drm_connector_state *state);
1564
1565         /**
1566          * @oob_hotplug_event:
1567          *
1568          * This will get called when a hotplug-event for a drm-connector
1569          * has been received from a source outside the display driver / device.
1570          */
1571         void (*oob_hotplug_event)(struct drm_connector *connector,
1572                                   enum drm_connector_status status);
1573
1574         /**
1575          * @debugfs_init:
1576          *
1577          * Allows connectors to create connector-specific debugfs files.
1578          */
1579         void (*debugfs_init)(struct drm_connector *connector, struct dentry *root);
1580 };
1581
1582 /**
1583  * struct drm_cmdline_mode - DRM Mode passed through the kernel command-line
1584  *
1585  * Each connector can have an initial mode with additional options
1586  * passed through the kernel command line. This structure allows to
1587  * express those parameters and will be filled by the command-line
1588  * parser.
1589  */
1590 struct drm_cmdline_mode {
1591         /**
1592          * @name:
1593          *
1594          * Name of the mode.
1595          */
1596         char name[DRM_DISPLAY_MODE_LEN];
1597
1598         /**
1599          * @specified:
1600          *
1601          * Has a mode been read from the command-line?
1602          */
1603         bool specified;
1604
1605         /**
1606          * @refresh_specified:
1607          *
1608          * Did the mode have a preferred refresh rate?
1609          */
1610         bool refresh_specified;
1611
1612         /**
1613          * @bpp_specified:
1614          *
1615          * Did the mode have a preferred BPP?
1616          */
1617         bool bpp_specified;
1618
1619         /**
1620          * @pixel_clock:
1621          *
1622          * Pixel Clock in kHz. Optional.
1623          */
1624         unsigned int pixel_clock;
1625
1626         /**
1627          * @xres:
1628          *
1629          * Active resolution on the X axis, in pixels.
1630          */
1631         int xres;
1632
1633         /**
1634          * @yres:
1635          *
1636          * Active resolution on the Y axis, in pixels.
1637          */
1638         int yres;
1639
1640         /**
1641          * @bpp:
1642          *
1643          * Bits per pixels for the mode.
1644          */
1645         int bpp;
1646
1647         /**
1648          * @refresh:
1649          *
1650          * Refresh rate, in Hertz.
1651          */
1652         int refresh;
1653
1654         /**
1655          * @rb:
1656          *
1657          * Do we need to use reduced blanking?
1658          */
1659         bool rb;
1660
1661         /**
1662          * @interlace:
1663          *
1664          * The mode is interlaced.
1665          */
1666         bool interlace;
1667
1668         /**
1669          * @cvt:
1670          *
1671          * The timings will be calculated using the VESA Coordinated
1672          * Video Timings instead of looking up the mode from a table.
1673          */
1674         bool cvt;
1675
1676         /**
1677          * @margins:
1678          *
1679          * Add margins to the mode calculation (1.8% of xres rounded
1680          * down to 8 pixels and 1.8% of yres).
1681          */
1682         bool margins;
1683
1684         /**
1685          * @force:
1686          *
1687          * Ignore the hotplug state of the connector, and force its
1688          * state to one of the DRM_FORCE_* values.
1689          */
1690         enum drm_connector_force force;
1691
1692         /**
1693          * @rotation_reflection:
1694          *
1695          * Initial rotation and reflection of the mode setup from the
1696          * command line. See DRM_MODE_ROTATE_* and
1697          * DRM_MODE_REFLECT_*. The only rotations supported are
1698          * DRM_MODE_ROTATE_0 and DRM_MODE_ROTATE_180.
1699          */
1700         unsigned int rotation_reflection;
1701
1702         /**
1703          * @panel_orientation:
1704          *
1705          * drm-connector "panel orientation" property override value,
1706          * DRM_MODE_PANEL_ORIENTATION_UNKNOWN if not set.
1707          */
1708         enum drm_panel_orientation panel_orientation;
1709
1710         /**
1711          * @tv_margins: TV margins to apply to the mode.
1712          */
1713         struct drm_connector_tv_margins tv_margins;
1714
1715         /**
1716          * @tv_mode: TV mode standard. See DRM_MODE_TV_MODE_*.
1717          */
1718         enum drm_connector_tv_mode tv_mode;
1719
1720         /**
1721          * @tv_mode_specified:
1722          *
1723          * Did the mode have a preferred TV mode?
1724          */
1725         bool tv_mode_specified;
1726 };
1727
1728 /**
1729  * struct drm_connector_hdmi_audio - DRM gemeric HDMI Codec-related structure
1730  *
1731  * HDMI drivers usually incorporate a HDMI Codec. This structure expresses the
1732  * generic HDMI Codec as used by the DRM HDMI Codec framework.
1733  */
1734 struct drm_connector_hdmi_audio {
1735         /**
1736          * @funcs:
1737          *
1738          * Implementation of the HDMI codec functionality to be used by the DRM
1739          * HDMI Codec framework.
1740          */
1741         const struct drm_connector_hdmi_audio_funcs *funcs;
1742
1743         /**
1744          * @codec_pdev:
1745          *
1746          * Platform device created to hold the HDMI Codec. It will be
1747          * automatically unregistered during drm_connector_cleanup().
1748          */
1749         struct platform_device *codec_pdev;
1750
1751         /**
1752          * @lock:
1753          *
1754          * Mutex to protect @last_state, @plugged_cb and @plugged_cb_dev.
1755          */
1756         struct mutex lock;
1757
1758         /**
1759          * @plugged_cb:
1760          *
1761          * Callback to be called when the HDMI sink get plugged to or unplugged
1762          * from this connector. This is assigned by the framework when
1763          * requested by the ASoC code.
1764          */
1765         void (*plugged_cb)(struct device *dev, bool plugged);
1766
1767         /**
1768          * @plugged_cb_dev:
1769          *
1770          * The data for @plugged_cb(). It is being provided by the ASoC.
1771          */
1772         struct device *plugged_cb_dev;
1773
1774         /**
1775          * @last_state:
1776          *
1777          * Last plugged state recored by the framework. It is used to correctly
1778          * report the state to @plugged_cb().
1779          */
1780         bool last_state;
1781
1782         /**
1783          * @dai_port:
1784          *
1785          * The port in DT that is used for the Codec DAI.
1786          */
1787         int dai_port;
1788 };
1789
1790 /*
1791  * struct drm_connector_hdmi - DRM Connector HDMI-related structure
1792  */
1793 struct drm_connector_hdmi {
1794 #define DRM_CONNECTOR_HDMI_VENDOR_LEN   8
1795         /**
1796          * @vendor: HDMI Controller Vendor Name
1797          */
1798         unsigned char vendor[DRM_CONNECTOR_HDMI_VENDOR_LEN] __nonstring;
1799
1800 #define DRM_CONNECTOR_HDMI_PRODUCT_LEN  16
1801         /**
1802          * @product: HDMI Controller Product Name
1803          */
1804         unsigned char product[DRM_CONNECTOR_HDMI_PRODUCT_LEN] __nonstring;
1805
1806         /**
1807          * @supported_formats: Bitmask of @hdmi_colorspace
1808          * supported by the controller.
1809          */
1810         unsigned long supported_formats;
1811
1812         /**
1813          * @funcs: HDMI connector Control Functions
1814          */
1815         const struct drm_connector_hdmi_funcs *funcs;
1816
1817         /**
1818          * @infoframes: Current Infoframes output by the connector
1819          */
1820         struct {
1821                 /**
1822                  * @lock: Mutex protecting against concurrent access to
1823                  * the infoframes, most notably between KMS and ALSA.
1824                  */
1825                 struct mutex lock;
1826
1827                 /**
1828                  * @audio: Current Audio Infoframes structure. Protected
1829                  * by @lock.
1830                  */
1831                 struct drm_connector_hdmi_infoframe audio;
1832         } infoframes;
1833 };
1834
1835 /**
1836  * struct drm_connector - central DRM connector control structure
1837  *
1838  * Each connector may be connected to one or more CRTCs, or may be clonable by
1839  * another connector if they can share a CRTC.  Each connector also has a specific
1840  * position in the broader display (referred to as a 'screen' though it could
1841  * span multiple monitors).
1842  */
1843 struct drm_connector {
1844         /** @dev: parent DRM device */
1845         struct drm_device *dev;
1846         /** @kdev: kernel device for sysfs attributes */
1847         struct device *kdev;
1848         /** @attr: sysfs attributes */
1849         struct device_attribute *attr;
1850         /**
1851          * @fwnode: associated fwnode supplied by platform firmware
1852          *
1853          * Drivers can set this to associate a fwnode with a connector, drivers
1854          * are expected to get a reference on the fwnode when setting this.
1855          * drm_connector_cleanup() will call fwnode_handle_put() on this.
1856          */
1857         struct fwnode_handle *fwnode;
1858
1859         /**
1860          * @head:
1861          *
1862          * List of all connectors on a @dev, linked from
1863          * &drm_mode_config.connector_list. Protected by
1864          * &drm_mode_config.connector_list_lock, but please only use
1865          * &drm_connector_list_iter to walk this list.
1866          */
1867         struct list_head head;
1868
1869         /**
1870          * @global_connector_list_entry:
1871          *
1872          * Connector entry in the global connector-list, used by
1873          * drm_connector_find_by_fwnode().
1874          */
1875         struct list_head global_connector_list_entry;
1876
1877         /** @base: base KMS object */
1878         struct drm_mode_object base;
1879
1880         /** @name: human readable name, can be overwritten by the driver */
1881         char *name;
1882
1883         /**
1884          * @mutex: Lock for general connector state, but currently only protects
1885          * @registered. Most of the connector state is still protected by
1886          * &drm_mode_config.mutex.
1887          */
1888         struct mutex mutex;
1889
1890         /**
1891          * @index: Compacted connector index, which matches the position inside
1892          * the mode_config.list for drivers not supporting hot-add/removing. Can
1893          * be used as an array index. It is invariant over the lifetime of the
1894          * connector.
1895          */
1896         unsigned index;
1897
1898         /**
1899          * @connector_type:
1900          * one of the DRM_MODE_CONNECTOR_<foo> types from drm_mode.h
1901          */
1902         int connector_type;
1903         /** @connector_type_id: index into connector type enum */
1904         int connector_type_id;
1905         /**
1906          * @interlace_allowed:
1907          * Can this connector handle interlaced modes? Only used by
1908          * drm_helper_probe_single_connector_modes() for mode filtering.
1909          */
1910         bool interlace_allowed;
1911         /**
1912          * @doublescan_allowed:
1913          * Can this connector handle doublescan? Only used by
1914          * drm_helper_probe_single_connector_modes() for mode filtering.
1915          */
1916         bool doublescan_allowed;
1917         /**
1918          * @stereo_allowed:
1919          * Can this connector handle stereo modes? Only used by
1920          * drm_helper_probe_single_connector_modes() for mode filtering.
1921          */
1922         bool stereo_allowed;
1923
1924         /**
1925          * @ycbcr_420_allowed : This bool indicates if this connector is
1926          * capable of handling YCBCR 420 output. While parsing the EDID
1927          * blocks it's very helpful to know if the source is capable of
1928          * handling YCBCR 420 outputs.
1929          */
1930         bool ycbcr_420_allowed;
1931
1932         /**
1933          * @registration_state: Is this connector initializing, exposed
1934          * (registered) with userspace, or unregistered?
1935          *
1936          * Protected by @mutex.
1937          */
1938         enum drm_connector_registration_state registration_state;
1939
1940         /**
1941          * @modes:
1942          * Modes available on this connector (from fill_modes() + user).
1943          * Protected by &drm_mode_config.mutex.
1944          */
1945         struct list_head modes;
1946
1947         /**
1948          * @status:
1949          * One of the drm_connector_status enums (connected, not, or unknown).
1950          * Protected by &drm_mode_config.mutex.
1951          */
1952         enum drm_connector_status status;
1953
1954         /**
1955          * @probed_modes:
1956          * These are modes added by probing with DDC or the BIOS, before
1957          * filtering is applied. Used by the probe helpers. Protected by
1958          * &drm_mode_config.mutex.
1959          */
1960         struct list_head probed_modes;
1961
1962         /**
1963          * @display_info: Display information is filled from EDID information
1964          * when a display is detected. For non hot-pluggable displays such as
1965          * flat panels in embedded systems, the driver should initialize the
1966          * &drm_display_info.width_mm and &drm_display_info.height_mm fields
1967          * with the physical size of the display.
1968          *
1969          * Protected by &drm_mode_config.mutex.
1970          */
1971         struct drm_display_info display_info;
1972
1973         /** @funcs: connector control functions */
1974         const struct drm_connector_funcs *funcs;
1975
1976         /**
1977          * @edid_blob_ptr: DRM property containing EDID if present. Protected by
1978          * &drm_mode_config.mutex.
1979          *
1980          * This must be updated only by calling drm_edid_connector_update() or
1981          * drm_connector_update_edid_property().
1982          *
1983          * This must not be used by drivers directly.
1984          */
1985         struct drm_property_blob *edid_blob_ptr;
1986
1987         /** @properties: property tracking for this connector */
1988         struct drm_object_properties properties;
1989
1990         /**
1991          * @scaling_mode_property: Optional atomic property to control the
1992          * upscaling. See drm_connector_attach_content_protection_property().
1993          */
1994         struct drm_property *scaling_mode_property;
1995
1996         /**
1997          * @vrr_capable_property: Optional property to help userspace
1998          * query hardware support for variable refresh rate on a connector.
1999          * connector. Drivers can add the property to a connector by
2000          * calling drm_connector_attach_vrr_capable_property().
2001          *
2002          * This should be updated only by calling
2003          * drm_connector_set_vrr_capable_property().
2004          */
2005         struct drm_property *vrr_capable_property;
2006
2007         /**
2008          * @colorspace_property: Connector property to set the suitable
2009          * colorspace supported by the sink.
2010          */
2011         struct drm_property *colorspace_property;
2012
2013         /**
2014          * @path_blob_ptr:
2015          *
2016          * DRM blob property data for the DP MST path property. This should only
2017          * be updated by calling drm_connector_set_path_property().
2018          */
2019         struct drm_property_blob *path_blob_ptr;
2020
2021         /**
2022          * @max_bpc: Maximum bits per color channel the connector supports.
2023          */
2024         unsigned int max_bpc;
2025
2026         /**
2027          * @max_bpc_property: Default connector property for the max bpc to be
2028          * driven out of the connector.
2029          */
2030         struct drm_property *max_bpc_property;
2031
2032         /** @privacy_screen: drm_privacy_screen for this connector, or NULL. */
2033         struct drm_privacy_screen *privacy_screen;
2034
2035         /** @privacy_screen_notifier: privacy-screen notifier_block */
2036         struct notifier_block privacy_screen_notifier;
2037
2038         /**
2039          * @privacy_screen_sw_state_property: Optional atomic property for the
2040          * connector to control the integrated privacy screen.
2041          */
2042         struct drm_property *privacy_screen_sw_state_property;
2043
2044         /**
2045          * @privacy_screen_hw_state_property: Optional atomic property for the
2046          * connector to report the actual integrated privacy screen state.
2047          */
2048         struct drm_property *privacy_screen_hw_state_property;
2049
2050         /**
2051          * @broadcast_rgb_property: Connector property to set the
2052          * Broadcast RGB selection to output with.
2053          */
2054         struct drm_property *broadcast_rgb_property;
2055
2056 #define DRM_CONNECTOR_POLL_HPD (1 << 0)
2057 #define DRM_CONNECTOR_POLL_CONNECT (1 << 1)
2058 #define DRM_CONNECTOR_POLL_DISCONNECT (1 << 2)
2059
2060         /**
2061          * @polled:
2062          *
2063          * Connector polling mode, a combination of
2064          *
2065          * DRM_CONNECTOR_POLL_HPD
2066          *     The connector generates hotplug events and doesn't need to be
2067          *     periodically polled. The CONNECT and DISCONNECT flags must not
2068          *     be set together with the HPD flag.
2069          *
2070          * DRM_CONNECTOR_POLL_CONNECT
2071          *     Periodically poll the connector for connection.
2072          *
2073          * DRM_CONNECTOR_POLL_DISCONNECT
2074          *     Periodically poll the connector for disconnection, without
2075          *     causing flickering even when the connector is in use. DACs should
2076          *     rarely do this without a lot of testing.
2077          *
2078          * Set to 0 for connectors that don't support connection status
2079          * discovery.
2080          */
2081         uint8_t polled;
2082
2083         /**
2084          * @dpms: Current dpms state. For legacy drivers the
2085          * &drm_connector_funcs.dpms callback must update this. For atomic
2086          * drivers, this is handled by the core atomic code, and drivers must
2087          * only take &drm_crtc_state.active into account.
2088          */
2089         int dpms;
2090
2091         /** @helper_private: mid-layer private data */
2092         const struct drm_connector_helper_funcs *helper_private;
2093
2094         /** @cmdline_mode: mode line parsed from the kernel cmdline for this connector */
2095         struct drm_cmdline_mode cmdline_mode;
2096         /** @force: a DRM_FORCE_<foo> state for forced mode sets */
2097         enum drm_connector_force force;
2098
2099         /**
2100          * @edid_override: Override EDID set via debugfs.
2101          *
2102          * Do not modify or access outside of the drm_edid_override_* family of
2103          * functions.
2104          */
2105         const struct drm_edid *edid_override;
2106
2107         /**
2108          * @edid_override_mutex: Protect access to edid_override.
2109          */
2110         struct mutex edid_override_mutex;
2111
2112         /** @epoch_counter: used to detect any other changes in connector, besides status */
2113         u64 epoch_counter;
2114
2115         /**
2116          * @possible_encoders: Bit mask of encoders that can drive this
2117          * connector, drm_encoder_index() determines the index into the bitfield
2118          * and the bits are set with drm_connector_attach_encoder().
2119          */
2120         u32 possible_encoders;
2121
2122         /**
2123          * @encoder: Currently bound encoder driving this connector, if any.
2124          * Only really meaningful for non-atomic drivers. Atomic drivers should
2125          * instead look at &drm_connector_state.best_encoder, and in case they
2126          * need the CRTC driving this output, &drm_connector_state.crtc.
2127          */
2128         struct drm_encoder *encoder;
2129
2130 #define MAX_ELD_BYTES   128
2131         /** @eld: EDID-like data, if present, protected by @eld_mutex */
2132         uint8_t eld[MAX_ELD_BYTES];
2133         /** @eld_mutex: protection for concurrenct access to @eld */
2134         struct mutex eld_mutex;
2135
2136         /** @latency_present: AV delay info from ELD, if found */
2137         bool latency_present[2];
2138         /**
2139          * @video_latency: Video latency info from ELD, if found.
2140          * [0]: progressive, [1]: interlaced
2141          */
2142         int video_latency[2];
2143         /**
2144          * @audio_latency: audio latency info from ELD, if found
2145          * [0]: progressive, [1]: interlaced
2146          */
2147         int audio_latency[2];
2148
2149         /**
2150          * @ddc: associated ddc adapter.
2151          * A connector usually has its associated ddc adapter. If a driver uses
2152          * this field, then an appropriate symbolic link is created in connector
2153          * sysfs directory to make it easy for the user to tell which i2c
2154          * adapter is for a particular display.
2155          *
2156          * The field should be set by calling drm_connector_init_with_ddc().
2157          */
2158         struct i2c_adapter *ddc;
2159
2160         /**
2161          * @null_edid_counter: track sinks that give us all zeros for the EDID.
2162          * Needed to workaround some HW bugs where we get all 0s
2163          */
2164         int null_edid_counter;
2165
2166         /** @bad_edid_counter: track sinks that give us an EDID with invalid checksum */
2167         unsigned bad_edid_counter;
2168
2169         /**
2170          * @edid_corrupt: Indicates whether the last read EDID was corrupt. Used
2171          * in Displayport compliance testing - Displayport Link CTS Core 1.2
2172          * rev1.1 4.2.2.6
2173          */
2174         bool edid_corrupt;
2175         /**
2176          * @real_edid_checksum: real edid checksum for corrupted edid block.
2177          * Required in Displayport 1.4 compliance testing
2178          * rev1.1 4.2.2.6
2179          */
2180         u8 real_edid_checksum;
2181
2182         /** @debugfs_entry: debugfs directory for this connector */
2183         struct dentry *debugfs_entry;
2184
2185         /**
2186          * @state:
2187          *
2188          * Current atomic state for this connector.
2189          *
2190          * This is protected by &drm_mode_config.connection_mutex. Note that
2191          * nonblocking atomic commits access the current connector state without
2192          * taking locks. Either by going through the &struct drm_atomic_state
2193          * pointers, see for_each_oldnew_connector_in_state(),
2194          * for_each_old_connector_in_state() and
2195          * for_each_new_connector_in_state(). Or through careful ordering of
2196          * atomic commit operations as implemented in the atomic helpers, see
2197          * &struct drm_crtc_commit.
2198          */
2199         struct drm_connector_state *state;
2200
2201         /* DisplayID bits. FIXME: Extract into a substruct? */
2202
2203         /**
2204          * @tile_blob_ptr:
2205          *
2206          * DRM blob property data for the tile property (used mostly by DP MST).
2207          * This is meant for screens which are driven through separate display
2208          * pipelines represented by &drm_crtc, which might not be running with
2209          * genlocked clocks. For tiled panels which are genlocked, like
2210          * dual-link LVDS or dual-link DSI, the driver should try to not expose
2211          * the tiling and virtualize both &drm_crtc and &drm_plane if needed.
2212          *
2213          * This should only be updated by calling
2214          * drm_connector_set_tile_property().
2215          */
2216         struct drm_property_blob *tile_blob_ptr;
2217
2218         /** @has_tile: is this connector connected to a tiled monitor */
2219         bool has_tile;
2220         /** @tile_group: tile group for the connected monitor */
2221         struct drm_tile_group *tile_group;
2222         /** @tile_is_single_monitor: whether the tile is one monitor housing */
2223         bool tile_is_single_monitor;
2224
2225         /** @num_h_tile: number of horizontal tiles in the tile group */
2226         /** @num_v_tile: number of vertical tiles in the tile group */
2227         uint8_t num_h_tile, num_v_tile;
2228         /** @tile_h_loc: horizontal location of this tile */
2229         /** @tile_v_loc: vertical location of this tile */
2230         uint8_t tile_h_loc, tile_v_loc;
2231         /** @tile_h_size: horizontal size of this tile. */
2232         /** @tile_v_size: vertical size of this tile. */
2233         uint16_t tile_h_size, tile_v_size;
2234
2235         /**
2236          * @free_node:
2237          *
2238          * List used only by &drm_connector_list_iter to be able to clean up a
2239          * connector from any context, in conjunction with
2240          * &drm_mode_config.connector_free_work.
2241          */
2242         struct llist_node free_node;
2243
2244         /** @hdr_sink_metadata: HDR Metadata Information read from sink */
2245         struct hdr_sink_metadata hdr_sink_metadata;
2246
2247         /**
2248          * @hdmi: HDMI-related variable and properties.
2249          */
2250         struct drm_connector_hdmi hdmi;
2251
2252         /**
2253          * @hdmi_audio: HDMI codec properties and non-DRM state.
2254          */
2255         struct drm_connector_hdmi_audio hdmi_audio;
2256 };
2257
2258 #define obj_to_connector(x) container_of(x, struct drm_connector, base)
2259
2260 int drm_connector_init(struct drm_device *dev,
2261                        struct drm_connector *connector,
2262                        const struct drm_connector_funcs *funcs,
2263                        int connector_type);
2264 int drm_connector_dynamic_init(struct drm_device *dev,
2265                                struct drm_connector *connector,
2266                                const struct drm_connector_funcs *funcs,
2267                                int connector_type,
2268                                struct i2c_adapter *ddc);
2269 int drm_connector_init_with_ddc(struct drm_device *dev,
2270                                 struct drm_connector *connector,
2271                                 const struct drm_connector_funcs *funcs,
2272                                 int connector_type,
2273                                 struct i2c_adapter *ddc);
2274 int drmm_connector_init(struct drm_device *dev,
2275                         struct drm_connector *connector,
2276                         const struct drm_connector_funcs *funcs,
2277                         int connector_type,
2278                         struct i2c_adapter *ddc);
2279 int drmm_connector_hdmi_init(struct drm_device *dev,
2280                              struct drm_connector *connector,
2281                              const char *vendor, const char *product,
2282                              const struct drm_connector_funcs *funcs,
2283                              const struct drm_connector_hdmi_funcs *hdmi_funcs,
2284                              int connector_type,
2285                              struct i2c_adapter *ddc,
2286                              unsigned long supported_formats,
2287                              unsigned int max_bpc);
2288 void drm_connector_attach_edid_property(struct drm_connector *connector);
2289 int drm_connector_register(struct drm_connector *connector);
2290 int drm_connector_dynamic_register(struct drm_connector *connector);
2291 void drm_connector_unregister(struct drm_connector *connector);
2292 int drm_connector_attach_encoder(struct drm_connector *connector,
2293                                       struct drm_encoder *encoder);
2294
2295 void drm_connector_cleanup(struct drm_connector *connector);
2296
2297 static inline unsigned int drm_connector_index(const struct drm_connector *connector)
2298 {
2299         return connector->index;
2300 }
2301
2302 static inline u32 drm_connector_mask(const struct drm_connector *connector)
2303 {
2304         return 1 << connector->index;
2305 }
2306
2307 /**
2308  * drm_connector_lookup - lookup connector object
2309  * @dev: DRM device
2310  * @file_priv: drm file to check for lease against.
2311  * @id: connector object id
2312  *
2313  * This function looks up the connector object specified by id
2314  * add takes a reference to it.
2315  */
2316 static inline struct drm_connector *drm_connector_lookup(struct drm_device *dev,
2317                 struct drm_file *file_priv,
2318                 uint32_t id)
2319 {
2320         struct drm_mode_object *mo;
2321         mo = drm_mode_object_find(dev, file_priv, id, DRM_MODE_OBJECT_CONNECTOR);
2322         return mo ? obj_to_connector(mo) : NULL;
2323 }
2324
2325 /**
2326  * drm_connector_get - acquire a connector reference
2327  * @connector: DRM connector
2328  *
2329  * This function increments the connector's refcount.
2330  */
2331 static inline void drm_connector_get(struct drm_connector *connector)
2332 {
2333         drm_mode_object_get(&connector->base);
2334 }
2335
2336 /**
2337  * drm_connector_put - release a connector reference
2338  * @connector: DRM connector
2339  *
2340  * This function decrements the connector's reference count and frees the
2341  * object if the reference count drops to zero.
2342  */
2343 static inline void drm_connector_put(struct drm_connector *connector)
2344 {
2345         drm_mode_object_put(&connector->base);
2346 }
2347
2348 /**
2349  * drm_connector_is_unregistered - has the connector been unregistered from
2350  * userspace?
2351  * @connector: DRM connector
2352  *
2353  * Checks whether or not @connector has been unregistered from userspace.
2354  *
2355  * Returns:
2356  * True if the connector was unregistered, false if the connector is
2357  * registered or has not yet been registered with userspace.
2358  */
2359 static inline bool
2360 drm_connector_is_unregistered(struct drm_connector *connector)
2361 {
2362         return READ_ONCE(connector->registration_state) ==
2363                 DRM_CONNECTOR_UNREGISTERED;
2364 }
2365
2366 void drm_connector_oob_hotplug_event(struct fwnode_handle *connector_fwnode,
2367                                      enum drm_connector_status status);
2368 const char *drm_get_connector_type_name(unsigned int connector_type);
2369 const char *drm_get_connector_status_name(enum drm_connector_status status);
2370 const char *drm_get_subpixel_order_name(enum subpixel_order order);
2371 const char *drm_get_dpms_name(int val);
2372 const char *drm_get_dvi_i_subconnector_name(int val);
2373 const char *drm_get_dvi_i_select_name(int val);
2374 const char *drm_get_tv_mode_name(int val);
2375 const char *drm_get_tv_subconnector_name(int val);
2376 const char *drm_get_tv_select_name(int val);
2377 const char *drm_get_dp_subconnector_name(int val);
2378 const char *drm_get_content_protection_name(int val);
2379 const char *drm_get_hdcp_content_type_name(int val);
2380
2381 int drm_get_tv_mode_from_name(const char *name, size_t len);
2382
2383 int drm_mode_create_dvi_i_properties(struct drm_device *dev);
2384 void drm_connector_attach_dp_subconnector_property(struct drm_connector *connector);
2385
2386 int drm_mode_create_tv_margin_properties(struct drm_device *dev);
2387 int drm_mode_create_tv_properties_legacy(struct drm_device *dev,
2388                                          unsigned int num_modes,
2389                                          const char * const modes[]);
2390 int drm_mode_create_tv_properties(struct drm_device *dev,
2391                                   unsigned int supported_tv_modes);
2392 void drm_connector_attach_tv_margin_properties(struct drm_connector *conn);
2393 int drm_mode_create_scaling_mode_property(struct drm_device *dev);
2394 int drm_connector_attach_content_type_property(struct drm_connector *dev);
2395 int drm_connector_attach_scaling_mode_property(struct drm_connector *connector,
2396                                                u32 scaling_mode_mask);
2397 int drm_connector_attach_vrr_capable_property(
2398                 struct drm_connector *connector);
2399 int drm_connector_attach_broadcast_rgb_property(struct drm_connector *connector);
2400 int drm_connector_attach_colorspace_property(struct drm_connector *connector);
2401 int drm_connector_attach_hdr_output_metadata_property(struct drm_connector *connector);
2402 bool drm_connector_atomic_hdr_metadata_equal(struct drm_connector_state *old_state,
2403                                              struct drm_connector_state *new_state);
2404 int drm_mode_create_aspect_ratio_property(struct drm_device *dev);
2405 int drm_mode_create_hdmi_colorspace_property(struct drm_connector *connector,
2406                                              u32 supported_colorspaces);
2407 int drm_mode_create_dp_colorspace_property(struct drm_connector *connector,
2408                                            u32 supported_colorspaces);
2409 int drm_mode_create_content_type_property(struct drm_device *dev);
2410 int drm_mode_create_suggested_offset_properties(struct drm_device *dev);
2411
2412 int drm_connector_set_path_property(struct drm_connector *connector,
2413                                     const char *path);
2414 int drm_connector_set_tile_property(struct drm_connector *connector);
2415 int drm_connector_update_edid_property(struct drm_connector *connector,
2416                                        const struct edid *edid);
2417 void drm_connector_set_link_status_property(struct drm_connector *connector,
2418                                             uint64_t link_status);
2419 void drm_connector_set_vrr_capable_property(
2420                 struct drm_connector *connector, bool capable);
2421 int drm_connector_set_panel_orientation(
2422         struct drm_connector *connector,
2423         enum drm_panel_orientation panel_orientation);
2424 int drm_connector_set_panel_orientation_with_quirk(
2425         struct drm_connector *connector,
2426         enum drm_panel_orientation panel_orientation,
2427         int width, int height);
2428 int drm_connector_set_orientation_from_panel(
2429         struct drm_connector *connector,
2430         struct drm_panel *panel);
2431 int drm_connector_attach_max_bpc_property(struct drm_connector *connector,
2432                                           int min, int max);
2433 void drm_connector_create_privacy_screen_properties(struct drm_connector *conn);
2434 void drm_connector_attach_privacy_screen_properties(struct drm_connector *conn);
2435 void drm_connector_attach_privacy_screen_provider(
2436         struct drm_connector *connector, struct drm_privacy_screen *priv);
2437 void drm_connector_update_privacy_screen(const struct drm_connector_state *connector_state);
2438
2439 /**
2440  * struct drm_tile_group - Tile group metadata
2441  * @refcount: reference count
2442  * @dev: DRM device
2443  * @id: tile group id exposed to userspace
2444  * @group_data: Sink-private data identifying this group
2445  *
2446  * @group_data corresponds to displayid vend/prod/serial for external screens
2447  * with an EDID.
2448  */
2449 struct drm_tile_group {
2450         struct kref refcount;
2451         struct drm_device *dev;
2452         int id;
2453         u8 group_data[8];
2454 };
2455
2456 struct drm_tile_group *drm_mode_create_tile_group(struct drm_device *dev,
2457                                                   const char topology[8]);
2458 struct drm_tile_group *drm_mode_get_tile_group(struct drm_device *dev,
2459                                                const char topology[8]);
2460 void drm_mode_put_tile_group(struct drm_device *dev,
2461                              struct drm_tile_group *tg);
2462
2463 /**
2464  * struct drm_connector_list_iter - connector_list iterator
2465  *
2466  * This iterator tracks state needed to be able to walk the connector_list
2467  * within struct drm_mode_config. Only use together with
2468  * drm_connector_list_iter_begin(), drm_connector_list_iter_end() and
2469  * drm_connector_list_iter_next() respectively the convenience macro
2470  * drm_for_each_connector_iter().
2471  *
2472  * Note that the return value of drm_connector_list_iter_next() is only valid
2473  * up to the next drm_connector_list_iter_next() or
2474  * drm_connector_list_iter_end() call. If you want to use the connector later,
2475  * then you need to grab your own reference first using drm_connector_get().
2476  */
2477 struct drm_connector_list_iter {
2478 /* private: */
2479         struct drm_device *dev;
2480         struct drm_connector *conn;
2481 };
2482
2483 void drm_connector_list_iter_begin(struct drm_device *dev,
2484                                    struct drm_connector_list_iter *iter);
2485 struct drm_connector *
2486 drm_connector_list_iter_next(struct drm_connector_list_iter *iter);
2487 void drm_connector_list_iter_end(struct drm_connector_list_iter *iter);
2488
2489 bool drm_connector_has_possible_encoder(struct drm_connector *connector,
2490                                         struct drm_encoder *encoder);
2491 const char *drm_get_colorspace_name(enum drm_colorspace colorspace);
2492
2493 /**
2494  * drm_for_each_connector_iter - connector_list iterator macro
2495  * @connector: &struct drm_connector pointer used as cursor
2496  * @iter: &struct drm_connector_list_iter
2497  *
2498  * Note that @connector is only valid within the list body, if you want to use
2499  * @connector after calling drm_connector_list_iter_end() then you need to grab
2500  * your own reference first using drm_connector_get().
2501  */
2502 #define drm_for_each_connector_iter(connector, iter) \
2503         while ((connector = drm_connector_list_iter_next(iter)))
2504
2505 /**
2506  * drm_connector_for_each_possible_encoder - iterate connector's possible encoders
2507  * @connector: &struct drm_connector pointer
2508  * @encoder: &struct drm_encoder pointer used as cursor
2509  */
2510 #define drm_connector_for_each_possible_encoder(connector, encoder) \
2511         drm_for_each_encoder_mask(encoder, (connector)->dev, \
2512                                   (connector)->possible_encoders)
2513
2514 #endif