diff mbox

[17/20] drm: Update connector documentation

Message ID 1470750091-16627-18-git-send-email-daniel.vetter@ffwll.ch (mailing list archive)
State New, archived
Headers show

Commit Message

Daniel Vetter Aug. 9, 2016, 1:41 p.m. UTC
- Shuffle docs from drm-kms.rst into the structure docs where it makes
  sense.
- Put the remaining bits into a new overview section.

One thing I've changed is around probing: Old docs says that you
_must_ use the probe helpers, which isn't correct. Helpers are always
optional.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
 Documentation/gpu/drm-kms.rst   | 170 ++--------------------------------------
 drivers/gpu/drm/drm_connector.c |  31 ++++++++
 include/drm/drm_connector.h     |  55 ++++++++++++-
 3 files changed, 92 insertions(+), 164 deletions(-)

Comments

Sean Paul Aug. 10, 2016, 3:14 p.m. UTC | #1
On Tue, Aug 9, 2016 at 9:41 AM, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> - Shuffle docs from drm-kms.rst into the structure docs where it makes
>   sense.
> - Put the remaining bits into a new overview section.
>
> One thing I've changed is around probing: Old docs says that you
> _must_ use the probe helpers, which isn't correct. Helpers are always
> optional.
>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> ---
>  Documentation/gpu/drm-kms.rst   | 170 ++--------------------------------------
>  drivers/gpu/drm/drm_connector.c |  31 ++++++++
>  include/drm/drm_connector.h     |  55 ++++++++++++-
>  3 files changed, 92 insertions(+), 164 deletions(-)
>
> diff --git a/Documentation/gpu/drm-kms.rst b/Documentation/gpu/drm-kms.rst
> index 6e7ab57924f0..fa948b4e029b 100644
> --- a/Documentation/gpu/drm-kms.rst
> +++ b/Documentation/gpu/drm-kms.rst
> @@ -110,8 +110,14 @@ Display Modes Function Reference
>  .. kernel-doc:: drivers/gpu/drm/drm_modes.c
>     :export:
>
> -Connector Display Sink Abstraction
> -==================================
> +Connector Abstraction
> +=====================
> +
> +.. kernel-doc:: drivers/gpu/drm/drm_connector.c
> +   :doc: overview
> +
> +Connector Functions Reference
> +-----------------------------
>
>  .. kernel-doc:: include/drm/drm_connector.h
>     :internal:
> @@ -232,166 +238,6 @@ encoders unattached at initialization time. Applications (or the fbdev
>  compatibility layer when implemented) are responsible for attaching the
>  encoders they want to use to a CRTC.
>
> -Connectors (:c:type:`struct drm_connector <drm_connector>`)
> ------------------------------------------------------------
> -
> -A connector is the final destination for pixel data on a device, and
> -usually connects directly to an external display device like a monitor
> -or laptop panel. A connector can only be attached to one encoder at a
> -time. The connector is also the structure where information about the
> -attached display is kept, so it contains fields for display data, EDID
> -data, DPMS & connection status, and information about modes supported on
> -the attached displays.
> -
> -Connector Initialization
> -~~~~~~~~~~~~~~~~~~~~~~~~
> -
> -Finally a KMS driver must create, initialize, register and attach at
> -least one :c:type:`struct drm_connector <drm_connector>`
> -instance. The instance is created as other KMS objects and initialized
> -by setting the following fields.
> -
> -interlace_allowed
> -    Whether the connector can handle interlaced modes.
> -
> -doublescan_allowed
> -    Whether the connector can handle doublescan.
> -
> -display_info
> -    Display information is filled from EDID information when a display
> -    is detected. For non hot-pluggable displays such as flat panels in
> -    embedded systems, the driver should initialize the
> -    display_info.width_mm and display_info.height_mm fields with the
> -    physical size of the display.
> -
> -polled
> -    Connector polling mode, a combination of
> -
> -    DRM_CONNECTOR_POLL_HPD
> -        The connector generates hotplug events and doesn't need to be
> -        periodically polled. The CONNECT and DISCONNECT flags must not
> -        be set together with the HPD flag.
> -
> -    DRM_CONNECTOR_POLL_CONNECT
> -        Periodically poll the connector for connection.
> -
> -    DRM_CONNECTOR_POLL_DISCONNECT
> -        Periodically poll the connector for disconnection.
> -
> -    Set to 0 for connectors that don't support connection status
> -    discovery.
> -
> -The connector is then registered with a call to
> -:c:func:`drm_connector_init()` with a pointer to the connector
> -functions and a connector type, and exposed through sysfs with a call to
> -:c:func:`drm_connector_register()`.
> -
> -Supported connector types are
> -
> --  DRM_MODE_CONNECTOR_VGA
> --  DRM_MODE_CONNECTOR_DVII
> --  DRM_MODE_CONNECTOR_DVID
> --  DRM_MODE_CONNECTOR_DVIA
> --  DRM_MODE_CONNECTOR_Composite
> --  DRM_MODE_CONNECTOR_SVIDEO
> --  DRM_MODE_CONNECTOR_LVDS
> --  DRM_MODE_CONNECTOR_Component
> --  DRM_MODE_CONNECTOR_9PinDIN
> --  DRM_MODE_CONNECTOR_DisplayPort
> --  DRM_MODE_CONNECTOR_HDMIA
> --  DRM_MODE_CONNECTOR_HDMIB
> --  DRM_MODE_CONNECTOR_TV
> --  DRM_MODE_CONNECTOR_eDP
> --  DRM_MODE_CONNECTOR_VIRTUAL
> -
> -Connectors must be attached to an encoder to be used. For devices that
> -map connectors to encoders 1:1, the connector should be attached at
> -initialization time with a call to
> -:c:func:`drm_mode_connector_attach_encoder()`. The driver must
> -also set the :c:type:`struct drm_connector <drm_connector>`
> -encoder field to point to the attached encoder.
> -
> -Finally, drivers must initialize the connectors state change detection
> -with a call to :c:func:`drm_kms_helper_poll_init()`. If at least
> -one connector is pollable but can't generate hotplug interrupts
> -(indicated by the DRM_CONNECTOR_POLL_CONNECT and
> -DRM_CONNECTOR_POLL_DISCONNECT connector flags), a delayed work will
> -automatically be queued to periodically poll for changes. Connectors
> -that can generate hotplug interrupts must be marked with the
> -DRM_CONNECTOR_POLL_HPD flag instead, and their interrupt handler must
> -call :c:func:`drm_helper_hpd_irq_event()`. The function will
> -queue a delayed work to check the state of all connectors, but no
> -periodic polling will be done.
> -
> -Connector Operations
> -~~~~~~~~~~~~~~~~~~~~
> -
> -    **Note**
> -
> -    Unless otherwise state, all operations are mandatory.
> -
> -DPMS
> -''''
> -
> -void (\*dpms)(struct drm_connector \*connector, int mode);
> -The DPMS operation sets the power state of a connector. The mode
> -argument is one of
> -
> --  DRM_MODE_DPMS_ON
> -
> --  DRM_MODE_DPMS_STANDBY
> -
> --  DRM_MODE_DPMS_SUSPEND
> -
> --  DRM_MODE_DPMS_OFF
> -
> -In all but DPMS_ON mode the encoder to which the connector is attached
> -should put the display in low-power mode by driving its signals
> -appropriately. If more than one connector is attached to the encoder
> -care should be taken not to change the power state of other displays as
> -a side effect. Low-power mode should be propagated to the encoders and
> -CRTCs when all related connectors are put in low-power mode.
> -
> -Modes
> -'''''
> -
> -int (\*fill_modes)(struct drm_connector \*connector, uint32_t
> -max_width, uint32_t max_height);
> -Fill the mode list with all supported modes for the connector. If the
> -``max_width`` and ``max_height`` arguments are non-zero, the
> -implementation must ignore all modes wider than ``max_width`` or higher
> -than ``max_height``.
> -
> -The connector must also fill in this operation its display_info
> -width_mm and height_mm fields with the connected display physical size
> -in millimeters. The fields should be set to 0 if the value isn't known
> -or is not applicable (for instance for projector devices).
> -
> -Connection Status
> -'''''''''''''''''
> -
> -The connection status is updated through polling or hotplug events when
> -supported (see ?). The status value is reported to userspace through
> -ioctls and must not be used inside the driver, as it only gets
> -initialized by a call to :c:func:`drm_mode_getconnector()` from
> -userspace.
> -
> -enum drm_connector_status (\*detect)(struct drm_connector
> -\*connector, bool force);
> -Check to see if anything is attached to the connector. The ``force``
> -parameter is set to false whilst polling or to true when checking the
> -connector due to user request. ``force`` can be used by the driver to
> -avoid expensive, destructive operations during automated probing.
> -
> -Return connector_status_connected if something is connected to the
> -connector, connector_status_disconnected if nothing is connected and
> -connector_status_unknown if the connection state isn't known.
> -
> -Drivers should only return connector_status_connected if the
> -connection status has really been probed as connected. Connectors that
> -can't detect the connection status, or failed connection status probes,
> -should return connector_status_unknown.
> -
>  Cleanup
>  -------
>
> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
> index 99ece6758061..cedc3bc4e10b 100644
> --- a/drivers/gpu/drm/drm_connector.c
> +++ b/drivers/gpu/drm/drm_connector.c
> @@ -27,6 +27,37 @@
>  #include "drm_crtc_internal.h"
>  #include "drm_internal.h"
>
> +/**
> + * DOC: overview
> + *
> + * In DRM connectors are the general abstraction for display sinks, and include
> + * als fixed panels or anything else that can display pixels in some form. As
> + * opposed to all other KMS objects representing hardware (like CRTC, encoder or
> + * plane abstractions) connectors can be hotplugged and unplugged at runtime.
> + * Hence they are reference-counted using drm_connector_reference() and
> + * drm_connector_unreference().
> + *
> + * KMS driver must create, initialize, register and attach at a struct
> + * &drm_connector for each such sink. The instance is created as other KMS
> + * objects and initialized by setting the following fields.
> + *
> + * The connector is then registered with a call to drm_connector_init() with a
> + * pointer to the connector functions and a connector type, and exposed through
> + * sysfs with a call to drm_connector_register().
> + *
> + * Connectors must be attached to an encoder to be used. For devices that map
> + * connectors to encoders 1:1, the connector should be attached at
> + * initialization time with a call to drm_mode_connector_attach_encoder(). The
> + * driver must also set the struct &drm_connector encoder field to point to the
> + * attached encoder.
> + *
> + * For connectors which are not fixed (like built-in panels) the driver needs to
> + * support hotplug notifications. The simplest way to do that is by using the
> + * probe helpers, see drm_kms_helper_poll_init() for connectors which don't have
> + * hardware support for hotplug interrupts. Connectors with hardware hotplug
> + * support can instead use e.g. drm_helper_hpd_irq_event().
> + */
> +
>  struct drm_conn_prop_enum_list {
>         int type;
>         const char *name;
> diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
> index ec2bea0b1b38..c9b275cd4085 100644
> --- a/include/drm/drm_connector.h
> +++ b/include/drm/drm_connector.h
> @@ -42,9 +42,36 @@ enum drm_connector_force {
>         DRM_FORCE_ON_DIGITAL, /* for DVI-I use digital connector */
>  };
>
> +/**
> + * enum drm_connector_status - status for a &drm_connector
> + *
> + * This enum is used to track the connector status. There are no separate
> + * #defines for the uapi!
> + */
>  enum drm_connector_status {
> +       /**
> +        * @connector_status_connected: The connector is definitely connected to
> +        * a sink device, and can be enabled.
> +        */
>         connector_status_connected = 1,
> +       /**
> +        * @connector_status_disconnected: The connector isn't connected to a
> +        * sink device which can be autodetect. For digital outputs like DP or
> +        * HDMI (which can be realiable probed) this means there's really
> +        * nothing there. It is driver-dependent whether a connector with this
> +        * status can be lit up or not.
> +        */
>         connector_status_disconnected = 2,
> +       /**
> +        * @connector_status_unknown: The connector's status could not be
> +        * reliably detected. This happens when probing would either cause
> +        * flicker (like load-detection when the connector is in use), or when a
> +        * hardware resource isn't available (like when load-detection needs a
> +        * free CRTC). It should be possible to light up the connector with one
> +        * of the listed fallback modes. For default configuration userspace
> +        * should only try to light up connectors with unknown status when
> +        * there's not connector with @connector_status_connected.
> +        */
>         connector_status_unknown = 3,
>  };
>
> @@ -416,11 +443,9 @@ struct drm_cmdline_mode {
>   * @modes: modes available on this connector (from fill_modes() + user)
>   * @status: one of the drm_connector_status enums (connected, not, or unknown)
>   * @probed_modes: list of modes derived directly from the display
> - * @display_info: information about attached display (e.g. from EDID)
>   * @funcs: connector control functions
>   * @edid_blob_ptr: DRM property containing EDID if present
>   * @properties: property tracking for this connector
> - * @polled: a DRM_CONNECTOR_POLL_<foo> value for core driven polling
>   * @dpms: current dpms state
>   * @helper_private: mid-layer private data
>   * @cmdline_mode: mode line parsed from the kernel cmdline for this connector
> @@ -485,6 +510,13 @@ struct drm_connector {
>         /* these are modes added by probing with DDC or the BIOS */
>         struct list_head probed_modes;
>
> +       /**
> +        * @display_info: Display information is filled from EDID information
> +        * when a display is detected. For non hot-pluggable displays such as
> +        * flat panels in embedded systems, the driver should initialize the
> +        * display_info.width_mm and display_info.height_mm fields with the
> +        * physical size of the display.
> +        */
>         struct drm_display_info display_info;
>         const struct drm_connector_funcs *funcs;
>
> @@ -519,6 +551,25 @@ struct drm_connector {
>  /* DACs should rarely do this without a lot of testing */
>  #define DRM_CONNECTOR_POLL_DISCONNECT (1 << 2)
>
> +       /**
> +        * @polled:
> +        *
> +        * Connector polling mode, a combination of
> +        *
> +        * DRM_CONNECTOR_POLL_HPD
> +        *     The connector generates hotplug events and doesn't need to be
> +        *     periodically polled. The CONNECT and DISCONNECT flags must not
> +        *     be set together with the HPD flag.
> +        *
> +        * DRM_CONNECTOR_POLL_CONNECT
> +        *     Periodically poll the connector for connection.
> +        *
> +        * DRM_CONNECTOR_POLL_DISCONNECT
> +        *     Periodically poll the connector for disconnection.
> +        *
> +        * Set to 0 for connectors that don't support connection status
> +        * discovery.
> +        */
>         uint8_t polled; /* DRM_CONNECTOR_POLL_* */

The comment after polled is redundant now

>
>         /* requested DPMS state */
> --
> 2.8.1
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
diff mbox

Patch

diff --git a/Documentation/gpu/drm-kms.rst b/Documentation/gpu/drm-kms.rst
index 6e7ab57924f0..fa948b4e029b 100644
--- a/Documentation/gpu/drm-kms.rst
+++ b/Documentation/gpu/drm-kms.rst
@@ -110,8 +110,14 @@  Display Modes Function Reference
 .. kernel-doc:: drivers/gpu/drm/drm_modes.c
    :export:
 
-Connector Display Sink Abstraction
-==================================
+Connector Abstraction
+=====================
+
+.. kernel-doc:: drivers/gpu/drm/drm_connector.c
+   :doc: overview
+
+Connector Functions Reference
+-----------------------------
 
 .. kernel-doc:: include/drm/drm_connector.h
    :internal:
@@ -232,166 +238,6 @@  encoders unattached at initialization time. Applications (or the fbdev
 compatibility layer when implemented) are responsible for attaching the
 encoders they want to use to a CRTC.
 
-Connectors (:c:type:`struct drm_connector <drm_connector>`)
------------------------------------------------------------
-
-A connector is the final destination for pixel data on a device, and
-usually connects directly to an external display device like a monitor
-or laptop panel. A connector can only be attached to one encoder at a
-time. The connector is also the structure where information about the
-attached display is kept, so it contains fields for display data, EDID
-data, DPMS & connection status, and information about modes supported on
-the attached displays.
-
-Connector Initialization
-~~~~~~~~~~~~~~~~~~~~~~~~
-
-Finally a KMS driver must create, initialize, register and attach at
-least one :c:type:`struct drm_connector <drm_connector>`
-instance. The instance is created as other KMS objects and initialized
-by setting the following fields.
-
-interlace_allowed
-    Whether the connector can handle interlaced modes.
-
-doublescan_allowed
-    Whether the connector can handle doublescan.
-
-display_info
-    Display information is filled from EDID information when a display
-    is detected. For non hot-pluggable displays such as flat panels in
-    embedded systems, the driver should initialize the
-    display_info.width_mm and display_info.height_mm fields with the
-    physical size of the display.
-
-polled
-    Connector polling mode, a combination of
-
-    DRM_CONNECTOR_POLL_HPD
-        The connector generates hotplug events and doesn't need to be
-        periodically polled. The CONNECT and DISCONNECT flags must not
-        be set together with the HPD flag.
-
-    DRM_CONNECTOR_POLL_CONNECT
-        Periodically poll the connector for connection.
-
-    DRM_CONNECTOR_POLL_DISCONNECT
-        Periodically poll the connector for disconnection.
-
-    Set to 0 for connectors that don't support connection status
-    discovery.
-
-The connector is then registered with a call to
-:c:func:`drm_connector_init()` with a pointer to the connector
-functions and a connector type, and exposed through sysfs with a call to
-:c:func:`drm_connector_register()`.
-
-Supported connector types are
-
--  DRM_MODE_CONNECTOR_VGA
--  DRM_MODE_CONNECTOR_DVII
--  DRM_MODE_CONNECTOR_DVID
--  DRM_MODE_CONNECTOR_DVIA
--  DRM_MODE_CONNECTOR_Composite
--  DRM_MODE_CONNECTOR_SVIDEO
--  DRM_MODE_CONNECTOR_LVDS
--  DRM_MODE_CONNECTOR_Component
--  DRM_MODE_CONNECTOR_9PinDIN
--  DRM_MODE_CONNECTOR_DisplayPort
--  DRM_MODE_CONNECTOR_HDMIA
--  DRM_MODE_CONNECTOR_HDMIB
--  DRM_MODE_CONNECTOR_TV
--  DRM_MODE_CONNECTOR_eDP
--  DRM_MODE_CONNECTOR_VIRTUAL
-
-Connectors must be attached to an encoder to be used. For devices that
-map connectors to encoders 1:1, the connector should be attached at
-initialization time with a call to
-:c:func:`drm_mode_connector_attach_encoder()`. The driver must
-also set the :c:type:`struct drm_connector <drm_connector>`
-encoder field to point to the attached encoder.
-
-Finally, drivers must initialize the connectors state change detection
-with a call to :c:func:`drm_kms_helper_poll_init()`. If at least
-one connector is pollable but can't generate hotplug interrupts
-(indicated by the DRM_CONNECTOR_POLL_CONNECT and
-DRM_CONNECTOR_POLL_DISCONNECT connector flags), a delayed work will
-automatically be queued to periodically poll for changes. Connectors
-that can generate hotplug interrupts must be marked with the
-DRM_CONNECTOR_POLL_HPD flag instead, and their interrupt handler must
-call :c:func:`drm_helper_hpd_irq_event()`. The function will
-queue a delayed work to check the state of all connectors, but no
-periodic polling will be done.
-
-Connector Operations
-~~~~~~~~~~~~~~~~~~~~
-
-    **Note**
-
-    Unless otherwise state, all operations are mandatory.
-
-DPMS
-''''
-
-void (\*dpms)(struct drm_connector \*connector, int mode);
-The DPMS operation sets the power state of a connector. The mode
-argument is one of
-
--  DRM_MODE_DPMS_ON
-
--  DRM_MODE_DPMS_STANDBY
-
--  DRM_MODE_DPMS_SUSPEND
-
--  DRM_MODE_DPMS_OFF
-
-In all but DPMS_ON mode the encoder to which the connector is attached
-should put the display in low-power mode by driving its signals
-appropriately. If more than one connector is attached to the encoder
-care should be taken not to change the power state of other displays as
-a side effect. Low-power mode should be propagated to the encoders and
-CRTCs when all related connectors are put in low-power mode.
-
-Modes
-'''''
-
-int (\*fill_modes)(struct drm_connector \*connector, uint32_t
-max_width, uint32_t max_height);
-Fill the mode list with all supported modes for the connector. If the
-``max_width`` and ``max_height`` arguments are non-zero, the
-implementation must ignore all modes wider than ``max_width`` or higher
-than ``max_height``.
-
-The connector must also fill in this operation its display_info
-width_mm and height_mm fields with the connected display physical size
-in millimeters. The fields should be set to 0 if the value isn't known
-or is not applicable (for instance for projector devices).
-
-Connection Status
-'''''''''''''''''
-
-The connection status is updated through polling or hotplug events when
-supported (see ?). The status value is reported to userspace through
-ioctls and must not be used inside the driver, as it only gets
-initialized by a call to :c:func:`drm_mode_getconnector()` from
-userspace.
-
-enum drm_connector_status (\*detect)(struct drm_connector
-\*connector, bool force);
-Check to see if anything is attached to the connector. The ``force``
-parameter is set to false whilst polling or to true when checking the
-connector due to user request. ``force`` can be used by the driver to
-avoid expensive, destructive operations during automated probing.
-
-Return connector_status_connected if something is connected to the
-connector, connector_status_disconnected if nothing is connected and
-connector_status_unknown if the connection state isn't known.
-
-Drivers should only return connector_status_connected if the
-connection status has really been probed as connected. Connectors that
-can't detect the connection status, or failed connection status probes,
-should return connector_status_unknown.
-
 Cleanup
 -------
 
diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
index 99ece6758061..cedc3bc4e10b 100644
--- a/drivers/gpu/drm/drm_connector.c
+++ b/drivers/gpu/drm/drm_connector.c
@@ -27,6 +27,37 @@ 
 #include "drm_crtc_internal.h"
 #include "drm_internal.h"
 
+/**
+ * DOC: overview
+ *
+ * In DRM connectors are the general abstraction for display sinks, and include
+ * als fixed panels or anything else that can display pixels in some form. As
+ * opposed to all other KMS objects representing hardware (like CRTC, encoder or
+ * plane abstractions) connectors can be hotplugged and unplugged at runtime.
+ * Hence they are reference-counted using drm_connector_reference() and
+ * drm_connector_unreference().
+ *
+ * KMS driver must create, initialize, register and attach at a struct
+ * &drm_connector for each such sink. The instance is created as other KMS
+ * objects and initialized by setting the following fields.
+ *
+ * The connector is then registered with a call to drm_connector_init() with a
+ * pointer to the connector functions and a connector type, and exposed through
+ * sysfs with a call to drm_connector_register().
+ *
+ * Connectors must be attached to an encoder to be used. For devices that map
+ * connectors to encoders 1:1, the connector should be attached at
+ * initialization time with a call to drm_mode_connector_attach_encoder(). The
+ * driver must also set the struct &drm_connector encoder field to point to the
+ * attached encoder.
+ *
+ * For connectors which are not fixed (like built-in panels) the driver needs to
+ * support hotplug notifications. The simplest way to do that is by using the
+ * probe helpers, see drm_kms_helper_poll_init() for connectors which don't have
+ * hardware support for hotplug interrupts. Connectors with hardware hotplug
+ * support can instead use e.g. drm_helper_hpd_irq_event().
+ */
+
 struct drm_conn_prop_enum_list {
 	int type;
 	const char *name;
diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
index ec2bea0b1b38..c9b275cd4085 100644
--- a/include/drm/drm_connector.h
+++ b/include/drm/drm_connector.h
@@ -42,9 +42,36 @@  enum drm_connector_force {
 	DRM_FORCE_ON_DIGITAL, /* for DVI-I use digital connector */
 };
 
+/**
+ * enum drm_connector_status - status for a &drm_connector
+ *
+ * This enum is used to track the connector status. There are no separate
+ * #defines for the uapi!
+ */
 enum drm_connector_status {
+	/**
+	 * @connector_status_connected: The connector is definitely connected to
+	 * a sink device, and can be enabled.
+	 */
 	connector_status_connected = 1,
+	/**
+	 * @connector_status_disconnected: The connector isn't connected to a
+	 * sink device which can be autodetect. For digital outputs like DP or
+	 * HDMI (which can be realiable probed) this means there's really
+	 * nothing there. It is driver-dependent whether a connector with this
+	 * status can be lit up or not.
+	 */
 	connector_status_disconnected = 2,
+	/**
+	 * @connector_status_unknown: The connector's status could not be
+	 * reliably detected. This happens when probing would either cause
+	 * flicker (like load-detection when the connector is in use), or when a
+	 * hardware resource isn't available (like when load-detection needs a
+	 * free CRTC). It should be possible to light up the connector with one
+	 * of the listed fallback modes. For default configuration userspace
+	 * should only try to light up connectors with unknown status when
+	 * there's not connector with @connector_status_connected.
+	 */
 	connector_status_unknown = 3,
 };
 
@@ -416,11 +443,9 @@  struct drm_cmdline_mode {
  * @modes: modes available on this connector (from fill_modes() + user)
  * @status: one of the drm_connector_status enums (connected, not, or unknown)
  * @probed_modes: list of modes derived directly from the display
- * @display_info: information about attached display (e.g. from EDID)
  * @funcs: connector control functions
  * @edid_blob_ptr: DRM property containing EDID if present
  * @properties: property tracking for this connector
- * @polled: a DRM_CONNECTOR_POLL_<foo> value for core driven polling
  * @dpms: current dpms state
  * @helper_private: mid-layer private data
  * @cmdline_mode: mode line parsed from the kernel cmdline for this connector
@@ -485,6 +510,13 @@  struct drm_connector {
 	/* these are modes added by probing with DDC or the BIOS */
 	struct list_head probed_modes;
 
+	/**
+	 * @display_info: Display information is filled from EDID information
+	 * when a display is detected. For non hot-pluggable displays such as
+	 * flat panels in embedded systems, the driver should initialize the
+	 * display_info.width_mm and display_info.height_mm fields with the
+	 * physical size of the display.
+	 */
 	struct drm_display_info display_info;
 	const struct drm_connector_funcs *funcs;
 
@@ -519,6 +551,25 @@  struct drm_connector {
 /* DACs should rarely do this without a lot of testing */
 #define DRM_CONNECTOR_POLL_DISCONNECT (1 << 2)
 
+	/**
+	 * @polled:
+	 *
+	 * Connector polling mode, a combination of
+	 *
+	 * DRM_CONNECTOR_POLL_HPD
+	 *     The connector generates hotplug events and doesn't need to be
+	 *     periodically polled. The CONNECT and DISCONNECT flags must not
+	 *     be set together with the HPD flag.
+	 *
+	 * DRM_CONNECTOR_POLL_CONNECT
+	 *     Periodically poll the connector for connection.
+	 *
+	 * DRM_CONNECTOR_POLL_DISCONNECT
+	 *     Periodically poll the connector for disconnection.
+	 *
+	 * Set to 0 for connectors that don't support connection status
+	 * discovery.
+	 */
 	uint8_t polled; /* DRM_CONNECTOR_POLL_* */
 
 	/* requested DPMS state */