On Wed, Oct 22, 2014 at 12:32:06PM +1000, Dave Airlie wrote:
From: Dave Airlie airlied@redhat.com
This takes the tiling info from the connector and exposes it to userspace, as a blob object in a connector property.
The contents of the blob is ABI.
v2: add property + function documentation.
Signed-off-by: Dave Airlie airlied@redhat.com
Documentation/DocBook/drm.tmpl | 9 +++++++- drivers/gpu/drm/drm_crtc.c | 44 +++++++++++++++++++++++++++++++++++++ drivers/gpu/drm/i915/intel_dp_mst.c | 2 ++ include/drm/drm_crtc.h | 4 ++++ 4 files changed, 58 insertions(+), 1 deletion(-)
diff --git a/Documentation/DocBook/drm.tmpl b/Documentation/DocBook/drm.tmpl index 5ea6289..1f19340 100644 --- a/Documentation/DocBook/drm.tmpl +++ b/Documentation/DocBook/drm.tmpl @@ -2513,7 +2513,7 @@ void intel_crt_init(struct drm_device *dev)
</tr> <tr> <td rowspan="21" valign="top" >DRM</td> - <td rowspan="3" valign="top" >Generic</td> + <td rowspan="4" valign="top" >Generic</td> <td valign="top" >“EDID”</td> <td valign="top" >BLOB | IMMUTABLE</td> <td valign="top" >0</td> @@ -2535,6 +2535,13 @@ void intel_crt_init(struct drm_device *dev) <td valign="top" >Contains topology path to a connector.</td> </tr> <tr> + <td valign="top" >“TILE”</td> + <td valign="top" >BLOB | IMMUTABLE</td> + <td valign="top" >0</td> + <td valign="top" >Connector</td> + <td valign="top" >Contains tiling information for a connector.</td> + </tr> + <tr> <td rowspan="1" valign="top" >Plane</td> <td valign="top" >“type”</td> <td valign="top" >ENUM | IMMUTABLE</td> diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index f3e082d..1c64f5f 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -1319,6 +1319,11 @@ static int drm_mode_create_standard_connector_properties(struct drm_device *dev) "PATH", 0); dev->mode_config.path_property = dev_path;
- dev->mode_config.tile_property = drm_property_create(dev,
DRM_MODE_PROP_BLOB |
DRM_MODE_PROP_IMMUTABLE,
"TILE", 0);
- return 0;
}
@@ -4015,6 +4020,45 @@ int drm_mode_connector_set_path_property(struct drm_connector *connector, EXPORT_SYMBOL(drm_mode_connector_set_path_property);
/**
- drm_mode_connector_set_tile_property - set tile property on connector
- @connector: connector to set property on.
- This looks up the tile information for a connector, and creates a
- property for userspace to parse if it exists. The property is of
- the form of 8 integers using ':' as a separator.
- */
Again return value boilerplate missing.
+int drm_mode_connector_set_tile_property(struct drm_connector *connector) +{
- struct drm_device *dev = connector->dev;
- int ret, size;
- char tile[256];
- if (connector->tile_blob_ptr)
drm_property_destroy_blob(dev, connector->tile_blob_ptr);
- if (!connector->has_tile) {
connector->tile_blob_ptr = NULL;
ret = drm_object_property_set_value(&connector->base,
dev->mode_config.tile_property, 0);
return ret;
- }
- snprintf(tile, 256, "%d:%d:%d:%d:%d:%d:%d:%d", connector->tile_group->id, connector->tile_is_single_monitor, connector->num_h_tile, connector->num_v_tile, connector->tile_h_loc, connector->tile_v_loc, connector->tile_h_size, connector->tile_v_size);
Long line.
With both nits fixed this is Reviewed-by: Daniel Vetter daniel.vetter@ffwll.ch
- size = strlen(tile) + 1;
- connector->tile_blob_ptr = drm_property_create_blob(connector->dev,
size, tile);
- if (!connector->tile_blob_ptr)
return -EINVAL;
- ret = drm_object_property_set_value(&connector->base,
dev->mode_config.tile_property,
connector->tile_blob_ptr->base.id);
- return ret;
+} +EXPORT_SYMBOL(drm_mode_connector_set_tile_property);
+/**
- drm_mode_connector_update_edid_property - update the edid property of a connector
- @connector: drm connector
- @edid: new value of the edid property
diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c index c66e73a..c5529ff 100644 --- a/drivers/gpu/drm/i915/intel_dp_mst.c +++ b/drivers/gpu/drm/i915/intel_dp_mst.c @@ -422,6 +422,8 @@ static struct drm_connector *intel_dp_add_mst_connector(struct drm_dp_mst_topolo intel_dp_add_properties(intel_dp, connector);
drm_object_attach_property(&connector->base, dev->mode_config.path_property, 0);
- drm_object_attach_property(&connector->base, dev->mode_config.tile_property, 0);
- drm_mode_connector_set_path_property(connector, pathprop); drm_reinit_primary_mode_group(dev); mutex_lock(&dev->mode_config.mutex);
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index 39c9858..c41cd51 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -557,6 +557,8 @@ struct drm_connector {
struct drm_property_blob *path_blob_ptr;
struct drm_property_blob *tile_blob_ptr;
uint8_t polled; /* DRM_CONNECTOR_POLL_* */
/* requested DPMS state */
@@ -847,6 +849,7 @@ struct drm_mode_config { struct drm_property *edid_property; struct drm_property *dpms_property; struct drm_property *path_property;
struct drm_property *tile_property; struct drm_property *plane_type_property;
/* DVI-I properties */
@@ -999,6 +1002,7 @@ extern void drm_mode_config_cleanup(struct drm_device *dev);
extern int drm_mode_connector_set_path_property(struct drm_connector *connector, char *path); +int drm_mode_connector_set_tile_property(struct drm_connector *connector); extern int drm_mode_connector_update_edid_property(struct drm_connector *connector, struct edid *edid);
-- 2.1.0
dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel