aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2014-11-09 19:18:15 -0500
committerDave Airlie <airlied@redhat.com>2014-11-14 18:43:23 -0500
commit5bb2bbf596a0ca35b8ba2b0d5b734a1f270040ff (patch)
tree738897404b8b3c94dc7e595e76f1bbcb53bdbe24
parentbaf698b0496e93f2737b9046d3b1892c55133b0d (diff)
drm: add properties for suggested x/y offset for connectors. (v2)
Virtual GPUs would like to give the guest some indication where on the screen the outputs are layed out. So far we only provide modes, these properties could be exposed to userspace so the desktop environment could use them as hints to set the correct offsets. v2: rename properties to be more consistent. Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r--Documentation/DocBook/drm.tmpl17
-rw-r--r--drivers/gpu/drm/drm_crtc.c24
-rw-r--r--include/drm/drm_crtc.h5
3 files changed, 45 insertions, 1 deletions
diff --git a/Documentation/DocBook/drm.tmpl b/Documentation/DocBook/drm.tmpl
index d2fc43913d54..b8bfa8d1f289 100644
--- a/Documentation/DocBook/drm.tmpl
+++ b/Documentation/DocBook/drm.tmpl
@@ -2539,7 +2539,7 @@ void intel_crt_init(struct drm_device *dev)
2539 <td valign="top" >Description/Restrictions</td> 2539 <td valign="top" >Description/Restrictions</td>
2540 </tr> 2540 </tr>
2541 <tr> 2541 <tr>
2542 <td rowspan="21" valign="top" >DRM</td> 2542 <td rowspan="23" valign="top" >DRM</td>
2543 <td rowspan="3" valign="top" >Generic</td> 2543 <td rowspan="3" valign="top" >Generic</td>
2544 <td valign="top" >“EDID”</td> 2544 <td valign="top" >“EDID”</td>
2545 <td valign="top" >BLOB | IMMUTABLE</td> 2545 <td valign="top" >BLOB | IMMUTABLE</td>
@@ -2677,6 +2677,21 @@ void intel_crt_init(struct drm_device *dev)
2677 <td valign="top" >TBD</td> 2677 <td valign="top" >TBD</td>
2678 </tr> 2678 </tr>
2679 <tr> 2679 <tr>
2680 <td rowspan="2" valign="top" >Virtual GPU</td>
2681 <td valign="top" >“suggested X”</td>
2682 <td valign="top" >RANGE</td>
2683 <td valign="top" >Min=0, Max=0xffffffff</td>
2684 <td valign="top" >Connector</td>
2685 <td valign="top" >property to suggest an X offset for a connector</td>
2686 </tr>
2687 <tr>
2688 <td valign="top" >“suggested Y”</td>
2689 <td valign="top" >RANGE</td>
2690 <td valign="top" >Min=0, Max=0xffffffff</td>
2691 <td valign="top" >Connector</td>
2692 <td valign="top" >property to suggest an Y offset for a connector</td>
2693 </tr>
2694 <tr>
2680 <td rowspan="3" valign="top" >Optional</td> 2695 <td rowspan="3" valign="top" >Optional</td>
2681 <td valign="top" >“scaling mode”</td> 2696 <td valign="top" >“scaling mode”</td>
2682 <td valign="top" >ENUM</td> 2697 <td valign="top" >ENUM</td>
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index 5a4be0398650..15f8b3bfd1ee 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -1529,6 +1529,30 @@ int drm_mode_create_dirty_info_property(struct drm_device *dev)
1529} 1529}
1530EXPORT_SYMBOL(drm_mode_create_dirty_info_property); 1530EXPORT_SYMBOL(drm_mode_create_dirty_info_property);
1531 1531
1532/**
1533 * drm_mode_create_suggested_offset_properties - create suggests offset properties
1534 * @dev: DRM device
1535 *
1536 * Create the the suggested x/y offset property for connectors.
1537 */
1538int drm_mode_create_suggested_offset_properties(struct drm_device *dev)
1539{
1540 if (dev->mode_config.suggested_x_property && dev->mode_config.suggested_y_property)
1541 return 0;
1542
1543 dev->mode_config.suggested_x_property =
1544 drm_property_create_range(dev, DRM_MODE_PROP_IMMUTABLE, "suggested X", 0, 0xffffffff);
1545
1546 dev->mode_config.suggested_y_property =
1547 drm_property_create_range(dev, DRM_MODE_PROP_IMMUTABLE, "suggested Y", 0, 0xffffffff);
1548
1549 if (dev->mode_config.suggested_x_property == NULL ||
1550 dev->mode_config.suggested_y_property == NULL)
1551 return -ENOMEM;
1552 return 0;
1553}
1554EXPORT_SYMBOL(drm_mode_create_suggested_offset_properties);
1555
1532static int drm_mode_group_init(struct drm_device *dev, struct drm_mode_group *group) 1556static int drm_mode_group_init(struct drm_device *dev, struct drm_mode_group *group)
1533{ 1557{
1534 uint32_t total_objects = 0; 1558 uint32_t total_objects = 0;
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index c95941076aaf..7b28ab032a88 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -1038,6 +1038,10 @@ struct drm_mode_config {
1038 struct drm_property *aspect_ratio_property; 1038 struct drm_property *aspect_ratio_property;
1039 struct drm_property *dirty_info_property; 1039 struct drm_property *dirty_info_property;
1040 1040
1041 /* properties for virtual machine layout */
1042 struct drm_property *suggested_x_property;
1043 struct drm_property *suggested_y_property;
1044
1041 /* dumb ioctl parameters */ 1045 /* dumb ioctl parameters */
1042 uint32_t preferred_depth, prefer_shadow; 1046 uint32_t preferred_depth, prefer_shadow;
1043 1047
@@ -1231,6 +1235,7 @@ extern int drm_mode_create_tv_properties(struct drm_device *dev,
1231extern int drm_mode_create_scaling_mode_property(struct drm_device *dev); 1235extern int drm_mode_create_scaling_mode_property(struct drm_device *dev);
1232extern int drm_mode_create_aspect_ratio_property(struct drm_device *dev); 1236extern int drm_mode_create_aspect_ratio_property(struct drm_device *dev);
1233extern int drm_mode_create_dirty_info_property(struct drm_device *dev); 1237extern int drm_mode_create_dirty_info_property(struct drm_device *dev);
1238extern int drm_mode_create_suggested_offset_properties(struct drm_device *dev);
1234 1239
1235extern int drm_mode_connector_attach_encoder(struct drm_connector *connector, 1240extern int drm_mode_connector_attach_encoder(struct drm_connector *connector,
1236 struct drm_encoder *encoder); 1241 struct drm_encoder *encoder);