XenevaOS
Loading...
Searching...
No Matches
drm_color_mgmt.h
Go to the documentation of this file.
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 <linux/math64.h>
28#include <drm/drm_property.h>
29
30struct drm_crtc;
31struct drm_plane;
32
43static inline u32 drm_color_lut_extract(u32 user_input, int bit_precision)
44{
45 if (bit_precision > 16)
46 return DIV_ROUND_CLOSEST_ULL(mul_u32_u32(user_input, (1 << bit_precision) - 1),
47 (1 << 16) - 1);
48 else
49 return DIV_ROUND_CLOSEST(user_input * ((1 << bit_precision) - 1),
50 (1 << 16) - 1);
51}
52
61static inline u32 drm_color_lut32_extract(u32 user_input, int bit_precision)
62{
63 u64 max = (bit_precision >= 64) ? ~0ULL : (1ULL << bit_precision) - 1;
64
65 return DIV_ROUND_CLOSEST_ULL((u64)user_input * max,
66 (1ULL << 32) - 1);
67}
68
70
72 uint degamma_lut_size,
73 bool has_ctm,
74 uint gamma_lut_size);
75
77 int gamma_size);
78
86static inline int drm_color_lut_size(const struct drm_property_blob *blob)
87{
88 return blob->length / sizeof(struct drm_color_lut);
89}
90
98static inline int drm_color_lut32_size(const struct drm_property_blob *blob)
99{
100 return blob->length / sizeof(struct drm_color_lut32);
101}
102
109
115
117 u32 supported_encodings,
118 u32 supported_ranges,
119 enum drm_color_encoding default_encoding,
120 enum drm_color_range default_range);
121
147
148int drm_color_lut_check(const struct drm_property_blob *lut, u32 tests);
149
150/*
151 * Gamma-LUT programming
152 */
153
154typedef void (*drm_crtc_set_lut_func)(struct drm_crtc *, unsigned int, u16, u16, u16);
155
156void drm_crtc_load_gamma_888(struct drm_crtc *crtc, const struct drm_color_lut *lut,
157 drm_crtc_set_lut_func set_gamma);
159 drm_crtc_set_lut_func set_gamma);
161 drm_crtc_set_lut_func set_gamma);
162
166
167/*
168 * Color-LUT programming
169 */
170
171void drm_crtc_load_palette_8(struct drm_crtc *crtc, const struct drm_color_lut *lut,
172 drm_crtc_set_lut_func set_palette);
173
176
177int drm_color_lut32_check(const struct drm_property_blob *lut, u32 tests);
178#endif
#define DIV_ROUND_CLOSEST
Definition math.h:92
#define DIV_ROUND_CLOSEST_ULL(x, divisor)
Definition math.h:97
unsigned int uint
Definition types.h:80
#define BIT(nr)
Definition bitops.h:112
drm_color_encoding
Definition drm_color_mgmt.h:103
@ DRM_COLOR_YCBCR_BT2020
Definition drm_color_mgmt.h:106
@ DRM_COLOR_YCBCR_BT709
Definition drm_color_mgmt.h:105
@ DRM_COLOR_YCBCR_BT601
Definition drm_color_mgmt.h:104
@ DRM_COLOR_ENCODING_MAX
Definition drm_color_mgmt.h:107
void drm_crtc_load_gamma_888(struct drm_crtc *crtc, const struct drm_color_lut *lut, drm_crtc_set_lut_func set_gamma)
drm_color_range
Definition drm_color_mgmt.h:110
@ DRM_COLOR_RANGE_MAX
Definition drm_color_mgmt.h:113
@ DRM_COLOR_YCBCR_FULL_RANGE
Definition drm_color_mgmt.h:112
@ DRM_COLOR_YCBCR_LIMITED_RANGE
Definition drm_color_mgmt.h:111
void drm_crtc_fill_palette_8(struct drm_crtc *crtc, drm_crtc_set_lut_func set_palette)
void drm_crtc_fill_gamma_555(struct drm_crtc *crtc, drm_crtc_set_lut_func set_gamma)
drm_color_lut_tests
Definition drm_color_mgmt.h:128
@ DRM_COLOR_LUT_EQUAL_CHANNELS
Definition drm_color_mgmt.h:137
@ DRM_COLOR_LUT_NON_DECREASING
Definition drm_color_mgmt.h:145
void(* drm_crtc_set_lut_func)(struct drm_crtc *, unsigned int, u16, u16, u16)
Definition drm_color_mgmt.h:154
void drm_crtc_load_gamma_565_from_888(struct drm_crtc *crtc, const struct drm_color_lut *lut, drm_crtc_set_lut_func set_gamma)
int drm_color_lut_check(const struct drm_property_blob *lut, u32 tests)
void drm_crtc_fill_gamma_565(struct drm_crtc *crtc, drm_crtc_set_lut_func set_gamma)
int drm_color_lut32_check(const struct drm_property_blob *lut, u32 tests)
u64 drm_color_ctm_s31_32_to_qm_n(u64 user_input, u32 m, u32 n)
void drm_crtc_enable_color_mgmt(struct drm_crtc *crtc, uint degamma_lut_size, bool has_ctm, uint gamma_lut_size)
int drm_plane_create_color_properties(struct drm_plane *plane, u32 supported_encodings, u32 supported_ranges, enum drm_color_encoding default_encoding, enum drm_color_range default_range)
void drm_crtc_fill_palette_332(struct drm_crtc *crtc, drm_crtc_set_lut_func set_palette)
void drm_crtc_load_palette_8(struct drm_crtc *crtc, const struct drm_color_lut *lut, drm_crtc_set_lut_func set_palette)
void drm_crtc_fill_gamma_888(struct drm_crtc *crtc, drm_crtc_set_lut_func set_gamma)
void drm_crtc_load_gamma_555_from_888(struct drm_crtc *crtc, const struct drm_color_lut *lut, drm_crtc_set_lut_func set_gamma)
int drm_mode_crtc_set_gamma_size(struct drm_crtc *crtc, int gamma_size)
struct drm_crtc * crtc
Definition drm_crtc.h:1238
struct drm_plane * plane
Definition drm_plane.h:828
uint64_t u64
Definition kernel.h:17
uint16_t u16
Definition kernel.h:15
uint32_t u32
Definition kernel.h:16
#define max(a, b)
Definition minmax.h:28
Definition drm_mode.h:869
Definition drm_mode.h:853
Definition drm_crtc.h:955
Definition drm_plane.h:641
Definition drm_property.h:216
size_t length
Definition drm_property.h:221
#define ULL(x)
Definition const.h:79