aboutsummaryrefslogtreecommitdiffstats
path: root/include/drm
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2016-09-21 04:59:28 -0400
committerSean Paul <seanpaul@chromium.org>2016-09-22 03:04:02 -0400
commitf1e2f66ce2d9f732fec184ab885fba4b53c06016 (patch)
tree5881a515e6cd2e94a14d17ca36a40eeed0e9d023 /include/drm
parent1e4d84c6589e9e9d19884e705085fe4a1885b012 (diff)
drm: Extract drm_color_mgmt.[hc]
For both the new degamm/lut/gamma atomic combo, and the old legacy gamma tables. Acked-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Cc: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com> Signed-off-by: Sean Paul <seanpaul@chromium.org> Link: http://patchwork.freedesktop.org/patch/msgid/1474448370-32227-5-git-send-email-daniel.vetter@ffwll.ch
Diffstat (limited to 'include/drm')
-rw-r--r--include/drm/drm_color_mgmt.h56
-rw-r--r--include/drm/drm_crtc.h28
2 files changed, 57 insertions, 27 deletions
diff --git a/include/drm/drm_color_mgmt.h b/include/drm/drm_color_mgmt.h
new file mode 100644
index 000000000000..1e01c58bbe81
--- /dev/null
+++ b/include/drm/drm_color_mgmt.h
@@ -0,0 +1,56 @@
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
28void drm_crtc_enable_color_mgmt(struct drm_crtc *crtc,
29 uint degamma_lut_size,
30 bool has_ctm,
31 uint gamma_lut_size);
32
33int drm_mode_crtc_set_gamma_size(struct drm_crtc *crtc,
34 int gamma_size);
35
36/*
37 * Extract a degamma/gamma LUT value provided by user and round it to the
38 * precision supported by the hardware.
39 */
40static inline uint32_t drm_color_lut_extract(uint32_t user_input,
41 uint32_t bit_precision)
42{
43 uint32_t val = user_input;
44 uint32_t max = 0xffff >> (16 - bit_precision);
45
46 /* Round only if we're not using full precision. */
47 if (bit_precision < 16) {
48 val += 1UL << (16 - bit_precision - 1);
49 val >>= 16 - bit_precision;
50 }
51
52 return clamp_val(val, 0, max);
53}
54
55
56#endif
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index 8d06cabede59..a544b7502493 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -46,6 +46,7 @@
46#include <drm/drm_edid.h> 46#include <drm/drm_edid.h>
47#include <drm/drm_plane.h> 47#include <drm/drm_plane.h>
48#include <drm/drm_blend.h> 48#include <drm/drm_blend.h>
49#include <drm/drm_color_mgmt.h>
49 50
50struct drm_device; 51struct drm_device;
51struct drm_mode_set; 52struct drm_mode_set;
@@ -1337,9 +1338,6 @@ extern void drm_mode_config_init(struct drm_device *dev);
1337extern void drm_mode_config_reset(struct drm_device *dev); 1338extern void drm_mode_config_reset(struct drm_device *dev);
1338extern void drm_mode_config_cleanup(struct drm_device *dev); 1339extern void drm_mode_config_cleanup(struct drm_device *dev);
1339 1340
1340extern int drm_mode_crtc_set_gamma_size(struct drm_crtc *crtc,
1341 int gamma_size);
1342
1343extern int drm_mode_set_config_internal(struct drm_mode_set *set); 1341extern int drm_mode_set_config_internal(struct drm_mode_set *set);
1344 1342
1345extern struct drm_tile_group *drm_mode_create_tile_group(struct drm_device *dev, 1343extern struct drm_tile_group *drm_mode_create_tile_group(struct drm_device *dev,
@@ -1349,11 +1347,6 @@ extern struct drm_tile_group *drm_mode_get_tile_group(struct drm_device *dev,
1349extern void drm_mode_put_tile_group(struct drm_device *dev, 1347extern void drm_mode_put_tile_group(struct drm_device *dev,
1350 struct drm_tile_group *tg); 1348 struct drm_tile_group *tg);
1351 1349
1352extern void drm_crtc_enable_color_mgmt(struct drm_crtc *crtc,
1353 uint degamma_lut_size,
1354 bool has_ctm,
1355 uint gamma_lut_size);
1356
1357/* Helpers */ 1350/* Helpers */
1358static inline struct drm_crtc *drm_crtc_find(struct drm_device *dev, 1351static inline struct drm_crtc *drm_crtc_find(struct drm_device *dev,
1359 uint32_t id) 1352 uint32_t id)
@@ -1363,25 +1356,6 @@ static inline struct drm_crtc *drm_crtc_find(struct drm_device *dev,
1363 return mo ? obj_to_crtc(mo) : NULL; 1356 return mo ? obj_to_crtc(mo) : NULL;
1364} 1357}
1365 1358
1366/*
1367 * Extract a degamma/gamma LUT value provided by user and round it to the
1368 * precision supported by the hardware.
1369 */
1370static inline uint32_t drm_color_lut_extract(uint32_t user_input,
1371 uint32_t bit_precision)
1372{
1373 uint32_t val = user_input;
1374 uint32_t max = 0xffff >> (16 - bit_precision);
1375
1376 /* Round only if we're not using full precision. */
1377 if (bit_precision < 16) {
1378 val += 1UL << (16 - bit_precision - 1);
1379 val >>= 16 - bit_precision;
1380 }
1381
1382 return clamp_val(val, 0, max);
1383}
1384
1385#define drm_for_each_crtc(crtc, dev) \ 1359#define drm_for_each_crtc(crtc, dev) \
1386 list_for_each_entry(crtc, &(dev)->mode_config.crtc_list, head) 1360 list_for_each_entry(crtc, &(dev)->mode_config.crtc_list, head)
1387 1361