diff options
-rw-r--r-- | drivers/gpu/drm/armada/armada_crtc.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/bochs/bochs_kms.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_cache.c | 13 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_crtc.c | 90 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_info.c | 24 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_internal.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_irq.c | 11 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_plane_helper.c | 16 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/sti/sti_drm_crtc.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/tegra/dc.c | 5 | ||||
-rw-r--r-- | include/uapi/drm/drm_mode.h | 8 |
13 files changed, 72 insertions, 122 deletions
diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c index e3a7a5078e5c..42d2ffa08716 100644 --- a/drivers/gpu/drm/armada/armada_crtc.c +++ b/drivers/gpu/drm/armada/armada_crtc.c | |||
@@ -653,10 +653,6 @@ static int armada_drm_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y, | |||
653 | return 0; | 653 | return 0; |
654 | } | 654 | } |
655 | 655 | ||
656 | static void armada_drm_crtc_load_lut(struct drm_crtc *crtc) | ||
657 | { | ||
658 | } | ||
659 | |||
660 | /* The mode_config.mutex will be held for this call */ | 656 | /* The mode_config.mutex will be held for this call */ |
661 | static void armada_drm_crtc_disable(struct drm_crtc *crtc) | 657 | static void armada_drm_crtc_disable(struct drm_crtc *crtc) |
662 | { | 658 | { |
@@ -678,7 +674,6 @@ static const struct drm_crtc_helper_funcs armada_crtc_helper_funcs = { | |||
678 | .mode_fixup = armada_drm_crtc_mode_fixup, | 674 | .mode_fixup = armada_drm_crtc_mode_fixup, |
679 | .mode_set = armada_drm_crtc_mode_set, | 675 | .mode_set = armada_drm_crtc_mode_set, |
680 | .mode_set_base = armada_drm_crtc_mode_set_base, | 676 | .mode_set_base = armada_drm_crtc_mode_set_base, |
681 | .load_lut = armada_drm_crtc_load_lut, | ||
682 | .disable = armada_drm_crtc_disable, | 677 | .disable = armada_drm_crtc_disable, |
683 | }; | 678 | }; |
684 | 679 | ||
diff --git a/drivers/gpu/drm/bochs/bochs_kms.c b/drivers/gpu/drm/bochs/bochs_kms.c index 85f0f8cf1fb8..26bcd03a8cb6 100644 --- a/drivers/gpu/drm/bochs/bochs_kms.c +++ b/drivers/gpu/drm/bochs/bochs_kms.c | |||
@@ -18,10 +18,6 @@ MODULE_PARM_DESC(defy, "default y resolution"); | |||
18 | 18 | ||
19 | /* ---------------------------------------------------------------------- */ | 19 | /* ---------------------------------------------------------------------- */ |
20 | 20 | ||
21 | static void bochs_crtc_load_lut(struct drm_crtc *crtc) | ||
22 | { | ||
23 | } | ||
24 | |||
25 | static void bochs_crtc_dpms(struct drm_crtc *crtc, int mode) | 21 | static void bochs_crtc_dpms(struct drm_crtc *crtc, int mode) |
26 | { | 22 | { |
27 | switch (mode) { | 23 | switch (mode) { |
@@ -144,7 +140,6 @@ static const struct drm_crtc_helper_funcs bochs_helper_funcs = { | |||
144 | .mode_set_base = bochs_crtc_mode_set_base, | 140 | .mode_set_base = bochs_crtc_mode_set_base, |
145 | .prepare = bochs_crtc_prepare, | 141 | .prepare = bochs_crtc_prepare, |
146 | .commit = bochs_crtc_commit, | 142 | .commit = bochs_crtc_commit, |
147 | .load_lut = bochs_crtc_load_lut, | ||
148 | }; | 143 | }; |
149 | 144 | ||
150 | static void bochs_crtc_init(struct drm_device *dev) | 145 | static void bochs_crtc_init(struct drm_device *dev) |
diff --git a/drivers/gpu/drm/drm_cache.c b/drivers/gpu/drm/drm_cache.c index a6b690626a6b..9a62d7a53553 100644 --- a/drivers/gpu/drm/drm_cache.c +++ b/drivers/gpu/drm/drm_cache.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <drm/drmP.h> | 32 | #include <drm/drmP.h> |
33 | 33 | ||
34 | #if defined(CONFIG_X86) | 34 | #if defined(CONFIG_X86) |
35 | #include <asm/smp.h> | ||
35 | 36 | ||
36 | /* | 37 | /* |
37 | * clflushopt is an unordered instruction which needs fencing with mfence or | 38 | * clflushopt is an unordered instruction which needs fencing with mfence or |
@@ -64,12 +65,6 @@ static void drm_cache_flush_clflush(struct page *pages[], | |||
64 | drm_clflush_page(*pages++); | 65 | drm_clflush_page(*pages++); |
65 | mb(); | 66 | mb(); |
66 | } | 67 | } |
67 | |||
68 | static void | ||
69 | drm_clflush_ipi_handler(void *null) | ||
70 | { | ||
71 | wbinvd(); | ||
72 | } | ||
73 | #endif | 68 | #endif |
74 | 69 | ||
75 | void | 70 | void |
@@ -82,7 +77,7 @@ drm_clflush_pages(struct page *pages[], unsigned long num_pages) | |||
82 | return; | 77 | return; |
83 | } | 78 | } |
84 | 79 | ||
85 | if (on_each_cpu(drm_clflush_ipi_handler, NULL, 1) != 0) | 80 | if (wbinvd_on_all_cpus()) |
86 | printk(KERN_ERR "Timed out waiting for cache flush.\n"); | 81 | printk(KERN_ERR "Timed out waiting for cache flush.\n"); |
87 | 82 | ||
88 | #elif defined(__powerpc__) | 83 | #elif defined(__powerpc__) |
@@ -121,7 +116,7 @@ drm_clflush_sg(struct sg_table *st) | |||
121 | return; | 116 | return; |
122 | } | 117 | } |
123 | 118 | ||
124 | if (on_each_cpu(drm_clflush_ipi_handler, NULL, 1) != 0) | 119 | if (wbinvd_on_all_cpus()) |
125 | printk(KERN_ERR "Timed out waiting for cache flush.\n"); | 120 | printk(KERN_ERR "Timed out waiting for cache flush.\n"); |
126 | #else | 121 | #else |
127 | printk(KERN_ERR "Architecture has no drm_cache.c support\n"); | 122 | printk(KERN_ERR "Architecture has no drm_cache.c support\n"); |
@@ -144,7 +139,7 @@ drm_clflush_virt_range(void *addr, unsigned long length) | |||
144 | return; | 139 | return; |
145 | } | 140 | } |
146 | 141 | ||
147 | if (on_each_cpu(drm_clflush_ipi_handler, NULL, 1) != 0) | 142 | if (wbinvd_on_all_cpus()) |
148 | printk(KERN_ERR "Timed out waiting for cache flush.\n"); | 143 | printk(KERN_ERR "Timed out waiting for cache flush.\n"); |
149 | #else | 144 | #else |
150 | printk(KERN_ERR "Architecture has no drm_cache.c support\n"); | 145 | printk(KERN_ERR "Architecture has no drm_cache.c support\n"); |
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index 481bb2598b62..303c9918a2d5 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c | |||
@@ -61,8 +61,8 @@ static struct drm_framebuffer *add_framebuffer_internal(struct drm_device *dev, | |||
61 | /* | 61 | /* |
62 | * Global properties | 62 | * Global properties |
63 | */ | 63 | */ |
64 | static const struct drm_prop_enum_list drm_dpms_enum_list[] = | 64 | static const struct drm_prop_enum_list drm_dpms_enum_list[] = { |
65 | { { DRM_MODE_DPMS_ON, "On" }, | 65 | { DRM_MODE_DPMS_ON, "On" }, |
66 | { DRM_MODE_DPMS_STANDBY, "Standby" }, | 66 | { DRM_MODE_DPMS_STANDBY, "Standby" }, |
67 | { DRM_MODE_DPMS_SUSPEND, "Suspend" }, | 67 | { DRM_MODE_DPMS_SUSPEND, "Suspend" }, |
68 | { DRM_MODE_DPMS_OFF, "Off" } | 68 | { DRM_MODE_DPMS_OFF, "Off" } |
@@ -70,8 +70,7 @@ static const struct drm_prop_enum_list drm_dpms_enum_list[] = | |||
70 | 70 | ||
71 | DRM_ENUM_NAME_FN(drm_get_dpms_name, drm_dpms_enum_list) | 71 | DRM_ENUM_NAME_FN(drm_get_dpms_name, drm_dpms_enum_list) |
72 | 72 | ||
73 | static const struct drm_prop_enum_list drm_plane_type_enum_list[] = | 73 | static const struct drm_prop_enum_list drm_plane_type_enum_list[] = { |
74 | { | ||
75 | { DRM_PLANE_TYPE_OVERLAY, "Overlay" }, | 74 | { DRM_PLANE_TYPE_OVERLAY, "Overlay" }, |
76 | { DRM_PLANE_TYPE_PRIMARY, "Primary" }, | 75 | { DRM_PLANE_TYPE_PRIMARY, "Primary" }, |
77 | { DRM_PLANE_TYPE_CURSOR, "Cursor" }, | 76 | { DRM_PLANE_TYPE_CURSOR, "Cursor" }, |
@@ -80,8 +79,7 @@ static const struct drm_prop_enum_list drm_plane_type_enum_list[] = | |||
80 | /* | 79 | /* |
81 | * Optional properties | 80 | * Optional properties |
82 | */ | 81 | */ |
83 | static const struct drm_prop_enum_list drm_scaling_mode_enum_list[] = | 82 | static const struct drm_prop_enum_list drm_scaling_mode_enum_list[] = { |
84 | { | ||
85 | { DRM_MODE_SCALE_NONE, "None" }, | 83 | { DRM_MODE_SCALE_NONE, "None" }, |
86 | { DRM_MODE_SCALE_FULLSCREEN, "Full" }, | 84 | { DRM_MODE_SCALE_FULLSCREEN, "Full" }, |
87 | { DRM_MODE_SCALE_CENTER, "Center" }, | 85 | { DRM_MODE_SCALE_CENTER, "Center" }, |
@@ -97,8 +95,7 @@ static const struct drm_prop_enum_list drm_aspect_ratio_enum_list[] = { | |||
97 | /* | 95 | /* |
98 | * Non-global properties, but "required" for certain connectors. | 96 | * Non-global properties, but "required" for certain connectors. |
99 | */ | 97 | */ |
100 | static const struct drm_prop_enum_list drm_dvi_i_select_enum_list[] = | 98 | static const struct drm_prop_enum_list drm_dvi_i_select_enum_list[] = { |
101 | { | ||
102 | { DRM_MODE_SUBCONNECTOR_Automatic, "Automatic" }, /* DVI-I and TV-out */ | 99 | { DRM_MODE_SUBCONNECTOR_Automatic, "Automatic" }, /* DVI-I and TV-out */ |
103 | { DRM_MODE_SUBCONNECTOR_DVID, "DVI-D" }, /* DVI-I */ | 100 | { DRM_MODE_SUBCONNECTOR_DVID, "DVI-D" }, /* DVI-I */ |
104 | { DRM_MODE_SUBCONNECTOR_DVIA, "DVI-A" }, /* DVI-I */ | 101 | { DRM_MODE_SUBCONNECTOR_DVIA, "DVI-A" }, /* DVI-I */ |
@@ -106,8 +103,7 @@ static const struct drm_prop_enum_list drm_dvi_i_select_enum_list[] = | |||
106 | 103 | ||
107 | DRM_ENUM_NAME_FN(drm_get_dvi_i_select_name, drm_dvi_i_select_enum_list) | 104 | DRM_ENUM_NAME_FN(drm_get_dvi_i_select_name, drm_dvi_i_select_enum_list) |
108 | 105 | ||
109 | static const struct drm_prop_enum_list drm_dvi_i_subconnector_enum_list[] = | 106 | static const struct drm_prop_enum_list drm_dvi_i_subconnector_enum_list[] = { |
110 | { | ||
111 | { DRM_MODE_SUBCONNECTOR_Unknown, "Unknown" }, /* DVI-I and TV-out */ | 107 | { DRM_MODE_SUBCONNECTOR_Unknown, "Unknown" }, /* DVI-I and TV-out */ |
112 | { DRM_MODE_SUBCONNECTOR_DVID, "DVI-D" }, /* DVI-I */ | 108 | { DRM_MODE_SUBCONNECTOR_DVID, "DVI-D" }, /* DVI-I */ |
113 | { DRM_MODE_SUBCONNECTOR_DVIA, "DVI-A" }, /* DVI-I */ | 109 | { DRM_MODE_SUBCONNECTOR_DVIA, "DVI-A" }, /* DVI-I */ |
@@ -116,8 +112,7 @@ static const struct drm_prop_enum_list drm_dvi_i_subconnector_enum_list[] = | |||
116 | DRM_ENUM_NAME_FN(drm_get_dvi_i_subconnector_name, | 112 | DRM_ENUM_NAME_FN(drm_get_dvi_i_subconnector_name, |
117 | drm_dvi_i_subconnector_enum_list) | 113 | drm_dvi_i_subconnector_enum_list) |
118 | 114 | ||
119 | static const struct drm_prop_enum_list drm_tv_select_enum_list[] = | 115 | static const struct drm_prop_enum_list drm_tv_select_enum_list[] = { |
120 | { | ||
121 | { DRM_MODE_SUBCONNECTOR_Automatic, "Automatic" }, /* DVI-I and TV-out */ | 116 | { DRM_MODE_SUBCONNECTOR_Automatic, "Automatic" }, /* DVI-I and TV-out */ |
122 | { DRM_MODE_SUBCONNECTOR_Composite, "Composite" }, /* TV-out */ | 117 | { DRM_MODE_SUBCONNECTOR_Composite, "Composite" }, /* TV-out */ |
123 | { DRM_MODE_SUBCONNECTOR_SVIDEO, "SVIDEO" }, /* TV-out */ | 118 | { DRM_MODE_SUBCONNECTOR_SVIDEO, "SVIDEO" }, /* TV-out */ |
@@ -127,8 +122,7 @@ static const struct drm_prop_enum_list drm_tv_select_enum_list[] = | |||
127 | 122 | ||
128 | DRM_ENUM_NAME_FN(drm_get_tv_select_name, drm_tv_select_enum_list) | 123 | DRM_ENUM_NAME_FN(drm_get_tv_select_name, drm_tv_select_enum_list) |
129 | 124 | ||
130 | static const struct drm_prop_enum_list drm_tv_subconnector_enum_list[] = | 125 | static const struct drm_prop_enum_list drm_tv_subconnector_enum_list[] = { |
131 | { | ||
132 | { DRM_MODE_SUBCONNECTOR_Unknown, "Unknown" }, /* DVI-I and TV-out */ | 126 | { DRM_MODE_SUBCONNECTOR_Unknown, "Unknown" }, /* DVI-I and TV-out */ |
133 | { DRM_MODE_SUBCONNECTOR_Composite, "Composite" }, /* TV-out */ | 127 | { DRM_MODE_SUBCONNECTOR_Composite, "Composite" }, /* TV-out */ |
134 | { DRM_MODE_SUBCONNECTOR_SVIDEO, "SVIDEO" }, /* TV-out */ | 128 | { DRM_MODE_SUBCONNECTOR_SVIDEO, "SVIDEO" }, /* TV-out */ |
@@ -154,8 +148,8 @@ struct drm_conn_prop_enum_list { | |||
154 | /* | 148 | /* |
155 | * Connector and encoder types. | 149 | * Connector and encoder types. |
156 | */ | 150 | */ |
157 | static struct drm_conn_prop_enum_list drm_connector_enum_list[] = | 151 | static struct drm_conn_prop_enum_list drm_connector_enum_list[] = { |
158 | { { DRM_MODE_CONNECTOR_Unknown, "Unknown" }, | 152 | { DRM_MODE_CONNECTOR_Unknown, "Unknown" }, |
159 | { DRM_MODE_CONNECTOR_VGA, "VGA" }, | 153 | { DRM_MODE_CONNECTOR_VGA, "VGA" }, |
160 | { DRM_MODE_CONNECTOR_DVII, "DVI-I" }, | 154 | { DRM_MODE_CONNECTOR_DVII, "DVI-I" }, |
161 | { DRM_MODE_CONNECTOR_DVID, "DVI-D" }, | 155 | { DRM_MODE_CONNECTOR_DVID, "DVI-D" }, |
@@ -174,8 +168,8 @@ static struct drm_conn_prop_enum_list drm_connector_enum_list[] = | |||
174 | { DRM_MODE_CONNECTOR_DSI, "DSI" }, | 168 | { DRM_MODE_CONNECTOR_DSI, "DSI" }, |
175 | }; | 169 | }; |
176 | 170 | ||
177 | static const struct drm_prop_enum_list drm_encoder_enum_list[] = | 171 | static const struct drm_prop_enum_list drm_encoder_enum_list[] = { |
178 | { { DRM_MODE_ENCODER_NONE, "None" }, | 172 | { DRM_MODE_ENCODER_NONE, "None" }, |
179 | { DRM_MODE_ENCODER_DAC, "DAC" }, | 173 | { DRM_MODE_ENCODER_DAC, "DAC" }, |
180 | { DRM_MODE_ENCODER_TMDS, "TMDS" }, | 174 | { DRM_MODE_ENCODER_TMDS, "TMDS" }, |
181 | { DRM_MODE_ENCODER_LVDS, "LVDS" }, | 175 | { DRM_MODE_ENCODER_LVDS, "LVDS" }, |
@@ -185,8 +179,7 @@ static const struct drm_prop_enum_list drm_encoder_enum_list[] = | |||
185 | { DRM_MODE_ENCODER_DPMST, "DP MST" }, | 179 | { DRM_MODE_ENCODER_DPMST, "DP MST" }, |
186 | }; | 180 | }; |
187 | 181 | ||
188 | static const struct drm_prop_enum_list drm_subpixel_enum_list[] = | 182 | static const struct drm_prop_enum_list drm_subpixel_enum_list[] = { |
189 | { | ||
190 | { SubPixelUnknown, "Unknown" }, | 183 | { SubPixelUnknown, "Unknown" }, |
191 | { SubPixelHorizontalRGB, "Horizontal RGB" }, | 184 | { SubPixelHorizontalRGB, "Horizontal RGB" }, |
192 | { SubPixelHorizontalBGR, "Horizontal BGR" }, | 185 | { SubPixelHorizontalBGR, "Horizontal BGR" }, |
@@ -1142,6 +1135,7 @@ EXPORT_SYMBOL(drm_encoder_init); | |||
1142 | void drm_encoder_cleanup(struct drm_encoder *encoder) | 1135 | void drm_encoder_cleanup(struct drm_encoder *encoder) |
1143 | { | 1136 | { |
1144 | struct drm_device *dev = encoder->dev; | 1137 | struct drm_device *dev = encoder->dev; |
1138 | |||
1145 | drm_modeset_lock_all(dev); | 1139 | drm_modeset_lock_all(dev); |
1146 | drm_mode_object_put(dev, &encoder->base); | 1140 | drm_mode_object_put(dev, &encoder->base); |
1147 | kfree(encoder->name); | 1141 | kfree(encoder->name); |
@@ -1185,8 +1179,8 @@ int drm_universal_plane_init(struct drm_device *dev, struct drm_plane *plane, | |||
1185 | plane->base.properties = &plane->properties; | 1179 | plane->base.properties = &plane->properties; |
1186 | plane->dev = dev; | 1180 | plane->dev = dev; |
1187 | plane->funcs = funcs; | 1181 | plane->funcs = funcs; |
1188 | plane->format_types = kmalloc(sizeof(uint32_t) * format_count, | 1182 | plane->format_types = kmalloc_array(format_count, sizeof(uint32_t), |
1189 | GFP_KERNEL); | 1183 | GFP_KERNEL); |
1190 | if (!plane->format_types) { | 1184 | if (!plane->format_types) { |
1191 | DRM_DEBUG_KMS("out of memory when allocating plane\n"); | 1185 | DRM_DEBUG_KMS("out of memory when allocating plane\n"); |
1192 | drm_mode_object_put(dev, &plane->base); | 1186 | drm_mode_object_put(dev, &plane->base); |
@@ -1599,7 +1593,7 @@ static int drm_mode_group_init(struct drm_device *dev, struct drm_mode_group *gr | |||
1599 | total_objects += dev->mode_config.num_encoder; | 1593 | total_objects += dev->mode_config.num_encoder; |
1600 | total_objects += dev->mode_config.num_bridge; | 1594 | total_objects += dev->mode_config.num_bridge; |
1601 | 1595 | ||
1602 | group->id_list = kzalloc(total_objects * sizeof(uint32_t), GFP_KERNEL); | 1596 | group->id_list = kcalloc(total_objects, sizeof(uint32_t), GFP_KERNEL); |
1603 | if (!group->id_list) | 1597 | if (!group->id_list) |
1604 | return -ENOMEM; | 1598 | return -ENOMEM; |
1605 | 1599 | ||
@@ -1629,7 +1623,8 @@ int drm_mode_group_init_legacy_group(struct drm_device *dev, | |||
1629 | struct drm_bridge *bridge; | 1623 | struct drm_bridge *bridge; |
1630 | int ret; | 1624 | int ret; |
1631 | 1625 | ||
1632 | if ((ret = drm_mode_group_init(dev, group))) | 1626 | ret = drm_mode_group_init(dev, group); |
1627 | if (ret) | ||
1633 | return ret; | 1628 | return ret; |
1634 | 1629 | ||
1635 | list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) | 1630 | list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) |
@@ -2045,11 +2040,9 @@ int drm_mode_getconnector(struct drm_device *dev, void *data, | |||
2045 | 2040 | ||
2046 | props_count = connector->properties.count; | 2041 | props_count = connector->properties.count; |
2047 | 2042 | ||
2048 | for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { | 2043 | for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) |
2049 | if (connector->encoder_ids[i] != 0) { | 2044 | if (connector->encoder_ids[i] != 0) |
2050 | encoders_count++; | 2045 | encoders_count++; |
2051 | } | ||
2052 | } | ||
2053 | 2046 | ||
2054 | if (out_resp->count_modes == 0) { | 2047 | if (out_resp->count_modes == 0) { |
2055 | connector->funcs->fill_modes(connector, | 2048 | connector->funcs->fill_modes(connector, |
@@ -2533,7 +2526,7 @@ int drm_mode_setplane(struct drm_device *dev, void *data, | |||
2533 | * | 2526 | * |
2534 | * This is a little helper to wrap internal calls to the ->set_config driver | 2527 | * This is a little helper to wrap internal calls to the ->set_config driver |
2535 | * interface. The only thing it adds is correct refcounting dance. | 2528 | * interface. The only thing it adds is correct refcounting dance. |
2536 | * | 2529 | * |
2537 | * Returns: | 2530 | * Returns: |
2538 | * Zero on success, negative errno on failure. | 2531 | * Zero on success, negative errno on failure. |
2539 | */ | 2532 | */ |
@@ -2725,9 +2718,9 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data, | |||
2725 | goto out; | 2718 | goto out; |
2726 | } | 2719 | } |
2727 | 2720 | ||
2728 | connector_set = kmalloc(crtc_req->count_connectors * | 2721 | connector_set = kmalloc_array(crtc_req->count_connectors, |
2729 | sizeof(struct drm_connector *), | 2722 | sizeof(struct drm_connector *), |
2730 | GFP_KERNEL); | 2723 | GFP_KERNEL); |
2731 | if (!connector_set) { | 2724 | if (!connector_set) { |
2732 | ret = -ENOMEM; | 2725 | ret = -ENOMEM; |
2733 | goto out; | 2726 | goto out; |
@@ -2972,6 +2965,7 @@ int drm_mode_cursor2_ioctl(struct drm_device *dev, | |||
2972 | void *data, struct drm_file *file_priv) | 2965 | void *data, struct drm_file *file_priv) |
2973 | { | 2966 | { |
2974 | struct drm_mode_cursor2 *req = data; | 2967 | struct drm_mode_cursor2 *req = data; |
2968 | |||
2975 | return drm_mode_cursor_common(dev, req, file_priv); | 2969 | return drm_mode_cursor_common(dev, req, file_priv); |
2976 | } | 2970 | } |
2977 | 2971 | ||
@@ -3419,7 +3413,7 @@ int drm_mode_dirtyfb_ioctl(struct drm_device *dev, | |||
3419 | ret = -EINVAL; | 3413 | ret = -EINVAL; |
3420 | goto out_err1; | 3414 | goto out_err1; |
3421 | } | 3415 | } |
3422 | clips = kzalloc(num_clips * sizeof(*clips), GFP_KERNEL); | 3416 | clips = kcalloc(num_clips, sizeof(*clips), GFP_KERNEL); |
3423 | if (!clips) { | 3417 | if (!clips) { |
3424 | ret = -ENOMEM; | 3418 | ret = -ENOMEM; |
3425 | goto out_err1; | 3419 | goto out_err1; |
@@ -3520,7 +3514,8 @@ struct drm_property *drm_property_create(struct drm_device *dev, int flags, | |||
3520 | property->dev = dev; | 3514 | property->dev = dev; |
3521 | 3515 | ||
3522 | if (num_values) { | 3516 | if (num_values) { |
3523 | property->values = kzalloc(sizeof(uint64_t)*num_values, GFP_KERNEL); | 3517 | property->values = kcalloc(num_values, sizeof(uint64_t), |
3518 | GFP_KERNEL); | ||
3524 | if (!property->values) | 3519 | if (!property->values) |
3525 | goto fail; | 3520 | goto fail; |
3526 | } | 3521 | } |
@@ -4061,7 +4056,7 @@ int drm_mode_getblob_ioctl(struct drm_device *dev, | |||
4061 | 4056 | ||
4062 | if (out_resp->length == blob->length) { | 4057 | if (out_resp->length == blob->length) { |
4063 | blob_ptr = (void __user *)(unsigned long)out_resp->data; | 4058 | blob_ptr = (void __user *)(unsigned long)out_resp->data; |
4064 | if (copy_to_user(blob_ptr, blob->data, blob->length)){ | 4059 | if (copy_to_user(blob_ptr, blob->data, blob->length)) { |
4065 | ret = -EFAULT; | 4060 | ret = -EFAULT; |
4066 | goto done; | 4061 | goto done; |
4067 | } | 4062 | } |
@@ -4208,6 +4203,8 @@ EXPORT_SYMBOL(drm_mode_connector_update_edid_property); | |||
4208 | static bool drm_property_change_valid_get(struct drm_property *property, | 4203 | static bool drm_property_change_valid_get(struct drm_property *property, |
4209 | uint64_t value, struct drm_mode_object **ref) | 4204 | uint64_t value, struct drm_mode_object **ref) |
4210 | { | 4205 | { |
4206 | int i; | ||
4207 | |||
4211 | if (property->flags & DRM_MODE_PROP_IMMUTABLE) | 4208 | if (property->flags & DRM_MODE_PROP_IMMUTABLE) |
4212 | return false; | 4209 | return false; |
4213 | 4210 | ||
@@ -4219,13 +4216,14 @@ static bool drm_property_change_valid_get(struct drm_property *property, | |||
4219 | return true; | 4216 | return true; |
4220 | } else if (drm_property_type_is(property, DRM_MODE_PROP_SIGNED_RANGE)) { | 4217 | } else if (drm_property_type_is(property, DRM_MODE_PROP_SIGNED_RANGE)) { |
4221 | int64_t svalue = U642I64(value); | 4218 | int64_t svalue = U642I64(value); |
4219 | |||
4222 | if (svalue < U642I64(property->values[0]) || | 4220 | if (svalue < U642I64(property->values[0]) || |
4223 | svalue > U642I64(property->values[1])) | 4221 | svalue > U642I64(property->values[1])) |
4224 | return false; | 4222 | return false; |
4225 | return true; | 4223 | return true; |
4226 | } else if (drm_property_type_is(property, DRM_MODE_PROP_BITMASK)) { | 4224 | } else if (drm_property_type_is(property, DRM_MODE_PROP_BITMASK)) { |
4227 | int i; | ||
4228 | uint64_t valid_mask = 0; | 4225 | uint64_t valid_mask = 0; |
4226 | |||
4229 | for (i = 0; i < property->num_values; i++) | 4227 | for (i = 0; i < property->num_values; i++) |
4230 | valid_mask |= (1ULL << property->values[i]); | 4228 | valid_mask |= (1ULL << property->values[i]); |
4231 | return !(value & ~valid_mask); | 4229 | return !(value & ~valid_mask); |
@@ -4257,6 +4255,11 @@ static bool drm_property_change_valid_get(struct drm_property *property, | |||
4257 | return true; | 4255 | return true; |
4258 | return false; | 4256 | return false; |
4259 | } | 4257 | } |
4258 | |||
4259 | for (i = 0; i < property->num_values; i++) | ||
4260 | if (property->values[i] == value) | ||
4261 | return true; | ||
4262 | return false; | ||
4260 | } | 4263 | } |
4261 | 4264 | ||
4262 | static void drm_property_change_valid_put(struct drm_property *property, | 4265 | static void drm_property_change_valid_put(struct drm_property *property, |
@@ -4564,7 +4567,8 @@ int drm_mode_crtc_set_gamma_size(struct drm_crtc *crtc, | |||
4564 | { | 4567 | { |
4565 | crtc->gamma_size = gamma_size; | 4568 | crtc->gamma_size = gamma_size; |
4566 | 4569 | ||
4567 | crtc->gamma_store = kzalloc(gamma_size * sizeof(uint16_t) * 3, GFP_KERNEL); | 4570 | crtc->gamma_store = kcalloc(gamma_size, sizeof(uint16_t) * 3, |
4571 | GFP_KERNEL); | ||
4568 | if (!crtc->gamma_store) { | 4572 | if (!crtc->gamma_store) { |
4569 | crtc->gamma_size = 0; | 4573 | crtc->gamma_size = 0; |
4570 | return -ENOMEM; | 4574 | return -ENOMEM; |
@@ -4779,23 +4783,23 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev, | |||
4779 | if (page_flip->flags & DRM_MODE_PAGE_FLIP_EVENT) { | 4783 | if (page_flip->flags & DRM_MODE_PAGE_FLIP_EVENT) { |
4780 | ret = -ENOMEM; | 4784 | ret = -ENOMEM; |
4781 | spin_lock_irqsave(&dev->event_lock, flags); | 4785 | spin_lock_irqsave(&dev->event_lock, flags); |
4782 | if (file_priv->event_space < sizeof e->event) { | 4786 | if (file_priv->event_space < sizeof(e->event)) { |
4783 | spin_unlock_irqrestore(&dev->event_lock, flags); | 4787 | spin_unlock_irqrestore(&dev->event_lock, flags); |
4784 | goto out; | 4788 | goto out; |
4785 | } | 4789 | } |
4786 | file_priv->event_space -= sizeof e->event; | 4790 | file_priv->event_space -= sizeof(e->event); |
4787 | spin_unlock_irqrestore(&dev->event_lock, flags); | 4791 | spin_unlock_irqrestore(&dev->event_lock, flags); |
4788 | 4792 | ||
4789 | e = kzalloc(sizeof *e, GFP_KERNEL); | 4793 | e = kzalloc(sizeof(*e), GFP_KERNEL); |
4790 | if (e == NULL) { | 4794 | if (e == NULL) { |
4791 | spin_lock_irqsave(&dev->event_lock, flags); | 4795 | spin_lock_irqsave(&dev->event_lock, flags); |
4792 | file_priv->event_space += sizeof e->event; | 4796 | file_priv->event_space += sizeof(e->event); |
4793 | spin_unlock_irqrestore(&dev->event_lock, flags); | 4797 | spin_unlock_irqrestore(&dev->event_lock, flags); |
4794 | goto out; | 4798 | goto out; |
4795 | } | 4799 | } |
4796 | 4800 | ||
4797 | e->event.base.type = DRM_EVENT_FLIP_COMPLETE; | 4801 | e->event.base.type = DRM_EVENT_FLIP_COMPLETE; |
4798 | e->event.base.length = sizeof e->event; | 4802 | e->event.base.length = sizeof(e->event); |
4799 | e->event.user_data = page_flip->user_data; | 4803 | e->event.user_data = page_flip->user_data; |
4800 | e->base.event = &e->event.base; | 4804 | e->base.event = &e->event.base; |
4801 | e->base.file_priv = file_priv; | 4805 | e->base.file_priv = file_priv; |
@@ -4808,7 +4812,7 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev, | |||
4808 | if (ret) { | 4812 | if (ret) { |
4809 | if (page_flip->flags & DRM_MODE_PAGE_FLIP_EVENT) { | 4813 | if (page_flip->flags & DRM_MODE_PAGE_FLIP_EVENT) { |
4810 | spin_lock_irqsave(&dev->event_lock, flags); | 4814 | spin_lock_irqsave(&dev->event_lock, flags); |
4811 | file_priv->event_space += sizeof e->event; | 4815 | file_priv->event_space += sizeof(e->event); |
4812 | spin_unlock_irqrestore(&dev->event_lock, flags); | 4816 | spin_unlock_irqrestore(&dev->event_lock, flags); |
4813 | kfree(e); | 4817 | kfree(e); |
4814 | } | 4818 | } |
diff --git a/drivers/gpu/drm/drm_info.c b/drivers/gpu/drm/drm_info.c index 51efebd434f3..f1b32f91d941 100644 --- a/drivers/gpu/drm/drm_info.c +++ b/drivers/gpu/drm/drm_info.c | |||
@@ -153,30 +153,6 @@ int drm_bufs_info(struct seq_file *m, void *data) | |||
153 | } | 153 | } |
154 | 154 | ||
155 | /** | 155 | /** |
156 | * Called when "/proc/dri/.../vblank" is read. | ||
157 | */ | ||
158 | int drm_vblank_info(struct seq_file *m, void *data) | ||
159 | { | ||
160 | struct drm_info_node *node = (struct drm_info_node *) m->private; | ||
161 | struct drm_device *dev = node->minor->dev; | ||
162 | int crtc; | ||
163 | |||
164 | mutex_lock(&dev->struct_mutex); | ||
165 | for (crtc = 0; crtc < dev->num_crtcs; crtc++) { | ||
166 | seq_printf(m, "CRTC %d enable: %d\n", | ||
167 | crtc, atomic_read(&dev->vblank[crtc].refcount)); | ||
168 | seq_printf(m, "CRTC %d counter: %d\n", | ||
169 | crtc, drm_vblank_count(dev, crtc)); | ||
170 | seq_printf(m, "CRTC %d last wait: %d\n", | ||
171 | crtc, dev->vblank[crtc].last_wait); | ||
172 | seq_printf(m, "CRTC %d in modeset: %d\n", | ||
173 | crtc, dev->vblank[crtc].inmodeset); | ||
174 | } | ||
175 | mutex_unlock(&dev->struct_mutex); | ||
176 | return 0; | ||
177 | } | ||
178 | |||
179 | /** | ||
180 | * Called when "/proc/dri/.../clients" is read. | 156 | * Called when "/proc/dri/.../clients" is read. |
181 | * | 157 | * |
182 | */ | 158 | */ |
diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h index 7cc0a3516871..12a61d706827 100644 --- a/drivers/gpu/drm/drm_internal.h +++ b/drivers/gpu/drm/drm_internal.h | |||
@@ -55,7 +55,6 @@ void drm_prime_remove_buf_handle_locked(struct drm_prime_file_private *prime_fpr | |||
55 | int drm_name_info(struct seq_file *m, void *data); | 55 | int drm_name_info(struct seq_file *m, void *data); |
56 | int drm_vm_info(struct seq_file *m, void *data); | 56 | int drm_vm_info(struct seq_file *m, void *data); |
57 | int drm_bufs_info(struct seq_file *m, void *data); | 57 | int drm_bufs_info(struct seq_file *m, void *data); |
58 | int drm_vblank_info(struct seq_file *m, void *data); | ||
59 | int drm_clients_info(struct seq_file *m, void* data); | 58 | int drm_clients_info(struct seq_file *m, void* data); |
60 | int drm_gem_name_info(struct seq_file *m, void *data); | 59 | int drm_gem_name_info(struct seq_file *m, void *data); |
61 | 60 | ||
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c index f5a5f18efa5b..920cdb91e9d0 100644 --- a/drivers/gpu/drm/drm_irq.c +++ b/drivers/gpu/drm/drm_irq.c | |||
@@ -778,7 +778,7 @@ static struct timeval get_drm_timestamp(void) | |||
778 | 778 | ||
779 | /** | 779 | /** |
780 | * drm_get_last_vbltimestamp - retrieve raw timestamp for the most recent | 780 | * drm_get_last_vbltimestamp - retrieve raw timestamp for the most recent |
781 | * vblank interval | 781 | * vblank interval |
782 | * @dev: DRM device | 782 | * @dev: DRM device |
783 | * @crtc: which CRTC's vblank timestamp to retrieve | 783 | * @crtc: which CRTC's vblank timestamp to retrieve |
784 | * @tvblank: Pointer to target struct timeval which should receive the timestamp | 784 | * @tvblank: Pointer to target struct timeval which should receive the timestamp |
@@ -910,6 +910,7 @@ void drm_send_vblank_event(struct drm_device *dev, int crtc, | |||
910 | { | 910 | { |
911 | struct timeval now; | 911 | struct timeval now; |
912 | unsigned int seq; | 912 | unsigned int seq; |
913 | |||
913 | if (crtc >= 0) { | 914 | if (crtc >= 0) { |
914 | seq = drm_vblank_count_and_time(dev, crtc, &now); | 915 | seq = drm_vblank_count_and_time(dev, crtc, &now); |
915 | } else { | 916 | } else { |
@@ -1382,7 +1383,7 @@ static int drm_queue_vblank_event(struct drm_device *dev, int pipe, | |||
1382 | unsigned int seq; | 1383 | unsigned int seq; |
1383 | int ret; | 1384 | int ret; |
1384 | 1385 | ||
1385 | e = kzalloc(sizeof *e, GFP_KERNEL); | 1386 | e = kzalloc(sizeof(*e), GFP_KERNEL); |
1386 | if (e == NULL) { | 1387 | if (e == NULL) { |
1387 | ret = -ENOMEM; | 1388 | ret = -ENOMEM; |
1388 | goto err_put; | 1389 | goto err_put; |
@@ -1391,7 +1392,7 @@ static int drm_queue_vblank_event(struct drm_device *dev, int pipe, | |||
1391 | e->pipe = pipe; | 1392 | e->pipe = pipe; |
1392 | e->base.pid = current->pid; | 1393 | e->base.pid = current->pid; |
1393 | e->event.base.type = DRM_EVENT_VBLANK; | 1394 | e->event.base.type = DRM_EVENT_VBLANK; |
1394 | e->event.base.length = sizeof e->event; | 1395 | e->event.base.length = sizeof(e->event); |
1395 | e->event.user_data = vblwait->request.signal; | 1396 | e->event.user_data = vblwait->request.signal; |
1396 | e->base.event = &e->event.base; | 1397 | e->base.event = &e->event.base; |
1397 | e->base.file_priv = file_priv; | 1398 | e->base.file_priv = file_priv; |
@@ -1411,12 +1412,12 @@ static int drm_queue_vblank_event(struct drm_device *dev, int pipe, | |||
1411 | goto err_unlock; | 1412 | goto err_unlock; |
1412 | } | 1413 | } |
1413 | 1414 | ||
1414 | if (file_priv->event_space < sizeof e->event) { | 1415 | if (file_priv->event_space < sizeof(e->event)) { |
1415 | ret = -EBUSY; | 1416 | ret = -EBUSY; |
1416 | goto err_unlock; | 1417 | goto err_unlock; |
1417 | } | 1418 | } |
1418 | 1419 | ||
1419 | file_priv->event_space -= sizeof e->event; | 1420 | file_priv->event_space -= sizeof(e->event); |
1420 | seq = drm_vblank_count_and_time(dev, pipe, &now); | 1421 | seq = drm_vblank_count_and_time(dev, pipe, &now); |
1421 | 1422 | ||
1422 | if ((vblwait->request.type & _DRM_VBLANK_NEXTONMISS) && | 1423 | if ((vblwait->request.type & _DRM_VBLANK_NEXTONMISS) && |
diff --git a/drivers/gpu/drm/drm_plane_helper.c b/drivers/gpu/drm/drm_plane_helper.c index ae61fb21ea86..f24c4cfe674b 100644 --- a/drivers/gpu/drm/drm_plane_helper.c +++ b/drivers/gpu/drm/drm_plane_helper.c | |||
@@ -142,6 +142,17 @@ int drm_plane_helper_check_update(struct drm_plane *plane, | |||
142 | { | 142 | { |
143 | int hscale, vscale; | 143 | int hscale, vscale; |
144 | 144 | ||
145 | if (!fb) { | ||
146 | *visible = false; | ||
147 | return 0; | ||
148 | } | ||
149 | |||
150 | /* crtc should only be NULL when disabling (i.e., !fb) */ | ||
151 | if (WARN_ON(!crtc)) { | ||
152 | *visible = false; | ||
153 | return 0; | ||
154 | } | ||
155 | |||
145 | if (!crtc->enabled && !can_update_disabled) { | 156 | if (!crtc->enabled && !can_update_disabled) { |
146 | DRM_DEBUG_KMS("Cannot update plane of a disabled CRTC.\n"); | 157 | DRM_DEBUG_KMS("Cannot update plane of a disabled CRTC.\n"); |
147 | return -EINVAL; | 158 | return -EINVAL; |
@@ -155,11 +166,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane, | |||
155 | return -ERANGE; | 166 | return -ERANGE; |
156 | } | 167 | } |
157 | 168 | ||
158 | if (!fb) { | ||
159 | *visible = false; | ||
160 | return 0; | ||
161 | } | ||
162 | |||
163 | *visible = drm_rect_clip_scaled(src, dest, clip, hscale, vscale); | 169 | *visible = drm_rect_clip_scaled(src, dest, clip, hscale, vscale); |
164 | if (!*visible) | 170 | if (!*visible) |
165 | /* | 171 | /* |
diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c index a7672e100d8b..ac2a6ebce674 100644 --- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c +++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c | |||
@@ -323,10 +323,6 @@ static void mdp4_crtc_commit(struct drm_crtc *crtc) | |||
323 | drm_crtc_vblank_put(crtc); | 323 | drm_crtc_vblank_put(crtc); |
324 | } | 324 | } |
325 | 325 | ||
326 | static void mdp4_crtc_load_lut(struct drm_crtc *crtc) | ||
327 | { | ||
328 | } | ||
329 | |||
330 | static int mdp4_crtc_atomic_check(struct drm_crtc *crtc, | 326 | static int mdp4_crtc_atomic_check(struct drm_crtc *crtc, |
331 | struct drm_crtc_state *state) | 327 | struct drm_crtc_state *state) |
332 | { | 328 | { |
@@ -524,7 +520,6 @@ static const struct drm_crtc_helper_funcs mdp4_crtc_helper_funcs = { | |||
524 | .mode_set_base = drm_helper_crtc_mode_set_base, | 520 | .mode_set_base = drm_helper_crtc_mode_set_base, |
525 | .prepare = mdp4_crtc_prepare, | 521 | .prepare = mdp4_crtc_prepare, |
526 | .commit = mdp4_crtc_commit, | 522 | .commit = mdp4_crtc_commit, |
527 | .load_lut = mdp4_crtc_load_lut, | ||
528 | .atomic_check = mdp4_crtc_atomic_check, | 523 | .atomic_check = mdp4_crtc_atomic_check, |
529 | .atomic_begin = mdp4_crtc_atomic_begin, | 524 | .atomic_begin = mdp4_crtc_atomic_begin, |
530 | .atomic_flush = mdp4_crtc_atomic_flush, | 525 | .atomic_flush = mdp4_crtc_atomic_flush, |
diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c index 0e9a2e3a82d7..92d52a56b3b8 100644 --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c | |||
@@ -275,10 +275,6 @@ static void mdp5_crtc_commit(struct drm_crtc *crtc) | |||
275 | mdp5_disable(get_kms(crtc)); | 275 | mdp5_disable(get_kms(crtc)); |
276 | } | 276 | } |
277 | 277 | ||
278 | static void mdp5_crtc_load_lut(struct drm_crtc *crtc) | ||
279 | { | ||
280 | } | ||
281 | |||
282 | struct plane_state { | 278 | struct plane_state { |
283 | struct drm_plane *plane; | 279 | struct drm_plane *plane; |
284 | struct mdp5_plane_state *state; | 280 | struct mdp5_plane_state *state; |
@@ -407,7 +403,6 @@ static const struct drm_crtc_helper_funcs mdp5_crtc_helper_funcs = { | |||
407 | .mode_set_base = drm_helper_crtc_mode_set_base, | 403 | .mode_set_base = drm_helper_crtc_mode_set_base, |
408 | .prepare = mdp5_crtc_prepare, | 404 | .prepare = mdp5_crtc_prepare, |
409 | .commit = mdp5_crtc_commit, | 405 | .commit = mdp5_crtc_commit, |
410 | .load_lut = mdp5_crtc_load_lut, | ||
411 | .atomic_check = mdp5_crtc_atomic_check, | 406 | .atomic_check = mdp5_crtc_atomic_check, |
412 | .atomic_begin = mdp5_crtc_atomic_begin, | 407 | .atomic_begin = mdp5_crtc_atomic_begin, |
413 | .atomic_flush = mdp5_crtc_atomic_flush, | 408 | .atomic_flush = mdp5_crtc_atomic_flush, |
diff --git a/drivers/gpu/drm/sti/sti_drm_crtc.c b/drivers/gpu/drm/sti/sti_drm_crtc.c index 4c651c200f20..e6f6ef7c4866 100644 --- a/drivers/gpu/drm/sti/sti_drm_crtc.c +++ b/drivers/gpu/drm/sti/sti_drm_crtc.c | |||
@@ -190,11 +190,6 @@ out: | |||
190 | return ret; | 190 | return ret; |
191 | } | 191 | } |
192 | 192 | ||
193 | static void sti_drm_crtc_load_lut(struct drm_crtc *crtc) | ||
194 | { | ||
195 | /* do nothing */ | ||
196 | } | ||
197 | |||
198 | static void sti_drm_crtc_disable(struct drm_crtc *crtc) | 193 | static void sti_drm_crtc_disable(struct drm_crtc *crtc) |
199 | { | 194 | { |
200 | struct sti_mixer *mixer = to_sti_mixer(crtc); | 195 | struct sti_mixer *mixer = to_sti_mixer(crtc); |
@@ -249,7 +244,6 @@ static struct drm_crtc_helper_funcs sti_crtc_helper_funcs = { | |||
249 | .mode_fixup = sti_drm_crtc_mode_fixup, | 244 | .mode_fixup = sti_drm_crtc_mode_fixup, |
250 | .mode_set = sti_drm_crtc_mode_set, | 245 | .mode_set = sti_drm_crtc_mode_set, |
251 | .mode_set_base = sti_drm_crtc_mode_set_base, | 246 | .mode_set_base = sti_drm_crtc_mode_set_base, |
252 | .load_lut = sti_drm_crtc_load_lut, | ||
253 | .disable = sti_drm_crtc_disable, | 247 | .disable = sti_drm_crtc_disable, |
254 | }; | 248 | }; |
255 | 249 | ||
diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c index 3367960286a6..7fe7bb1227cf 100644 --- a/drivers/gpu/drm/tegra/dc.c +++ b/drivers/gpu/drm/tegra/dc.c | |||
@@ -1095,10 +1095,6 @@ static void tegra_crtc_commit(struct drm_crtc *crtc) | |||
1095 | tegra_dc_commit(dc); | 1095 | tegra_dc_commit(dc); |
1096 | } | 1096 | } |
1097 | 1097 | ||
1098 | static void tegra_crtc_load_lut(struct drm_crtc *crtc) | ||
1099 | { | ||
1100 | } | ||
1101 | |||
1102 | static const struct drm_crtc_helper_funcs tegra_crtc_helper_funcs = { | 1098 | static const struct drm_crtc_helper_funcs tegra_crtc_helper_funcs = { |
1103 | .disable = tegra_crtc_disable, | 1099 | .disable = tegra_crtc_disable, |
1104 | .mode_fixup = tegra_crtc_mode_fixup, | 1100 | .mode_fixup = tegra_crtc_mode_fixup, |
@@ -1106,7 +1102,6 @@ static const struct drm_crtc_helper_funcs tegra_crtc_helper_funcs = { | |||
1106 | .mode_set_base = tegra_crtc_mode_set_base, | 1102 | .mode_set_base = tegra_crtc_mode_set_base, |
1107 | .prepare = tegra_crtc_prepare, | 1103 | .prepare = tegra_crtc_prepare, |
1108 | .commit = tegra_crtc_commit, | 1104 | .commit = tegra_crtc_commit, |
1109 | .load_lut = tegra_crtc_load_lut, | ||
1110 | }; | 1105 | }; |
1111 | 1106 | ||
1112 | static irqreturn_t tegra_dc_irq(int irq, void *data) | 1107 | static irqreturn_t tegra_dc_irq(int irq, void *data) |
diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h index 86574b0005ff..aae71cb32123 100644 --- a/include/uapi/drm/drm_mode.h +++ b/include/uapi/drm/drm_mode.h | |||
@@ -338,7 +338,7 @@ struct drm_mode_fb_cmd2 { | |||
338 | 338 | ||
339 | /* | 339 | /* |
340 | * In case of planar formats, this ioctl allows up to 4 | 340 | * In case of planar formats, this ioctl allows up to 4 |
341 | * buffer objects with offets and pitches per plane. | 341 | * buffer objects with offsets and pitches per plane. |
342 | * The pitch and offset order is dictated by the fourcc, | 342 | * The pitch and offset order is dictated by the fourcc, |
343 | * e.g. NV12 (http://fourcc.org/yuv.php#NV12) is described as: | 343 | * e.g. NV12 (http://fourcc.org/yuv.php#NV12) is described as: |
344 | * | 344 | * |
@@ -346,9 +346,9 @@ struct drm_mode_fb_cmd2 { | |||
346 | * followed by an interleaved U/V plane containing | 346 | * followed by an interleaved U/V plane containing |
347 | * 8 bit 2x2 subsampled colour difference samples. | 347 | * 8 bit 2x2 subsampled colour difference samples. |
348 | * | 348 | * |
349 | * So it would consist of Y as offset[0] and UV as | 349 | * So it would consist of Y as offsets[0] and UV as |
350 | * offeset[1]. Note that offset[0] will generally | 350 | * offsets[1]. Note that offsets[0] will generally |
351 | * be 0. | 351 | * be 0 (but this is not required). |
352 | */ | 352 | */ |
353 | __u32 handles[4]; | 353 | __u32 handles[4]; |
354 | __u32 pitches[4]; /* pitch for each plane */ | 354 | __u32 pitches[4]; /* pitch for each plane */ |