1/*
2 * Copyright 2012, Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *      Alexander von Gluck, kallisti5@unixzen.com
7 */
8
9
10#include "dp.h"
11
12
13#define TRACE_DISPLAY
14#ifdef TRACE_DISPLAY
15extern "C" void _sPrintf(const char* format, ...);
16#   define TRACE(x...) _sPrintf("radeon_hd: " x)
17#else
18#   define TRACE(x...) ;
19#endif
20
21#define ERROR(x...) _sPrintf("radeon_hd: " x)
22
23
24uint32
25dp_encode_link_rate(uint32 linkRate)
26{
27	switch (linkRate) {
28		case 162000:
29			// 1.62 Ghz
30			return DP_LINK_RATE_162;
31		case 270000:
32			// 2.7 Ghz
33			return DP_LINK_RATE_270;
34		case 540000:
35			// 5.4 Ghz
36			return DP_LINK_RATE_540;
37	}
38
39	ERROR("%s: Unknown DisplayPort Link Rate!\n",
40		__func__);
41	return DP_LINK_RATE_162;
42}
43
44
45uint32
46dp_decode_link_rate(uint32 rawLinkRate)
47{
48	switch (rawLinkRate) {
49		case DP_LINK_RATE_162:
50			return 162000;
51		case DP_LINK_RATE_270:
52			return 270000;
53		case DP_LINK_RATE_540:
54			return 540000;
55	}
56	ERROR("%s: Unknown DisplayPort Link Rate!\n",
57		__func__);
58	return 162000;
59}
60
61
62uint32
63dp_get_pixel_clock_max(int linkRate, int laneCount, int bpp)
64{
65	return (linkRate * laneCount * 8) / bpp;
66}
67
68
69uint32
70dp_get_link_rate_max(dp_info* dpInfo)
71{
72	return dp_decode_link_rate(dpInfo->config[DP_MAX_LINK_RATE]);
73}
74
75
76uint32
77dp_get_lane_count_max(dp_info* dpInfo)
78{
79	return dpInfo->config[DP_MAX_LANE_COUNT] & DP_MAX_LANE_COUNT_MASK;
80}
81