1 | /* |
2 | * Copyright (c) 2016 Intel Corporation |
3 | * |
4 | * Permission to use, copy, modify, distribute, and sell this software and its |
5 | * documentation for any purpose is hereby granted without fee, provided that |
6 | * the above copyright notice appear in all copies and that both that copyright |
7 | * notice and this permission notice appear in supporting documentation, and |
8 | * that the name of the copyright holders not be used in advertising or |
9 | * publicity pertaining to distribution of the software without specific, |
10 | * written prior permission. The copyright holders make no representations |
11 | * about the suitability of this software for any purpose. It is provided "as |
12 | * is" without express or implied warranty. |
13 | * |
14 | * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, |
15 | * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO |
16 | * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR |
17 | * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, |
18 | * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER |
19 | * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE |
20 | * OF THIS SOFTWARE. |
21 | */ |
22 | |
23 | #ifndef __DRM_COLOR_MGMT_H__ |
24 | #define __DRM_COLOR_MGMT_H__ |
25 | |
26 | #include <linux/ctype.h> |
27 | #include <drm/drm_property.h> |
28 | |
29 | struct drm_crtc; |
30 | struct drm_plane; |
31 | |
32 | uint32_t (uint32_t user_input, uint32_t bit_precision); |
33 | |
34 | void drm_crtc_enable_color_mgmt(struct drm_crtc *crtc, |
35 | uint degamma_lut_size, |
36 | bool has_ctm, |
37 | uint gamma_lut_size); |
38 | |
39 | int drm_mode_crtc_set_gamma_size(struct drm_crtc *crtc, |
40 | int gamma_size); |
41 | |
42 | /** |
43 | * drm_color_lut_size - calculate the number of entries in the LUT |
44 | * @blob: blob containing the LUT |
45 | * |
46 | * Returns: |
47 | * The number of entries in the color LUT stored in @blob. |
48 | */ |
49 | static inline int drm_color_lut_size(const struct drm_property_blob *blob) |
50 | { |
51 | return blob->length / sizeof(struct drm_color_lut); |
52 | } |
53 | |
54 | enum drm_color_encoding { |
55 | DRM_COLOR_YCBCR_BT601, |
56 | DRM_COLOR_YCBCR_BT709, |
57 | DRM_COLOR_YCBCR_BT2020, |
58 | DRM_COLOR_ENCODING_MAX, |
59 | }; |
60 | |
61 | enum drm_color_range { |
62 | DRM_COLOR_YCBCR_LIMITED_RANGE, |
63 | DRM_COLOR_YCBCR_FULL_RANGE, |
64 | DRM_COLOR_RANGE_MAX, |
65 | }; |
66 | |
67 | int drm_plane_create_color_properties(struct drm_plane *plane, |
68 | u32 supported_encodings, |
69 | u32 supported_ranges, |
70 | enum drm_color_encoding default_encoding, |
71 | enum drm_color_range default_range); |
72 | |
73 | /** |
74 | * enum drm_color_lut_tests - hw-specific LUT tests to perform |
75 | * |
76 | * The drm_color_lut_check() function takes a bitmask of the values here to |
77 | * determine which tests to apply to a userspace-provided LUT. |
78 | */ |
79 | enum drm_color_lut_tests { |
80 | /** |
81 | * @DRM_COLOR_LUT_EQUAL_CHANNELS: |
82 | * |
83 | * Checks whether the entries of a LUT all have equal values for the |
84 | * red, green, and blue channels. Intended for hardware that only |
85 | * accepts a single value per LUT entry and assumes that value applies |
86 | * to all three color components. |
87 | */ |
88 | DRM_COLOR_LUT_EQUAL_CHANNELS = BIT(0), |
89 | |
90 | /** |
91 | * @DRM_COLOR_LUT_NON_DECREASING: |
92 | * |
93 | * Checks whether the entries of a LUT are always flat or increasing |
94 | * (never decreasing). |
95 | */ |
96 | DRM_COLOR_LUT_NON_DECREASING = BIT(1), |
97 | }; |
98 | |
99 | int drm_color_lut_check(const struct drm_property_blob *lut, u32 tests); |
100 | #endif |
101 | |