diff options
Diffstat (limited to 'drivers/gpu/drm/drm_crtc.c')
| -rw-r--r-- | drivers/gpu/drm/drm_crtc.c | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index 57cea01c4ffb..4c68f76993d8 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c | |||
| @@ -80,6 +80,7 @@ static struct drm_prop_enum_list drm_dithering_mode_enum_list[] = | |||
| 80 | { | 80 | { |
| 81 | { DRM_MODE_DITHERING_OFF, "Off" }, | 81 | { DRM_MODE_DITHERING_OFF, "Off" }, |
| 82 | { DRM_MODE_DITHERING_ON, "On" }, | 82 | { DRM_MODE_DITHERING_ON, "On" }, |
| 83 | { DRM_MODE_DITHERING_AUTO, "Automatic" }, | ||
| 83 | }; | 84 | }; |
| 84 | 85 | ||
| 85 | /* | 86 | /* |
| @@ -1126,7 +1127,7 @@ int drm_mode_getresources(struct drm_device *dev, void *data, | |||
| 1126 | if (file_priv->master->minor->type == DRM_MINOR_CONTROL) { | 1127 | if (file_priv->master->minor->type == DRM_MINOR_CONTROL) { |
| 1127 | list_for_each_entry(crtc, &dev->mode_config.crtc_list, | 1128 | list_for_each_entry(crtc, &dev->mode_config.crtc_list, |
| 1128 | head) { | 1129 | head) { |
| 1129 | DRM_DEBUG_KMS("CRTC ID is %d\n", crtc->base.id); | 1130 | DRM_DEBUG_KMS("[CRTC:%d]\n", crtc->base.id); |
| 1130 | if (put_user(crtc->base.id, crtc_id + copied)) { | 1131 | if (put_user(crtc->base.id, crtc_id + copied)) { |
| 1131 | ret = -EFAULT; | 1132 | ret = -EFAULT; |
| 1132 | goto out; | 1133 | goto out; |
| @@ -1154,8 +1155,8 @@ int drm_mode_getresources(struct drm_device *dev, void *data, | |||
| 1154 | list_for_each_entry(encoder, | 1155 | list_for_each_entry(encoder, |
| 1155 | &dev->mode_config.encoder_list, | 1156 | &dev->mode_config.encoder_list, |
| 1156 | head) { | 1157 | head) { |
| 1157 | DRM_DEBUG_KMS("ENCODER ID is %d\n", | 1158 | DRM_DEBUG_KMS("[ENCODER:%d:%s]\n", encoder->base.id, |
| 1158 | encoder->base.id); | 1159 | drm_get_encoder_name(encoder)); |
| 1159 | if (put_user(encoder->base.id, encoder_id + | 1160 | if (put_user(encoder->base.id, encoder_id + |
| 1160 | copied)) { | 1161 | copied)) { |
| 1161 | ret = -EFAULT; | 1162 | ret = -EFAULT; |
| @@ -1185,8 +1186,9 @@ int drm_mode_getresources(struct drm_device *dev, void *data, | |||
| 1185 | list_for_each_entry(connector, | 1186 | list_for_each_entry(connector, |
| 1186 | &dev->mode_config.connector_list, | 1187 | &dev->mode_config.connector_list, |
| 1187 | head) { | 1188 | head) { |
| 1188 | DRM_DEBUG_KMS("CONNECTOR ID is %d\n", | 1189 | DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", |
| 1189 | connector->base.id); | 1190 | connector->base.id, |
| 1191 | drm_get_connector_name(connector)); | ||
| 1190 | if (put_user(connector->base.id, | 1192 | if (put_user(connector->base.id, |
| 1191 | connector_id + copied)) { | 1193 | connector_id + copied)) { |
| 1192 | ret = -EFAULT; | 1194 | ret = -EFAULT; |
| @@ -1209,7 +1211,7 @@ int drm_mode_getresources(struct drm_device *dev, void *data, | |||
| 1209 | } | 1211 | } |
| 1210 | card_res->count_connectors = connector_count; | 1212 | card_res->count_connectors = connector_count; |
| 1211 | 1213 | ||
| 1212 | DRM_DEBUG_KMS("Counted %d %d %d\n", card_res->count_crtcs, | 1214 | DRM_DEBUG_KMS("CRTC[%d] CONNECTORS[%d] ENCODERS[%d]\n", card_res->count_crtcs, |
| 1213 | card_res->count_connectors, card_res->count_encoders); | 1215 | card_res->count_connectors, card_res->count_encoders); |
| 1214 | 1216 | ||
| 1215 | out: | 1217 | out: |
| @@ -1312,7 +1314,7 @@ int drm_mode_getconnector(struct drm_device *dev, void *data, | |||
| 1312 | 1314 | ||
| 1313 | memset(&u_mode, 0, sizeof(struct drm_mode_modeinfo)); | 1315 | memset(&u_mode, 0, sizeof(struct drm_mode_modeinfo)); |
| 1314 | 1316 | ||
| 1315 | DRM_DEBUG_KMS("connector id %d:\n", out_resp->connector_id); | 1317 | DRM_DEBUG_KMS("[CONNECTOR:%d:?]\n", out_resp->connector_id); |
| 1316 | 1318 | ||
| 1317 | mutex_lock(&dev->mode_config.mutex); | 1319 | mutex_lock(&dev->mode_config.mutex); |
| 1318 | 1320 | ||
| @@ -1493,6 +1495,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data, | |||
| 1493 | goto out; | 1495 | goto out; |
| 1494 | } | 1496 | } |
| 1495 | crtc = obj_to_crtc(obj); | 1497 | crtc = obj_to_crtc(obj); |
| 1498 | DRM_DEBUG_KMS("[CRTC:%d]\n", crtc->base.id); | ||
| 1496 | 1499 | ||
| 1497 | if (crtc_req->mode_valid) { | 1500 | if (crtc_req->mode_valid) { |
| 1498 | /* If we have a mode we need a framebuffer. */ | 1501 | /* If we have a mode we need a framebuffer. */ |
| @@ -1569,6 +1572,9 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data, | |||
| 1569 | goto out; | 1572 | goto out; |
| 1570 | } | 1573 | } |
| 1571 | connector = obj_to_connector(obj); | 1574 | connector = obj_to_connector(obj); |
| 1575 | DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", | ||
| 1576 | connector->base.id, | ||
| 1577 | drm_get_connector_name(connector)); | ||
| 1572 | 1578 | ||
| 1573 | connector_set[i] = connector; | 1579 | connector_set[i] = connector; |
| 1574 | } | 1580 | } |
| @@ -1684,6 +1690,7 @@ int drm_mode_addfb(struct drm_device *dev, | |||
| 1684 | 1690 | ||
| 1685 | r->fb_id = fb->base.id; | 1691 | r->fb_id = fb->base.id; |
| 1686 | list_add(&fb->filp_head, &file_priv->fbs); | 1692 | list_add(&fb->filp_head, &file_priv->fbs); |
| 1693 | DRM_DEBUG_KMS("[FB:%d]\n", fb->base.id); | ||
| 1687 | 1694 | ||
| 1688 | out: | 1695 | out: |
| 1689 | mutex_unlock(&dev->mode_config.mutex); | 1696 | mutex_unlock(&dev->mode_config.mutex); |
| @@ -2610,6 +2617,15 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev, | |||
| 2610 | goto out; | 2617 | goto out; |
| 2611 | crtc = obj_to_crtc(obj); | 2618 | crtc = obj_to_crtc(obj); |
| 2612 | 2619 | ||
| 2620 | if (crtc->fb == NULL) { | ||
| 2621 | /* The framebuffer is currently unbound, presumably | ||
| 2622 | * due to a hotplug event, that userspace has not | ||
| 2623 | * yet discovered. | ||
| 2624 | */ | ||
| 2625 | ret = -EBUSY; | ||
| 2626 | goto out; | ||
| 2627 | } | ||
| 2628 | |||
| 2613 | if (crtc->funcs->page_flip == NULL) | 2629 | if (crtc->funcs->page_flip == NULL) |
| 2614 | goto out; | 2630 | goto out; |
| 2615 | 2631 | ||
