cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

drm_connector.h (60012B)


      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
     34#include <uapi/drm/drm_mode.h>
     35
     36struct drm_connector_helper_funcs;
     37struct drm_modeset_acquire_ctx;
     38struct drm_device;
     39struct drm_crtc;
     40struct drm_encoder;
     41struct drm_property;
     42struct drm_property_blob;
     43struct drm_printer;
     44struct drm_privacy_screen;
     45struct edid;
     46struct i2c_adapter;
     47
     48enum drm_connector_force {
     49	DRM_FORCE_UNSPECIFIED,
     50	DRM_FORCE_OFF,
     51	DRM_FORCE_ON,         /* force on analog part normally */
     52	DRM_FORCE_ON_DIGITAL, /* for DVI-I use digital connector */
     53};
     54
     55/**
     56 * enum drm_connector_status - status for a &drm_connector
     57 *
     58 * This enum is used to track the connector status. There are no separate
     59 * #defines for the uapi!
     60 */
     61enum drm_connector_status {
     62	/**
     63	 * @connector_status_connected: The connector is definitely connected to
     64	 * a sink device, and can be enabled.
     65	 */
     66	connector_status_connected = 1,
     67	/**
     68	 * @connector_status_disconnected: The connector isn't connected to a
     69	 * sink device which can be autodetect. For digital outputs like DP or
     70	 * HDMI (which can be realiable probed) this means there's really
     71	 * nothing there. It is driver-dependent whether a connector with this
     72	 * status can be lit up or not.
     73	 */
     74	connector_status_disconnected = 2,
     75	/**
     76	 * @connector_status_unknown: The connector's status could not be
     77	 * reliably detected. This happens when probing would either cause
     78	 * flicker (like load-detection when the connector is in use), or when a
     79	 * hardware resource isn't available (like when load-detection needs a
     80	 * free CRTC). It should be possible to light up the connector with one
     81	 * of the listed fallback modes. For default configuration userspace
     82	 * should only try to light up connectors with unknown status when
     83	 * there's not connector with @connector_status_connected.
     84	 */
     85	connector_status_unknown = 3,
     86};
     87
     88/**
     89 * enum drm_connector_registration_state - userspace registration status for
     90 * a &drm_connector
     91 *
     92 * This enum is used to track the status of initializing a connector and
     93 * registering it with userspace, so that DRM can prevent bogus modesets on
     94 * connectors that no longer exist.
     95 */
     96enum drm_connector_registration_state {
     97	/**
     98	 * @DRM_CONNECTOR_INITIALIZING: The connector has just been created,
     99	 * but has yet to be exposed to userspace. There should be no
    100	 * additional restrictions to how the state of this connector may be
    101	 * modified.
    102	 */
    103	DRM_CONNECTOR_INITIALIZING = 0,
    104
    105	/**
    106	 * @DRM_CONNECTOR_REGISTERED: The connector has been fully initialized
    107	 * and registered with sysfs, as such it has been exposed to
    108	 * userspace. There should be no additional restrictions to how the
    109	 * state of this connector may be modified.
    110	 */
    111	DRM_CONNECTOR_REGISTERED = 1,
    112
    113	/**
    114	 * @DRM_CONNECTOR_UNREGISTERED: The connector has either been exposed
    115	 * to userspace and has since been unregistered and removed from
    116	 * userspace, or the connector was unregistered before it had a chance
    117	 * to be exposed to userspace (e.g. still in the
    118	 * @DRM_CONNECTOR_INITIALIZING state). When a connector is
    119	 * unregistered, there are additional restrictions to how its state
    120	 * may be modified:
    121	 *
    122	 * - An unregistered connector may only have its DPMS changed from
    123	 *   On->Off. Once DPMS is changed to Off, it may not be switched back
    124	 *   to On.
    125	 * - Modesets are not allowed on unregistered connectors, unless they
    126	 *   would result in disabling its assigned CRTCs. This means
    127	 *   disabling a CRTC on an unregistered connector is OK, but enabling
    128	 *   one is not.
    129	 * - Removing a CRTC from an unregistered connector is OK, but new
    130	 *   CRTCs may never be assigned to an unregistered connector.
    131	 */
    132	DRM_CONNECTOR_UNREGISTERED = 2,
    133};
    134
    135enum subpixel_order {
    136	SubPixelUnknown = 0,
    137	SubPixelHorizontalRGB,
    138	SubPixelHorizontalBGR,
    139	SubPixelVerticalRGB,
    140	SubPixelVerticalBGR,
    141	SubPixelNone,
    142
    143};
    144
    145/**
    146 * struct drm_scrambling: sink's scrambling support.
    147 */
    148struct drm_scrambling {
    149	/**
    150	 * @supported: scrambling supported for rates > 340 Mhz.
    151	 */
    152	bool supported;
    153	/**
    154	 * @low_rates: scrambling supported for rates <= 340 Mhz.
    155	 */
    156	bool low_rates;
    157};
    158
    159/*
    160 * struct drm_scdc - Information about scdc capabilities of a HDMI 2.0 sink
    161 *
    162 * Provides SCDC register support and capabilities related information on a
    163 * HDMI 2.0 sink. In case of a HDMI 1.4 sink, all parameter must be 0.
    164 */
    165struct drm_scdc {
    166	/**
    167	 * @supported: status control & data channel present.
    168	 */
    169	bool supported;
    170	/**
    171	 * @read_request: sink is capable of generating scdc read request.
    172	 */
    173	bool read_request;
    174	/**
    175	 * @scrambling: sink's scrambling capabilities
    176	 */
    177	struct drm_scrambling scrambling;
    178};
    179
    180/**
    181 * struct drm_hdmi_dsc_cap - DSC capabilities of HDMI sink
    182 *
    183 * Describes the DSC support provided by HDMI 2.1 sink.
    184 * The information is fetched fom additional HFVSDB blocks defined
    185 * for HDMI 2.1.
    186 */
    187struct drm_hdmi_dsc_cap {
    188	/** @v_1p2: flag for dsc1.2 version support by sink */
    189	bool v_1p2;
    190
    191	/** @native_420: Does sink support DSC with 4:2:0 compression */
    192	bool native_420;
    193
    194	/**
    195	 * @all_bpp: Does sink support all bpp with 4:4:4: or 4:2:2
    196	 * compressed formats
    197	 */
    198	bool all_bpp;
    199
    200	/**
    201	 * @bpc_supported: compressed bpc supported by sink : 10, 12 or 16 bpc
    202	 */
    203	u8 bpc_supported;
    204
    205	/** @max_slices: maximum number of Horizontal slices supported by */
    206	u8 max_slices;
    207
    208	/** @clk_per_slice : max pixel clock in MHz supported per slice */
    209	int clk_per_slice;
    210
    211	/** @max_lanes : dsc max lanes supported for Fixed rate Link training */
    212	u8 max_lanes;
    213
    214	/** @max_frl_rate_per_lane : maximum frl rate with DSC per lane */
    215	u8 max_frl_rate_per_lane;
    216
    217	/** @total_chunk_kbytes: max size of chunks in KBs supported per line*/
    218	u8 total_chunk_kbytes;
    219};
    220
    221/**
    222 * struct drm_hdmi_info - runtime information about the connected HDMI sink
    223 *
    224 * Describes if a given display supports advanced HDMI 2.0 features.
    225 * This information is available in CEA-861-F extension blocks (like HF-VSDB).
    226 */
    227struct drm_hdmi_info {
    228	/** @scdc: sink's scdc support and capabilities */
    229	struct drm_scdc scdc;
    230
    231	/**
    232	 * @y420_vdb_modes: bitmap of modes which can support ycbcr420
    233	 * output only (not normal RGB/YCBCR444/422 outputs). The max VIC
    234	 * defined by the CEA-861-G spec is 219, so the size is 256 bits to map
    235	 * up to 256 VICs.
    236	 */
    237	unsigned long y420_vdb_modes[BITS_TO_LONGS(256)];
    238
    239	/**
    240	 * @y420_cmdb_modes: bitmap of modes which can support ycbcr420
    241	 * output also, along with normal HDMI outputs. The max VIC defined by
    242	 * the CEA-861-G spec is 219, so the size is 256 bits to map up to 256
    243	 * VICs.
    244	 */
    245	unsigned long y420_cmdb_modes[BITS_TO_LONGS(256)];
    246
    247	/** @y420_cmdb_map: bitmap of SVD index, to extraxt vcb modes */
    248	u64 y420_cmdb_map;
    249
    250	/** @y420_dc_modes: bitmap of deep color support index */
    251	u8 y420_dc_modes;
    252
    253	/** @max_frl_rate_per_lane: support fixed rate link */
    254	u8 max_frl_rate_per_lane;
    255
    256	/** @max_lanes: supported by sink */
    257	u8 max_lanes;
    258
    259	/** @dsc_cap: DSC capabilities of the sink */
    260	struct drm_hdmi_dsc_cap dsc_cap;
    261};
    262
    263/**
    264 * enum drm_link_status - connector's link_status property value
    265 *
    266 * This enum is used as the connector's link status property value.
    267 * It is set to the values defined in uapi.
    268 *
    269 * @DRM_LINK_STATUS_GOOD: DP Link is Good as a result of successful
    270 *                        link training
    271 * @DRM_LINK_STATUS_BAD: DP Link is BAD as a result of link training
    272 *                       failure
    273 */
    274enum drm_link_status {
    275	DRM_LINK_STATUS_GOOD = DRM_MODE_LINK_STATUS_GOOD,
    276	DRM_LINK_STATUS_BAD = DRM_MODE_LINK_STATUS_BAD,
    277};
    278
    279/**
    280 * enum drm_panel_orientation - panel_orientation info for &drm_display_info
    281 *
    282 * This enum is used to track the (LCD) panel orientation. There are no
    283 * separate #defines for the uapi!
    284 *
    285 * @DRM_MODE_PANEL_ORIENTATION_UNKNOWN: The drm driver has not provided any
    286 *					panel orientation information (normal
    287 *					for non panels) in this case the "panel
    288 *					orientation" connector prop will not be
    289 *					attached.
    290 * @DRM_MODE_PANEL_ORIENTATION_NORMAL:	The top side of the panel matches the
    291 *					top side of the device's casing.
    292 * @DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP: The top side of the panel matches the
    293 *					bottom side of the device's casing, iow
    294 *					the panel is mounted upside-down.
    295 * @DRM_MODE_PANEL_ORIENTATION_LEFT_UP:	The left side of the panel matches the
    296 *					top side of the device's casing.
    297 * @DRM_MODE_PANEL_ORIENTATION_RIGHT_UP: The right side of the panel matches the
    298 *					top side of the device's casing.
    299 */
    300enum drm_panel_orientation {
    301	DRM_MODE_PANEL_ORIENTATION_UNKNOWN = -1,
    302	DRM_MODE_PANEL_ORIENTATION_NORMAL = 0,
    303	DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP,
    304	DRM_MODE_PANEL_ORIENTATION_LEFT_UP,
    305	DRM_MODE_PANEL_ORIENTATION_RIGHT_UP,
    306};
    307
    308/**
    309 * struct drm_monitor_range_info - Panel's Monitor range in EDID for
    310 * &drm_display_info
    311 *
    312 * This struct is used to store a frequency range supported by panel
    313 * as parsed from EDID's detailed monitor range descriptor block.
    314 *
    315 * @min_vfreq: This is the min supported refresh rate in Hz from
    316 *             EDID's detailed monitor range.
    317 * @max_vfreq: This is the max supported refresh rate in Hz from
    318 *             EDID's detailed monitor range
    319 */
    320struct drm_monitor_range_info {
    321	u8 min_vfreq;
    322	u8 max_vfreq;
    323};
    324
    325/**
    326 * enum drm_privacy_screen_status - privacy screen status
    327 *
    328 * This enum is used to track and control the state of the integrated privacy
    329 * screen present on some display panels, via the "privacy-screen sw-state"
    330 * and "privacy-screen hw-state" properties. Note the _LOCKED enum values
    331 * are only valid for the "privacy-screen hw-state" property.
    332 *
    333 * @PRIVACY_SCREEN_DISABLED:
    334 *  The privacy-screen on the panel is disabled
    335 * @PRIVACY_SCREEN_ENABLED:
    336 *  The privacy-screen on the panel is enabled
    337 * @PRIVACY_SCREEN_DISABLED_LOCKED:
    338 *  The privacy-screen on the panel is disabled and locked (cannot be changed)
    339 * @PRIVACY_SCREEN_ENABLED_LOCKED:
    340 *  The privacy-screen on the panel is enabled and locked (cannot be changed)
    341 */
    342enum drm_privacy_screen_status {
    343	PRIVACY_SCREEN_DISABLED = 0,
    344	PRIVACY_SCREEN_ENABLED,
    345	PRIVACY_SCREEN_DISABLED_LOCKED,
    346	PRIVACY_SCREEN_ENABLED_LOCKED,
    347};
    348
    349/*
    350 * This is a consolidated colorimetry list supported by HDMI and
    351 * DP protocol standard. The respective connectors will register
    352 * a property with the subset of this list (supported by that
    353 * respective protocol). Userspace will set the colorspace through
    354 * a colorspace property which will be created and exposed to
    355 * userspace.
    356 */
    357
    358/* For Default case, driver will set the colorspace */
    359#define DRM_MODE_COLORIMETRY_DEFAULT			0
    360/* CEA 861 Normal Colorimetry options */
    361#define DRM_MODE_COLORIMETRY_NO_DATA			0
    362#define DRM_MODE_COLORIMETRY_SMPTE_170M_YCC		1
    363#define DRM_MODE_COLORIMETRY_BT709_YCC			2
    364/* CEA 861 Extended Colorimetry Options */
    365#define DRM_MODE_COLORIMETRY_XVYCC_601			3
    366#define DRM_MODE_COLORIMETRY_XVYCC_709			4
    367#define DRM_MODE_COLORIMETRY_SYCC_601			5
    368#define DRM_MODE_COLORIMETRY_OPYCC_601			6
    369#define DRM_MODE_COLORIMETRY_OPRGB			7
    370#define DRM_MODE_COLORIMETRY_BT2020_CYCC		8
    371#define DRM_MODE_COLORIMETRY_BT2020_RGB			9
    372#define DRM_MODE_COLORIMETRY_BT2020_YCC			10
    373/* Additional Colorimetry extension added as part of CTA 861.G */
    374#define DRM_MODE_COLORIMETRY_DCI_P3_RGB_D65		11
    375#define DRM_MODE_COLORIMETRY_DCI_P3_RGB_THEATER		12
    376/* Additional Colorimetry Options added for DP 1.4a VSC Colorimetry Format */
    377#define DRM_MODE_COLORIMETRY_RGB_WIDE_FIXED		13
    378#define DRM_MODE_COLORIMETRY_RGB_WIDE_FLOAT		14
    379#define DRM_MODE_COLORIMETRY_BT601_YCC			15
    380
    381/**
    382 * enum drm_bus_flags - bus_flags info for &drm_display_info
    383 *
    384 * This enum defines signal polarities and clock edge information for signals on
    385 * a bus as bitmask flags.
    386 *
    387 * The clock edge information is conveyed by two sets of symbols,
    388 * DRM_BUS_FLAGS_*_DRIVE_\* and DRM_BUS_FLAGS_*_SAMPLE_\*. When this enum is
    389 * used to describe a bus from the point of view of the transmitter, the
    390 * \*_DRIVE_\* flags should be used. When used from the point of view of the
    391 * receiver, the \*_SAMPLE_\* flags should be used. The \*_DRIVE_\* and
    392 * \*_SAMPLE_\* flags alias each other, with the \*_SAMPLE_POSEDGE and
    393 * \*_SAMPLE_NEGEDGE flags being equal to \*_DRIVE_NEGEDGE and \*_DRIVE_POSEDGE
    394 * respectively. This simplifies code as signals are usually sampled on the
    395 * opposite edge of the driving edge. Transmitters and receivers may however
    396 * need to take other signal timings into account to convert between driving
    397 * and sample edges.
    398 */
    399enum drm_bus_flags {
    400	/**
    401	 * @DRM_BUS_FLAG_DE_LOW:
    402	 *
    403	 * The Data Enable signal is active low
    404	 */
    405	DRM_BUS_FLAG_DE_LOW = BIT(0),
    406
    407	/**
    408	 * @DRM_BUS_FLAG_DE_HIGH:
    409	 *
    410	 * The Data Enable signal is active high
    411	 */
    412	DRM_BUS_FLAG_DE_HIGH = BIT(1),
    413
    414	/**
    415	 * @DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE:
    416	 *
    417	 * Data is driven on the rising edge of the pixel clock
    418	 */
    419	DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE = BIT(2),
    420
    421	/**
    422	 * @DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE:
    423	 *
    424	 * Data is driven on the falling edge of the pixel clock
    425	 */
    426	DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE = BIT(3),
    427
    428	/**
    429	 * @DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE:
    430	 *
    431	 * Data is sampled on the rising edge of the pixel clock
    432	 */
    433	DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE = DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE,
    434
    435	/**
    436	 * @DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE:
    437	 *
    438	 * Data is sampled on the falling edge of the pixel clock
    439	 */
    440	DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE = DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
    441
    442	/**
    443	 * @DRM_BUS_FLAG_DATA_MSB_TO_LSB:
    444	 *
    445	 * Data is transmitted MSB to LSB on the bus
    446	 */
    447	DRM_BUS_FLAG_DATA_MSB_TO_LSB = BIT(4),
    448
    449	/**
    450	 * @DRM_BUS_FLAG_DATA_LSB_TO_MSB:
    451	 *
    452	 * Data is transmitted LSB to MSB on the bus
    453	 */
    454	DRM_BUS_FLAG_DATA_LSB_TO_MSB = BIT(5),
    455
    456	/**
    457	 * @DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE:
    458	 *
    459	 * Sync signals are driven on the rising edge of the pixel clock
    460	 */
    461	DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE = BIT(6),
    462
    463	/**
    464	 * @DRM_BUS_FLAG_SYNC_DRIVE_NEGEDGE:
    465	 *
    466	 * Sync signals are driven on the falling edge of the pixel clock
    467	 */
    468	DRM_BUS_FLAG_SYNC_DRIVE_NEGEDGE = BIT(7),
    469
    470	/**
    471	 * @DRM_BUS_FLAG_SYNC_SAMPLE_POSEDGE:
    472	 *
    473	 * Sync signals are sampled on the rising edge of the pixel clock
    474	 */
    475	DRM_BUS_FLAG_SYNC_SAMPLE_POSEDGE = DRM_BUS_FLAG_SYNC_DRIVE_NEGEDGE,
    476
    477	/**
    478	 * @DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE:
    479	 *
    480	 * Sync signals are sampled on the falling edge of the pixel clock
    481	 */
    482	DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE = DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE,
    483
    484	/**
    485	 * @DRM_BUS_FLAG_SHARP_SIGNALS:
    486	 *
    487	 *  Set if the Sharp-specific signals (SPL, CLS, PS, REV) must be used
    488	 */
    489	DRM_BUS_FLAG_SHARP_SIGNALS = BIT(8),
    490};
    491
    492/**
    493 * struct drm_display_info - runtime data about the connected sink
    494 *
    495 * Describes a given display (e.g. CRT or flat panel) and its limitations. For
    496 * fixed display sinks like built-in panels there's not much difference between
    497 * this and &struct drm_connector. But for sinks with a real cable this
    498 * structure is meant to describe all the things at the other end of the cable.
    499 *
    500 * For sinks which provide an EDID this can be filled out by calling
    501 * drm_add_edid_modes().
    502 */
    503struct drm_display_info {
    504	/**
    505	 * @width_mm: Physical width in mm.
    506	 */
    507	unsigned int width_mm;
    508
    509	/**
    510	 * @height_mm: Physical height in mm.
    511	 */
    512	unsigned int height_mm;
    513
    514	/**
    515	 * @bpc: Maximum bits per color channel. Used by HDMI and DP outputs.
    516	 */
    517	unsigned int bpc;
    518
    519	/**
    520	 * @subpixel_order: Subpixel order of LCD panels.
    521	 */
    522	enum subpixel_order subpixel_order;
    523
    524#define DRM_COLOR_FORMAT_RGB444		(1<<0)
    525#define DRM_COLOR_FORMAT_YCBCR444	(1<<1)
    526#define DRM_COLOR_FORMAT_YCBCR422	(1<<2)
    527#define DRM_COLOR_FORMAT_YCBCR420	(1<<3)
    528
    529	/**
    530	 * @panel_orientation: Read only connector property for built-in panels,
    531	 * indicating the orientation of the panel vs the device's casing.
    532	 * drm_connector_init() sets this to DRM_MODE_PANEL_ORIENTATION_UNKNOWN.
    533	 * When not UNKNOWN this gets used by the drm_fb_helpers to rotate the
    534	 * fb to compensate and gets exported as prop to userspace.
    535	 */
    536	int panel_orientation;
    537
    538	/**
    539	 * @color_formats: HDMI Color formats, selects between RGB and YCrCb
    540	 * modes. Used DRM_COLOR_FORMAT\_ defines, which are _not_ the same ones
    541	 * as used to describe the pixel format in framebuffers, and also don't
    542	 * match the formats in @bus_formats which are shared with v4l.
    543	 */
    544	u32 color_formats;
    545
    546	/**
    547	 * @bus_formats: Pixel data format on the wire, somewhat redundant with
    548	 * @color_formats. Array of size @num_bus_formats encoded using
    549	 * MEDIA_BUS_FMT\_ defines shared with v4l and media drivers.
    550	 */
    551	const u32 *bus_formats;
    552	/**
    553	 * @num_bus_formats: Size of @bus_formats array.
    554	 */
    555	unsigned int num_bus_formats;
    556
    557	/**
    558	 * @bus_flags: Additional information (like pixel signal polarity) for
    559	 * the pixel data on the bus, using &enum drm_bus_flags values
    560	 * DRM_BUS_FLAGS\_.
    561	 */
    562	u32 bus_flags;
    563
    564	/**
    565	 * @max_tmds_clock: Maximum TMDS clock rate supported by the
    566	 * sink in kHz. 0 means undefined.
    567	 */
    568	int max_tmds_clock;
    569
    570	/**
    571	 * @dvi_dual: Dual-link DVI sink?
    572	 */
    573	bool dvi_dual;
    574
    575	/**
    576	 * @is_hdmi: True if the sink is an HDMI device.
    577	 *
    578	 * This field shall be used instead of calling
    579	 * drm_detect_hdmi_monitor() when possible.
    580	 */
    581	bool is_hdmi;
    582
    583	/**
    584	 * @has_hdmi_infoframe: Does the sink support the HDMI infoframe?
    585	 */
    586	bool has_hdmi_infoframe;
    587
    588	/**
    589	 * @rgb_quant_range_selectable: Does the sink support selecting
    590	 * the RGB quantization range?
    591	 */
    592	bool rgb_quant_range_selectable;
    593
    594	/**
    595	 * @edid_hdmi_rgb444_dc_modes: Mask of supported hdmi deep color modes
    596	 * in RGB 4:4:4. Even more stuff redundant with @bus_formats.
    597	 */
    598	u8 edid_hdmi_rgb444_dc_modes;
    599
    600	/**
    601	 * @edid_hdmi_ycbcr444_dc_modes: Mask of supported hdmi deep color
    602	 * modes in YCbCr 4:4:4. Even more stuff redundant with @bus_formats.
    603	 */
    604	u8 edid_hdmi_ycbcr444_dc_modes;
    605
    606	/**
    607	 * @cea_rev: CEA revision of the HDMI sink.
    608	 */
    609	u8 cea_rev;
    610
    611	/**
    612	 * @hdmi: advance features of a HDMI sink.
    613	 */
    614	struct drm_hdmi_info hdmi;
    615
    616	/**
    617	 * @non_desktop: Non desktop display (HMD).
    618	 */
    619	bool non_desktop;
    620
    621	/**
    622	 * @monitor_range: Frequency range supported by monitor range descriptor
    623	 */
    624	struct drm_monitor_range_info monitor_range;
    625
    626	/**
    627	 * @mso_stream_count: eDP Multi-SST Operation (MSO) stream count from
    628	 * the DisplayID VESA vendor block. 0 for conventional Single-Stream
    629	 * Transport (SST), or 2 or 4 MSO streams.
    630	 */
    631	u8 mso_stream_count;
    632
    633	/**
    634	 * @mso_pixel_overlap: eDP MSO segment pixel overlap, 0-8 pixels.
    635	 */
    636	u8 mso_pixel_overlap;
    637};
    638
    639int drm_display_info_set_bus_formats(struct drm_display_info *info,
    640				     const u32 *formats,
    641				     unsigned int num_formats);
    642
    643/**
    644 * struct drm_connector_tv_margins - TV connector related margins
    645 *
    646 * Describes the margins in pixels to put around the image on TV
    647 * connectors to deal with overscan.
    648 */
    649struct drm_connector_tv_margins {
    650	/**
    651	 * @bottom: Bottom margin in pixels.
    652	 */
    653	unsigned int bottom;
    654
    655	/**
    656	 * @left: Left margin in pixels.
    657	 */
    658	unsigned int left;
    659
    660	/**
    661	 * @right: Right margin in pixels.
    662	 */
    663	unsigned int right;
    664
    665	/**
    666	 * @top: Top margin in pixels.
    667	 */
    668	unsigned int top;
    669};
    670
    671/**
    672 * struct drm_tv_connector_state - TV connector related states
    673 * @subconnector: selected subconnector
    674 * @margins: TV margins
    675 * @mode: TV mode
    676 * @brightness: brightness in percent
    677 * @contrast: contrast in percent
    678 * @flicker_reduction: flicker reduction in percent
    679 * @overscan: overscan in percent
    680 * @saturation: saturation in percent
    681 * @hue: hue in percent
    682 */
    683struct drm_tv_connector_state {
    684	enum drm_mode_subconnector subconnector;
    685	struct drm_connector_tv_margins margins;
    686	unsigned int mode;
    687	unsigned int brightness;
    688	unsigned int contrast;
    689	unsigned int flicker_reduction;
    690	unsigned int overscan;
    691	unsigned int saturation;
    692	unsigned int hue;
    693};
    694
    695/**
    696 * struct drm_connector_state - mutable connector state
    697 */
    698struct drm_connector_state {
    699	/** @connector: backpointer to the connector */
    700	struct drm_connector *connector;
    701
    702	/**
    703	 * @crtc: CRTC to connect connector to, NULL if disabled.
    704	 *
    705	 * Do not change this directly, use drm_atomic_set_crtc_for_connector()
    706	 * instead.
    707	 */
    708	struct drm_crtc *crtc;
    709
    710	/**
    711	 * @best_encoder:
    712	 *
    713	 * Used by the atomic helpers to select the encoder, through the
    714	 * &drm_connector_helper_funcs.atomic_best_encoder or
    715	 * &drm_connector_helper_funcs.best_encoder callbacks.
    716	 *
    717	 * This is also used in the atomic helpers to map encoders to their
    718	 * current and previous connectors, see
    719	 * drm_atomic_get_old_connector_for_encoder() and
    720	 * drm_atomic_get_new_connector_for_encoder().
    721	 *
    722	 * NOTE: Atomic drivers must fill this out (either themselves or through
    723	 * helpers), for otherwise the GETCONNECTOR and GETENCODER IOCTLs will
    724	 * not return correct data to userspace.
    725	 */
    726	struct drm_encoder *best_encoder;
    727
    728	/**
    729	 * @link_status: Connector link_status to keep track of whether link is
    730	 * GOOD or BAD to notify userspace if retraining is necessary.
    731	 */
    732	enum drm_link_status link_status;
    733
    734	/** @state: backpointer to global drm_atomic_state */
    735	struct drm_atomic_state *state;
    736
    737	/**
    738	 * @commit: Tracks the pending commit to prevent use-after-free conditions.
    739	 *
    740	 * Is only set when @crtc is NULL.
    741	 */
    742	struct drm_crtc_commit *commit;
    743
    744	/** @tv: TV connector state */
    745	struct drm_tv_connector_state tv;
    746
    747	/**
    748	 * @self_refresh_aware:
    749	 *
    750	 * This tracks whether a connector is aware of the self refresh state.
    751	 * It should be set to true for those connector implementations which
    752	 * understand the self refresh state. This is needed since the crtc
    753	 * registers the self refresh helpers and it doesn't know if the
    754	 * connectors downstream have implemented self refresh entry/exit.
    755	 *
    756	 * Drivers should set this to true in atomic_check if they know how to
    757	 * handle self_refresh requests.
    758	 */
    759	bool self_refresh_aware;
    760
    761	/**
    762	 * @picture_aspect_ratio: Connector property to control the
    763	 * HDMI infoframe aspect ratio setting.
    764	 *
    765	 * The %DRM_MODE_PICTURE_ASPECT_\* values much match the
    766	 * values for &enum hdmi_picture_aspect
    767	 */
    768	enum hdmi_picture_aspect picture_aspect_ratio;
    769
    770	/**
    771	 * @content_type: Connector property to control the
    772	 * HDMI infoframe content type setting.
    773	 * The %DRM_MODE_CONTENT_TYPE_\* values much
    774	 * match the values.
    775	 */
    776	unsigned int content_type;
    777
    778	/**
    779	 * @hdcp_content_type: Connector property to pass the type of
    780	 * protected content. This is most commonly used for HDCP.
    781	 */
    782	unsigned int hdcp_content_type;
    783
    784	/**
    785	 * @scaling_mode: Connector property to control the
    786	 * upscaling, mostly used for built-in panels.
    787	 */
    788	unsigned int scaling_mode;
    789
    790	/**
    791	 * @content_protection: Connector property to request content
    792	 * protection. This is most commonly used for HDCP.
    793	 */
    794	unsigned int content_protection;
    795
    796	/**
    797	 * @colorspace: State variable for Connector property to request
    798	 * colorspace change on Sink. This is most commonly used to switch
    799	 * to wider color gamuts like BT2020.
    800	 */
    801	u32 colorspace;
    802
    803	/**
    804	 * @writeback_job: Writeback job for writeback connectors
    805	 *
    806	 * Holds the framebuffer and out-fence for a writeback connector. As
    807	 * the writeback completion may be asynchronous to the normal commit
    808	 * cycle, the writeback job lifetime is managed separately from the
    809	 * normal atomic state by this object.
    810	 *
    811	 * See also: drm_writeback_queue_job() and
    812	 * drm_writeback_signal_completion()
    813	 */
    814	struct drm_writeback_job *writeback_job;
    815
    816	/**
    817	 * @max_requested_bpc: Connector property to limit the maximum bit
    818	 * depth of the pixels.
    819	 */
    820	u8 max_requested_bpc;
    821
    822	/**
    823	 * @max_bpc: Connector max_bpc based on the requested max_bpc property
    824	 * and the connector bpc limitations obtained from edid.
    825	 */
    826	u8 max_bpc;
    827
    828	/**
    829	 * @privacy_screen_sw_state: See :ref:`Standard Connector
    830	 * Properties<standard_connector_properties>`
    831	 */
    832	enum drm_privacy_screen_status privacy_screen_sw_state;
    833
    834	/**
    835	 * @hdr_output_metadata:
    836	 * DRM blob property for HDR output metadata
    837	 */
    838	struct drm_property_blob *hdr_output_metadata;
    839};
    840
    841/**
    842 * struct drm_connector_funcs - control connectors on a given device
    843 *
    844 * Each CRTC may have one or more connectors attached to it.  The functions
    845 * below allow the core DRM code to control connectors, enumerate available modes,
    846 * etc.
    847 */
    848struct drm_connector_funcs {
    849	/**
    850	 * @dpms:
    851	 *
    852	 * Legacy entry point to set the per-connector DPMS state. Legacy DPMS
    853	 * is exposed as a standard property on the connector, but diverted to
    854	 * this callback in the drm core. Note that atomic drivers don't
    855	 * implement the 4 level DPMS support on the connector any more, but
    856	 * instead only have an on/off "ACTIVE" property on the CRTC object.
    857	 *
    858	 * This hook is not used by atomic drivers, remapping of the legacy DPMS
    859	 * property is entirely handled in the DRM core.
    860	 *
    861	 * RETURNS:
    862	 *
    863	 * 0 on success or a negative error code on failure.
    864	 */
    865	int (*dpms)(struct drm_connector *connector, int mode);
    866
    867	/**
    868	 * @reset:
    869	 *
    870	 * Reset connector hardware and software state to off. This function isn't
    871	 * called by the core directly, only through drm_mode_config_reset().
    872	 * It's not a helper hook only for historical reasons.
    873	 *
    874	 * Atomic drivers can use drm_atomic_helper_connector_reset() to reset
    875	 * atomic state using this hook.
    876	 */
    877	void (*reset)(struct drm_connector *connector);
    878
    879	/**
    880	 * @detect:
    881	 *
    882	 * Check to see if anything is attached to the connector. The parameter
    883	 * force is set to false whilst polling, true when checking the
    884	 * connector due to a user request. force can be used by the driver to
    885	 * avoid expensive, destructive operations during automated probing.
    886	 *
    887	 * This callback is optional, if not implemented the connector will be
    888	 * considered as always being attached.
    889	 *
    890	 * FIXME:
    891	 *
    892	 * Note that this hook is only called by the probe helper. It's not in
    893	 * the helper library vtable purely for historical reasons. The only DRM
    894	 * core	entry point to probe connector state is @fill_modes.
    895	 *
    896	 * Note that the helper library will already hold
    897	 * &drm_mode_config.connection_mutex. Drivers which need to grab additional
    898	 * locks to avoid races with concurrent modeset changes need to use
    899	 * &drm_connector_helper_funcs.detect_ctx instead.
    900	 *
    901	 * Also note that this callback can be called no matter the
    902	 * state the connector is in. Drivers that need the underlying
    903	 * device to be powered to perform the detection will first need
    904	 * to make sure it's been properly enabled.
    905	 *
    906	 * RETURNS:
    907	 *
    908	 * drm_connector_status indicating the connector's status.
    909	 */
    910	enum drm_connector_status (*detect)(struct drm_connector *connector,
    911					    bool force);
    912
    913	/**
    914	 * @force:
    915	 *
    916	 * This function is called to update internal encoder state when the
    917	 * connector is forced to a certain state by userspace, either through
    918	 * the sysfs interfaces or on the kernel cmdline. In that case the
    919	 * @detect callback isn't called.
    920	 *
    921	 * FIXME:
    922	 *
    923	 * Note that this hook is only called by the probe helper. It's not in
    924	 * the helper library vtable purely for historical reasons. The only DRM
    925	 * core	entry point to probe connector state is @fill_modes.
    926	 */
    927	void (*force)(struct drm_connector *connector);
    928
    929	/**
    930	 * @fill_modes:
    931	 *
    932	 * Entry point for output detection and basic mode validation. The
    933	 * driver should reprobe the output if needed (e.g. when hotplug
    934	 * handling is unreliable), add all detected modes to &drm_connector.modes
    935	 * and filter out any the device can't support in any configuration. It
    936	 * also needs to filter out any modes wider or higher than the
    937	 * parameters max_width and max_height indicate.
    938	 *
    939	 * The drivers must also prune any modes no longer valid from
    940	 * &drm_connector.modes. Furthermore it must update
    941	 * &drm_connector.status and &drm_connector.edid.  If no EDID has been
    942	 * received for this output connector->edid must be NULL.
    943	 *
    944	 * Drivers using the probe helpers should use
    945	 * drm_helper_probe_single_connector_modes() to implement this
    946	 * function.
    947	 *
    948	 * RETURNS:
    949	 *
    950	 * The number of modes detected and filled into &drm_connector.modes.
    951	 */
    952	int (*fill_modes)(struct drm_connector *connector, uint32_t max_width, uint32_t max_height);
    953
    954	/**
    955	 * @set_property:
    956	 *
    957	 * This is the legacy entry point to update a property attached to the
    958	 * connector.
    959	 *
    960	 * This callback is optional if the driver does not support any legacy
    961	 * driver-private properties. For atomic drivers it is not used because
    962	 * property handling is done entirely in the DRM core.
    963	 *
    964	 * RETURNS:
    965	 *
    966	 * 0 on success or a negative error code on failure.
    967	 */
    968	int (*set_property)(struct drm_connector *connector, struct drm_property *property,
    969			     uint64_t val);
    970
    971	/**
    972	 * @late_register:
    973	 *
    974	 * This optional hook can be used to register additional userspace
    975	 * interfaces attached to the connector, light backlight control, i2c,
    976	 * DP aux or similar interfaces. It is called late in the driver load
    977	 * sequence from drm_connector_register() when registering all the
    978	 * core drm connector interfaces. Everything added from this callback
    979	 * should be unregistered in the early_unregister callback.
    980	 *
    981	 * This is called while holding &drm_connector.mutex.
    982	 *
    983	 * Returns:
    984	 *
    985	 * 0 on success, or a negative error code on failure.
    986	 */
    987	int (*late_register)(struct drm_connector *connector);
    988
    989	/**
    990	 * @early_unregister:
    991	 *
    992	 * This optional hook should be used to unregister the additional
    993	 * userspace interfaces attached to the connector from
    994	 * late_register(). It is called from drm_connector_unregister(),
    995	 * early in the driver unload sequence to disable userspace access
    996	 * before data structures are torndown.
    997	 *
    998	 * This is called while holding &drm_connector.mutex.
    999	 */
   1000	void (*early_unregister)(struct drm_connector *connector);
   1001
   1002	/**
   1003	 * @destroy:
   1004	 *
   1005	 * Clean up connector resources. This is called at driver unload time
   1006	 * through drm_mode_config_cleanup(). It can also be called at runtime
   1007	 * when a connector is being hot-unplugged for drivers that support
   1008	 * connector hotplugging (e.g. DisplayPort MST).
   1009	 */
   1010	void (*destroy)(struct drm_connector *connector);
   1011
   1012	/**
   1013	 * @atomic_duplicate_state:
   1014	 *
   1015	 * Duplicate the current atomic state for this connector and return it.
   1016	 * The core and helpers guarantee that any atomic state duplicated with
   1017	 * this hook and still owned by the caller (i.e. not transferred to the
   1018	 * driver by calling &drm_mode_config_funcs.atomic_commit) will be
   1019	 * cleaned up by calling the @atomic_destroy_state hook in this
   1020	 * structure.
   1021	 *
   1022	 * This callback is mandatory for atomic drivers.
   1023	 *
   1024	 * Atomic drivers which don't subclass &struct drm_connector_state should use
   1025	 * drm_atomic_helper_connector_duplicate_state(). Drivers that subclass the
   1026	 * state structure to extend it with driver-private state should use
   1027	 * __drm_atomic_helper_connector_duplicate_state() to make sure shared state is
   1028	 * duplicated in a consistent fashion across drivers.
   1029	 *
   1030	 * It is an error to call this hook before &drm_connector.state has been
   1031	 * initialized correctly.
   1032	 *
   1033	 * NOTE:
   1034	 *
   1035	 * If the duplicate state references refcounted resources this hook must
   1036	 * acquire a reference for each of them. The driver must release these
   1037	 * references again in @atomic_destroy_state.
   1038	 *
   1039	 * RETURNS:
   1040	 *
   1041	 * Duplicated atomic state or NULL when the allocation failed.
   1042	 */
   1043	struct drm_connector_state *(*atomic_duplicate_state)(struct drm_connector *connector);
   1044
   1045	/**
   1046	 * @atomic_destroy_state:
   1047	 *
   1048	 * Destroy a state duplicated with @atomic_duplicate_state and release
   1049	 * or unreference all resources it references
   1050	 *
   1051	 * This callback is mandatory for atomic drivers.
   1052	 */
   1053	void (*atomic_destroy_state)(struct drm_connector *connector,
   1054				     struct drm_connector_state *state);
   1055
   1056	/**
   1057	 * @atomic_set_property:
   1058	 *
   1059	 * Decode a driver-private property value and store the decoded value
   1060	 * into the passed-in state structure. Since the atomic core decodes all
   1061	 * standardized properties (even for extensions beyond the core set of
   1062	 * properties which might not be implemented by all drivers) this
   1063	 * requires drivers to subclass the state structure.
   1064	 *
   1065	 * Such driver-private properties should really only be implemented for
   1066	 * truly hardware/vendor specific state. Instead it is preferred to
   1067	 * standardize atomic extension and decode the properties used to expose
   1068	 * such an extension in the core.
   1069	 *
   1070	 * Do not call this function directly, use
   1071	 * drm_atomic_connector_set_property() instead.
   1072	 *
   1073	 * This callback is optional if the driver does not support any
   1074	 * driver-private atomic properties.
   1075	 *
   1076	 * NOTE:
   1077	 *
   1078	 * This function is called in the state assembly phase of atomic
   1079	 * modesets, which can be aborted for any reason (including on
   1080	 * userspace's request to just check whether a configuration would be
   1081	 * possible). Drivers MUST NOT touch any persistent state (hardware or
   1082	 * software) or data structures except the passed in @state parameter.
   1083	 *
   1084	 * Also since userspace controls in which order properties are set this
   1085	 * function must not do any input validation (since the state update is
   1086	 * incomplete and hence likely inconsistent). Instead any such input
   1087	 * validation must be done in the various atomic_check callbacks.
   1088	 *
   1089	 * RETURNS:
   1090	 *
   1091	 * 0 if the property has been found, -EINVAL if the property isn't
   1092	 * implemented by the driver (which shouldn't ever happen, the core only
   1093	 * asks for properties attached to this connector). No other validation
   1094	 * is allowed by the driver. The core already checks that the property
   1095	 * value is within the range (integer, valid enum value, ...) the driver
   1096	 * set when registering the property.
   1097	 */
   1098	int (*atomic_set_property)(struct drm_connector *connector,
   1099				   struct drm_connector_state *state,
   1100				   struct drm_property *property,
   1101				   uint64_t val);
   1102
   1103	/**
   1104	 * @atomic_get_property:
   1105	 *
   1106	 * Reads out the decoded driver-private property. This is used to
   1107	 * implement the GETCONNECTOR IOCTL.
   1108	 *
   1109	 * Do not call this function directly, use
   1110	 * drm_atomic_connector_get_property() instead.
   1111	 *
   1112	 * This callback is optional if the driver does not support any
   1113	 * driver-private atomic properties.
   1114	 *
   1115	 * RETURNS:
   1116	 *
   1117	 * 0 on success, -EINVAL if the property isn't implemented by the
   1118	 * driver (which shouldn't ever happen, the core only asks for
   1119	 * properties attached to this connector).
   1120	 */
   1121	int (*atomic_get_property)(struct drm_connector *connector,
   1122				   const struct drm_connector_state *state,
   1123				   struct drm_property *property,
   1124				   uint64_t *val);
   1125
   1126	/**
   1127	 * @atomic_print_state:
   1128	 *
   1129	 * If driver subclasses &struct drm_connector_state, it should implement
   1130	 * this optional hook for printing additional driver specific state.
   1131	 *
   1132	 * Do not call this directly, use drm_atomic_connector_print_state()
   1133	 * instead.
   1134	 */
   1135	void (*atomic_print_state)(struct drm_printer *p,
   1136				   const struct drm_connector_state *state);
   1137
   1138	/**
   1139	 * @oob_hotplug_event:
   1140	 *
   1141	 * This will get called when a hotplug-event for a drm-connector
   1142	 * has been received from a source outside the display driver / device.
   1143	 */
   1144	void (*oob_hotplug_event)(struct drm_connector *connector);
   1145
   1146	/**
   1147	 * @debugfs_init:
   1148	 *
   1149	 * Allows connectors to create connector-specific debugfs files.
   1150	 */
   1151	void (*debugfs_init)(struct drm_connector *connector, struct dentry *root);
   1152};
   1153
   1154/**
   1155 * struct drm_cmdline_mode - DRM Mode passed through the kernel command-line
   1156 *
   1157 * Each connector can have an initial mode with additional options
   1158 * passed through the kernel command line. This structure allows to
   1159 * express those parameters and will be filled by the command-line
   1160 * parser.
   1161 */
   1162struct drm_cmdline_mode {
   1163	/**
   1164	 * @name:
   1165	 *
   1166	 * Name of the mode.
   1167	 */
   1168	char name[DRM_DISPLAY_MODE_LEN];
   1169
   1170	/**
   1171	 * @specified:
   1172	 *
   1173	 * Has a mode been read from the command-line?
   1174	 */
   1175	bool specified;
   1176
   1177	/**
   1178	 * @refresh_specified:
   1179	 *
   1180	 * Did the mode have a preferred refresh rate?
   1181	 */
   1182	bool refresh_specified;
   1183
   1184	/**
   1185	 * @bpp_specified:
   1186	 *
   1187	 * Did the mode have a preferred BPP?
   1188	 */
   1189	bool bpp_specified;
   1190
   1191	/**
   1192	 * @xres:
   1193	 *
   1194	 * Active resolution on the X axis, in pixels.
   1195	 */
   1196	int xres;
   1197
   1198	/**
   1199	 * @yres:
   1200	 *
   1201	 * Active resolution on the Y axis, in pixels.
   1202	 */
   1203	int yres;
   1204
   1205	/**
   1206	 * @bpp:
   1207	 *
   1208	 * Bits per pixels for the mode.
   1209	 */
   1210	int bpp;
   1211
   1212	/**
   1213	 * @refresh:
   1214	 *
   1215	 * Refresh rate, in Hertz.
   1216	 */
   1217	int refresh;
   1218
   1219	/**
   1220	 * @rb:
   1221	 *
   1222	 * Do we need to use reduced blanking?
   1223	 */
   1224	bool rb;
   1225
   1226	/**
   1227	 * @interlace:
   1228	 *
   1229	 * The mode is interlaced.
   1230	 */
   1231	bool interlace;
   1232
   1233	/**
   1234	 * @cvt:
   1235	 *
   1236	 * The timings will be calculated using the VESA Coordinated
   1237	 * Video Timings instead of looking up the mode from a table.
   1238	 */
   1239	bool cvt;
   1240
   1241	/**
   1242	 * @margins:
   1243	 *
   1244	 * Add margins to the mode calculation (1.8% of xres rounded
   1245	 * down to 8 pixels and 1.8% of yres).
   1246	 */
   1247	bool margins;
   1248
   1249	/**
   1250	 * @force:
   1251	 *
   1252	 * Ignore the hotplug state of the connector, and force its
   1253	 * state to one of the DRM_FORCE_* values.
   1254	 */
   1255	enum drm_connector_force force;
   1256
   1257	/**
   1258	 * @rotation_reflection:
   1259	 *
   1260	 * Initial rotation and reflection of the mode setup from the
   1261	 * command line. See DRM_MODE_ROTATE_* and
   1262	 * DRM_MODE_REFLECT_*. The only rotations supported are
   1263	 * DRM_MODE_ROTATE_0 and DRM_MODE_ROTATE_180.
   1264	 */
   1265	unsigned int rotation_reflection;
   1266
   1267	/**
   1268	 * @panel_orientation:
   1269	 *
   1270	 * drm-connector "panel orientation" property override value,
   1271	 * DRM_MODE_PANEL_ORIENTATION_UNKNOWN if not set.
   1272	 */
   1273	enum drm_panel_orientation panel_orientation;
   1274
   1275	/**
   1276	 * @tv_margins: TV margins to apply to the mode.
   1277	 */
   1278	struct drm_connector_tv_margins tv_margins;
   1279};
   1280
   1281/**
   1282 * struct drm_connector - central DRM connector control structure
   1283 *
   1284 * Each connector may be connected to one or more CRTCs, or may be clonable by
   1285 * another connector if they can share a CRTC.  Each connector also has a specific
   1286 * position in the broader display (referred to as a 'screen' though it could
   1287 * span multiple monitors).
   1288 */
   1289struct drm_connector {
   1290	/** @dev: parent DRM device */
   1291	struct drm_device *dev;
   1292	/** @kdev: kernel device for sysfs attributes */
   1293	struct device *kdev;
   1294	/** @attr: sysfs attributes */
   1295	struct device_attribute *attr;
   1296	/**
   1297	 * @fwnode: associated fwnode supplied by platform firmware
   1298	 *
   1299	 * Drivers can set this to associate a fwnode with a connector, drivers
   1300	 * are expected to get a reference on the fwnode when setting this.
   1301	 * drm_connector_cleanup() will call fwnode_handle_put() on this.
   1302	 */
   1303	struct fwnode_handle *fwnode;
   1304
   1305	/**
   1306	 * @head:
   1307	 *
   1308	 * List of all connectors on a @dev, linked from
   1309	 * &drm_mode_config.connector_list. Protected by
   1310	 * &drm_mode_config.connector_list_lock, but please only use
   1311	 * &drm_connector_list_iter to walk this list.
   1312	 */
   1313	struct list_head head;
   1314
   1315	/**
   1316	 * @global_connector_list_entry:
   1317	 *
   1318	 * Connector entry in the global connector-list, used by
   1319	 * drm_connector_find_by_fwnode().
   1320	 */
   1321	struct list_head global_connector_list_entry;
   1322
   1323	/** @base: base KMS object */
   1324	struct drm_mode_object base;
   1325
   1326	/** @name: human readable name, can be overwritten by the driver */
   1327	char *name;
   1328
   1329	/**
   1330	 * @mutex: Lock for general connector state, but currently only protects
   1331	 * @registered. Most of the connector state is still protected by
   1332	 * &drm_mode_config.mutex.
   1333	 */
   1334	struct mutex mutex;
   1335
   1336	/**
   1337	 * @index: Compacted connector index, which matches the position inside
   1338	 * the mode_config.list for drivers not supporting hot-add/removing. Can
   1339	 * be used as an array index. It is invariant over the lifetime of the
   1340	 * connector.
   1341	 */
   1342	unsigned index;
   1343
   1344	/**
   1345	 * @connector_type:
   1346	 * one of the DRM_MODE_CONNECTOR_<foo> types from drm_mode.h
   1347	 */
   1348	int connector_type;
   1349	/** @connector_type_id: index into connector type enum */
   1350	int connector_type_id;
   1351	/**
   1352	 * @interlace_allowed:
   1353	 * Can this connector handle interlaced modes? Only used by
   1354	 * drm_helper_probe_single_connector_modes() for mode filtering.
   1355	 */
   1356	bool interlace_allowed;
   1357	/**
   1358	 * @doublescan_allowed:
   1359	 * Can this connector handle doublescan? Only used by
   1360	 * drm_helper_probe_single_connector_modes() for mode filtering.
   1361	 */
   1362	bool doublescan_allowed;
   1363	/**
   1364	 * @stereo_allowed:
   1365	 * Can this connector handle stereo modes? Only used by
   1366	 * drm_helper_probe_single_connector_modes() for mode filtering.
   1367	 */
   1368	bool stereo_allowed;
   1369
   1370	/**
   1371	 * @ycbcr_420_allowed : This bool indicates if this connector is
   1372	 * capable of handling YCBCR 420 output. While parsing the EDID
   1373	 * blocks it's very helpful to know if the source is capable of
   1374	 * handling YCBCR 420 outputs.
   1375	 */
   1376	bool ycbcr_420_allowed;
   1377
   1378	/**
   1379	 * @registration_state: Is this connector initializing, exposed
   1380	 * (registered) with userspace, or unregistered?
   1381	 *
   1382	 * Protected by @mutex.
   1383	 */
   1384	enum drm_connector_registration_state registration_state;
   1385
   1386	/**
   1387	 * @modes:
   1388	 * Modes available on this connector (from fill_modes() + user).
   1389	 * Protected by &drm_mode_config.mutex.
   1390	 */
   1391	struct list_head modes;
   1392
   1393	/**
   1394	 * @status:
   1395	 * One of the drm_connector_status enums (connected, not, or unknown).
   1396	 * Protected by &drm_mode_config.mutex.
   1397	 */
   1398	enum drm_connector_status status;
   1399
   1400	/**
   1401	 * @probed_modes:
   1402	 * These are modes added by probing with DDC or the BIOS, before
   1403	 * filtering is applied. Used by the probe helpers. Protected by
   1404	 * &drm_mode_config.mutex.
   1405	 */
   1406	struct list_head probed_modes;
   1407
   1408	/**
   1409	 * @display_info: Display information is filled from EDID information
   1410	 * when a display is detected. For non hot-pluggable displays such as
   1411	 * flat panels in embedded systems, the driver should initialize the
   1412	 * &drm_display_info.width_mm and &drm_display_info.height_mm fields
   1413	 * with the physical size of the display.
   1414	 *
   1415	 * Protected by &drm_mode_config.mutex.
   1416	 */
   1417	struct drm_display_info display_info;
   1418
   1419	/** @funcs: connector control functions */
   1420	const struct drm_connector_funcs *funcs;
   1421
   1422	/**
   1423	 * @edid_blob_ptr: DRM property containing EDID if present. Protected by
   1424	 * &drm_mode_config.mutex. This should be updated only by calling
   1425	 * drm_connector_update_edid_property().
   1426	 */
   1427	struct drm_property_blob *edid_blob_ptr;
   1428
   1429	/** @properties: property tracking for this connector */
   1430	struct drm_object_properties properties;
   1431
   1432	/**
   1433	 * @scaling_mode_property: Optional atomic property to control the
   1434	 * upscaling. See drm_connector_attach_content_protection_property().
   1435	 */
   1436	struct drm_property *scaling_mode_property;
   1437
   1438	/**
   1439	 * @vrr_capable_property: Optional property to help userspace
   1440	 * query hardware support for variable refresh rate on a connector.
   1441	 * connector. Drivers can add the property to a connector by
   1442	 * calling drm_connector_attach_vrr_capable_property().
   1443	 *
   1444	 * This should be updated only by calling
   1445	 * drm_connector_set_vrr_capable_property().
   1446	 */
   1447	struct drm_property *vrr_capable_property;
   1448
   1449	/**
   1450	 * @colorspace_property: Connector property to set the suitable
   1451	 * colorspace supported by the sink.
   1452	 */
   1453	struct drm_property *colorspace_property;
   1454
   1455	/**
   1456	 * @path_blob_ptr:
   1457	 *
   1458	 * DRM blob property data for the DP MST path property. This should only
   1459	 * be updated by calling drm_connector_set_path_property().
   1460	 */
   1461	struct drm_property_blob *path_blob_ptr;
   1462
   1463	/**
   1464	 * @max_bpc_property: Default connector property for the max bpc to be
   1465	 * driven out of the connector.
   1466	 */
   1467	struct drm_property *max_bpc_property;
   1468
   1469	/** @privacy_screen: drm_privacy_screen for this connector, or NULL. */
   1470	struct drm_privacy_screen *privacy_screen;
   1471
   1472	/** @privacy_screen_notifier: privacy-screen notifier_block */
   1473	struct notifier_block privacy_screen_notifier;
   1474
   1475	/**
   1476	 * @privacy_screen_sw_state_property: Optional atomic property for the
   1477	 * connector to control the integrated privacy screen.
   1478	 */
   1479	struct drm_property *privacy_screen_sw_state_property;
   1480
   1481	/**
   1482	 * @privacy_screen_hw_state_property: Optional atomic property for the
   1483	 * connector to report the actual integrated privacy screen state.
   1484	 */
   1485	struct drm_property *privacy_screen_hw_state_property;
   1486
   1487#define DRM_CONNECTOR_POLL_HPD (1 << 0)
   1488#define DRM_CONNECTOR_POLL_CONNECT (1 << 1)
   1489#define DRM_CONNECTOR_POLL_DISCONNECT (1 << 2)
   1490
   1491	/**
   1492	 * @polled:
   1493	 *
   1494	 * Connector polling mode, a combination of
   1495	 *
   1496	 * DRM_CONNECTOR_POLL_HPD
   1497	 *     The connector generates hotplug events and doesn't need to be
   1498	 *     periodically polled. The CONNECT and DISCONNECT flags must not
   1499	 *     be set together with the HPD flag.
   1500	 *
   1501	 * DRM_CONNECTOR_POLL_CONNECT
   1502	 *     Periodically poll the connector for connection.
   1503	 *
   1504	 * DRM_CONNECTOR_POLL_DISCONNECT
   1505	 *     Periodically poll the connector for disconnection, without
   1506	 *     causing flickering even when the connector is in use. DACs should
   1507	 *     rarely do this without a lot of testing.
   1508	 *
   1509	 * Set to 0 for connectors that don't support connection status
   1510	 * discovery.
   1511	 */
   1512	uint8_t polled;
   1513
   1514	/**
   1515	 * @dpms: Current dpms state. For legacy drivers the
   1516	 * &drm_connector_funcs.dpms callback must update this. For atomic
   1517	 * drivers, this is handled by the core atomic code, and drivers must
   1518	 * only take &drm_crtc_state.active into account.
   1519	 */
   1520	int dpms;
   1521
   1522	/** @helper_private: mid-layer private data */
   1523	const struct drm_connector_helper_funcs *helper_private;
   1524
   1525	/** @cmdline_mode: mode line parsed from the kernel cmdline for this connector */
   1526	struct drm_cmdline_mode cmdline_mode;
   1527	/** @force: a DRM_FORCE_<foo> state for forced mode sets */
   1528	enum drm_connector_force force;
   1529	/** @override_edid: has the EDID been overwritten through debugfs for testing? */
   1530	bool override_edid;
   1531	/** @epoch_counter: used to detect any other changes in connector, besides status */
   1532	u64 epoch_counter;
   1533
   1534	/**
   1535	 * @possible_encoders: Bit mask of encoders that can drive this
   1536	 * connector, drm_encoder_index() determines the index into the bitfield
   1537	 * and the bits are set with drm_connector_attach_encoder().
   1538	 */
   1539	u32 possible_encoders;
   1540
   1541	/**
   1542	 * @encoder: Currently bound encoder driving this connector, if any.
   1543	 * Only really meaningful for non-atomic drivers. Atomic drivers should
   1544	 * instead look at &drm_connector_state.best_encoder, and in case they
   1545	 * need the CRTC driving this output, &drm_connector_state.crtc.
   1546	 */
   1547	struct drm_encoder *encoder;
   1548
   1549#define MAX_ELD_BYTES	128
   1550	/** @eld: EDID-like data, if present */
   1551	uint8_t eld[MAX_ELD_BYTES];
   1552	/** @latency_present: AV delay info from ELD, if found */
   1553	bool latency_present[2];
   1554	/**
   1555	 * @video_latency: Video latency info from ELD, if found.
   1556	 * [0]: progressive, [1]: interlaced
   1557	 */
   1558	int video_latency[2];
   1559	/**
   1560	 * @audio_latency: audio latency info from ELD, if found
   1561	 * [0]: progressive, [1]: interlaced
   1562	 */
   1563	int audio_latency[2];
   1564
   1565	/**
   1566	 * @ddc: associated ddc adapter.
   1567	 * A connector usually has its associated ddc adapter. If a driver uses
   1568	 * this field, then an appropriate symbolic link is created in connector
   1569	 * sysfs directory to make it easy for the user to tell which i2c
   1570	 * adapter is for a particular display.
   1571	 *
   1572	 * The field should be set by calling drm_connector_init_with_ddc().
   1573	 */
   1574	struct i2c_adapter *ddc;
   1575
   1576	/**
   1577	 * @null_edid_counter: track sinks that give us all zeros for the EDID.
   1578	 * Needed to workaround some HW bugs where we get all 0s
   1579	 */
   1580	int null_edid_counter;
   1581
   1582	/** @bad_edid_counter: track sinks that give us an EDID with invalid checksum */
   1583	unsigned bad_edid_counter;
   1584
   1585	/**
   1586	 * @edid_corrupt: Indicates whether the last read EDID was corrupt. Used
   1587	 * in Displayport compliance testing - Displayport Link CTS Core 1.2
   1588	 * rev1.1 4.2.2.6
   1589	 */
   1590	bool edid_corrupt;
   1591	/**
   1592	 * @real_edid_checksum: real edid checksum for corrupted edid block.
   1593	 * Required in Displayport 1.4 compliance testing
   1594	 * rev1.1 4.2.2.6
   1595	 */
   1596	u8 real_edid_checksum;
   1597
   1598	/** @debugfs_entry: debugfs directory for this connector */
   1599	struct dentry *debugfs_entry;
   1600
   1601	/**
   1602	 * @state:
   1603	 *
   1604	 * Current atomic state for this connector.
   1605	 *
   1606	 * This is protected by &drm_mode_config.connection_mutex. Note that
   1607	 * nonblocking atomic commits access the current connector state without
   1608	 * taking locks. Either by going through the &struct drm_atomic_state
   1609	 * pointers, see for_each_oldnew_connector_in_state(),
   1610	 * for_each_old_connector_in_state() and
   1611	 * for_each_new_connector_in_state(). Or through careful ordering of
   1612	 * atomic commit operations as implemented in the atomic helpers, see
   1613	 * &struct drm_crtc_commit.
   1614	 */
   1615	struct drm_connector_state *state;
   1616
   1617	/* DisplayID bits. FIXME: Extract into a substruct? */
   1618
   1619	/**
   1620	 * @tile_blob_ptr:
   1621	 *
   1622	 * DRM blob property data for the tile property (used mostly by DP MST).
   1623	 * This is meant for screens which are driven through separate display
   1624	 * pipelines represented by &drm_crtc, which might not be running with
   1625	 * genlocked clocks. For tiled panels which are genlocked, like
   1626	 * dual-link LVDS or dual-link DSI, the driver should try to not expose
   1627	 * the tiling and virtualize both &drm_crtc and &drm_plane if needed.
   1628	 *
   1629	 * This should only be updated by calling
   1630	 * drm_connector_set_tile_property().
   1631	 */
   1632	struct drm_property_blob *tile_blob_ptr;
   1633
   1634	/** @has_tile: is this connector connected to a tiled monitor */
   1635	bool has_tile;
   1636	/** @tile_group: tile group for the connected monitor */
   1637	struct drm_tile_group *tile_group;
   1638	/** @tile_is_single_monitor: whether the tile is one monitor housing */
   1639	bool tile_is_single_monitor;
   1640
   1641	/** @num_h_tile: number of horizontal tiles in the tile group */
   1642	/** @num_v_tile: number of vertical tiles in the tile group */
   1643	uint8_t num_h_tile, num_v_tile;
   1644	/** @tile_h_loc: horizontal location of this tile */
   1645	/** @tile_v_loc: vertical location of this tile */
   1646	uint8_t tile_h_loc, tile_v_loc;
   1647	/** @tile_h_size: horizontal size of this tile. */
   1648	/** @tile_v_size: vertical size of this tile. */
   1649	uint16_t tile_h_size, tile_v_size;
   1650
   1651	/**
   1652	 * @free_node:
   1653	 *
   1654	 * List used only by &drm_connector_list_iter to be able to clean up a
   1655	 * connector from any context, in conjunction with
   1656	 * &drm_mode_config.connector_free_work.
   1657	 */
   1658	struct llist_node free_node;
   1659
   1660	/** @hdr_sink_metadata: HDR Metadata Information read from sink */
   1661	struct hdr_sink_metadata hdr_sink_metadata;
   1662};
   1663
   1664#define obj_to_connector(x) container_of(x, struct drm_connector, base)
   1665
   1666int drm_connector_init(struct drm_device *dev,
   1667		       struct drm_connector *connector,
   1668		       const struct drm_connector_funcs *funcs,
   1669		       int connector_type);
   1670int drm_connector_init_with_ddc(struct drm_device *dev,
   1671				struct drm_connector *connector,
   1672				const struct drm_connector_funcs *funcs,
   1673				int connector_type,
   1674				struct i2c_adapter *ddc);
   1675void drm_connector_attach_edid_property(struct drm_connector *connector);
   1676int drm_connector_register(struct drm_connector *connector);
   1677void drm_connector_unregister(struct drm_connector *connector);
   1678int drm_connector_attach_encoder(struct drm_connector *connector,
   1679				      struct drm_encoder *encoder);
   1680
   1681void drm_connector_cleanup(struct drm_connector *connector);
   1682
   1683static inline unsigned int drm_connector_index(const struct drm_connector *connector)
   1684{
   1685	return connector->index;
   1686}
   1687
   1688static inline u32 drm_connector_mask(const struct drm_connector *connector)
   1689{
   1690	return 1 << connector->index;
   1691}
   1692
   1693/**
   1694 * drm_connector_lookup - lookup connector object
   1695 * @dev: DRM device
   1696 * @file_priv: drm file to check for lease against.
   1697 * @id: connector object id
   1698 *
   1699 * This function looks up the connector object specified by id
   1700 * add takes a reference to it.
   1701 */
   1702static inline struct drm_connector *drm_connector_lookup(struct drm_device *dev,
   1703		struct drm_file *file_priv,
   1704		uint32_t id)
   1705{
   1706	struct drm_mode_object *mo;
   1707	mo = drm_mode_object_find(dev, file_priv, id, DRM_MODE_OBJECT_CONNECTOR);
   1708	return mo ? obj_to_connector(mo) : NULL;
   1709}
   1710
   1711/**
   1712 * drm_connector_get - acquire a connector reference
   1713 * @connector: DRM connector
   1714 *
   1715 * This function increments the connector's refcount.
   1716 */
   1717static inline void drm_connector_get(struct drm_connector *connector)
   1718{
   1719	drm_mode_object_get(&connector->base);
   1720}
   1721
   1722/**
   1723 * drm_connector_put - release a connector reference
   1724 * @connector: DRM connector
   1725 *
   1726 * This function decrements the connector's reference count and frees the
   1727 * object if the reference count drops to zero.
   1728 */
   1729static inline void drm_connector_put(struct drm_connector *connector)
   1730{
   1731	drm_mode_object_put(&connector->base);
   1732}
   1733
   1734/**
   1735 * drm_connector_is_unregistered - has the connector been unregistered from
   1736 * userspace?
   1737 * @connector: DRM connector
   1738 *
   1739 * Checks whether or not @connector has been unregistered from userspace.
   1740 *
   1741 * Returns:
   1742 * True if the connector was unregistered, false if the connector is
   1743 * registered or has not yet been registered with userspace.
   1744 */
   1745static inline bool
   1746drm_connector_is_unregistered(struct drm_connector *connector)
   1747{
   1748	return READ_ONCE(connector->registration_state) ==
   1749		DRM_CONNECTOR_UNREGISTERED;
   1750}
   1751
   1752void drm_connector_oob_hotplug_event(struct fwnode_handle *connector_fwnode);
   1753const char *drm_get_connector_type_name(unsigned int connector_type);
   1754const char *drm_get_connector_status_name(enum drm_connector_status status);
   1755const char *drm_get_subpixel_order_name(enum subpixel_order order);
   1756const char *drm_get_dpms_name(int val);
   1757const char *drm_get_dvi_i_subconnector_name(int val);
   1758const char *drm_get_dvi_i_select_name(int val);
   1759const char *drm_get_tv_subconnector_name(int val);
   1760const char *drm_get_tv_select_name(int val);
   1761const char *drm_get_dp_subconnector_name(int val);
   1762const char *drm_get_content_protection_name(int val);
   1763const char *drm_get_hdcp_content_type_name(int val);
   1764
   1765int drm_mode_create_dvi_i_properties(struct drm_device *dev);
   1766void drm_connector_attach_dp_subconnector_property(struct drm_connector *connector);
   1767
   1768int drm_mode_create_tv_margin_properties(struct drm_device *dev);
   1769int drm_mode_create_tv_properties(struct drm_device *dev,
   1770				  unsigned int num_modes,
   1771				  const char * const modes[]);
   1772void drm_connector_attach_tv_margin_properties(struct drm_connector *conn);
   1773int drm_mode_create_scaling_mode_property(struct drm_device *dev);
   1774int drm_connector_attach_content_type_property(struct drm_connector *dev);
   1775int drm_connector_attach_scaling_mode_property(struct drm_connector *connector,
   1776					       u32 scaling_mode_mask);
   1777int drm_connector_attach_vrr_capable_property(
   1778		struct drm_connector *connector);
   1779int drm_connector_attach_colorspace_property(struct drm_connector *connector);
   1780int drm_connector_attach_hdr_output_metadata_property(struct drm_connector *connector);
   1781bool drm_connector_atomic_hdr_metadata_equal(struct drm_connector_state *old_state,
   1782					     struct drm_connector_state *new_state);
   1783int drm_mode_create_aspect_ratio_property(struct drm_device *dev);
   1784int drm_mode_create_hdmi_colorspace_property(struct drm_connector *connector);
   1785int drm_mode_create_dp_colorspace_property(struct drm_connector *connector);
   1786int drm_mode_create_content_type_property(struct drm_device *dev);
   1787int drm_mode_create_suggested_offset_properties(struct drm_device *dev);
   1788
   1789int drm_connector_set_path_property(struct drm_connector *connector,
   1790				    const char *path);
   1791int drm_connector_set_tile_property(struct drm_connector *connector);
   1792int drm_connector_update_edid_property(struct drm_connector *connector,
   1793				       const struct edid *edid);
   1794void drm_connector_set_link_status_property(struct drm_connector *connector,
   1795					    uint64_t link_status);
   1796void drm_connector_set_vrr_capable_property(
   1797		struct drm_connector *connector, bool capable);
   1798int drm_connector_set_panel_orientation(
   1799	struct drm_connector *connector,
   1800	enum drm_panel_orientation panel_orientation);
   1801int drm_connector_set_panel_orientation_with_quirk(
   1802	struct drm_connector *connector,
   1803	enum drm_panel_orientation panel_orientation,
   1804	int width, int height);
   1805int drm_connector_attach_max_bpc_property(struct drm_connector *connector,
   1806					  int min, int max);
   1807void drm_connector_create_privacy_screen_properties(struct drm_connector *conn);
   1808void drm_connector_attach_privacy_screen_properties(struct drm_connector *conn);
   1809void drm_connector_attach_privacy_screen_provider(
   1810	struct drm_connector *connector, struct drm_privacy_screen *priv);
   1811void drm_connector_update_privacy_screen(const struct drm_connector_state *connector_state);
   1812
   1813/**
   1814 * struct drm_tile_group - Tile group metadata
   1815 * @refcount: reference count
   1816 * @dev: DRM device
   1817 * @id: tile group id exposed to userspace
   1818 * @group_data: Sink-private data identifying this group
   1819 *
   1820 * @group_data corresponds to displayid vend/prod/serial for external screens
   1821 * with an EDID.
   1822 */
   1823struct drm_tile_group {
   1824	struct kref refcount;
   1825	struct drm_device *dev;
   1826	int id;
   1827	u8 group_data[8];
   1828};
   1829
   1830struct drm_tile_group *drm_mode_create_tile_group(struct drm_device *dev,
   1831						  const char topology[8]);
   1832struct drm_tile_group *drm_mode_get_tile_group(struct drm_device *dev,
   1833					       const char topology[8]);
   1834void drm_mode_put_tile_group(struct drm_device *dev,
   1835			     struct drm_tile_group *tg);
   1836
   1837/**
   1838 * struct drm_connector_list_iter - connector_list iterator
   1839 *
   1840 * This iterator tracks state needed to be able to walk the connector_list
   1841 * within struct drm_mode_config. Only use together with
   1842 * drm_connector_list_iter_begin(), drm_connector_list_iter_end() and
   1843 * drm_connector_list_iter_next() respectively the convenience macro
   1844 * drm_for_each_connector_iter().
   1845 *
   1846 * Note that the return value of drm_connector_list_iter_next() is only valid
   1847 * up to the next drm_connector_list_iter_next() or
   1848 * drm_connector_list_iter_end() call. If you want to use the connector later,
   1849 * then you need to grab your own reference first using drm_connector_get().
   1850 */
   1851struct drm_connector_list_iter {
   1852/* private: */
   1853	struct drm_device *dev;
   1854	struct drm_connector *conn;
   1855};
   1856
   1857void drm_connector_list_iter_begin(struct drm_device *dev,
   1858				   struct drm_connector_list_iter *iter);
   1859struct drm_connector *
   1860drm_connector_list_iter_next(struct drm_connector_list_iter *iter);
   1861void drm_connector_list_iter_end(struct drm_connector_list_iter *iter);
   1862
   1863bool drm_connector_has_possible_encoder(struct drm_connector *connector,
   1864					struct drm_encoder *encoder);
   1865
   1866/**
   1867 * drm_for_each_connector_iter - connector_list iterator macro
   1868 * @connector: &struct drm_connector pointer used as cursor
   1869 * @iter: &struct drm_connector_list_iter
   1870 *
   1871 * Note that @connector is only valid within the list body, if you want to use
   1872 * @connector after calling drm_connector_list_iter_end() then you need to grab
   1873 * your own reference first using drm_connector_get().
   1874 */
   1875#define drm_for_each_connector_iter(connector, iter) \
   1876	while ((connector = drm_connector_list_iter_next(iter)))
   1877
   1878/**
   1879 * drm_connector_for_each_possible_encoder - iterate connector's possible encoders
   1880 * @connector: &struct drm_connector pointer
   1881 * @encoder: &struct drm_encoder pointer used as cursor
   1882 */
   1883#define drm_connector_for_each_possible_encoder(connector, encoder) \
   1884	drm_for_each_encoder_mask(encoder, (connector)->dev, \
   1885				  (connector)->possible_encoders)
   1886
   1887#endif