]> asedeno.scripts.mit.edu Git - linux.git/blob - include/drm/drm_connector.h
716c3a0e0e1df608388ac2c02aa9f50b7afef221
[linux.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 <drm/drm_mode_object.h>
31
32 #include <uapi/drm/drm_mode.h>
33
34 struct drm_connector_helper_funcs;
35 struct drm_modeset_acquire_ctx;
36 struct drm_device;
37 struct drm_crtc;
38 struct drm_encoder;
39 struct drm_property;
40 struct drm_property_blob;
41 struct drm_printer;
42 struct edid;
43
44 enum drm_connector_force {
45         DRM_FORCE_UNSPECIFIED,
46         DRM_FORCE_OFF,
47         DRM_FORCE_ON,         /* force on analog part normally */
48         DRM_FORCE_ON_DIGITAL, /* for DVI-I use digital connector */
49 };
50
51 /**
52  * enum drm_connector_status - status for a &drm_connector
53  *
54  * This enum is used to track the connector status. There are no separate
55  * #defines for the uapi!
56  */
57 enum drm_connector_status {
58         /**
59          * @connector_status_connected: The connector is definitely connected to
60          * a sink device, and can be enabled.
61          */
62         connector_status_connected = 1,
63         /**
64          * @connector_status_disconnected: The connector isn't connected to a
65          * sink device which can be autodetect. For digital outputs like DP or
66          * HDMI (which can be realiable probed) this means there's really
67          * nothing there. It is driver-dependent whether a connector with this
68          * status can be lit up or not.
69          */
70         connector_status_disconnected = 2,
71         /**
72          * @connector_status_unknown: The connector's status could not be
73          * reliably detected. This happens when probing would either cause
74          * flicker (like load-detection when the connector is in use), or when a
75          * hardware resource isn't available (like when load-detection needs a
76          * free CRTC). It should be possible to light up the connector with one
77          * of the listed fallback modes. For default configuration userspace
78          * should only try to light up connectors with unknown status when
79          * there's not connector with @connector_status_connected.
80          */
81         connector_status_unknown = 3,
82 };
83
84 enum subpixel_order {
85         SubPixelUnknown = 0,
86         SubPixelHorizontalRGB,
87         SubPixelHorizontalBGR,
88         SubPixelVerticalRGB,
89         SubPixelVerticalBGR,
90         SubPixelNone,
91
92 };
93
94 /**
95  * struct drm_scrambling: sink's scrambling support.
96  */
97 struct drm_scrambling {
98         /**
99          * @supported: scrambling supported for rates > 340 Mhz.
100          */
101         bool supported;
102         /**
103          * @low_rates: scrambling supported for rates <= 340 Mhz.
104          */
105         bool low_rates;
106 };
107
108 /*
109  * struct drm_scdc - Information about scdc capabilities of a HDMI 2.0 sink
110  *
111  * Provides SCDC register support and capabilities related information on a
112  * HDMI 2.0 sink. In case of a HDMI 1.4 sink, all parameter must be 0.
113  */
114 struct drm_scdc {
115         /**
116          * @supported: status control & data channel present.
117          */
118         bool supported;
119         /**
120          * @read_request: sink is capable of generating scdc read request.
121          */
122         bool read_request;
123         /**
124          * @scrambling: sink's scrambling capabilities
125          */
126         struct drm_scrambling scrambling;
127 };
128
129
130 /**
131  * struct drm_hdmi_info - runtime information about the connected HDMI sink
132  *
133  * Describes if a given display supports advanced HDMI 2.0 features.
134  * This information is available in CEA-861-F extension blocks (like HF-VSDB).
135  */
136 struct drm_hdmi_info {
137         /** @scdc: sink's scdc support and capabilities */
138         struct drm_scdc scdc;
139
140         /**
141          * @y420_vdb_modes: bitmap of modes which can support ycbcr420
142          * output only (not normal RGB/YCBCR444/422 outputs). There are total
143          * 107 VICs defined by CEA-861-F spec, so the size is 128 bits to map
144          * upto 128 VICs;
145          */
146         unsigned long y420_vdb_modes[BITS_TO_LONGS(128)];
147
148         /**
149          * @y420_cmdb_modes: bitmap of modes which can support ycbcr420
150          * output also, along with normal HDMI outputs. There are total 107
151          * VICs defined by CEA-861-F spec, so the size is 128 bits to map upto
152          * 128 VICs;
153          */
154         unsigned long y420_cmdb_modes[BITS_TO_LONGS(128)];
155
156         /** @y420_cmdb_map: bitmap of SVD index, to extraxt vcb modes */
157         u64 y420_cmdb_map;
158
159         /** @y420_dc_modes: bitmap of deep color support index */
160         u8 y420_dc_modes;
161 };
162
163 /**
164  * enum drm_link_status - connector's link_status property value
165  *
166  * This enum is used as the connector's link status property value.
167  * It is set to the values defined in uapi.
168  *
169  * @DRM_LINK_STATUS_GOOD: DP Link is Good as a result of successful
170  *                        link training
171  * @DRM_LINK_STATUS_BAD: DP Link is BAD as a result of link training
172  *                       failure
173  */
174 enum drm_link_status {
175         DRM_LINK_STATUS_GOOD = DRM_MODE_LINK_STATUS_GOOD,
176         DRM_LINK_STATUS_BAD = DRM_MODE_LINK_STATUS_BAD,
177 };
178
179 /**
180  * enum drm_panel_orientation - panel_orientation info for &drm_display_info
181  *
182  * This enum is used to track the (LCD) panel orientation. There are no
183  * separate #defines for the uapi!
184  *
185  * @DRM_MODE_PANEL_ORIENTATION_UNKNOWN: The drm driver has not provided any
186  *                                      panel orientation information (normal
187  *                                      for non panels) in this case the "panel
188  *                                      orientation" connector prop will not be
189  *                                      attached.
190  * @DRM_MODE_PANEL_ORIENTATION_NORMAL:  The top side of the panel matches the
191  *                                      top side of the device's casing.
192  * @DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP: The top side of the panel matches the
193  *                                      bottom side of the device's casing, iow
194  *                                      the panel is mounted upside-down.
195  * @DRM_MODE_PANEL_ORIENTATION_LEFT_UP: The left side of the panel matches the
196  *                                      top side of the device's casing.
197  * @DRM_MODE_PANEL_ORIENTATION_RIGHT_UP: The right side of the panel matches the
198  *                                      top side of the device's casing.
199  */
200 enum drm_panel_orientation {
201         DRM_MODE_PANEL_ORIENTATION_UNKNOWN = -1,
202         DRM_MODE_PANEL_ORIENTATION_NORMAL = 0,
203         DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP,
204         DRM_MODE_PANEL_ORIENTATION_LEFT_UP,
205         DRM_MODE_PANEL_ORIENTATION_RIGHT_UP,
206 };
207
208 /**
209  * struct drm_display_info - runtime data about the connected sink
210  *
211  * Describes a given display (e.g. CRT or flat panel) and its limitations. For
212  * fixed display sinks like built-in panels there's not much difference between
213  * this and &struct drm_connector. But for sinks with a real cable this
214  * structure is meant to describe all the things at the other end of the cable.
215  *
216  * For sinks which provide an EDID this can be filled out by calling
217  * drm_add_edid_modes().
218  */
219 struct drm_display_info {
220         /**
221          * @name: Name of the display.
222          */
223         char name[DRM_DISPLAY_INFO_LEN];
224
225         /**
226          * @width_mm: Physical width in mm.
227          */
228         unsigned int width_mm;
229         /**
230          * @height_mm: Physical height in mm.
231          */
232         unsigned int height_mm;
233
234         /**
235          * @pixel_clock: Maximum pixel clock supported by the sink, in units of
236          * 100Hz. This mismatches the clock in &drm_display_mode (which is in
237          * kHZ), because that's what the EDID uses as base unit.
238          */
239         unsigned int pixel_clock;
240         /**
241          * @bpc: Maximum bits per color channel. Used by HDMI and DP outputs.
242          */
243         unsigned int bpc;
244
245         /**
246          * @subpixel_order: Subpixel order of LCD panels.
247          */
248         enum subpixel_order subpixel_order;
249
250 #define DRM_COLOR_FORMAT_RGB444         (1<<0)
251 #define DRM_COLOR_FORMAT_YCRCB444       (1<<1)
252 #define DRM_COLOR_FORMAT_YCRCB422       (1<<2)
253 #define DRM_COLOR_FORMAT_YCRCB420       (1<<3)
254
255         /**
256          * @panel_orientation: Read only connector property for built-in panels,
257          * indicating the orientation of the panel vs the device's casing.
258          * drm_connector_init() sets this to DRM_MODE_PANEL_ORIENTATION_UNKNOWN.
259          * When not UNKNOWN this gets used by the drm_fb_helpers to rotate the
260          * fb to compensate and gets exported as prop to userspace.
261          */
262         int panel_orientation;
263
264         /**
265          * @color_formats: HDMI Color formats, selects between RGB and YCrCb
266          * modes. Used DRM_COLOR_FORMAT\_ defines, which are _not_ the same ones
267          * as used to describe the pixel format in framebuffers, and also don't
268          * match the formats in @bus_formats which are shared with v4l.
269          */
270         u32 color_formats;
271
272         /**
273          * @bus_formats: Pixel data format on the wire, somewhat redundant with
274          * @color_formats. Array of size @num_bus_formats encoded using
275          * MEDIA_BUS_FMT\_ defines shared with v4l and media drivers.
276          */
277         const u32 *bus_formats;
278         /**
279          * @num_bus_formats: Size of @bus_formats array.
280          */
281         unsigned int num_bus_formats;
282
283 #define DRM_BUS_FLAG_DE_LOW             (1<<0)
284 #define DRM_BUS_FLAG_DE_HIGH            (1<<1)
285 /* drive data on pos. edge */
286 #define DRM_BUS_FLAG_PIXDATA_POSEDGE    (1<<2)
287 /* drive data on neg. edge */
288 #define DRM_BUS_FLAG_PIXDATA_NEGEDGE    (1<<3)
289 /* data is transmitted MSB to LSB on the bus */
290 #define DRM_BUS_FLAG_DATA_MSB_TO_LSB    (1<<4)
291 /* data is transmitted LSB to MSB on the bus */
292 #define DRM_BUS_FLAG_DATA_LSB_TO_MSB    (1<<5)
293
294         /**
295          * @bus_flags: Additional information (like pixel signal polarity) for
296          * the pixel data on the bus, using DRM_BUS_FLAGS\_ defines.
297          */
298         u32 bus_flags;
299
300         /**
301          * @max_tmds_clock: Maximum TMDS clock rate supported by the
302          * sink in kHz. 0 means undefined.
303          */
304         int max_tmds_clock;
305
306         /**
307          * @dvi_dual: Dual-link DVI sink?
308          */
309         bool dvi_dual;
310
311         /**
312          * @has_hdmi_infoframe: Does the sink support the HDMI infoframe?
313          */
314         bool has_hdmi_infoframe;
315
316         /**
317          * @edid_hdmi_dc_modes: Mask of supported hdmi deep color modes. Even
318          * more stuff redundant with @bus_formats.
319          */
320         u8 edid_hdmi_dc_modes;
321
322         /**
323          * @cea_rev: CEA revision of the HDMI sink.
324          */
325         u8 cea_rev;
326
327         /**
328          * @hdmi: advance features of a HDMI sink.
329          */
330         struct drm_hdmi_info hdmi;
331
332         /**
333          * @non_desktop: Non desktop display (HMD).
334          */
335         bool non_desktop;
336 };
337
338 int drm_display_info_set_bus_formats(struct drm_display_info *info,
339                                      const u32 *formats,
340                                      unsigned int num_formats);
341
342 /**
343  * struct drm_tv_connector_state - TV connector related states
344  * @subconnector: selected subconnector
345  * @margins: margins
346  * @margins.left: left margin
347  * @margins.right: right margin
348  * @margins.top: top margin
349  * @margins.bottom: bottom margin
350  * @mode: TV mode
351  * @brightness: brightness in percent
352  * @contrast: contrast in percent
353  * @flicker_reduction: flicker reduction in percent
354  * @overscan: overscan in percent
355  * @saturation: saturation in percent
356  * @hue: hue in percent
357  */
358 struct drm_tv_connector_state {
359         enum drm_mode_subconnector subconnector;
360         struct {
361                 unsigned int left;
362                 unsigned int right;
363                 unsigned int top;
364                 unsigned int bottom;
365         } margins;
366         unsigned int mode;
367         unsigned int brightness;
368         unsigned int contrast;
369         unsigned int flicker_reduction;
370         unsigned int overscan;
371         unsigned int saturation;
372         unsigned int hue;
373 };
374
375 /**
376  * struct drm_connector_state - mutable connector state
377  * @connector: backpointer to the connector
378  * @best_encoder: can be used by helpers and drivers to select the encoder
379  * @state: backpointer to global drm_atomic_state
380  * @tv: TV connector state
381  */
382 struct drm_connector_state {
383         struct drm_connector *connector;
384
385         /**
386          * @crtc: CRTC to connect connector to, NULL if disabled.
387          *
388          * Do not change this directly, use drm_atomic_set_crtc_for_connector()
389          * instead.
390          */
391         struct drm_crtc *crtc;
392
393         struct drm_encoder *best_encoder;
394
395         /**
396          * @link_status: Connector link_status to keep track of whether link is
397          * GOOD or BAD to notify userspace if retraining is necessary.
398          */
399         enum drm_link_status link_status;
400
401         struct drm_atomic_state *state;
402
403         /**
404          * @commit: Tracks the pending commit to prevent use-after-free conditions.
405          *
406          * Is only set when @crtc is NULL.
407          */
408         struct drm_crtc_commit *commit;
409
410         struct drm_tv_connector_state tv;
411
412         /**
413          * @picture_aspect_ratio: Connector property to control the
414          * HDMI infoframe aspect ratio setting.
415          *
416          * The %DRM_MODE_PICTURE_ASPECT_\* values much match the
417          * values for &enum hdmi_picture_aspect
418          */
419         enum hdmi_picture_aspect picture_aspect_ratio;
420
421         /**
422          * @content_type: Connector property to control the
423          * HDMI infoframe content type setting.
424          * The %DRM_MODE_CONTENT_TYPE_\* values much
425          * match the values.
426          */
427         unsigned int content_type;
428
429         /**
430          * @scaling_mode: Connector property to control the
431          * upscaling, mostly used for built-in panels.
432          */
433         unsigned int scaling_mode;
434
435         /**
436          * @content_protection: Connector property to request content
437          * protection. This is most commonly used for HDCP.
438          */
439         unsigned int content_protection;
440
441         /**
442          * @writeback_job: Writeback job for writeback connectors
443          *
444          * Holds the framebuffer for a writeback connector. As the writeback
445          * completion may be asynchronous to the normal commit cycle, the
446          * writeback job lifetime is managed separately from the normal atomic
447          * state by this object.
448          *
449          * See also: drm_writeback_queue_job() and
450          * drm_writeback_signal_completion()
451          */
452         struct drm_writeback_job *writeback_job;
453 };
454
455 /**
456  * struct drm_connector_funcs - control connectors on a given device
457  *
458  * Each CRTC may have one or more connectors attached to it.  The functions
459  * below allow the core DRM code to control connectors, enumerate available modes,
460  * etc.
461  */
462 struct drm_connector_funcs {
463         /**
464          * @dpms:
465          *
466          * Legacy entry point to set the per-connector DPMS state. Legacy DPMS
467          * is exposed as a standard property on the connector, but diverted to
468          * this callback in the drm core. Note that atomic drivers don't
469          * implement the 4 level DPMS support on the connector any more, but
470          * instead only have an on/off "ACTIVE" property on the CRTC object.
471          *
472          * This hook is not used by atomic drivers, remapping of the legacy DPMS
473          * property is entirely handled in the DRM core.
474          *
475          * RETURNS:
476          *
477          * 0 on success or a negative error code on failure.
478          */
479         int (*dpms)(struct drm_connector *connector, int mode);
480
481         /**
482          * @reset:
483          *
484          * Reset connector hardware and software state to off. This function isn't
485          * called by the core directly, only through drm_mode_config_reset().
486          * It's not a helper hook only for historical reasons.
487          *
488          * Atomic drivers can use drm_atomic_helper_connector_reset() to reset
489          * atomic state using this hook.
490          */
491         void (*reset)(struct drm_connector *connector);
492
493         /**
494          * @detect:
495          *
496          * Check to see if anything is attached to the connector. The parameter
497          * force is set to false whilst polling, true when checking the
498          * connector due to a user request. force can be used by the driver to
499          * avoid expensive, destructive operations during automated probing.
500          *
501          * This callback is optional, if not implemented the connector will be
502          * considered as always being attached.
503          *
504          * FIXME:
505          *
506          * Note that this hook is only called by the probe helper. It's not in
507          * the helper library vtable purely for historical reasons. The only DRM
508          * core entry point to probe connector state is @fill_modes.
509          *
510          * Note that the helper library will already hold
511          * &drm_mode_config.connection_mutex. Drivers which need to grab additional
512          * locks to avoid races with concurrent modeset changes need to use
513          * &drm_connector_helper_funcs.detect_ctx instead.
514          *
515          * RETURNS:
516          *
517          * drm_connector_status indicating the connector's status.
518          */
519         enum drm_connector_status (*detect)(struct drm_connector *connector,
520                                             bool force);
521
522         /**
523          * @force:
524          *
525          * This function is called to update internal encoder state when the
526          * connector is forced to a certain state by userspace, either through
527          * the sysfs interfaces or on the kernel cmdline. In that case the
528          * @detect callback isn't called.
529          *
530          * FIXME:
531          *
532          * Note that this hook is only called by the probe helper. It's not in
533          * the helper library vtable purely for historical reasons. The only DRM
534          * core entry point to probe connector state is @fill_modes.
535          */
536         void (*force)(struct drm_connector *connector);
537
538         /**
539          * @fill_modes:
540          *
541          * Entry point for output detection and basic mode validation. The
542          * driver should reprobe the output if needed (e.g. when hotplug
543          * handling is unreliable), add all detected modes to &drm_connector.modes
544          * and filter out any the device can't support in any configuration. It
545          * also needs to filter out any modes wider or higher than the
546          * parameters max_width and max_height indicate.
547          *
548          * The drivers must also prune any modes no longer valid from
549          * &drm_connector.modes. Furthermore it must update
550          * &drm_connector.status and &drm_connector.edid.  If no EDID has been
551          * received for this output connector->edid must be NULL.
552          *
553          * Drivers using the probe helpers should use
554          * drm_helper_probe_single_connector_modes() or
555          * drm_helper_probe_single_connector_modes_nomerge() to implement this
556          * function.
557          *
558          * RETURNS:
559          *
560          * The number of modes detected and filled into &drm_connector.modes.
561          */
562         int (*fill_modes)(struct drm_connector *connector, uint32_t max_width, uint32_t max_height);
563
564         /**
565          * @set_property:
566          *
567          * This is the legacy entry point to update a property attached to the
568          * connector.
569          *
570          * This callback is optional if the driver does not support any legacy
571          * driver-private properties. For atomic drivers it is not used because
572          * property handling is done entirely in the DRM core.
573          *
574          * RETURNS:
575          *
576          * 0 on success or a negative error code on failure.
577          */
578         int (*set_property)(struct drm_connector *connector, struct drm_property *property,
579                              uint64_t val);
580
581         /**
582          * @late_register:
583          *
584          * This optional hook can be used to register additional userspace
585          * interfaces attached to the connector, light backlight control, i2c,
586          * DP aux or similar interfaces. It is called late in the driver load
587          * sequence from drm_connector_register() when registering all the
588          * core drm connector interfaces. Everything added from this callback
589          * should be unregistered in the early_unregister callback.
590          *
591          * This is called while holding &drm_connector.mutex.
592          *
593          * Returns:
594          *
595          * 0 on success, or a negative error code on failure.
596          */
597         int (*late_register)(struct drm_connector *connector);
598
599         /**
600          * @early_unregister:
601          *
602          * This optional hook should be used to unregister the additional
603          * userspace interfaces attached to the connector from
604          * late_register(). It is called from drm_connector_unregister(),
605          * early in the driver unload sequence to disable userspace access
606          * before data structures are torndown.
607          *
608          * This is called while holding &drm_connector.mutex.
609          */
610         void (*early_unregister)(struct drm_connector *connector);
611
612         /**
613          * @destroy:
614          *
615          * Clean up connector resources. This is called at driver unload time
616          * through drm_mode_config_cleanup(). It can also be called at runtime
617          * when a connector is being hot-unplugged for drivers that support
618          * connector hotplugging (e.g. DisplayPort MST).
619          */
620         void (*destroy)(struct drm_connector *connector);
621
622         /**
623          * @atomic_duplicate_state:
624          *
625          * Duplicate the current atomic state for this connector and return it.
626          * The core and helpers guarantee that any atomic state duplicated with
627          * this hook and still owned by the caller (i.e. not transferred to the
628          * driver by calling &drm_mode_config_funcs.atomic_commit) will be
629          * cleaned up by calling the @atomic_destroy_state hook in this
630          * structure.
631          *
632          * This callback is mandatory for atomic drivers.
633          *
634          * Atomic drivers which don't subclass &struct drm_connector_state should use
635          * drm_atomic_helper_connector_duplicate_state(). Drivers that subclass the
636          * state structure to extend it with driver-private state should use
637          * __drm_atomic_helper_connector_duplicate_state() to make sure shared state is
638          * duplicated in a consistent fashion across drivers.
639          *
640          * It is an error to call this hook before &drm_connector.state has been
641          * initialized correctly.
642          *
643          * NOTE:
644          *
645          * If the duplicate state references refcounted resources this hook must
646          * acquire a reference for each of them. The driver must release these
647          * references again in @atomic_destroy_state.
648          *
649          * RETURNS:
650          *
651          * Duplicated atomic state or NULL when the allocation failed.
652          */
653         struct drm_connector_state *(*atomic_duplicate_state)(struct drm_connector *connector);
654
655         /**
656          * @atomic_destroy_state:
657          *
658          * Destroy a state duplicated with @atomic_duplicate_state and release
659          * or unreference all resources it references
660          *
661          * This callback is mandatory for atomic drivers.
662          */
663         void (*atomic_destroy_state)(struct drm_connector *connector,
664                                      struct drm_connector_state *state);
665
666         /**
667          * @atomic_set_property:
668          *
669          * Decode a driver-private property value and store the decoded value
670          * into the passed-in state structure. Since the atomic core decodes all
671          * standardized properties (even for extensions beyond the core set of
672          * properties which might not be implemented by all drivers) this
673          * requires drivers to subclass the state structure.
674          *
675          * Such driver-private properties should really only be implemented for
676          * truly hardware/vendor specific state. Instead it is preferred to
677          * standardize atomic extension and decode the properties used to expose
678          * such an extension in the core.
679          *
680          * Do not call this function directly, use
681          * drm_atomic_connector_set_property() instead.
682          *
683          * This callback is optional if the driver does not support any
684          * driver-private atomic properties.
685          *
686          * NOTE:
687          *
688          * This function is called in the state assembly phase of atomic
689          * modesets, which can be aborted for any reason (including on
690          * userspace's request to just check whether a configuration would be
691          * possible). Drivers MUST NOT touch any persistent state (hardware or
692          * software) or data structures except the passed in @state parameter.
693          *
694          * Also since userspace controls in which order properties are set this
695          * function must not do any input validation (since the state update is
696          * incomplete and hence likely inconsistent). Instead any such input
697          * validation must be done in the various atomic_check callbacks.
698          *
699          * RETURNS:
700          *
701          * 0 if the property has been found, -EINVAL if the property isn't
702          * implemented by the driver (which shouldn't ever happen, the core only
703          * asks for properties attached to this connector). No other validation
704          * is allowed by the driver. The core already checks that the property
705          * value is within the range (integer, valid enum value, ...) the driver
706          * set when registering the property.
707          */
708         int (*atomic_set_property)(struct drm_connector *connector,
709                                    struct drm_connector_state *state,
710                                    struct drm_property *property,
711                                    uint64_t val);
712
713         /**
714          * @atomic_get_property:
715          *
716          * Reads out the decoded driver-private property. This is used to
717          * implement the GETCONNECTOR IOCTL.
718          *
719          * Do not call this function directly, use
720          * drm_atomic_connector_get_property() instead.
721          *
722          * This callback is optional if the driver does not support any
723          * driver-private atomic properties.
724          *
725          * RETURNS:
726          *
727          * 0 on success, -EINVAL if the property isn't implemented by the
728          * driver (which shouldn't ever happen, the core only asks for
729          * properties attached to this connector).
730          */
731         int (*atomic_get_property)(struct drm_connector *connector,
732                                    const struct drm_connector_state *state,
733                                    struct drm_property *property,
734                                    uint64_t *val);
735
736         /**
737          * @atomic_print_state:
738          *
739          * If driver subclasses &struct drm_connector_state, it should implement
740          * this optional hook for printing additional driver specific state.
741          *
742          * Do not call this directly, use drm_atomic_connector_print_state()
743          * instead.
744          */
745         void (*atomic_print_state)(struct drm_printer *p,
746                                    const struct drm_connector_state *state);
747 };
748
749 /* mode specified on the command line */
750 struct drm_cmdline_mode {
751         bool specified;
752         bool refresh_specified;
753         bool bpp_specified;
754         int xres, yres;
755         int bpp;
756         int refresh;
757         bool rb;
758         bool interlace;
759         bool cvt;
760         bool margins;
761         enum drm_connector_force force;
762 };
763
764 /**
765  * struct drm_connector - central DRM connector control structure
766  * @dev: parent DRM device
767  * @kdev: kernel device for sysfs attributes
768  * @attr: sysfs attributes
769  * @head: list management
770  * @base: base KMS object
771  * @name: human readable name, can be overwritten by the driver
772  * @connector_type: one of the DRM_MODE_CONNECTOR_<foo> types from drm_mode.h
773  * @connector_type_id: index into connector type enum
774  * @interlace_allowed: can this connector handle interlaced modes?
775  * @doublescan_allowed: can this connector handle doublescan?
776  * @stereo_allowed: can this connector handle stereo modes?
777  * @funcs: connector control functions
778  * @edid_blob_ptr: DRM property containing EDID if present
779  * @properties: property tracking for this connector
780  * @dpms: current dpms state
781  * @helper_private: mid-layer private data
782  * @cmdline_mode: mode line parsed from the kernel cmdline for this connector
783  * @force: a DRM_FORCE_<foo> state for forced mode sets
784  * @override_edid: has the EDID been overwritten through debugfs for testing?
785  * @encoder_ids: valid encoders for this connector
786  * @eld: EDID-like data, if present
787  * @latency_present: AV delay info from ELD, if found
788  * @video_latency: video latency info from ELD, if found
789  * @audio_latency: audio latency info from ELD, if found
790  * @null_edid_counter: track sinks that give us all zeros for the EDID
791  * @bad_edid_counter: track sinks that give us an EDID with invalid checksum
792  * @edid_corrupt: indicates whether the last read EDID was corrupt
793  * @debugfs_entry: debugfs directory for this connector
794  * @has_tile: is this connector connected to a tiled monitor
795  * @tile_group: tile group for the connected monitor
796  * @tile_is_single_monitor: whether the tile is one monitor housing
797  * @num_h_tile: number of horizontal tiles in the tile group
798  * @num_v_tile: number of vertical tiles in the tile group
799  * @tile_h_loc: horizontal location of this tile
800  * @tile_v_loc: vertical location of this tile
801  * @tile_h_size: horizontal size of this tile.
802  * @tile_v_size: vertical size of this tile.
803  * @scaling_mode_property:  Optional atomic property to control the upscaling.
804  * @content_protection_property: Optional property to control content protection
805  *
806  * Each connector may be connected to one or more CRTCs, or may be clonable by
807  * another connector if they can share a CRTC.  Each connector also has a specific
808  * position in the broader display (referred to as a 'screen' though it could
809  * span multiple monitors).
810  */
811 struct drm_connector {
812         struct drm_device *dev;
813         struct device *kdev;
814         struct device_attribute *attr;
815         struct list_head head;
816
817         struct drm_mode_object base;
818
819         char *name;
820
821         /**
822          * @mutex: Lock for general connector state, but currently only protects
823          * @registered. Most of the connector state is still protected by
824          * &drm_mode_config.mutex.
825          */
826         struct mutex mutex;
827
828         /**
829          * @index: Compacted connector index, which matches the position inside
830          * the mode_config.list for drivers not supporting hot-add/removing. Can
831          * be used as an array index. It is invariant over the lifetime of the
832          * connector.
833          */
834         unsigned index;
835
836         int connector_type;
837         int connector_type_id;
838         bool interlace_allowed;
839         bool doublescan_allowed;
840         bool stereo_allowed;
841
842         /**
843          * @ycbcr_420_allowed : This bool indicates if this connector is
844          * capable of handling YCBCR 420 output. While parsing the EDID
845          * blocks, its very helpful to know, if the source is capable of
846          * handling YCBCR 420 outputs.
847          */
848         bool ycbcr_420_allowed;
849
850         /**
851          * @registered: Is this connector exposed (registered) with userspace?
852          * Protected by @mutex.
853          */
854         bool registered;
855
856         /**
857          * @modes:
858          * Modes available on this connector (from fill_modes() + user).
859          * Protected by &drm_mode_config.mutex.
860          */
861         struct list_head modes;
862
863         /**
864          * @status:
865          * One of the drm_connector_status enums (connected, not, or unknown).
866          * Protected by &drm_mode_config.mutex.
867          */
868         enum drm_connector_status status;
869
870         /**
871          * @probed_modes:
872          * These are modes added by probing with DDC or the BIOS, before
873          * filtering is applied. Used by the probe helpers. Protected by
874          * &drm_mode_config.mutex.
875          */
876         struct list_head probed_modes;
877
878         /**
879          * @display_info: Display information is filled from EDID information
880          * when a display is detected. For non hot-pluggable displays such as
881          * flat panels in embedded systems, the driver should initialize the
882          * &drm_display_info.width_mm and &drm_display_info.height_mm fields
883          * with the physical size of the display.
884          *
885          * Protected by &drm_mode_config.mutex.
886          */
887         struct drm_display_info display_info;
888         const struct drm_connector_funcs *funcs;
889
890         struct drm_property_blob *edid_blob_ptr;
891         struct drm_object_properties properties;
892
893         struct drm_property *scaling_mode_property;
894
895         /**
896          * @content_protection_property: DRM ENUM property for content
897          * protection
898          */
899         struct drm_property *content_protection_property;
900
901         /**
902          * @path_blob_ptr:
903          *
904          * DRM blob property data for the DP MST path property.
905          */
906         struct drm_property_blob *path_blob_ptr;
907
908         /**
909          * @tile_blob_ptr:
910          *
911          * DRM blob property data for the tile property (used mostly by DP MST).
912          * This is meant for screens which are driven through separate display
913          * pipelines represented by &drm_crtc, which might not be running with
914          * genlocked clocks. For tiled panels which are genlocked, like
915          * dual-link LVDS or dual-link DSI, the driver should try to not expose
916          * the tiling and virtualize both &drm_crtc and &drm_plane if needed.
917          */
918         struct drm_property_blob *tile_blob_ptr;
919
920 /* should we poll this connector for connects and disconnects */
921 /* hot plug detectable */
922 #define DRM_CONNECTOR_POLL_HPD (1 << 0)
923 /* poll for connections */
924 #define DRM_CONNECTOR_POLL_CONNECT (1 << 1)
925 /* can cleanly poll for disconnections without flickering the screen */
926 /* DACs should rarely do this without a lot of testing */
927 #define DRM_CONNECTOR_POLL_DISCONNECT (1 << 2)
928
929         /**
930          * @polled:
931          *
932          * Connector polling mode, a combination of
933          *
934          * DRM_CONNECTOR_POLL_HPD
935          *     The connector generates hotplug events and doesn't need to be
936          *     periodically polled. The CONNECT and DISCONNECT flags must not
937          *     be set together with the HPD flag.
938          *
939          * DRM_CONNECTOR_POLL_CONNECT
940          *     Periodically poll the connector for connection.
941          *
942          * DRM_CONNECTOR_POLL_DISCONNECT
943          *     Periodically poll the connector for disconnection.
944          *
945          * Set to 0 for connectors that don't support connection status
946          * discovery.
947          */
948         uint8_t polled;
949
950         /* requested DPMS state */
951         int dpms;
952
953         const struct drm_connector_helper_funcs *helper_private;
954
955         /* forced on connector */
956         struct drm_cmdline_mode cmdline_mode;
957         enum drm_connector_force force;
958         bool override_edid;
959
960 #define DRM_CONNECTOR_MAX_ENCODER 3
961         uint32_t encoder_ids[DRM_CONNECTOR_MAX_ENCODER];
962         /**
963          * @encoder: Currently bound encoder driving this connector, if any.
964          * Only really meaningful for non-atomic drivers. Atomic drivers should
965          * instead look at &drm_connector_state.best_encoder, and in case they
966          * need the CRTC driving this output, &drm_connector_state.crtc.
967          */
968         struct drm_encoder *encoder;
969
970 #define MAX_ELD_BYTES   128
971         /* EDID bits */
972         uint8_t eld[MAX_ELD_BYTES];
973         bool latency_present[2];
974         int video_latency[2];   /* [0]: progressive, [1]: interlaced */
975         int audio_latency[2];
976         int null_edid_counter; /* needed to workaround some HW bugs where we get all 0s */
977         unsigned bad_edid_counter;
978
979         /* Flag for raw EDID header corruption - used in Displayport
980          * compliance testing - * Displayport Link CTS Core 1.2 rev1.1 4.2.2.6
981          */
982         bool edid_corrupt;
983
984         struct dentry *debugfs_entry;
985
986         /**
987          * @state:
988          *
989          * Current atomic state for this connector.
990          *
991          * This is protected by @drm_mode_config.connection_mutex. Note that
992          * nonblocking atomic commits access the current connector state without
993          * taking locks. Either by going through the &struct drm_atomic_state
994          * pointers, see for_each_oldnew_connector_in_state(),
995          * for_each_old_connector_in_state() and
996          * for_each_new_connector_in_state(). Or through careful ordering of
997          * atomic commit operations as implemented in the atomic helpers, see
998          * &struct drm_crtc_commit.
999          */
1000         struct drm_connector_state *state;
1001
1002         /* DisplayID bits */
1003         bool has_tile;
1004         struct drm_tile_group *tile_group;
1005         bool tile_is_single_monitor;
1006
1007         uint8_t num_h_tile, num_v_tile;
1008         uint8_t tile_h_loc, tile_v_loc;
1009         uint16_t tile_h_size, tile_v_size;
1010
1011         /**
1012          * @free_node:
1013          *
1014          * List used only by &drm_connector_iter to be able to clean up a
1015          * connector from any context, in conjunction with
1016          * &drm_mode_config.connector_free_work.
1017          */
1018         struct llist_node free_node;
1019 };
1020
1021 #define obj_to_connector(x) container_of(x, struct drm_connector, base)
1022
1023 int drm_connector_init(struct drm_device *dev,
1024                        struct drm_connector *connector,
1025                        const struct drm_connector_funcs *funcs,
1026                        int connector_type);
1027 int drm_connector_register(struct drm_connector *connector);
1028 void drm_connector_unregister(struct drm_connector *connector);
1029 int drm_mode_connector_attach_encoder(struct drm_connector *connector,
1030                                       struct drm_encoder *encoder);
1031
1032 void drm_connector_cleanup(struct drm_connector *connector);
1033 static inline unsigned drm_connector_index(struct drm_connector *connector)
1034 {
1035         return connector->index;
1036 }
1037
1038 /**
1039  * drm_connector_lookup - lookup connector object
1040  * @dev: DRM device
1041  * @file_priv: drm file to check for lease against.
1042  * @id: connector object id
1043  *
1044  * This function looks up the connector object specified by id
1045  * add takes a reference to it.
1046  */
1047 static inline struct drm_connector *drm_connector_lookup(struct drm_device *dev,
1048                 struct drm_file *file_priv,
1049                 uint32_t id)
1050 {
1051         struct drm_mode_object *mo;
1052         mo = drm_mode_object_find(dev, file_priv, id, DRM_MODE_OBJECT_CONNECTOR);
1053         return mo ? obj_to_connector(mo) : NULL;
1054 }
1055
1056 /**
1057  * drm_connector_get - acquire a connector reference
1058  * @connector: DRM connector
1059  *
1060  * This function increments the connector's refcount.
1061  */
1062 static inline void drm_connector_get(struct drm_connector *connector)
1063 {
1064         drm_mode_object_get(&connector->base);
1065 }
1066
1067 /**
1068  * drm_connector_put - release a connector reference
1069  * @connector: DRM connector
1070  *
1071  * This function decrements the connector's reference count and frees the
1072  * object if the reference count drops to zero.
1073  */
1074 static inline void drm_connector_put(struct drm_connector *connector)
1075 {
1076         drm_mode_object_put(&connector->base);
1077 }
1078
1079 /**
1080  * drm_connector_reference - acquire a connector reference
1081  * @connector: DRM connector
1082  *
1083  * This is a compatibility alias for drm_connector_get() and should not be
1084  * used by new code.
1085  */
1086 static inline void drm_connector_reference(struct drm_connector *connector)
1087 {
1088         drm_connector_get(connector);
1089 }
1090
1091 /**
1092  * drm_connector_unreference - release a connector reference
1093  * @connector: DRM connector
1094  *
1095  * This is a compatibility alias for drm_connector_put() and should not be
1096  * used by new code.
1097  */
1098 static inline void drm_connector_unreference(struct drm_connector *connector)
1099 {
1100         drm_connector_put(connector);
1101 }
1102
1103 const char *drm_get_connector_status_name(enum drm_connector_status status);
1104 const char *drm_get_subpixel_order_name(enum subpixel_order order);
1105 const char *drm_get_dpms_name(int val);
1106 const char *drm_get_dvi_i_subconnector_name(int val);
1107 const char *drm_get_dvi_i_select_name(int val);
1108 const char *drm_get_tv_subconnector_name(int val);
1109 const char *drm_get_tv_select_name(int val);
1110 const char *drm_get_content_protection_name(int val);
1111
1112 int drm_mode_create_dvi_i_properties(struct drm_device *dev);
1113 int drm_mode_create_tv_properties(struct drm_device *dev,
1114                                   unsigned int num_modes,
1115                                   const char * const modes[]);
1116 int drm_mode_create_scaling_mode_property(struct drm_device *dev);
1117 int drm_connector_attach_content_type_property(struct drm_connector *dev);
1118 int drm_connector_attach_scaling_mode_property(struct drm_connector *connector,
1119                                                u32 scaling_mode_mask);
1120 int drm_connector_attach_content_protection_property(
1121                 struct drm_connector *connector);
1122 int drm_mode_create_aspect_ratio_property(struct drm_device *dev);
1123 int drm_mode_create_content_type_property(struct drm_device *dev);
1124 void drm_hdmi_avi_infoframe_content_type(struct hdmi_avi_infoframe *frame,
1125                                          const struct drm_connector_state *conn_state);
1126
1127 int drm_mode_create_suggested_offset_properties(struct drm_device *dev);
1128
1129 int drm_mode_connector_set_path_property(struct drm_connector *connector,
1130                                          const char *path);
1131 int drm_mode_connector_set_tile_property(struct drm_connector *connector);
1132 int drm_mode_connector_update_edid_property(struct drm_connector *connector,
1133                                             const struct edid *edid);
1134 void drm_mode_connector_set_link_status_property(struct drm_connector *connector,
1135                                                  uint64_t link_status);
1136 int drm_connector_init_panel_orientation_property(
1137         struct drm_connector *connector, int width, int height);
1138
1139 /**
1140  * struct drm_tile_group - Tile group metadata
1141  * @refcount: reference count
1142  * @dev: DRM device
1143  * @id: tile group id exposed to userspace
1144  * @group_data: Sink-private data identifying this group
1145  *
1146  * @group_data corresponds to displayid vend/prod/serial for external screens
1147  * with an EDID.
1148  */
1149 struct drm_tile_group {
1150         struct kref refcount;
1151         struct drm_device *dev;
1152         int id;
1153         u8 group_data[8];
1154 };
1155
1156 struct drm_tile_group *drm_mode_create_tile_group(struct drm_device *dev,
1157                                                   char topology[8]);
1158 struct drm_tile_group *drm_mode_get_tile_group(struct drm_device *dev,
1159                                                char topology[8]);
1160 void drm_mode_put_tile_group(struct drm_device *dev,
1161                              struct drm_tile_group *tg);
1162
1163 /**
1164  * struct drm_connector_list_iter - connector_list iterator
1165  *
1166  * This iterator tracks state needed to be able to walk the connector_list
1167  * within struct drm_mode_config. Only use together with
1168  * drm_connector_list_iter_begin(), drm_connector_list_iter_end() and
1169  * drm_connector_list_iter_next() respectively the convenience macro
1170  * drm_for_each_connector_iter().
1171  */
1172 struct drm_connector_list_iter {
1173 /* private: */
1174         struct drm_device *dev;
1175         struct drm_connector *conn;
1176 };
1177
1178 void drm_connector_list_iter_begin(struct drm_device *dev,
1179                                    struct drm_connector_list_iter *iter);
1180 struct drm_connector *
1181 drm_connector_list_iter_next(struct drm_connector_list_iter *iter);
1182 void drm_connector_list_iter_end(struct drm_connector_list_iter *iter);
1183
1184 /**
1185  * drm_for_each_connector_iter - connector_list iterator macro
1186  * @connector: &struct drm_connector pointer used as cursor
1187  * @iter: &struct drm_connector_list_iter
1188  *
1189  * Note that @connector is only valid within the list body, if you want to use
1190  * @connector after calling drm_connector_list_iter_end() then you need to grab
1191  * your own reference first using drm_connector_get().
1192  */
1193 #define drm_for_each_connector_iter(connector, iter) \
1194         while ((connector = drm_connector_list_iter_next(iter)))
1195
1196 #endif