Skip to content

Commit

Permalink
drm: create struct drm_object_properties and use it
Browse files Browse the repository at this point in the history
For now, only connectors have it. In the future, all objects that need
properties should use it. Since the structure is referenced inside
struct drm_mode_object, we will be able to deal with object properties
without knowing the real type of the object.

Reviewed-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
Reviewed-by: Rob Clark <rob.clark@linaro.org>
Tested-by: Rob Clark <rob.clark@linaro.org>
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
  • Loading branch information
Paulo Zanoni authored and Dave Airlie committed May 17, 2012
1 parent afea2ad commit 7e3bdf4
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 27 deletions.
45 changes: 23 additions & 22 deletions drivers/gpu/drm/drm_crtc.c
Original file line number Diff line number Diff line change
Expand Up @@ -483,6 +483,7 @@ int drm_connector_init(struct drm_device *dev,
if (ret)
goto out;

connector->base.properties = &connector->properties;
connector->dev = dev;
connector->funcs = funcs;
connector->connector_type = connector_type;
Expand Down Expand Up @@ -1424,8 +1425,8 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
}
connector = obj_to_connector(obj);

for (i = 0; i < DRM_CONNECTOR_MAX_PROPERTY; i++) {
if (connector->property_ids[i] != 0) {
for (i = 0; i < DRM_OBJECT_MAX_PROPERTY; i++) {
if (connector->properties.ids[i] != 0) {
props_count++;
}
}
Expand Down Expand Up @@ -1481,15 +1482,15 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
copied = 0;
prop_ptr = (uint32_t __user *)(unsigned long)(out_resp->props_ptr);
prop_values = (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr);
for (i = 0; i < DRM_CONNECTOR_MAX_PROPERTY; i++) {
if (connector->property_ids[i] != 0) {
if (put_user(connector->property_ids[i],
for (i = 0; i < DRM_OBJECT_MAX_PROPERTY; i++) {
if (connector->properties.ids[i] != 0) {
if (put_user(connector->properties.ids[i],
prop_ptr + copied)) {
ret = -EFAULT;
goto out;
}

if (put_user(connector->property_values[i],
if (put_user(connector->properties.values[i],
prop_values + copied)) {
ret = -EFAULT;
goto out;
Expand Down Expand Up @@ -2824,16 +2825,16 @@ void drm_connector_attach_property(struct drm_connector *connector,
{
int i;

for (i = 0; i < DRM_CONNECTOR_MAX_PROPERTY; i++) {
if (connector->property_ids[i] == 0) {
connector->property_ids[i] = property->base.id;
connector->property_values[i] = init_val;
for (i = 0; i < DRM_OBJECT_MAX_PROPERTY; i++) {
if (connector->properties.ids[i] == 0) {
connector->properties.ids[i] = property->base.id;
connector->properties.values[i] = init_val;
return;
}
}

WARN(1, "Failed to attach connector property. Please increase "
"DRM_CONNECTOR_MAX_PROPERTY by 1 for each time you see this "
"DRM_OBJECT_MAX_PROPERTY by 1 for each time you see this "
"message\n");
}
EXPORT_SYMBOL(drm_connector_attach_property);
Expand All @@ -2843,14 +2844,14 @@ int drm_connector_property_set_value(struct drm_connector *connector,
{
int i;

for (i = 0; i < DRM_CONNECTOR_MAX_PROPERTY; i++) {
if (connector->property_ids[i] == property->base.id) {
connector->property_values[i] = value;
for (i = 0; i < DRM_OBJECT_MAX_PROPERTY; i++) {
if (connector->properties.ids[i] == property->base.id) {
connector->properties.values[i] = value;
break;
}
}

if (i == DRM_CONNECTOR_MAX_PROPERTY)
if (i == DRM_OBJECT_MAX_PROPERTY)
return -EINVAL;
return 0;
}
Expand All @@ -2861,14 +2862,14 @@ int drm_connector_property_get_value(struct drm_connector *connector,
{
int i;

for (i = 0; i < DRM_CONNECTOR_MAX_PROPERTY; i++) {
if (connector->property_ids[i] == property->base.id) {
*val = connector->property_values[i];
for (i = 0; i < DRM_OBJECT_MAX_PROPERTY; i++) {
if (connector->properties.ids[i] == property->base.id) {
*val = connector->properties.values[i];
break;
}
}

if (i == DRM_CONNECTOR_MAX_PROPERTY)
if (i == DRM_OBJECT_MAX_PROPERTY)
return -EINVAL;
return 0;
}
Expand Down Expand Up @@ -3113,12 +3114,12 @@ int drm_mode_connector_property_set_ioctl(struct drm_device *dev,
}
connector = obj_to_connector(obj);

for (i = 0; i < DRM_CONNECTOR_MAX_PROPERTY; i++) {
if (connector->property_ids[i] == out_resp->prop_id)
for (i = 0; i < DRM_OBJECT_MAX_PROPERTY; i++) {
if (connector->properties.ids[i] == out_resp->prop_id)
break;
}

if (i == DRM_CONNECTOR_MAX_PROPERTY) {
if (i == DRM_OBJECT_MAX_PROPERTY) {
goto out;
}

Expand Down
15 changes: 10 additions & 5 deletions include/drm/drm_crtc.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
struct drm_device;
struct drm_mode_set;
struct drm_framebuffer;
struct drm_object_properties;


#define DRM_MODE_OBJECT_CRTC 0xcccccccc
Expand All @@ -50,6 +51,13 @@ struct drm_framebuffer;
struct drm_mode_object {
uint32_t id;
uint32_t type;
struct drm_object_properties *properties;
};

#define DRM_OBJECT_MAX_PROPERTY 16
struct drm_object_properties {
uint32_t ids[DRM_OBJECT_MAX_PROPERTY];
uint64_t values[DRM_OBJECT_MAX_PROPERTY];
};

/*
Expand Down Expand Up @@ -451,7 +459,6 @@ struct drm_encoder_funcs {
};

#define DRM_CONNECTOR_MAX_UMODES 16
#define DRM_CONNECTOR_MAX_PROPERTY 16
#define DRM_CONNECTOR_LEN 32
#define DRM_CONNECTOR_MAX_ENCODER 3

Expand Down Expand Up @@ -520,8 +527,7 @@ enum drm_connector_force {
* @funcs: connector control functions
* @user_modes: user added mode list
* @edid_blob_ptr: DRM property containing EDID if present
* @property_ids: property tracking for this connector
* @property_values: value pointers or data for properties
* @properties: property tracking for this connector
* @polled: a %DRM_CONNECTOR_POLL_<foo> value for core driven polling
* @dpms: current dpms state
* @helper_private: mid-layer private data
Expand Down Expand Up @@ -565,8 +571,7 @@ struct drm_connector {

struct list_head user_modes;
struct drm_property_blob *edid_blob_ptr;
u32 property_ids[DRM_CONNECTOR_MAX_PROPERTY];
uint64_t property_values[DRM_CONNECTOR_MAX_PROPERTY];
struct drm_object_properties properties;

uint8_t polled; /* DRM_CONNECTOR_POLL_* */

Expand Down

0 comments on commit 7e3bdf4

Please sign in to comment.