|
Chuck Ebbert |
b5010d0 |
diff -up linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c.jx linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c
|
|
Chuck Ebbert |
b5010d0 |
--- linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c.jx 2009-09-09 08:57:39.000000000 -0400
|
|
Chuck Ebbert |
b5010d0 |
+++ linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c 2009-09-09 09:35:24.000000000 -0400
|
|
Chuck Ebbert |
b5010d0 |
@@ -92,6 +92,18 @@ int drm_helper_probe_single_connector_mo
|
|
Chuck Ebbert |
b5010d0 |
|
|
Chuck Ebbert |
b5010d0 |
connector->status = connector->funcs->detect(connector);
|
|
Chuck Ebbert |
b5010d0 |
|
|
Chuck Ebbert |
b5010d0 |
+ /* fast path if the driver tracks disconnection */
|
|
Chuck Ebbert |
b5010d0 |
+ if (connector->status == connector_status_cached) {
|
|
Chuck Ebbert |
b5010d0 |
+ DRM_DEBUG_KMS("%s still connected\n",
|
|
Chuck Ebbert |
b5010d0 |
+ drm_get_connector_name(connector));
|
|
Chuck Ebbert |
b5010d0 |
+ list_for_each_entry_safe(mode, t, &connector->modes, head) {
|
|
Chuck Ebbert |
b5010d0 |
+ count++;
|
|
Chuck Ebbert |
b5010d0 |
+ mode->status = MODE_OK;
|
|
Chuck Ebbert |
b5010d0 |
+ }
|
|
Chuck Ebbert |
b5010d0 |
+ connector->status = connector_status_connected;
|
|
Chuck Ebbert |
b5010d0 |
+ return count;
|
|
Chuck Ebbert |
b5010d0 |
+ }
|
|
Chuck Ebbert |
b5010d0 |
+
|
|
Chuck Ebbert |
b5010d0 |
if (connector->status == connector_status_disconnected) {
|
|
Chuck Ebbert |
b5010d0 |
DRM_DEBUG_KMS("%s is disconnected\n",
|
|
Chuck Ebbert |
b5010d0 |
drm_get_connector_name(connector));
|
|
Chuck Ebbert |
b5010d0 |
diff -up linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_lvds.c.jx linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_lvds.c
|
|
Chuck Ebbert |
b5010d0 |
--- linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_lvds.c.jx 2009-09-09 08:57:39.000000000 -0400
|
|
Chuck Ebbert |
b5010d0 |
+++ linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_lvds.c 2009-09-09 09:56:18.000000000 -0400
|
|
Chuck Ebbert |
b5010d0 |
@@ -593,7 +593,14 @@ static void intel_lvds_mode_set(struct d
|
|
Chuck Ebbert |
b5010d0 |
*/
|
|
Chuck Ebbert |
b5010d0 |
static enum drm_connector_status intel_lvds_detect(struct drm_connector *connector)
|
|
Chuck Ebbert |
b5010d0 |
{
|
|
Chuck Ebbert |
b5010d0 |
- return connector_status_connected;
|
|
Chuck Ebbert |
b5010d0 |
+ static int done;
|
|
Chuck Ebbert |
b5010d0 |
+
|
|
Chuck Ebbert |
b5010d0 |
+ if (!done) {
|
|
Chuck Ebbert |
b5010d0 |
+ done = 1;
|
|
Chuck Ebbert |
b5010d0 |
+ return connector_status_connected;
|
|
Chuck Ebbert |
b5010d0 |
+ } else {
|
|
Chuck Ebbert |
b5010d0 |
+ return connector_status_cached;
|
|
Chuck Ebbert |
b5010d0 |
+ }
|
|
Chuck Ebbert |
b5010d0 |
}
|
|
Chuck Ebbert |
b5010d0 |
|
|
Chuck Ebbert |
b5010d0 |
/**
|
|
Chuck Ebbert |
b5010d0 |
diff -up linux-2.6.30.noarch/include/drm/drm_crtc.h.jx linux-2.6.30.noarch/include/drm/drm_crtc.h
|
|
Chuck Ebbert |
b5010d0 |
--- linux-2.6.30.noarch/include/drm/drm_crtc.h.jx 2009-09-09 08:57:39.000000000 -0400
|
|
Chuck Ebbert |
b5010d0 |
+++ linux-2.6.30.noarch/include/drm/drm_crtc.h 2009-09-09 09:35:24.000000000 -0400
|
|
Chuck Ebbert |
b5010d0 |
@@ -172,6 +172,7 @@ enum drm_connector_status {
|
|
Chuck Ebbert |
b5010d0 |
connector_status_connected = 1,
|
|
Chuck Ebbert |
b5010d0 |
connector_status_disconnected = 2,
|
|
Chuck Ebbert |
b5010d0 |
connector_status_unknown = 3,
|
|
Chuck Ebbert |
b5010d0 |
+ connector_status_cached = 4,
|
|
Chuck Ebbert |
b5010d0 |
};
|
|
Chuck Ebbert |
b5010d0 |
|
|
Chuck Ebbert |
b5010d0 |
enum subpixel_order {
|
|
Chuck Ebbert |
b5010d0 |
diff -up linux-2.6.30.x86_64/drivers/gpu/drm/drm_crtc.c.jx linux-2.6.30.x86_64/drivers/gpu/drm/drm_crtc.c
|
|
Chuck Ebbert |
b5010d0 |
--- linux-2.6.30.x86_64/drivers/gpu/drm/drm_crtc.c.jx 2009-09-09 10:10:44.000000000 -0400
|
|
Chuck Ebbert |
b5010d0 |
+++ linux-2.6.30.x86_64/drivers/gpu/drm/drm_crtc.c 2009-09-09 11:23:14.000000000 -0400
|
|
Chuck Ebbert |
b5010d0 |
@@ -185,7 +185,8 @@ EXPORT_SYMBOL(drm_get_connector_name);
|
|
Chuck Ebbert |
b5010d0 |
|
|
Chuck Ebbert |
b5010d0 |
char *drm_get_connector_status_name(enum drm_connector_status status)
|
|
Chuck Ebbert |
b5010d0 |
{
|
|
Chuck Ebbert |
b5010d0 |
- if (status == connector_status_connected)
|
|
Chuck Ebbert |
b5010d0 |
+ if (status == connector_status_connected ||
|
|
Chuck Ebbert |
b5010d0 |
+ status == connector_status_cached)
|
|
Chuck Ebbert |
b5010d0 |
return "connected";
|
|
Chuck Ebbert |
b5010d0 |
else if (status == connector_status_disconnected)
|
|
Chuck Ebbert |
b5010d0 |
return "disconnected";
|