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 36 struct drm_connector_helper_funcs; 37 struct drm_modeset_acquire_ctx; 38 struct drm_device; 39 struct drm_crtc; 40 struct drm_encoder; 41 struct drm_property; 42 struct drm_property_blob; 43 struct drm_printer; 44 struct drm_privacy_screen; 45 struct edid; 46 struct i2c_adapter; 47 48 enum 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 */ 61 enum 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 */ 96 enum 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 135 enum 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 */ 148 struct 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 */ 165 struct 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 */ 187 struct 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 */ 227 struct 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 */ 274 enum 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 */ 300 enum 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 */ 320 struct 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 */ 342 enum 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 */ 399 enum 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 */ 503 struct 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_YCRCB444 (1<<1) 526 #define DRM_COLOR_FORMAT_YCRCB422 (1<<2) 527 #define DRM_COLOR_FORMAT_YCRCB420 (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_dc_modes: Mask of supported hdmi deep color modes. Even 596 * more stuff redundant with @bus_formats. 597 */ 598 u8 edid_hdmi_dc_modes; 599 600 /** 601 * @cea_rev: CEA revision of the HDMI sink. 602 */ 603 u8 cea_rev; 604 605 /** 606 * @hdmi: advance features of a HDMI sink. 607 */ 608 struct drm_hdmi_info hdmi; 609 610 /** 611 * @non_desktop: Non desktop display (HMD). 612 */ 613 bool non_desktop; 614 615 /** 616 * @monitor_range: Frequency range supported by monitor range descriptor 617 */ 618 struct drm_monitor_range_info monitor_range; 619 620 /** 621 * @mso_stream_count: eDP Multi-SST Operation (MSO) stream count from 622 * the DisplayID VESA vendor block. 0 for conventional Single-Stream 623 * Transport (SST), or 2 or 4 MSO streams. 624 */ 625 u8 mso_stream_count; 626 627 /** 628 * @mso_pixel_overlap: eDP MSO segment pixel overlap, 0-8 pixels. 629 */ 630 u8 mso_pixel_overlap; 631 }; 632 633 int drm_display_info_set_bus_formats(struct drm_display_info *info, 634 const u32 *formats, 635 unsigned int num_formats); 636 637 /** 638 * struct drm_connector_tv_margins - TV connector related margins 639 * 640 * Describes the margins in pixels to put around the image on TV 641 * connectors to deal with overscan. 642 */ 643 struct drm_connector_tv_margins { 644 /** 645 * @bottom: Bottom margin in pixels. 646 */ 647 unsigned int bottom; 648 649 /** 650 * @left: Left margin in pixels. 651 */ 652 unsigned int left; 653 654 /** 655 * @right: Right margin in pixels. 656 */ 657 unsigned int right; 658 659 /** 660 * @top: Top margin in pixels. 661 */ 662 unsigned int top; 663 }; 664 665 /** 666 * struct drm_tv_connector_state - TV connector related states 667 * @subconnector: selected subconnector 668 * @margins: TV margins 669 * @mode: TV mode 670 * @brightness: brightness in percent 671 * @contrast: contrast in percent 672 * @flicker_reduction: flicker reduction in percent 673 * @overscan: overscan in percent 674 * @saturation: saturation in percent 675 * @hue: hue in percent 676 */ 677 struct drm_tv_connector_state { 678 enum drm_mode_subconnector subconnector; 679 struct drm_connector_tv_margins margins; 680 unsigned int mode; 681 unsigned int brightness; 682 unsigned int contrast; 683 unsigned int flicker_reduction; 684 unsigned int overscan; 685 unsigned int saturation; 686 unsigned int hue; 687 }; 688 689 /** 690 * struct drm_connector_state - mutable connector state 691 */ 692 struct drm_connector_state { 693 /** @connector: backpointer to the connector */ 694 struct drm_connector *connector; 695 696 /** 697 * @crtc: CRTC to connect connector to, NULL if disabled. 698 * 699 * Do not change this directly, use drm_atomic_set_crtc_for_connector() 700 * instead. 701 */ 702 struct drm_crtc *crtc; 703 704 /** 705 * @best_encoder: 706 * 707 * Used by the atomic helpers to select the encoder, through the 708 * &drm_connector_helper_funcs.atomic_best_encoder or 709 * &drm_connector_helper_funcs.best_encoder callbacks. 710 * 711 * This is also used in the atomic helpers to map encoders to their 712 * current and previous connectors, see 713 * drm_atomic_get_old_connector_for_encoder() and 714 * drm_atomic_get_new_connector_for_encoder(). 715 * 716 * NOTE: Atomic drivers must fill this out (either themselves or through 717 * helpers), for otherwise the GETCONNECTOR and GETENCODER IOCTLs will 718 * not return correct data to userspace. 719 */ 720 struct drm_encoder *best_encoder; 721 722 /** 723 * @link_status: Connector link_status to keep track of whether link is 724 * GOOD or BAD to notify userspace if retraining is necessary. 725 */ 726 enum drm_link_status link_status; 727 728 /** @state: backpointer to global drm_atomic_state */ 729 struct drm_atomic_state *state; 730 731 /** 732 * @commit: Tracks the pending commit to prevent use-after-free conditions. 733 * 734 * Is only set when @crtc is NULL. 735 */ 736 struct drm_crtc_commit *commit; 737 738 /** @tv: TV connector state */ 739 struct drm_tv_connector_state tv; 740 741 /** 742 * @self_refresh_aware: 743 * 744 * This tracks whether a connector is aware of the self refresh state. 745 * It should be set to true for those connector implementations which 746 * understand the self refresh state. This is needed since the crtc 747 * registers the self refresh helpers and it doesn't know if the 748 * connectors downstream have implemented self refresh entry/exit. 749 * 750 * Drivers should set this to true in atomic_check if they know how to 751 * handle self_refresh requests. 752 */ 753 bool self_refresh_aware; 754 755 /** 756 * @picture_aspect_ratio: Connector property to control the 757 * HDMI infoframe aspect ratio setting. 758 * 759 * The %DRM_MODE_PICTURE_ASPECT_\* values much match the 760 * values for &enum hdmi_picture_aspect 761 */ 762 enum hdmi_picture_aspect picture_aspect_ratio; 763 764 /** 765 * @content_type: Connector property to control the 766 * HDMI infoframe content type setting. 767 * The %DRM_MODE_CONTENT_TYPE_\* values much 768 * match the values. 769 */ 770 unsigned int content_type; 771 772 /** 773 * @hdcp_content_type: Connector property to pass the type of 774 * protected content. This is most commonly used for HDCP. 775 */ 776 unsigned int hdcp_content_type; 777 778 /** 779 * @scaling_mode: Connector property to control the 780 * upscaling, mostly used for built-in panels. 781 */ 782 unsigned int scaling_mode; 783 784 /** 785 * @content_protection: Connector property to request content 786 * protection. This is most commonly used for HDCP. 787 */ 788 unsigned int content_protection; 789 790 /** 791 * @colorspace: State variable for Connector property to request 792 * colorspace change on Sink. This is most commonly used to switch 793 * to wider color gamuts like BT2020. 794 */ 795 u32 colorspace; 796 797 /** 798 * @writeback_job: Writeback job for writeback connectors 799 * 800 * Holds the framebuffer and out-fence for a writeback connector. As 801 * the writeback completion may be asynchronous to the normal commit 802 * cycle, the writeback job lifetime is managed separately from the 803 * normal atomic state by this object. 804 * 805 * See also: drm_writeback_queue_job() and 806 * drm_writeback_signal_completion() 807 */ 808 struct drm_writeback_job *writeback_job; 809 810 /** 811 * @max_requested_bpc: Connector property to limit the maximum bit 812 * depth of the pixels. 813 */ 814 u8 max_requested_bpc; 815 816 /** 817 * @max_bpc: Connector max_bpc based on the requested max_bpc property 818 * and the connector bpc limitations obtained from edid. 819 */ 820 u8 max_bpc; 821 822 /** 823 * @privacy_screen_sw_state: See :ref:`Standard Connector 824 * Properties<standard_connector_properties>` 825 */ 826 enum drm_privacy_screen_status privacy_screen_sw_state; 827 828 /** 829 * @hdr_output_metadata: 830 * DRM blob property for HDR output metadata 831 */ 832 struct drm_property_blob *hdr_output_metadata; 833 }; 834 835 /** 836 * struct drm_connector_funcs - control connectors on a given device 837 * 838 * Each CRTC may have one or more connectors attached to it. The functions 839 * below allow the core DRM code to control connectors, enumerate available modes, 840 * etc. 841 */ 842 struct drm_connector_funcs { 843 /** 844 * @dpms: 845 * 846 * Legacy entry point to set the per-connector DPMS state. Legacy DPMS 847 * is exposed as a standard property on the connector, but diverted to 848 * this callback in the drm core. Note that atomic drivers don't 849 * implement the 4 level DPMS support on the connector any more, but 850 * instead only have an on/off "ACTIVE" property on the CRTC object. 851 * 852 * This hook is not used by atomic drivers, remapping of the legacy DPMS 853 * property is entirely handled in the DRM core. 854 * 855 * RETURNS: 856 * 857 * 0 on success or a negative error code on failure. 858 */ 859 int (*dpms)(struct drm_connector *connector, int mode); 860 861 /** 862 * @reset: 863 * 864 * Reset connector hardware and software state to off. This function isn't 865 * called by the core directly, only through drm_mode_config_reset(). 866 * It's not a helper hook only for historical reasons. 867 * 868 * Atomic drivers can use drm_atomic_helper_connector_reset() to reset 869 * atomic state using this hook. 870 */ 871 void (*reset)(struct drm_connector *connector); 872 873 /** 874 * @detect: 875 * 876 * Check to see if anything is attached to the connector. The parameter 877 * force is set to false whilst polling, true when checking the 878 * connector due to a user request. force can be used by the driver to 879 * avoid expensive, destructive operations during automated probing. 880 * 881 * This callback is optional, if not implemented the connector will be 882 * considered as always being attached. 883 * 884 * FIXME: 885 * 886 * Note that this hook is only called by the probe helper. It's not in 887 * the helper library vtable purely for historical reasons. The only DRM 888 * core entry point to probe connector state is @fill_modes. 889 * 890 * Note that the helper library will already hold 891 * &drm_mode_config.connection_mutex. Drivers which need to grab additional 892 * locks to avoid races with concurrent modeset changes need to use 893 * &drm_connector_helper_funcs.detect_ctx instead. 894 * 895 * Also note that this callback can be called no matter the 896 * state the connector is in. Drivers that need the underlying 897 * device to be powered to perform the detection will first need 898 * to make sure it's been properly enabled. 899 * 900 * RETURNS: 901 * 902 * drm_connector_status indicating the connector's status. 903 */ 904 enum drm_connector_status (*detect)(struct drm_connector *connector, 905 bool force); 906 907 /** 908 * @force: 909 * 910 * This function is called to update internal encoder state when the 911 * connector is forced to a certain state by userspace, either through 912 * the sysfs interfaces or on the kernel cmdline. In that case the 913 * @detect callback isn't called. 914 * 915 * FIXME: 916 * 917 * Note that this hook is only called by the probe helper. It's not in 918 * the helper library vtable purely for historical reasons. The only DRM 919 * core entry point to probe connector state is @fill_modes. 920 */ 921 void (*force)(struct drm_connector *connector); 922 923 /** 924 * @fill_modes: 925 * 926 * Entry point for output detection and basic mode validation. The 927 * driver should reprobe the output if needed (e.g. when hotplug 928 * handling is unreliable), add all detected modes to &drm_connector.modes 929 * and filter out any the device can't support in any configuration. It 930 * also needs to filter out any modes wider or higher than the 931 * parameters max_width and max_height indicate. 932 * 933 * The drivers must also prune any modes no longer valid from 934 * &drm_connector.modes. Furthermore it must update 935 * &drm_connector.status and &drm_connector.edid. If no EDID has been 936 * received for this output connector->edid must be NULL. 937 * 938 * Drivers using the probe helpers should use 939 * drm_helper_probe_single_connector_modes() to implement this 940 * function. 941 * 942 * RETURNS: 943 * 944 * The number of modes detected and filled into &drm_connector.modes. 945 */ 946 int (*fill_modes)(struct drm_connector *connector, uint32_t max_width, uint32_t max_height); 947 948 /** 949 * @set_property: 950 * 951 * This is the legacy entry point to update a property attached to the 952 * connector. 953 * 954 * This callback is optional if the driver does not support any legacy 955 * driver-private properties. For atomic drivers it is not used because 956 * property handling is done entirely in the DRM core. 957 * 958 * RETURNS: 959 * 960 * 0 on success or a negative error code on failure. 961 */ 962 int (*set_property)(struct drm_connector *connector, struct drm_property *property, 963 uint64_t val); 964 965 /** 966 * @late_register: 967 * 968 * This optional hook can be used to register additional userspace 969 * interfaces attached to the connector, light backlight control, i2c, 970 * DP aux or similar interfaces. It is called late in the driver load 971 * sequence from drm_connector_register() when registering all the 972 * core drm connector interfaces. Everything added from this callback 973 * should be unregistered in the early_unregister callback. 974 * 975 * This is called while holding &drm_connector.mutex. 976 * 977 * Returns: 978 * 979 * 0 on success, or a negative error code on failure. 980 */ 981 int (*late_register)(struct drm_connector *connector); 982 983 /** 984 * @early_unregister: 985 * 986 * This optional hook should be used to unregister the additional 987 * userspace interfaces attached to the connector from 988 * late_register(). It is called from drm_connector_unregister(), 989 * early in the driver unload sequence to disable userspace access 990 * before data structures are torndown. 991 * 992 * This is called while holding &drm_connector.mutex. 993 */ 994 void (*early_unregister)(struct drm_connector *connector); 995 996 /** 997 * @destroy: 998 * 999 * Clean up connector resources. This is called at driver unload time 1000 * through drm_mode_config_cleanup(). It can also be called at runtime 1001 * when a connector is being hot-unplugged for drivers that support 1002 * connector hotplugging (e.g. DisplayPort MST). 1003 */ 1004 void (*destroy)(struct drm_connector *connector); 1005 1006 /** 1007 * @atomic_duplicate_state: 1008 * 1009 * Duplicate the current atomic state for this connector and return it. 1010 * The core and helpers guarantee that any atomic state duplicated with 1011 * this hook and still owned by the caller (i.e. not transferred to the 1012 * driver by calling &drm_mode_config_funcs.atomic_commit) will be 1013 * cleaned up by calling the @atomic_destroy_state hook in this 1014 * structure. 1015 * 1016 * This callback is mandatory for atomic drivers. 1017 * 1018 * Atomic drivers which don't subclass &struct drm_connector_state should use 1019 * drm_atomic_helper_connector_duplicate_state(). Drivers that subclass the 1020 * state structure to extend it with driver-private state should use 1021 * __drm_atomic_helper_connector_duplicate_state() to make sure shared state is 1022 * duplicated in a consistent fashion across drivers. 1023 * 1024 * It is an error to call this hook before &drm_connector.state has been 1025 * initialized correctly. 1026 * 1027 * NOTE: 1028 * 1029 * If the duplicate state references refcounted resources this hook must 1030 * acquire a reference for each of them. The driver must release these 1031 * references again in @atomic_destroy_state. 1032 * 1033 * RETURNS: 1034 * 1035 * Duplicated atomic state or NULL when the allocation failed. 1036 */ 1037 struct drm_connector_state *(*atomic_duplicate_state)(struct drm_connector *connector); 1038 1039 /** 1040 * @atomic_destroy_state: 1041 * 1042 * Destroy a state duplicated with @atomic_duplicate_state and release 1043 * or unreference all resources it references 1044 * 1045 * This callback is mandatory for atomic drivers. 1046 */ 1047 void (*atomic_destroy_state)(struct drm_connector *connector, 1048 struct drm_connector_state *state); 1049 1050 /** 1051 * @atomic_set_property: 1052 * 1053 * Decode a driver-private property value and store the decoded value 1054 * into the passed-in state structure. Since the atomic core decodes all 1055 * standardized properties (even for extensions beyond the core set of 1056 * properties which might not be implemented by all drivers) this 1057 * requires drivers to subclass the state structure. 1058 * 1059 * Such driver-private properties should really only be implemented for 1060 * truly hardware/vendor specific state. Instead it is preferred to 1061 * standardize atomic extension and decode the properties used to expose 1062 * such an extension in the core. 1063 * 1064 * Do not call this function directly, use 1065 * drm_atomic_connector_set_property() instead. 1066 * 1067 * This callback is optional if the driver does not support any 1068 * driver-private atomic properties. 1069 * 1070 * NOTE: 1071 * 1072 * This function is called in the state assembly phase of atomic 1073 * modesets, which can be aborted for any reason (including on 1074 * userspace's request to just check whether a configuration would be 1075 * possible). Drivers MUST NOT touch any persistent state (hardware or 1076 * software) or data structures except the passed in @state parameter. 1077 * 1078 * Also since userspace controls in which order properties are set this 1079 * function must not do any input validation (since the state update is 1080 * incomplete and hence likely inconsistent). Instead any such input 1081 * validation must be done in the various atomic_check callbacks. 1082 * 1083 * RETURNS: 1084 * 1085 * 0 if the property has been found, -EINVAL if the property isn't 1086 * implemented by the driver (which shouldn't ever happen, the core only 1087 * asks for properties attached to this connector). No other validation 1088 * is allowed by the driver. The core already checks that the property 1089 * value is within the range (integer, valid enum value, ...) the driver 1090 * set when registering the property. 1091 */ 1092 int (*atomic_set_property)(struct drm_connector *connector, 1093 struct drm_connector_state *state, 1094 struct drm_property *property, 1095 uint64_t val); 1096 1097 /** 1098 * @atomic_get_property: 1099 * 1100 * Reads out the decoded driver-private property. This is used to 1101 * implement the GETCONNECTOR IOCTL. 1102 * 1103 * Do not call this function directly, use 1104 * drm_atomic_connector_get_property() instead. 1105 * 1106 * This callback is optional if the driver does not support any 1107 * driver-private atomic properties. 1108 * 1109 * RETURNS: 1110 * 1111 * 0 on success, -EINVAL if the property isn't implemented by the 1112 * driver (which shouldn't ever happen, the core only asks for 1113 * properties attached to this connector). 1114 */ 1115 int (*atomic_get_property)(struct drm_connector *connector, 1116 const struct drm_connector_state *state, 1117 struct drm_property *property, 1118 uint64_t *val); 1119 1120 /** 1121 * @atomic_print_state: 1122 * 1123 * If driver subclasses &struct drm_connector_state, it should implement 1124 * this optional hook for printing additional driver specific state. 1125 * 1126 * Do not call this directly, use drm_atomic_connector_print_state() 1127 * instead. 1128 */ 1129 void (*atomic_print_state)(struct drm_printer *p, 1130 const struct drm_connector_state *state); 1131 1132 /** 1133 * @oob_hotplug_event: 1134 * 1135 * This will get called when a hotplug-event for a drm-connector 1136 * has been received from a source outside the display driver / device. 1137 */ 1138 void (*oob_hotplug_event)(struct drm_connector *connector); 1139 }; 1140 1141 /** 1142 * struct drm_cmdline_mode - DRM Mode passed through the kernel command-line 1143 * 1144 * Each connector can have an initial mode with additional options 1145 * passed through the kernel command line. This structure allows to 1146 * express those parameters and will be filled by the command-line 1147 * parser. 1148 */ 1149 struct drm_cmdline_mode { 1150 /** 1151 * @name: 1152 * 1153 * Name of the mode. 1154 */ 1155 char name[DRM_DISPLAY_MODE_LEN]; 1156 1157 /** 1158 * @specified: 1159 * 1160 * Has a mode been read from the command-line? 1161 */ 1162 bool specified; 1163 1164 /** 1165 * @refresh_specified: 1166 * 1167 * Did the mode have a preferred refresh rate? 1168 */ 1169 bool refresh_specified; 1170 1171 /** 1172 * @bpp_specified: 1173 * 1174 * Did the mode have a preferred BPP? 1175 */ 1176 bool bpp_specified; 1177 1178 /** 1179 * @xres: 1180 * 1181 * Active resolution on the X axis, in pixels. 1182 */ 1183 int xres; 1184 1185 /** 1186 * @yres: 1187 * 1188 * Active resolution on the Y axis, in pixels. 1189 */ 1190 int yres; 1191 1192 /** 1193 * @bpp: 1194 * 1195 * Bits per pixels for the mode. 1196 */ 1197 int bpp; 1198 1199 /** 1200 * @refresh: 1201 * 1202 * Refresh rate, in Hertz. 1203 */ 1204 int refresh; 1205 1206 /** 1207 * @rb: 1208 * 1209 * Do we need to use reduced blanking? 1210 */ 1211 bool rb; 1212 1213 /** 1214 * @interlace: 1215 * 1216 * The mode is interlaced. 1217 */ 1218 bool interlace; 1219 1220 /** 1221 * @cvt: 1222 * 1223 * The timings will be calculated using the VESA Coordinated 1224 * Video Timings instead of looking up the mode from a table. 1225 */ 1226 bool cvt; 1227 1228 /** 1229 * @margins: 1230 * 1231 * Add margins to the mode calculation (1.8% of xres rounded 1232 * down to 8 pixels and 1.8% of yres). 1233 */ 1234 bool margins; 1235 1236 /** 1237 * @force: 1238 * 1239 * Ignore the hotplug state of the connector, and force its 1240 * state to one of the DRM_FORCE_* values. 1241 */ 1242 enum drm_connector_force force; 1243 1244 /** 1245 * @rotation_reflection: 1246 * 1247 * Initial rotation and reflection of the mode setup from the 1248 * command line. See DRM_MODE_ROTATE_* and 1249 * DRM_MODE_REFLECT_*. The only rotations supported are 1250 * DRM_MODE_ROTATE_0 and DRM_MODE_ROTATE_180. 1251 */ 1252 unsigned int rotation_reflection; 1253 1254 /** 1255 * @panel_orientation: 1256 * 1257 * drm-connector "panel orientation" property override value, 1258 * DRM_MODE_PANEL_ORIENTATION_UNKNOWN if not set. 1259 */ 1260 enum drm_panel_orientation panel_orientation; 1261 1262 /** 1263 * @tv_margins: TV margins to apply to the mode. 1264 */ 1265 struct drm_connector_tv_margins tv_margins; 1266 }; 1267 1268 /** 1269 * struct drm_connector - central DRM connector control structure 1270 * 1271 * Each connector may be connected to one or more CRTCs, or may be clonable by 1272 * another connector if they can share a CRTC. Each connector also has a specific 1273 * position in the broader display (referred to as a 'screen' though it could 1274 * span multiple monitors). 1275 */ 1276 struct drm_connector { 1277 /** @dev: parent DRM device */ 1278 struct drm_device *dev; 1279 /** @kdev: kernel device for sysfs attributes */ 1280 struct device *kdev; 1281 /** @attr: sysfs attributes */ 1282 struct device_attribute *attr; 1283 /** 1284 * @fwnode: associated fwnode supplied by platform firmware 1285 * 1286 * Drivers can set this to associate a fwnode with a connector, drivers 1287 * are expected to get a reference on the fwnode when setting this. 1288 * drm_connector_cleanup() will call fwnode_handle_put() on this. 1289 */ 1290 struct fwnode_handle *fwnode; 1291 1292 /** 1293 * @head: 1294 * 1295 * List of all connectors on a @dev, linked from 1296 * &drm_mode_config.connector_list. Protected by 1297 * &drm_mode_config.connector_list_lock, but please only use 1298 * &drm_connector_list_iter to walk this list. 1299 */ 1300 struct list_head head; 1301 1302 /** 1303 * @global_connector_list_entry: 1304 * 1305 * Connector entry in the global connector-list, used by 1306 * drm_connector_find_by_fwnode(). 1307 */ 1308 struct list_head global_connector_list_entry; 1309 1310 /** @base: base KMS object */ 1311 struct drm_mode_object base; 1312 1313 /** @name: human readable name, can be overwritten by the driver */ 1314 char *name; 1315 1316 /** 1317 * @mutex: Lock for general connector state, but currently only protects 1318 * @registered. Most of the connector state is still protected by 1319 * &drm_mode_config.mutex. 1320 */ 1321 struct mutex mutex; 1322 1323 /** 1324 * @index: Compacted connector index, which matches the position inside 1325 * the mode_config.list for drivers not supporting hot-add/removing. Can 1326 * be used as an array index. It is invariant over the lifetime of the 1327 * connector. 1328 */ 1329 unsigned index; 1330 1331 /** 1332 * @connector_type: 1333 * one of the DRM_MODE_CONNECTOR_<foo> types from drm_mode.h 1334 */ 1335 int connector_type; 1336 /** @connector_type_id: index into connector type enum */ 1337 int connector_type_id; 1338 /** 1339 * @interlace_allowed: 1340 * Can this connector handle interlaced modes? Only used by 1341 * drm_helper_probe_single_connector_modes() for mode filtering. 1342 */ 1343 bool interlace_allowed; 1344 /** 1345 * @doublescan_allowed: 1346 * Can this connector handle doublescan? Only used by 1347 * drm_helper_probe_single_connector_modes() for mode filtering. 1348 */ 1349 bool doublescan_allowed; 1350 /** 1351 * @stereo_allowed: 1352 * Can this connector handle stereo modes? Only used by 1353 * drm_helper_probe_single_connector_modes() for mode filtering. 1354 */ 1355 bool stereo_allowed; 1356 1357 /** 1358 * @ycbcr_420_allowed : This bool indicates if this connector is 1359 * capable of handling YCBCR 420 output. While parsing the EDID 1360 * blocks it's very helpful to know if the source is capable of 1361 * handling YCBCR 420 outputs. 1362 */ 1363 bool ycbcr_420_allowed; 1364 1365 /** 1366 * @registration_state: Is this connector initializing, exposed 1367 * (registered) with userspace, or unregistered? 1368 * 1369 * Protected by @mutex. 1370 */ 1371 enum drm_connector_registration_state registration_state; 1372 1373 /** 1374 * @modes: 1375 * Modes available on this connector (from fill_modes() + user). 1376 * Protected by &drm_mode_config.mutex. 1377 */ 1378 struct list_head modes; 1379 1380 /** 1381 * @status: 1382 * One of the drm_connector_status enums (connected, not, or unknown). 1383 * Protected by &drm_mode_config.mutex. 1384 */ 1385 enum drm_connector_status status; 1386 1387 /** 1388 * @probed_modes: 1389 * These are modes added by probing with DDC or the BIOS, before 1390 * filtering is applied. Used by the probe helpers. Protected by 1391 * &drm_mode_config.mutex. 1392 */ 1393 struct list_head probed_modes; 1394 1395 /** 1396 * @display_info: Display information is filled from EDID information 1397 * when a display is detected. For non hot-pluggable displays such as 1398 * flat panels in embedded systems, the driver should initialize the 1399 * &drm_display_info.width_mm and &drm_display_info.height_mm fields 1400 * with the physical size of the display. 1401 * 1402 * Protected by &drm_mode_config.mutex. 1403 */ 1404 struct drm_display_info display_info; 1405 1406 /** @funcs: connector control functions */ 1407 const struct drm_connector_funcs *funcs; 1408 1409 /** 1410 * @edid_blob_ptr: DRM property containing EDID if present. Protected by 1411 * &drm_mode_config.mutex. This should be updated only by calling 1412 * drm_connector_update_edid_property(). 1413 */ 1414 struct drm_property_blob *edid_blob_ptr; 1415 1416 /** @properties: property tracking for this connector */ 1417 struct drm_object_properties properties; 1418 1419 /** 1420 * @scaling_mode_property: Optional atomic property to control the 1421 * upscaling. See drm_connector_attach_content_protection_property(). 1422 */ 1423 struct drm_property *scaling_mode_property; 1424 1425 /** 1426 * @vrr_capable_property: Optional property to help userspace 1427 * query hardware support for variable refresh rate on a connector. 1428 * connector. Drivers can add the property to a connector by 1429 * calling drm_connector_attach_vrr_capable_property(). 1430 * 1431 * This should be updated only by calling 1432 * drm_connector_set_vrr_capable_property(). 1433 */ 1434 struct drm_property *vrr_capable_property; 1435 1436 /** 1437 * @colorspace_property: Connector property to set the suitable 1438 * colorspace supported by the sink. 1439 */ 1440 struct drm_property *colorspace_property; 1441 1442 /** 1443 * @path_blob_ptr: 1444 * 1445 * DRM blob property data for the DP MST path property. This should only 1446 * be updated by calling drm_connector_set_path_property(). 1447 */ 1448 struct drm_property_blob *path_blob_ptr; 1449 1450 /** 1451 * @max_bpc_property: Default connector property for the max bpc to be 1452 * driven out of the connector. 1453 */ 1454 struct drm_property *max_bpc_property; 1455 1456 /** @privacy_screen: drm_privacy_screen for this connector, or NULL. */ 1457 struct drm_privacy_screen *privacy_screen; 1458 1459 /** @privacy_screen_notifier: privacy-screen notifier_block */ 1460 struct notifier_block privacy_screen_notifier; 1461 1462 /** 1463 * @privacy_screen_sw_state_property: Optional atomic property for the 1464 * connector to control the integrated privacy screen. 1465 */ 1466 struct drm_property *privacy_screen_sw_state_property; 1467 1468 /** 1469 * @privacy_screen_hw_state_property: Optional atomic property for the 1470 * connector to report the actual integrated privacy screen state. 1471 */ 1472 struct drm_property *privacy_screen_hw_state_property; 1473 1474 #define DRM_CONNECTOR_POLL_HPD (1 << 0) 1475 #define DRM_CONNECTOR_POLL_CONNECT (1 << 1) 1476 #define DRM_CONNECTOR_POLL_DISCONNECT (1 << 2) 1477 1478 /** 1479 * @polled: 1480 * 1481 * Connector polling mode, a combination of 1482 * 1483 * DRM_CONNECTOR_POLL_HPD 1484 * The connector generates hotplug events and doesn't need to be 1485 * periodically polled. The CONNECT and DISCONNECT flags must not 1486 * be set together with the HPD flag. 1487 * 1488 * DRM_CONNECTOR_POLL_CONNECT 1489 * Periodically poll the connector for connection. 1490 * 1491 * DRM_CONNECTOR_POLL_DISCONNECT 1492 * Periodically poll the connector for disconnection, without 1493 * causing flickering even when the connector is in use. DACs should 1494 * rarely do this without a lot of testing. 1495 * 1496 * Set to 0 for connectors that don't support connection status 1497 * discovery. 1498 */ 1499 uint8_t polled; 1500 1501 /** 1502 * @dpms: Current dpms state. For legacy drivers the 1503 * &drm_connector_funcs.dpms callback must update this. For atomic 1504 * drivers, this is handled by the core atomic code, and drivers must 1505 * only take &drm_crtc_state.active into account. 1506 */ 1507 int dpms; 1508 1509 /** @helper_private: mid-layer private data */ 1510 const struct drm_connector_helper_funcs *helper_private; 1511 1512 /** @cmdline_mode: mode line parsed from the kernel cmdline for this connector */ 1513 struct drm_cmdline_mode cmdline_mode; 1514 /** @force: a DRM_FORCE_<foo> state for forced mode sets */ 1515 enum drm_connector_force force; 1516 /** @override_edid: has the EDID been overwritten through debugfs for testing? */ 1517 bool override_edid; 1518 /** @epoch_counter: used to detect any other changes in connector, besides status */ 1519 u64 epoch_counter; 1520 1521 /** 1522 * @possible_encoders: Bit mask of encoders that can drive this 1523 * connector, drm_encoder_index() determines the index into the bitfield 1524 * and the bits are set with drm_connector_attach_encoder(). 1525 */ 1526 u32 possible_encoders; 1527 1528 /** 1529 * @encoder: Currently bound encoder driving this connector, if any. 1530 * Only really meaningful for non-atomic drivers. Atomic drivers should 1531 * instead look at &drm_connector_state.best_encoder, and in case they 1532 * need the CRTC driving this output, &drm_connector_state.crtc. 1533 */ 1534 struct drm_encoder *encoder; 1535 1536 #define MAX_ELD_BYTES 128 1537 /** @eld: EDID-like data, if present */ 1538 uint8_t eld[MAX_ELD_BYTES]; 1539 /** @latency_present: AV delay info from ELD, if found */ 1540 bool latency_present[2]; 1541 /** 1542 * @video_latency: Video latency info from ELD, if found. 1543 * [0]: progressive, [1]: interlaced 1544 */ 1545 int video_latency[2]; 1546 /** 1547 * @audio_latency: audio latency info from ELD, if found 1548 * [0]: progressive, [1]: interlaced 1549 */ 1550 int audio_latency[2]; 1551 1552 /** 1553 * @ddc: associated ddc adapter. 1554 * A connector usually has its associated ddc adapter. If a driver uses 1555 * this field, then an appropriate symbolic link is created in connector 1556 * sysfs directory to make it easy for the user to tell which i2c 1557 * adapter is for a particular display. 1558 * 1559 * The field should be set by calling drm_connector_init_with_ddc(). 1560 */ 1561 struct i2c_adapter *ddc; 1562 1563 /** 1564 * @null_edid_counter: track sinks that give us all zeros for the EDID. 1565 * Needed to workaround some HW bugs where we get all 0s 1566 */ 1567 int null_edid_counter; 1568 1569 /** @bad_edid_counter: track sinks that give us an EDID with invalid checksum */ 1570 unsigned bad_edid_counter; 1571 1572 /** 1573 * @edid_corrupt: Indicates whether the last read EDID was corrupt. Used 1574 * in Displayport compliance testing - Displayport Link CTS Core 1.2 1575 * rev1.1 4.2.2.6 1576 */ 1577 bool edid_corrupt; 1578 /** 1579 * @real_edid_checksum: real edid checksum for corrupted edid block. 1580 * Required in Displayport 1.4 compliance testing 1581 * rev1.1 4.2.2.6 1582 */ 1583 u8 real_edid_checksum; 1584 1585 /** @debugfs_entry: debugfs directory for this connector */ 1586 struct dentry *debugfs_entry; 1587 1588 /** 1589 * @state: 1590 * 1591 * Current atomic state for this connector. 1592 * 1593 * This is protected by &drm_mode_config.connection_mutex. Note that 1594 * nonblocking atomic commits access the current connector state without 1595 * taking locks. Either by going through the &struct drm_atomic_state 1596 * pointers, see for_each_oldnew_connector_in_state(), 1597 * for_each_old_connector_in_state() and 1598 * for_each_new_connector_in_state(). Or through careful ordering of 1599 * atomic commit operations as implemented in the atomic helpers, see 1600 * &struct drm_crtc_commit. 1601 */ 1602 struct drm_connector_state *state; 1603 1604 /* DisplayID bits. FIXME: Extract into a substruct? */ 1605 1606 /** 1607 * @tile_blob_ptr: 1608 * 1609 * DRM blob property data for the tile property (used mostly by DP MST). 1610 * This is meant for screens which are driven through separate display 1611 * pipelines represented by &drm_crtc, which might not be running with 1612 * genlocked clocks. For tiled panels which are genlocked, like 1613 * dual-link LVDS or dual-link DSI, the driver should try to not expose 1614 * the tiling and virtualize both &drm_crtc and &drm_plane if needed. 1615 * 1616 * This should only be updated by calling 1617 * drm_connector_set_tile_property(). 1618 */ 1619 struct drm_property_blob *tile_blob_ptr; 1620 1621 /** @has_tile: is this connector connected to a tiled monitor */ 1622 bool has_tile; 1623 /** @tile_group: tile group for the connected monitor */ 1624 struct drm_tile_group *tile_group; 1625 /** @tile_is_single_monitor: whether the tile is one monitor housing */ 1626 bool tile_is_single_monitor; 1627 1628 /** @num_h_tile: number of horizontal tiles in the tile group */ 1629 /** @num_v_tile: number of vertical tiles in the tile group */ 1630 uint8_t num_h_tile, num_v_tile; 1631 /** @tile_h_loc: horizontal location of this tile */ 1632 /** @tile_v_loc: vertical location of this tile */ 1633 uint8_t tile_h_loc, tile_v_loc; 1634 /** @tile_h_size: horizontal size of this tile. */ 1635 /** @tile_v_size: vertical size of this tile. */ 1636 uint16_t tile_h_size, tile_v_size; 1637 1638 /** 1639 * @free_node: 1640 * 1641 * List used only by &drm_connector_list_iter to be able to clean up a 1642 * connector from any context, in conjunction with 1643 * &drm_mode_config.connector_free_work. 1644 */ 1645 struct llist_node free_node; 1646 1647 /** @hdr_sink_metadata: HDR Metadata Information read from sink */ 1648 struct hdr_sink_metadata hdr_sink_metadata; 1649 }; 1650 1651 #define obj_to_connector(x) container_of(x, struct drm_connector, base) 1652 1653 int drm_connector_init(struct drm_device *dev, 1654 struct drm_connector *connector, 1655 const struct drm_connector_funcs *funcs, 1656 int connector_type); 1657 int drm_connector_init_with_ddc(struct drm_device *dev, 1658 struct drm_connector *connector, 1659 const struct drm_connector_funcs *funcs, 1660 int connector_type, 1661 struct i2c_adapter *ddc); 1662 void drm_connector_attach_edid_property(struct drm_connector *connector); 1663 int drm_connector_register(struct drm_connector *connector); 1664 void drm_connector_unregister(struct drm_connector *connector); 1665 int drm_connector_attach_encoder(struct drm_connector *connector, 1666 struct drm_encoder *encoder); 1667 1668 void drm_connector_cleanup(struct drm_connector *connector); 1669 1670 static inline unsigned int drm_connector_index(const struct drm_connector *connector) 1671 { 1672 return connector->index; 1673 } 1674 1675 static inline u32 drm_connector_mask(const struct drm_connector *connector) 1676 { 1677 return 1 << connector->index; 1678 } 1679 1680 /** 1681 * drm_connector_lookup - lookup connector object 1682 * @dev: DRM device 1683 * @file_priv: drm file to check for lease against. 1684 * @id: connector object id 1685 * 1686 * This function looks up the connector object specified by id 1687 * add takes a reference to it. 1688 */ 1689 static inline struct drm_connector *drm_connector_lookup(struct drm_device *dev, 1690 struct drm_file *file_priv, 1691 uint32_t id) 1692 { 1693 struct drm_mode_object *mo; 1694 mo = drm_mode_object_find(dev, file_priv, id, DRM_MODE_OBJECT_CONNECTOR); 1695 return mo ? obj_to_connector(mo) : NULL; 1696 } 1697 1698 /** 1699 * drm_connector_get - acquire a connector reference 1700 * @connector: DRM connector 1701 * 1702 * This function increments the connector's refcount. 1703 */ 1704 static inline void drm_connector_get(struct drm_connector *connector) 1705 { 1706 drm_mode_object_get(&connector->base); 1707 } 1708 1709 /** 1710 * drm_connector_put - release a connector reference 1711 * @connector: DRM connector 1712 * 1713 * This function decrements the connector's reference count and frees the 1714 * object if the reference count drops to zero. 1715 */ 1716 static inline void drm_connector_put(struct drm_connector *connector) 1717 { 1718 drm_mode_object_put(&connector->base); 1719 } 1720 1721 /** 1722 * drm_connector_is_unregistered - has the connector been unregistered from 1723 * userspace? 1724 * @connector: DRM connector 1725 * 1726 * Checks whether or not @connector has been unregistered from userspace. 1727 * 1728 * Returns: 1729 * True if the connector was unregistered, false if the connector is 1730 * registered or has not yet been registered with userspace. 1731 */ 1732 static inline bool 1733 drm_connector_is_unregistered(struct drm_connector *connector) 1734 { 1735 return READ_ONCE(connector->registration_state) == 1736 DRM_CONNECTOR_UNREGISTERED; 1737 } 1738 1739 void drm_connector_oob_hotplug_event(struct fwnode_handle *connector_fwnode); 1740 const char *drm_get_connector_type_name(unsigned int connector_type); 1741 const char *drm_get_connector_status_name(enum drm_connector_status status); 1742 const char *drm_get_subpixel_order_name(enum subpixel_order order); 1743 const char *drm_get_dpms_name(int val); 1744 const char *drm_get_dvi_i_subconnector_name(int val); 1745 const char *drm_get_dvi_i_select_name(int val); 1746 const char *drm_get_tv_subconnector_name(int val); 1747 const char *drm_get_tv_select_name(int val); 1748 const char *drm_get_dp_subconnector_name(int val); 1749 const char *drm_get_content_protection_name(int val); 1750 const char *drm_get_hdcp_content_type_name(int val); 1751 1752 int drm_mode_create_dvi_i_properties(struct drm_device *dev); 1753 void drm_connector_attach_dp_subconnector_property(struct drm_connector *connector); 1754 1755 int drm_mode_create_tv_margin_properties(struct drm_device *dev); 1756 int drm_mode_create_tv_properties(struct drm_device *dev, 1757 unsigned int num_modes, 1758 const char * const modes[]); 1759 void drm_connector_attach_tv_margin_properties(struct drm_connector *conn); 1760 int drm_mode_create_scaling_mode_property(struct drm_device *dev); 1761 int drm_connector_attach_content_type_property(struct drm_connector *dev); 1762 int drm_connector_attach_scaling_mode_property(struct drm_connector *connector, 1763 u32 scaling_mode_mask); 1764 int drm_connector_attach_vrr_capable_property( 1765 struct drm_connector *connector); 1766 int drm_connector_attach_colorspace_property(struct drm_connector *connector); 1767 int drm_connector_attach_hdr_output_metadata_property(struct drm_connector *connector); 1768 bool drm_connector_atomic_hdr_metadata_equal(struct drm_connector_state *old_state, 1769 struct drm_connector_state *new_state); 1770 int drm_mode_create_aspect_ratio_property(struct drm_device *dev); 1771 int drm_mode_create_hdmi_colorspace_property(struct drm_connector *connector); 1772 int drm_mode_create_dp_colorspace_property(struct drm_connector *connector); 1773 int drm_mode_create_content_type_property(struct drm_device *dev); 1774 void drm_hdmi_avi_infoframe_content_type(struct hdmi_avi_infoframe *frame, 1775 const struct drm_connector_state *conn_state); 1776 1777 int drm_mode_create_suggested_offset_properties(struct drm_device *dev); 1778 1779 int drm_connector_set_path_property(struct drm_connector *connector, 1780 const char *path); 1781 int drm_connector_set_tile_property(struct drm_connector *connector); 1782 int drm_connector_update_edid_property(struct drm_connector *connector, 1783 const struct edid *edid); 1784 void drm_connector_set_link_status_property(struct drm_connector *connector, 1785 uint64_t link_status); 1786 void drm_connector_set_vrr_capable_property( 1787 struct drm_connector *connector, bool capable); 1788 int drm_connector_set_panel_orientation( 1789 struct drm_connector *connector, 1790 enum drm_panel_orientation panel_orientation); 1791 int drm_connector_set_panel_orientation_with_quirk( 1792 struct drm_connector *connector, 1793 enum drm_panel_orientation panel_orientation, 1794 int width, int height); 1795 int drm_connector_attach_max_bpc_property(struct drm_connector *connector, 1796 int min, int max); 1797 void drm_connector_create_privacy_screen_properties(struct drm_connector *conn); 1798 void drm_connector_attach_privacy_screen_properties(struct drm_connector *conn); 1799 void drm_connector_attach_privacy_screen_provider( 1800 struct drm_connector *connector, struct drm_privacy_screen *priv); 1801 void drm_connector_update_privacy_screen(const struct drm_connector_state *connector_state); 1802 1803 /** 1804 * struct drm_tile_group - Tile group metadata 1805 * @refcount: reference count 1806 * @dev: DRM device 1807 * @id: tile group id exposed to userspace 1808 * @group_data: Sink-private data identifying this group 1809 * 1810 * @group_data corresponds to displayid vend/prod/serial for external screens 1811 * with an EDID. 1812 */ 1813 struct drm_tile_group { 1814 struct kref refcount; 1815 struct drm_device *dev; 1816 int id; 1817 u8 group_data[8]; 1818 }; 1819 1820 struct drm_tile_group *drm_mode_create_tile_group(struct drm_device *dev, 1821 const char topology[8]); 1822 struct drm_tile_group *drm_mode_get_tile_group(struct drm_device *dev, 1823 const char topology[8]); 1824 void drm_mode_put_tile_group(struct drm_device *dev, 1825 struct drm_tile_group *tg); 1826 1827 /** 1828 * struct drm_connector_list_iter - connector_list iterator 1829 * 1830 * This iterator tracks state needed to be able to walk the connector_list 1831 * within struct drm_mode_config. Only use together with 1832 * drm_connector_list_iter_begin(), drm_connector_list_iter_end() and 1833 * drm_connector_list_iter_next() respectively the convenience macro 1834 * drm_for_each_connector_iter(). 1835 * 1836 * Note that the return value of drm_connector_list_iter_next() is only valid 1837 * up to the next drm_connector_list_iter_next() or 1838 * drm_connector_list_iter_end() call. If you want to use the connector later, 1839 * then you need to grab your own reference first using drm_connector_get(). 1840 */ 1841 struct drm_connector_list_iter { 1842 /* private: */ 1843 struct drm_device *dev; 1844 struct drm_connector *conn; 1845 }; 1846 1847 void drm_connector_list_iter_begin(struct drm_device *dev, 1848 struct drm_connector_list_iter *iter); 1849 struct drm_connector * 1850 drm_connector_list_iter_next(struct drm_connector_list_iter *iter); 1851 void drm_connector_list_iter_end(struct drm_connector_list_iter *iter); 1852 1853 bool drm_connector_has_possible_encoder(struct drm_connector *connector, 1854 struct drm_encoder *encoder); 1855 1856 /** 1857 * drm_for_each_connector_iter - connector_list iterator macro 1858 * @connector: &struct drm_connector pointer used as cursor 1859 * @iter: &struct drm_connector_list_iter 1860 * 1861 * Note that @connector is only valid within the list body, if you want to use 1862 * @connector after calling drm_connector_list_iter_end() then you need to grab 1863 * your own reference first using drm_connector_get(). 1864 */ 1865 #define drm_for_each_connector_iter(connector, iter) \ 1866 while ((connector = drm_connector_list_iter_next(iter))) 1867 1868 /** 1869 * drm_connector_for_each_possible_encoder - iterate connector's possible encoders 1870 * @connector: &struct drm_connector pointer 1871 * @encoder: &struct drm_encoder pointer used as cursor 1872 */ 1873 #define drm_connector_for_each_possible_encoder(connector, encoder) \ 1874 drm_for_each_encoder_mask(encoder, (connector)->dev, \ 1875 (connector)->possible_encoders) 1876 1877 #endif 1878