linux/include/drm/drm_color_mgmt.h
<<
>>
Prefs
   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
 101