diff options
author | Harry Wentland <harry.wentland@amd.com> | 2017-01-27 10:55:20 -0500 |
---|---|---|
committer | Harry Wentland <harry.wentland@amd.com> | 2017-02-12 20:20:05 -0500 |
commit | f7686f7af5fce202f0a5f75a5b408390374a3c5e (patch) | |
tree | 504fa685c0e5b493a5b5ed94a6f46c1a764eedca | |
parent | 17dbee025202f023ee4f81b34ff5a9c115156424 (diff) |
drm/amd/display: Fallback on legacy properties in atomic_get_properties
We still rely on legacy properties. Fallback on legacy properties until
we get to pull these into some atomic state.
Change-Id: Ibc06135095b54be349c38fa455090bc626e90931
Signed-off-by: Harry Wentland <harry.wentland@amd.com>
-rw-r--r-- | drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c index eef7d2e81172..3d5c5119e325 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c @@ -1425,6 +1425,43 @@ struct drm_connector_state *amdgpu_dm_connector_atomic_duplicate_state( return NULL; } + +/** + * amdgpu_dm_atomic_get_property - fetch connector property value + * @connector: connector to fetch property for + * @state: state containing the property value + * @property: property to look up + * @val: pointer to write property value into + * + * The DRM core does not store shadow copies of properties for + * atomic-capable drivers. This entrypoint is used to fetch + * the current value of a driver-specific connector property. + */ +int amdgpu_dm_connector_atomic_get_property(struct drm_connector *connector, + const struct drm_connector_state *state, + struct drm_property *property, + uint64_t *val) +{ + int i; + + /* + * TODO: Get properties from atomic state or objs. Until it's ready, + * continue to look up all property values in the DRM's shadow copy + * in obj->properties->values[]. + * + * When the crtc/connector state work matures, this function should + * be updated to read the values out of the state structure instead. + */ + for (i = 0; i < connector->base.properties->count; i++) { + if (connector->base.properties->properties[i] == property) { + *val = connector->base.properties->values[i]; + return 0; + } + } + + return -EINVAL; +} + static const struct drm_connector_funcs amdgpu_dm_connector_funcs = { .dpms = drm_atomic_helper_connector_dpms, .reset = amdgpu_dm_connector_funcs_reset, @@ -1434,7 +1471,8 @@ static const struct drm_connector_funcs amdgpu_dm_connector_funcs = { .destroy = amdgpu_dm_connector_destroy, .atomic_duplicate_state = amdgpu_dm_connector_atomic_duplicate_state, .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, - .atomic_set_property = amdgpu_dm_connector_atomic_set_property + .atomic_set_property = amdgpu_dm_connector_atomic_set_property, + .atomic_get_property = amdgpu_dm_connector_atomic_get_property, }; static struct drm_encoder *best_encoder(struct drm_connector *connector) |