|
64 | 64 |
|
65 | 65 | static const struct drm_prop_enum_list drm_colorop_type_enum_list[] = { |
66 | 66 | { DRM_COLOROP_1D_CURVE, "1D Curve" }, |
| 67 | + { DRM_COLOROP_1D_LUT, "1D LUT" }, |
67 | 68 | { DRM_COLOROP_CTM_3X4, "3x4 Matrix"}, |
68 | 69 | }; |
69 | 70 |
|
@@ -264,6 +265,47 @@ static int drm_colorop_create_data_prop(struct drm_device *dev, struct drm_color |
264 | 265 | return 0; |
265 | 266 | } |
266 | 267 |
|
| 268 | +/** |
| 269 | + * drm_plane_colorop_curve_1d_lut_init - Initialize a DRM_COLOROP_1D_LUT |
| 270 | + * |
| 271 | + * @dev: DRM device |
| 272 | + * @colorop: The drm_colorop object to initialize |
| 273 | + * @plane: The associated drm_plane |
| 274 | + * @lut_size: LUT size supported by driver |
| 275 | + * @return zero on success, -E value on failure |
| 276 | + */ |
| 277 | +int drm_plane_colorop_curve_1d_lut_init(struct drm_device *dev, struct drm_colorop *colorop, |
| 278 | + struct drm_plane *plane, uint32_t lut_size) |
| 279 | +{ |
| 280 | + struct drm_property *prop; |
| 281 | + int ret; |
| 282 | + |
| 283 | + ret = drm_plane_colorop_init(dev, colorop, plane, DRM_COLOROP_1D_LUT); |
| 284 | + if (ret) |
| 285 | + return ret; |
| 286 | + |
| 287 | + /* initialize 1D LUT only attribute */ |
| 288 | + /* LUT size */ |
| 289 | + prop = drm_property_create_range(dev, DRM_MODE_PROP_IMMUTABLE | DRM_MODE_PROP_ATOMIC, |
| 290 | + "SIZE", 0, UINT_MAX); |
| 291 | + if (!prop) |
| 292 | + return -ENOMEM; |
| 293 | + |
| 294 | + colorop->size_property = prop; |
| 295 | + drm_object_attach_property(&colorop->base, colorop->size_property, lut_size); |
| 296 | + colorop->size = lut_size; |
| 297 | + |
| 298 | + /* data */ |
| 299 | + ret = drm_colorop_create_data_prop(dev, colorop); |
| 300 | + if (ret) |
| 301 | + return ret; |
| 302 | + |
| 303 | + drm_colorop_reset(colorop); |
| 304 | + |
| 305 | + return 0; |
| 306 | +} |
| 307 | +EXPORT_SYMBOL(drm_plane_colorop_curve_1d_lut_init); |
| 308 | + |
267 | 309 | int drm_plane_colorop_ctm_3x4_init(struct drm_device *dev, struct drm_colorop *colorop, |
268 | 310 | struct drm_plane *plane) |
269 | 311 | { |
@@ -371,6 +413,7 @@ void drm_colorop_reset(struct drm_colorop *colorop) |
371 | 413 |
|
372 | 414 | static const char * const colorop_type_name[] = { |
373 | 415 | [DRM_COLOROP_1D_CURVE] = "1D Curve", |
| 416 | + [DRM_COLOROP_1D_LUT] = "1D LUT", |
374 | 417 | [DRM_COLOROP_CTM_3X4] = "3x4 Matrix", |
375 | 418 | }; |
376 | 419 |
|
|
0 commit comments