aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/drm_crtc.c45
-rw-r--r--include/drm/drm_crtc.h15
2 files changed, 33 insertions, 27 deletions
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index 37bb7ab3cbb..19a289f0123 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -483,6 +483,7 @@ int drm_connector_init(struct drm_device *dev,
483 if (ret) 483 if (ret)
484 goto out; 484 goto out;
485 485
486 connector->base.properties = &connector->properties;
486 connector->dev = dev; 487 connector->dev = dev;
487 connector->funcs = funcs; 488 connector->funcs = funcs;
488 connector->connector_type = connector_type; 489 connector->connector_type = connector_type;
@@ -1424,8 +1425,8 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
1424 } 1425 }
1425 connector = obj_to_connector(obj); 1426 connector = obj_to_connector(obj);
1426 1427
1427 for (i = 0; i < DRM_CONNECTOR_MAX_PROPERTY; i++) { 1428 for (i = 0; i < DRM_OBJECT_MAX_PROPERTY; i++) {
1428 if (connector->property_ids[i] != 0) { 1429 if (connector->properties.ids[i] != 0) {
1429 props_count++; 1430 props_count++;
1430 } 1431 }
1431 } 1432 }
@@ -1481,15 +1482,15 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
1481 copied = 0; 1482 copied = 0;
1482 prop_ptr = (uint32_t __user *)(unsigned long)(out_resp->props_ptr); 1483 prop_ptr = (uint32_t __user *)(unsigned long)(out_resp->props_ptr);
1483 prop_values = (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr); 1484 prop_values = (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr);
1484 for (i = 0; i < DRM_CONNECTOR_MAX_PROPERTY; i++) { 1485 for (i = 0; i < DRM_OBJECT_MAX_PROPERTY; i++) {
1485 if (connector->property_ids[i] != 0) { 1486 if (connector->properties.ids[i] != 0) {
1486 if (put_user(connector->property_ids[i], 1487 if (put_user(connector->properties.ids[i],
1487 prop_ptr + copied)) { 1488 prop_ptr + copied)) {
1488 ret = -EFAULT; 1489 ret = -EFAULT;
1489 goto out; 1490 goto out;
1490 } 1491 }
1491 1492
1492 if (put_user(connector->property_values[i], 1493 if (put_user(connector->properties.values[i],
1493 prop_values + copied)) { 1494 prop_values + copied)) {
1494 ret = -EFAULT; 1495 ret = -EFAULT;
1495 goto out; 1496 goto out;
@@ -2824,16 +2825,16 @@ void drm_connector_attach_property(struct drm_connector *connector,
2824{ 2825{
2825 int i; 2826 int i;
2826 2827
2827 for (i = 0; i < DRM_CONNECTOR_MAX_PROPERTY; i++) { 2828 for (i = 0; i < DRM_OBJECT_MAX_PROPERTY; i++) {
2828 if (connector->property_ids[i] == 0) { 2829 if (connector->properties.ids[i] == 0) {
2829 connector->property_ids[i] = property->base.id; 2830 connector->properties.ids[i] = property->base.id;
2830 connector->property_values[i] = init_val; 2831 connector->properties.values[i] = init_val;
2831 return; 2832 return;
2832 } 2833 }
2833 } 2834 }
2834 2835
2835 WARN(1, "Failed to attach connector property. Please increase " 2836 WARN(1, "Failed to attach connector property. Please increase "
2836 "DRM_CONNECTOR_MAX_PROPERTY by 1 for each time you see this " 2837 "DRM_OBJECT_MAX_PROPERTY by 1 for each time you see this "
2837 "message\n"); 2838 "message\n");
2838} 2839}
2839EXPORT_SYMBOL(drm_connector_attach_property); 2840EXPORT_SYMBOL(drm_connector_attach_property);
@@ -2843,14 +2844,14 @@ int drm_connector_property_set_value(struct drm_connector *connector,
2843{ 2844{
2844 int i; 2845 int i;
2845 2846
2846 for (i = 0; i < DRM_CONNECTOR_MAX_PROPERTY; i++) { 2847 for (i = 0; i < DRM_OBJECT_MAX_PROPERTY; i++) {
2847 if (connector->property_ids[i] == property->base.id) { 2848 if (connector->properties.ids[i] == property->base.id) {
2848 connector->property_values[i] = value; 2849 connector->properties.values[i] = value;
2849 break; 2850 break;
2850 } 2851 }
2851 } 2852 }
2852 2853
2853 if (i == DRM_CONNECTOR_MAX_PROPERTY) 2854 if (i == DRM_OBJECT_MAX_PROPERTY)
2854 return -EINVAL; 2855 return -EINVAL;
2855 return 0; 2856 return 0;
2856} 2857}
@@ -2861,14 +2862,14 @@ int drm_connector_property_get_value(struct drm_connector *connector,
2861{ 2862{
2862 int i; 2863 int i;
2863 2864
2864 for (i = 0; i < DRM_CONNECTOR_MAX_PROPERTY; i++) { 2865 for (i = 0; i < DRM_OBJECT_MAX_PROPERTY; i++) {
2865 if (connector->property_ids[i] == property->base.id) { 2866 if (connector->properties.ids[i] == property->base.id) {
2866 *val = connector->property_values[i]; 2867 *val = connector->properties.values[i];
2867 break; 2868 break;
2868 } 2869 }
2869 } 2870 }
2870 2871
2871 if (i == DRM_CONNECTOR_MAX_PROPERTY) 2872 if (i == DRM_OBJECT_MAX_PROPERTY)
2872 return -EINVAL; 2873 return -EINVAL;
2873 return 0; 2874 return 0;
2874} 2875}
@@ -3113,12 +3114,12 @@ int drm_mode_connector_property_set_ioctl(struct drm_device *dev,
3113 } 3114 }
3114 connector = obj_to_connector(obj); 3115 connector = obj_to_connector(obj);
3115 3116
3116 for (i = 0; i < DRM_CONNECTOR_MAX_PROPERTY; i++) { 3117 for (i = 0; i < DRM_OBJECT_MAX_PROPERTY; i++) {
3117 if (connector->property_ids[i] == out_resp->prop_id) 3118 if (connector->properties.ids[i] == out_resp->prop_id)
3118 break; 3119 break;
3119 } 3120 }
3120 3121
3121 if (i == DRM_CONNECTOR_MAX_PROPERTY) { 3122 if (i == DRM_OBJECT_MAX_PROPERTY) {
3122 goto out; 3123 goto out;
3123 } 3124 }
3124 3125
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index 036faec8a6f..77606794308 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -36,6 +36,7 @@
36struct drm_device; 36struct drm_device;
37struct drm_mode_set; 37struct drm_mode_set;
38struct drm_framebuffer; 38struct drm_framebuffer;
39struct drm_object_properties;
39 40
40 41
41#define DRM_MODE_OBJECT_CRTC 0xcccccccc 42#define DRM_MODE_OBJECT_CRTC 0xcccccccc
@@ -50,6 +51,13 @@ struct drm_framebuffer;
50struct drm_mode_object { 51struct drm_mode_object {
51 uint32_t id; 52 uint32_t id;
52 uint32_t type; 53 uint32_t type;
54 struct drm_object_properties *properties;
55};
56
57#define DRM_OBJECT_MAX_PROPERTY 16
58struct drm_object_properties {
59 uint32_t ids[DRM_OBJECT_MAX_PROPERTY];
60 uint64_t values[DRM_OBJECT_MAX_PROPERTY];
53}; 61};
54 62
55/* 63/*
@@ -451,7 +459,6 @@ struct drm_encoder_funcs {
451}; 459};
452 460
453#define DRM_CONNECTOR_MAX_UMODES 16 461#define DRM_CONNECTOR_MAX_UMODES 16
454#define DRM_CONNECTOR_MAX_PROPERTY 16
455#define DRM_CONNECTOR_LEN 32 462#define DRM_CONNECTOR_LEN 32
456#define DRM_CONNECTOR_MAX_ENCODER 3 463#define DRM_CONNECTOR_MAX_ENCODER 3
457 464
@@ -520,8 +527,7 @@ enum drm_connector_force {
520 * @funcs: connector control functions 527 * @funcs: connector control functions
521 * @user_modes: user added mode list 528 * @user_modes: user added mode list
522 * @edid_blob_ptr: DRM property containing EDID if present 529 * @edid_blob_ptr: DRM property containing EDID if present
523 * @property_ids: property tracking for this connector 530 * @properties: property tracking for this connector
524 * @property_values: value pointers or data for properties
525 * @polled: a %DRM_CONNECTOR_POLL_<foo> value for core driven polling 531 * @polled: a %DRM_CONNECTOR_POLL_<foo> value for core driven polling
526 * @dpms: current dpms state 532 * @dpms: current dpms state
527 * @helper_private: mid-layer private data 533 * @helper_private: mid-layer private data
@@ -565,8 +571,7 @@ struct drm_connector {
565 571
566 struct list_head user_modes; 572 struct list_head user_modes;
567 struct drm_property_blob *edid_blob_ptr; 573 struct drm_property_blob *edid_blob_ptr;
568 u32 property_ids[DRM_CONNECTOR_MAX_PROPERTY]; 574 struct drm_object_properties properties;
569 uint64_t property_values[DRM_CONNECTOR_MAX_PROPERTY];
570 575
571 uint8_t polled; /* DRM_CONNECTOR_POLL_* */ 576 uint8_t polled; /* DRM_CONNECTOR_POLL_* */
572 577