|
@@ -129,9 +129,39 @@ void drm_kms_helper_poll_enable_locked(struct drm_device *dev)
|
|
|
}
|
|
|
EXPORT_SYMBOL(drm_kms_helper_poll_enable_locked);
|
|
|
|
|
|
-
|
|
|
-static int drm_helper_probe_single_connector_modes_merge_bits(struct drm_connector *connector,
|
|
|
- uint32_t maxX, uint32_t maxY, bool merge_type_bits)
|
|
|
+/**
|
|
|
+ * drm_helper_probe_single_connector_modes - get complete set of display modes
|
|
|
+ * @connector: connector to probe
|
|
|
+ * @maxX: max width for modes
|
|
|
+ * @maxY: max height for modes
|
|
|
+ *
|
|
|
+ * Based on the helper callbacks implemented by @connector in struct
|
|
|
+ * &drm_connector_helper_funcs try to detect all valid modes. Modes will first
|
|
|
+ * be added to the connector's probed_modes list, then culled (based on validity
|
|
|
+ * and the @maxX, @maxY parameters) and put into the normal modes list.
|
|
|
+ *
|
|
|
+ * Intended to be used as a generic implementation of the ->fill_modes()
|
|
|
+ * @connector vfunc for drivers that use the CRTC helpers for output mode
|
|
|
+ * filtering and detection.
|
|
|
+ *
|
|
|
+ * If the helper operation returns no mode, and if the connector status is
|
|
|
+ * connector_status_connected, standard VESA DMT modes up to 1024x768 are
|
|
|
+ * automatically added to the modes list by a call to
|
|
|
+ * drm_add_modes_noedid().
|
|
|
+ *
|
|
|
+ * The function then filters out modes larger than @maxX and maxY if specified.
|
|
|
+ * It finally calls the optional connector ->mode_valid() helper operation for each
|
|
|
+ * mode in the probed list to check whether the mode is valid for the connector.
|
|
|
+ *
|
|
|
+ * Compared to drm_helper_probe_single_connector_modes_nomerge() this function
|
|
|
+ * merged the mode bits for the preferred mode, as a hack to work around some
|
|
|
+ * quirky issues on funky hardware.
|
|
|
+ *
|
|
|
+ * Returns:
|
|
|
+ * The number of modes found on @connector.
|
|
|
+ */
|
|
|
+int drm_helper_probe_single_connector_modes(struct drm_connector *connector,
|
|
|
+ uint32_t maxX, uint32_t maxY)
|
|
|
{
|
|
|
struct drm_device *dev = connector->dev;
|
|
|
struct drm_display_mode *mode;
|
|
@@ -223,7 +253,7 @@ static int drm_helper_probe_single_connector_modes_merge_bits(struct drm_connect
|
|
|
if (count == 0)
|
|
|
goto prune;
|
|
|
|
|
|
- drm_mode_connector_list_update(connector, merge_type_bits);
|
|
|
+ drm_mode_connector_list_update(connector);
|
|
|
|
|
|
if (connector->interlace_allowed)
|
|
|
mode_flags |= DRM_MODE_FLAG_INTERLACE;
|
|
@@ -267,64 +297,8 @@ prune:
|
|
|
|
|
|
return count;
|
|
|
}
|
|
|
-
|
|
|
-/**
|
|
|
- * drm_helper_probe_single_connector_modes - get complete set of display modes
|
|
|
- * @connector: connector to probe
|
|
|
- * @maxX: max width for modes
|
|
|
- * @maxY: max height for modes
|
|
|
- *
|
|
|
- * Based on the helper callbacks implemented by @connector in struct
|
|
|
- * &drm_connector_helper_funcs try to detect all valid modes. Modes will first
|
|
|
- * be added to the connector's probed_modes list, then culled (based on validity
|
|
|
- * and the @maxX, @maxY parameters) and put into the normal modes list.
|
|
|
- *
|
|
|
- * Intended to be used as a generic implementation of the ->fill_modes()
|
|
|
- * @connector vfunc for drivers that use the CRTC helpers for output mode
|
|
|
- * filtering and detection.
|
|
|
- *
|
|
|
- * If the helper operation returns no mode, and if the connector status is
|
|
|
- * connector_status_connected, standard VESA DMT modes up to 1024x768 are
|
|
|
- * automatically added to the modes list by a call to
|
|
|
- * drm_add_modes_noedid().
|
|
|
- *
|
|
|
- * The function then filters out modes larger than @maxX and maxY if specified.
|
|
|
- * It finally calls the optional connector ->mode_valid() helper operation for each
|
|
|
- * mode in the probed list to check whether the mode is valid for the connector.
|
|
|
- *
|
|
|
- * Compared to drm_helper_probe_single_connector_modes_nomerge() this function
|
|
|
- * merged the mode bits for the preferred mode, as a hack to work around some
|
|
|
- * quirky issues on funky hardware.
|
|
|
- *
|
|
|
- * Returns:
|
|
|
- * The number of modes found on @connector.
|
|
|
- */
|
|
|
-int drm_helper_probe_single_connector_modes(struct drm_connector *connector,
|
|
|
- uint32_t maxX, uint32_t maxY)
|
|
|
-{
|
|
|
- return drm_helper_probe_single_connector_modes_merge_bits(connector, maxX, maxY, true);
|
|
|
-}
|
|
|
EXPORT_SYMBOL(drm_helper_probe_single_connector_modes);
|
|
|
|
|
|
-/**
|
|
|
- * drm_helper_probe_single_connector_modes_nomerge - get complete set of display modes
|
|
|
- * @connector: connector to probe
|
|
|
- * @maxX: max width for modes
|
|
|
- * @maxY: max height for modes
|
|
|
- *
|
|
|
- * This operates like drm_hehlper_probe_single_connector_modes() except it
|
|
|
- * replaces the mode bits instead of merging them for preferred modes.
|
|
|
- *
|
|
|
- * Returns:
|
|
|
- * The number of modes found on @connector.
|
|
|
- */
|
|
|
-int drm_helper_probe_single_connector_modes_nomerge(struct drm_connector *connector,
|
|
|
- uint32_t maxX, uint32_t maxY)
|
|
|
-{
|
|
|
- return drm_helper_probe_single_connector_modes_merge_bits(connector, maxX, maxY, false);
|
|
|
-}
|
|
|
-EXPORT_SYMBOL(drm_helper_probe_single_connector_modes_nomerge);
|
|
|
-
|
|
|
/**
|
|
|
* drm_kms_helper_hotplug_event - fire off KMS hotplug events
|
|
|
* @dev: drm_device whose connector state changed
|