LCOV - code coverage report
Current view: top level - include/drm - drm_connector.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 6 0.0 %
Date: 2023-07-19 18:55:55 Functions: 0 0 -

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

Generated by: LCOV version 1.14