Dhaval Patel | 14d46ce | 2017-01-17 16:28:12 -0800 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (c) 2015-2017, The Linux Foundation. All rights reserved. |
| 3 | * Copyright (C) 2013 Red Hat |
| 4 | * Author: Rob Clark <robdclark@gmail.com> |
Alan Kwong | 83285fb | 2016-10-21 20:51:17 -0400 | [diff] [blame] | 5 | * |
Dhaval Patel | 14d46ce | 2017-01-17 16:28:12 -0800 | [diff] [blame] | 6 | * This program is free software; you can redistribute it and/or modify it |
| 7 | * under the terms of the GNU General Public License version 2 as published by |
| 8 | * the Free Software Foundation. |
Alan Kwong | 83285fb | 2016-10-21 20:51:17 -0400 | [diff] [blame] | 9 | * |
Dhaval Patel | 14d46ce | 2017-01-17 16:28:12 -0800 | [diff] [blame] | 10 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 11 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| 12 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 13 | * more details. |
| 14 | * |
| 15 | * You should have received a copy of the GNU General Public License along with |
| 16 | * this program. If not, see <http://www.gnu.org/licenses/>. |
Alan Kwong | 83285fb | 2016-10-21 20:51:17 -0400 | [diff] [blame] | 17 | */ |
| 18 | |
| 19 | #ifndef _SDE_PLANE_H_ |
| 20 | #define _SDE_PLANE_H_ |
| 21 | |
| 22 | #include <drm/drm_crtc.h> |
| 23 | |
| 24 | #include "msm_prop.h" |
Alan Kwong | 4dd64c8 | 2017-02-04 18:41:51 -0800 | [diff] [blame] | 25 | #include "sde_kms.h" |
Alan Kwong | 83285fb | 2016-10-21 20:51:17 -0400 | [diff] [blame] | 26 | #include "sde_hw_mdss.h" |
Alan Kwong | 4dd64c8 | 2017-02-04 18:41:51 -0800 | [diff] [blame] | 27 | #include "sde_hw_rot.h" |
| 28 | #include "sde_hw_sspp.h" |
| 29 | |
| 30 | /** |
| 31 | * struct sde_plane_rot_state - state of pre-sspp rotator stage |
| 32 | * @sequence_id: sequence identifier, incremented per state duplication |
| 33 | * @rot_hw: Pointer to rotator hardware driver |
| 34 | * @rot90: true if rotation of 90 degree is required |
| 35 | * @hflip: true if horizontal flip is required |
| 36 | * @vflip: true if vertical flip is required |
Alan Kwong | 4dd64c8 | 2017-02-04 18:41:51 -0800 | [diff] [blame] | 37 | * @rot_cmd: rotator configuration command |
| 38 | * @nplane: total number of drm plane attached to rotator |
| 39 | * @in_fb: input fb attached to rotator |
| 40 | * @in_rotation: input rotation property of rotator stage |
| 41 | * @in_rot_rect: input rectangle of the rotator in plane fb coordinate |
| 42 | * @out_rotation: output rotation property of rotator stage |
| 43 | * @out_rot_rect: output rectangle of the rotator in plane fb coordinate |
| 44 | * @out_src_rect: output rectangle of the plane source in plane fb coordinate |
| 45 | * @out_src_x: output src_x of rotator stage in rotator output fb coordinate |
| 46 | * @out_src_y: output src y of rotator stage in rotator output fb coordinate |
| 47 | * @out_src_w: output src w of rotator stage in rotator output fb ooordinate |
| 48 | * @out_src_h: output src h of rotator stage in rotator output fb coordinate |
| 49 | * @out_fb_width: output framebuffer width of rotator stage |
| 50 | * @out_fb_height: output framebuffer height of rotator stage |
| 51 | * @out_fb_pixel_format: output framebuffer pixel format of rotator stage |
| 52 | * @out_fb_modifier: output framebuffer modifier of rotator stage |
| 53 | * @out_fb_flags: output framebuffer flags of rotator stage |
| 54 | * @out_sbuf: true if output streaming buffer is required |
| 55 | * @out_fb_format: Pointer to output framebuffer format of rotator stage |
| 56 | * @out_fb: Pointer to output drm framebuffer of rotator stage |
| 57 | * @out_fbo: framebuffer object of output streaming buffer |
| 58 | * @out_xpos: relative horizontal position of the plane (0 - leftmost) |
| 59 | */ |
| 60 | struct sde_plane_rot_state { |
| 61 | u32 sequence_id; |
| 62 | struct sde_hw_rot *rot_hw; |
| 63 | bool rot90; |
| 64 | bool hflip; |
| 65 | bool vflip; |
Alan Kwong | 4dd64c8 | 2017-02-04 18:41:51 -0800 | [diff] [blame] | 66 | struct sde_hw_rot_cmd rot_cmd; |
| 67 | int nplane; |
| 68 | /* input */ |
| 69 | struct drm_framebuffer *in_fb; |
| 70 | struct drm_rect in_rot_rect; |
| 71 | u32 in_rotation; |
| 72 | /* output */ |
| 73 | struct drm_rect out_rot_rect; |
| 74 | struct drm_rect out_src_rect; |
| 75 | u32 out_rotation; |
| 76 | u32 out_src_x; |
| 77 | u32 out_src_y; |
| 78 | u32 out_src_w; |
| 79 | u32 out_src_h; |
| 80 | u32 out_fb_width; |
| 81 | u32 out_fb_height; |
| 82 | u32 out_fb_pixel_format; |
| 83 | u64 out_fb_modifier[4]; |
| 84 | u32 out_fb_flags; |
| 85 | bool out_sbuf; |
| 86 | const struct sde_format *out_fb_format; |
| 87 | struct drm_framebuffer *out_fb; |
| 88 | struct sde_kms_fbo *out_fbo; |
| 89 | int out_xpos; |
| 90 | }; |
Alan Kwong | 83285fb | 2016-10-21 20:51:17 -0400 | [diff] [blame] | 91 | |
Veera Sundaram Sankaran | 82916e0 | 2017-03-29 18:44:22 -0700 | [diff] [blame] | 92 | /* dirty bits for update function */ |
| 93 | #define SDE_PLANE_DIRTY_RECTS 0x1 |
| 94 | #define SDE_PLANE_DIRTY_FORMAT 0x2 |
| 95 | #define SDE_PLANE_DIRTY_SHARPEN 0x4 |
Alan Kwong | 2349d74 | 2017-04-20 08:27:30 -0700 | [diff] [blame] | 96 | #define SDE_PLANE_DIRTY_PERF 0x8 |
Abhijit Kulkarni | 333d6c0 | 2017-05-01 18:32:18 -0700 | [diff] [blame] | 97 | #define SDE_PLANE_DIRTY_FB_TRANSLATION_MODE 0x10 |
Veera Sundaram Sankaran | 82916e0 | 2017-03-29 18:44:22 -0700 | [diff] [blame] | 98 | #define SDE_PLANE_DIRTY_ALL 0xFFFFFFFF |
| 99 | |
Alan Kwong | 83285fb | 2016-10-21 20:51:17 -0400 | [diff] [blame] | 100 | /** |
Clarence Ip | 172033f | 2017-06-13 10:52:56 -0400 | [diff] [blame] | 101 | * enum sde_plane_sclcheck_state - User scaler data status |
| 102 | * |
| 103 | * @SDE_PLANE_SCLCHECK_NONE: No user data provided |
| 104 | * @SDE_PLANE_SCLCHECK_INVALID: Invalid user data provided |
| 105 | * @SDE_PLANE_SCLCHECK_SCALER_V1: Valid scaler v1 data |
| 106 | * @SDE_PLANE_SCLCHECK_SCALER_V1_CHECK: Unchecked scaler v1 data |
| 107 | * @SDE_PLANE_SCLCHECK_SCALER_V2: Valid scaler v2 data |
| 108 | * @SDE_PLANE_SCLCHECK_SCALER_V2_CHECK: Unchecked scaler v2 data |
| 109 | */ |
| 110 | enum sde_plane_sclcheck_state { |
| 111 | SDE_PLANE_SCLCHECK_NONE, |
| 112 | SDE_PLANE_SCLCHECK_INVALID, |
| 113 | SDE_PLANE_SCLCHECK_SCALER_V1, |
| 114 | SDE_PLANE_SCLCHECK_SCALER_V1_CHECK, |
| 115 | SDE_PLANE_SCLCHECK_SCALER_V2, |
| 116 | SDE_PLANE_SCLCHECK_SCALER_V2_CHECK, |
| 117 | }; |
| 118 | |
| 119 | /** |
Alan Kwong | 83285fb | 2016-10-21 20:51:17 -0400 | [diff] [blame] | 120 | * struct sde_plane_state: Define sde extension of drm plane state object |
| 121 | * @base: base drm plane state object |
Clarence Ip | 4a2955d | 2017-07-04 18:04:33 -0400 | [diff] [blame] | 122 | * @property_state: Local storage for msm_prop properties |
Alan Kwong | 83285fb | 2016-10-21 20:51:17 -0400 | [diff] [blame] | 123 | * @property_values: cached plane property values |
Abhijit Kulkarni | 333d6c0 | 2017-05-01 18:32:18 -0700 | [diff] [blame] | 124 | * @aspace: pointer to address space for input/output buffers |
Alan Kwong | 83285fb | 2016-10-21 20:51:17 -0400 | [diff] [blame] | 125 | * @input_fence: dereferenced input fence pointer |
| 126 | * @stage: assigned by crtc blender |
Veera Sundaram Sankaran | 02dd6ac | 2016-12-22 15:08:29 -0800 | [diff] [blame] | 127 | * @excl_rect: exclusion rect values |
Alan Kwong | 83285fb | 2016-10-21 20:51:17 -0400 | [diff] [blame] | 128 | * @dirty: bitmask for which pipe h/w config functions need to be updated |
Jeykumar Sankaran | 2e65503 | 2017-02-04 14:05:45 -0800 | [diff] [blame] | 129 | * @multirect_index: index of the rectangle of SSPP |
| 130 | * @multirect_mode: parallel or time multiplex multirect mode |
Alan Kwong | 83285fb | 2016-10-21 20:51:17 -0400 | [diff] [blame] | 131 | * @pending: whether the current update is still pending |
Veera Sundaram Sankaran | 47e718f | 2017-09-13 16:47:23 -0700 | [diff] [blame] | 132 | * @defer_prepare_fb: indicate if prepare_fb call was deferred |
Clarence Ip | 172033f | 2017-06-13 10:52:56 -0400 | [diff] [blame] | 133 | * @scaler3_cfg: configuration data for scaler3 |
| 134 | * @pixel_ext: configuration data for pixel extensions |
| 135 | * @scaler_check_state: indicates status of user provided pixel extension data |
Alan Kwong | 143f50c | 2017-04-28 07:34:28 -0700 | [diff] [blame] | 136 | * @cdp_cfg: CDP configuration |
Alan Kwong | 83285fb | 2016-10-21 20:51:17 -0400 | [diff] [blame] | 137 | */ |
| 138 | struct sde_plane_state { |
| 139 | struct drm_plane_state base; |
Clarence Ip | 4a2955d | 2017-07-04 18:04:33 -0400 | [diff] [blame] | 140 | struct msm_property_state property_state; |
| 141 | struct msm_property_value property_values[PLANE_PROP_COUNT]; |
Abhijit Kulkarni | 333d6c0 | 2017-05-01 18:32:18 -0700 | [diff] [blame] | 142 | struct msm_gem_address_space *aspace; |
Alan Kwong | 83285fb | 2016-10-21 20:51:17 -0400 | [diff] [blame] | 143 | void *input_fence; |
| 144 | enum sde_stage stage; |
Veera Sundaram Sankaran | 02dd6ac | 2016-12-22 15:08:29 -0800 | [diff] [blame] | 145 | struct sde_rect excl_rect; |
Alan Kwong | 83285fb | 2016-10-21 20:51:17 -0400 | [diff] [blame] | 146 | uint32_t dirty; |
Jeykumar Sankaran | 2e65503 | 2017-02-04 14:05:45 -0800 | [diff] [blame] | 147 | uint32_t multirect_index; |
| 148 | uint32_t multirect_mode; |
Alan Kwong | 83285fb | 2016-10-21 20:51:17 -0400 | [diff] [blame] | 149 | bool pending; |
Veera Sundaram Sankaran | 47e718f | 2017-09-13 16:47:23 -0700 | [diff] [blame] | 150 | bool defer_prepare_fb; |
Alan Kwong | 4dd64c8 | 2017-02-04 18:41:51 -0800 | [diff] [blame] | 151 | |
Clarence Ip | 172033f | 2017-06-13 10:52:56 -0400 | [diff] [blame] | 152 | /* scaler configuration */ |
| 153 | struct sde_hw_scaler3_cfg scaler3_cfg; |
| 154 | struct sde_hw_pixel_ext pixel_ext; |
| 155 | enum sde_plane_sclcheck_state scaler_check_state; |
| 156 | |
Alan Kwong | 4dd64c8 | 2017-02-04 18:41:51 -0800 | [diff] [blame] | 157 | /* @sc_cfg: system_cache configuration */ |
| 158 | struct sde_hw_pipe_sc_cfg sc_cfg; |
| 159 | struct sde_plane_rot_state rot; |
Alan Kwong | 143f50c | 2017-04-28 07:34:28 -0700 | [diff] [blame] | 160 | |
| 161 | struct sde_hw_pipe_cdp_cfg cdp_cfg; |
Alan Kwong | 83285fb | 2016-10-21 20:51:17 -0400 | [diff] [blame] | 162 | }; |
| 163 | |
Jeykumar Sankaran | 2e65503 | 2017-02-04 14:05:45 -0800 | [diff] [blame] | 164 | /** |
| 165 | * struct sde_multirect_plane_states: Defines multirect pair of drm plane states |
| 166 | * @r0: drm plane configured on rect 0 |
| 167 | * @r1: drm plane configured on rect 1 |
| 168 | */ |
| 169 | struct sde_multirect_plane_states { |
| 170 | const struct drm_plane_state *r0; |
| 171 | const struct drm_plane_state *r1; |
| 172 | }; |
| 173 | |
Alan Kwong | 83285fb | 2016-10-21 20:51:17 -0400 | [diff] [blame] | 174 | #define to_sde_plane_state(x) \ |
| 175 | container_of(x, struct sde_plane_state, base) |
| 176 | |
| 177 | /** |
| 178 | * sde_plane_get_property - Query integer value of plane property |
| 179 | * @S: Pointer to plane state |
| 180 | * @X: Property index, from enum msm_mdp_plane_property |
| 181 | * Returns: Integer value of requested property |
| 182 | */ |
Clarence Ip | 4a2955d | 2017-07-04 18:04:33 -0400 | [diff] [blame] | 183 | #define sde_plane_get_property(S, X) ((S) && ((X) < PLANE_PROP_COUNT) ? \ |
| 184 | ((S)->property_values[(X)].value) : 0) |
Alan Kwong | 83285fb | 2016-10-21 20:51:17 -0400 | [diff] [blame] | 185 | |
| 186 | /** |
| 187 | * sde_plane_pipe - return sspp identifier for the given plane |
| 188 | * @plane: Pointer to DRM plane object |
| 189 | * Returns: sspp identifier of the given plane |
| 190 | */ |
| 191 | enum sde_sspp sde_plane_pipe(struct drm_plane *plane); |
| 192 | |
| 193 | /** |
Jeykumar Sankaran | 2e65503 | 2017-02-04 14:05:45 -0800 | [diff] [blame] | 194 | * is_sde_plane_virtual - check for virtual plane |
| 195 | * @plane: Pointer to DRM plane object |
| 196 | * returns: true - if the plane is virtual |
| 197 | * false - if the plane is primary |
| 198 | */ |
| 199 | bool is_sde_plane_virtual(struct drm_plane *plane); |
| 200 | |
| 201 | /** |
Alan Kwong | 4dd64c8 | 2017-02-04 18:41:51 -0800 | [diff] [blame] | 202 | * sde_plane_get_ctl_flush - get control flush mask |
| 203 | * @plane: Pointer to DRM plane object |
| 204 | * @ctl: Pointer to control hardware |
Clarence Ip | 7e5f000 | 2017-05-29 18:46:56 -0400 | [diff] [blame] | 205 | * @flush_sspp: Pointer to sspp flush control word |
| 206 | * @flush_rot: Pointer to rotator flush control word |
Alan Kwong | 4dd64c8 | 2017-02-04 18:41:51 -0800 | [diff] [blame] | 207 | */ |
| 208 | void sde_plane_get_ctl_flush(struct drm_plane *plane, struct sde_hw_ctl *ctl, |
Clarence Ip | 7e5f000 | 2017-05-29 18:46:56 -0400 | [diff] [blame] | 209 | u32 *flush_sspp, u32 *flush_rot); |
Alan Kwong | 4dd64c8 | 2017-02-04 18:41:51 -0800 | [diff] [blame] | 210 | |
| 211 | /** |
Clarence Ip | b776b53 | 2017-09-12 18:30:06 -0400 | [diff] [blame] | 212 | * sde_plane_rot_calc_prefill - calculate rotator start prefill |
| 213 | * @plane: Pointer to drm plane |
| 214 | * return: prefill time in line |
Alan Kwong | 4dd64c8 | 2017-02-04 18:41:51 -0800 | [diff] [blame] | 215 | */ |
Clarence Ip | b776b53 | 2017-09-12 18:30:06 -0400 | [diff] [blame] | 216 | u32 sde_plane_rot_calc_prefill(struct drm_plane *plane); |
Alan Kwong | 4dd64c8 | 2017-02-04 18:41:51 -0800 | [diff] [blame] | 217 | |
| 218 | /** |
Alan Kwong | 346223e | 2017-06-30 15:29:22 -0400 | [diff] [blame] | 219 | * sde_plane_restore - restore hw state if previously power collapsed |
| 220 | * @plane: Pointer to drm plane structure |
| 221 | */ |
| 222 | void sde_plane_restore(struct drm_plane *plane); |
| 223 | |
| 224 | /** |
Alan Kwong | 83285fb | 2016-10-21 20:51:17 -0400 | [diff] [blame] | 225 | * sde_plane_flush - final plane operations before commit flush |
| 226 | * @plane: Pointer to drm plane structure |
| 227 | */ |
| 228 | void sde_plane_flush(struct drm_plane *plane); |
| 229 | |
| 230 | /** |
Clarence Ip | 2606dd6 | 2017-10-14 21:11:14 -0400 | [diff] [blame^] | 231 | * sde_plane_halt_requests - control halting of vbif transactions for this plane |
| 232 | * This function isn't thread safe. Plane halt enable/disable requests |
| 233 | * should always be made from the same commit cycle. |
| 234 | * @plane: Pointer to drm plane structure |
| 235 | * @enable: Whether to enable/disable halting of vbif transactions |
| 236 | */ |
| 237 | void sde_plane_halt_requests(struct drm_plane *plane, bool enable); |
| 238 | |
| 239 | /** |
| 240 | * sde_plane_reset_rot - reset rotator operations before commit kickoff |
| 241 | * @plane: Pointer to drm plane structure |
| 242 | * @state: Pointer to plane state associated with reset request |
| 243 | * Returns: Zero on success |
| 244 | */ |
| 245 | int sde_plane_reset_rot(struct drm_plane *plane, struct drm_plane_state *state); |
| 246 | |
| 247 | /** |
Clarence Ip | 8ee4995 | 2017-09-20 11:10:50 -0400 | [diff] [blame] | 248 | * sde_plane_kickoff_rot - final plane rotator operations before commit kickoff |
Clarence Ip | eb39cce | 2017-07-19 14:12:43 -0400 | [diff] [blame] | 249 | * @plane: Pointer to drm plane structure |
Clarence Ip | 8ee4995 | 2017-09-20 11:10:50 -0400 | [diff] [blame] | 250 | * Returns: Zero on success |
Clarence Ip | eb39cce | 2017-07-19 14:12:43 -0400 | [diff] [blame] | 251 | */ |
Clarence Ip | 8ee4995 | 2017-09-20 11:10:50 -0400 | [diff] [blame] | 252 | int sde_plane_kickoff_rot(struct drm_plane *plane); |
Clarence Ip | eb39cce | 2017-07-19 14:12:43 -0400 | [diff] [blame] | 253 | |
| 254 | /** |
Abhijit Kulkarni | 1b3340c | 2017-06-22 12:39:37 -0700 | [diff] [blame] | 255 | * sde_plane_set_error: enable/disable error condition |
| 256 | * @plane: pointer to drm_plane structure |
| 257 | */ |
| 258 | void sde_plane_set_error(struct drm_plane *plane, bool error); |
| 259 | |
| 260 | /** |
Alan Kwong | 83285fb | 2016-10-21 20:51:17 -0400 | [diff] [blame] | 261 | * sde_plane_init - create new sde plane for the given pipe |
| 262 | * @dev: Pointer to DRM device |
| 263 | * @pipe: sde hardware pipe identifier |
| 264 | * @primary_plane: true if this pipe is primary plane for crtc |
| 265 | * @possible_crtcs: bitmask of crtc that can be attached to the given pipe |
Jeykumar Sankaran | 2e65503 | 2017-02-04 14:05:45 -0800 | [diff] [blame] | 266 | * @master_plane_id: primary plane id of a multirect pipe. 0 value passed for |
| 267 | * a regular plane initialization. A non-zero primary plane |
| 268 | * id will be passed for a virtual pipe initialization. |
| 269 | * |
Alan Kwong | 83285fb | 2016-10-21 20:51:17 -0400 | [diff] [blame] | 270 | */ |
| 271 | struct drm_plane *sde_plane_init(struct drm_device *dev, |
| 272 | uint32_t pipe, bool primary_plane, |
Jeykumar Sankaran | 2e65503 | 2017-02-04 14:05:45 -0800 | [diff] [blame] | 273 | unsigned long possible_crtcs, u32 master_plane_id); |
| 274 | |
| 275 | /** |
| 276 | * sde_plane_validate_multirecti_v2 - validate the multirect planes |
| 277 | * against hw limitations |
| 278 | * @plane: drm plate states of the multirect pair |
| 279 | */ |
Jeykumar Sankaran | 2e65503 | 2017-02-04 14:05:45 -0800 | [diff] [blame] | 280 | int sde_plane_validate_multirect_v2(struct sde_multirect_plane_states *plane); |
Alan Kwong | 83285fb | 2016-10-21 20:51:17 -0400 | [diff] [blame] | 281 | |
| 282 | /** |
Jeykumar Sankaran | e964dc7 | 2017-05-10 19:26:43 -0700 | [diff] [blame] | 283 | * sde_plane_clear_multirect - clear multirect bits for the given pipe |
| 284 | * @drm_state: Pointer to DRM plane state |
| 285 | */ |
| 286 | void sde_plane_clear_multirect(const struct drm_plane_state *drm_state); |
| 287 | |
| 288 | /** |
Alan Kwong | 83285fb | 2016-10-21 20:51:17 -0400 | [diff] [blame] | 289 | * sde_plane_wait_input_fence - wait for input fence object |
| 290 | * @plane: Pointer to DRM plane object |
| 291 | * @wait_ms: Wait timeout value |
| 292 | * Returns: Zero on success |
| 293 | */ |
| 294 | int sde_plane_wait_input_fence(struct drm_plane *plane, uint32_t wait_ms); |
| 295 | |
| 296 | /** |
| 297 | * sde_plane_color_fill - enables color fill on plane |
| 298 | * @plane: Pointer to DRM plane object |
| 299 | * @color: RGB fill color value, [23..16] Blue, [15..8] Green, [7..0] Red |
| 300 | * @alpha: 8-bit fill alpha value, 255 selects 100% alpha |
| 301 | * Returns: 0 on success |
| 302 | */ |
| 303 | int sde_plane_color_fill(struct drm_plane *plane, |
| 304 | uint32_t color, uint32_t alpha); |
| 305 | |
Veera Sundaram Sankaran | 82916e0 | 2017-03-29 18:44:22 -0700 | [diff] [blame] | 306 | /** |
| 307 | * sde_plane_set_revalidate - sets revalidate flag which forces a full |
| 308 | * validation of the plane properties in the next atomic check |
| 309 | * @plane: Pointer to DRM plane object |
| 310 | * @enable: Boolean to set/unset the flag |
| 311 | */ |
| 312 | void sde_plane_set_revalidate(struct drm_plane *plane, bool enable); |
| 313 | |
Lloyd Atkinson | e08229c | 2017-10-02 17:53:30 -0400 | [diff] [blame] | 314 | /** |
| 315 | * sde_plane_helper_reset_properties - reset properties to default values in the |
| 316 | * given DRM plane state object |
| 317 | * @plane: Pointer to DRM plane object |
| 318 | * @plane_state: Pointer to DRM plane state object |
| 319 | * Returns: 0 on success, negative errno on failure |
| 320 | */ |
| 321 | int sde_plane_helper_reset_custom_properties(struct drm_plane *plane, |
| 322 | struct drm_plane_state *plane_state); |
| 323 | |
Alan Kwong | 83285fb | 2016-10-21 20:51:17 -0400 | [diff] [blame] | 324 | #endif /* _SDE_PLANE_H_ */ |