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