Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  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
 29struct drm_crtc;
 30struct drm_plane;
 31
 32uint32_t drm_color_lut_extract(uint32_t user_input, uint32_t bit_precision);
 33
 34void drm_crtc_enable_color_mgmt(struct drm_crtc *crtc,
 35				uint degamma_lut_size,
 36				bool has_ctm,
 37				uint gamma_lut_size);
 38
 39int 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 */
 49static inline int drm_color_lut_size(const struct drm_property_blob *blob)
 50{
 51	return blob->length / sizeof(struct drm_color_lut);
 52}
 53
 54enum 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
 61enum drm_color_range {
 62	DRM_COLOR_YCBCR_LIMITED_RANGE,
 63	DRM_COLOR_YCBCR_FULL_RANGE,
 64	DRM_COLOR_RANGE_MAX,
 65};
 66
 67int 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 */
 79enum 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
 99int drm_color_lut_check(const struct drm_property_blob *lut, u32 tests);
100#endif