diff options
-rw-r--r-- | drivers/gpu/drm/drm_crtc.c | 45 | ||||
-rw-r--r-- | include/drm/drm_crtc.h | 15 |
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 | } |
2839 | EXPORT_SYMBOL(drm_connector_attach_property); | 2840 | EXPORT_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 @@ | |||
36 | struct drm_device; | 36 | struct drm_device; |
37 | struct drm_mode_set; | 37 | struct drm_mode_set; |
38 | struct drm_framebuffer; | 38 | struct drm_framebuffer; |
39 | struct 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; | |||
50 | struct drm_mode_object { | 51 | struct 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 | ||
58 | struct 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 | ||