blob: d6113093dcf84e1b94db722db4aa54853315bf9c [file] [log] [blame]
Nico Huber83693c82016-10-08 22:17:55 +02001--
Nico Huberaf9cc9e2017-01-09 13:11:32 +01002-- Copyright (C) 2015-2017 secunet Security Networks AG
Nico Huber83693c82016-10-08 22:17:55 +02003--
4-- This program is free software; you can redistribute it and/or modify
5-- it under the terms of the GNU General Public License as published by
Nico Huber125a29e2016-10-18 00:23:54 +02006-- the Free Software Foundation; either version 2 of the License, or
7-- (at your option) any later version.
Nico Huber83693c82016-10-08 22:17:55 +02008--
9-- This program is distributed in the hope that it will be useful,
10-- but WITHOUT ANY WARRANTY; without even the implied warranty of
11-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12-- GNU General Public License for more details.
13--
14
Nico Huber83693c82016-10-08 22:17:55 +020015with HW.GFX.GMA.Config;
16with HW.GFX.GMA.Panel;
Angel Pons8d5c24d2021-03-01 15:59:58 +010017with HW.GFX.GMA.DP_Dual_Mode;
Nico Huber83693c82016-10-08 22:17:55 +020018with HW.GFX.GMA.DP_Info;
Nico Huber83693c82016-10-08 22:17:55 +020019
20with HW.Debug;
21with GNAT.Source_Info;
22
23package body HW.GFX.GMA.Connector_Info is
24
Nico Huber995436b2016-11-20 02:21:51 +010025 procedure Preferred_Link_Setting
26 (Port_Cfg : in out Port_Config;
27 Success : out Boolean)
Nico Huber83693c82016-10-08 22:17:55 +020028 is
Nico Huber995436b2016-11-20 02:21:51 +010029 DP_Port : constant GMA.DP_Port :=
Nico Huber83693c82016-10-08 22:17:55 +020030 (if Port_Cfg.Port = DIGI_A then
31 DP_A
32 else
33 (case Port_Cfg.PCH_Port is
34 when PCH_DP_B => DP_B,
35 when PCH_DP_C => DP_C,
36 when PCH_DP_D => DP_D,
Nico Huber995436b2016-11-20 02:21:51 +010037 when others => GMA.DP_Port'First));
Nico Huber83693c82016-10-08 22:17:55 +020038 begin
39 pragma Debug (Debug.Put_Line (GNAT.Source_Info.Enclosing_Entity));
40
41 if Port_Cfg.Display = DP then
Nico Huber2bbd6e72020-01-07 18:22:59 +010042 if GMA.Config.Use_PP_VDD_Override then
43 Panel.VDD_Override (Port_Cfg.Panel);
44 else
45 Panel.On (Port_Cfg.Panel);
Nico Huber83693c82016-10-08 22:17:55 +020046 end if;
47
Angel Pons8d5c24d2021-03-01 15:59:58 +010048 DP_Dual_Mode.Switch_LSPCON (DP_Port);
49
Nico Huber83693c82016-10-08 22:17:55 +020050 DP_Info.Read_Caps
51 (Link => Port_Cfg.DP,
Nico Huber995436b2016-11-20 02:21:51 +010052 Port => DP_Port,
Nico Huber83693c82016-10-08 22:17:55 +020053 Success => Success);
54 if Success then
Greg V3d3452f2019-10-08 02:05:05 +030055 DP_Info.Read_eDP_Rates
56 (Link => Port_Cfg.DP,
57 Port => DP_Port);
58
Nico Huber83693c82016-10-08 22:17:55 +020059 DP_Info.Preferred_Link_Setting
60 (Link => Port_Cfg.DP,
61 Mode => Port_Cfg.Mode,
62 Success => Success);
Nico Huberaf9cc9e2017-01-09 13:11:32 +010063 pragma Debug (Success, DP_Info.Dump_Link_Setting (Port_Cfg.DP));
Nico Huber83693c82016-10-08 22:17:55 +020064 end if;
65 else
66 Success := True;
67 end if;
68 end Preferred_Link_Setting;
69
70 procedure Next_Link_Setting
71 (Port_Cfg : in out Port_Config;
72 Success : out Boolean)
73 is
74 begin
75 pragma Debug (Debug.Put_Line (GNAT.Source_Info.Enclosing_Entity));
76
77 if Port_Cfg.Display = DP then
78 DP_Info.Next_Link_Setting
79 (Link => Port_Cfg.DP,
80 Mode => Port_Cfg.Mode,
81 Success => Success);
Nico Huberaf9cc9e2017-01-09 13:11:32 +010082 pragma Debug (Success, DP_Info.Dump_Link_Setting (Port_Cfg.DP));
Nico Huber83693c82016-10-08 22:17:55 +020083 else
84 Success := False;
85 end if;
86 end Next_Link_Setting;
87
88 ----------------------------------------------------------------------------
89
90 function Default_BPC (Port_Cfg : Port_Config) return HW.GFX.BPC_Type
91 is
92 begin
93 return
94 (if Port_Cfg.Port = DIGI_A or
Arthur Heymans5d08a932018-03-28 17:00:18 +020095 (Port_Cfg.Is_FDI and Port_Cfg.PCH_Port = PCH_LVDS) or
96 Port_Cfg.Port = LVDS
Nico Huber83693c82016-10-08 22:17:55 +020097 then 6
98 else 8);
99 end Default_BPC;
100
101end HW.GFX.GMA.Connector_Info;