summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHarry Wentland <harry.wentland@amd.com>2017-01-27 10:55:20 -0500
committerHarry Wentland <harry.wentland@amd.com>2017-02-12 20:20:05 -0500
commitf7686f7af5fce202f0a5f75a5b408390374a3c5e (patch)
tree504fa685c0e5b493a5b5ed94a6f46c1a764eedca
parent17dbee025202f023ee4f81b34ff5a9c115156424 (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.c40
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)