Chameleon

Chameleon Svn Source Tree

Root/trunk/i386/libsaio/hda.c

1/*
2 *HDA injector / Audio Enabler
3 *
4 *Copyright (C) 2012Chameleon Team
5 *Edit by Fabio (ErmaC)
6 *HDA bus scans and codecs enumeration by Zenith432
7 *
8 *HDA injector is free software: you can redistribute it and/or modify
9 *it under the terms of the GNU General Public License as published by
10 *the Free Software Foundation, either version 3 of the License, or
11 *(at your option) any later version.
12 *
13 *HDA injector is distributed in the hope that it will be useful,
14 *but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 *GNU General Public License for more details.
17 *
18 *Alternatively you can choose to comply with APSL
19 *
20 *Permission is hereby granted, free of charge, to any person obtaining a
21 *copy of this software and associated documentation files (the "Software"),
22 *to deal in the Software without restriction, including without limitation
23 *the rights to use, copy, modify, merge, publish, distribute, sublicense,
24 *and/or sell copies of the Software, and to permit persons to whom the
25 *Software is furnished to do so, subject to the following conditions:
26 *
27 *The above copyright notice and this permission notice shall be included in
28 *all copies or substantial portions of the Software.
29 *
30 ******************************************************************************
31 * http://www.leidinger.net/FreeBSD/dox/dev_sound/html/df/d54/hdac_8c_source.html
32 *
33 * Copyright (c) 2006 Stephane E. Potvin <sepotvin@videotron.ca>
34 * Copyright (c) 2006 Ariff Abdullah <ariff@FreeBSD.org>
35 * Copyright (c) 2008-2012 Alexander Motin <mav@FreeBSD.org>
36 * All rights reserved.
37 *
38 * Redistribution and use in source and binary forms, with or without
39 * modification, are permitted provided that the following conditions
40 * are met:
41 * 1. Redistributions of source code must retain the above copyright
42 * notice, this list of conditions and the following disclaimer.
43 * 2. Redistributions in binary form must reproduce the above copyright
44 * notice, this list of conditions and the following disclaimer in the
45 * documentation and/or other materials provided with the distribution.
46 *
47 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
48 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
49 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
50 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
51 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
52 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
53 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
54 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
55 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
56 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
57 * SUCH DAMAGE.
58 *
59 * Intel High Definition Audio (Controller) driver for FreeBSD.
60 *
61 ******************************************************************************/
62
63#include "boot.h"
64#include "bootstruct.h"
65#include "pci.h"
66#include "pci_root.h"
67#include "platform.h"
68#include "device_inject.h"
69#include "convert.h"
70#include "hda.h"
71//#include "aml_generator.h"
72
73#ifndef DEBUG_HDA
74#define DEBUG_HDA 0
75#endif
76
77#if DEBUG_HDA
78#define DBG(x...) verbose(x)
79#else
80#define DBG(x...)
81#endif
82
83extern uint32_t devices_number;
84
85const char *hda_slot_name[]={ "AAPL,slot-name", "Built In" };
86
87uint8_t default_HDEF_layout_id[]={0x0C, 0x00, 0x00, 0x00};
88#define HDEF_LEN ( sizeof(default_HDEF_layout_id) / sizeof(uint8_t) )
89uint8_t default_HDAU_layout_id[]={0x01, 0x00, 0x00, 0x00};
90#define HDAU_LEN ( sizeof(default_HDAU_layout_id) / sizeof(uint8_t) )
91static uint8_t connector_type_value[] ={0x00, 0x08, 0x00, 0x00};
92
93/* Structures */
94
95static hda_controller_devices know_hda_controller[] = {
96//8086 Intel Corporation
97{ HDA_INTEL_OAK,"Oaktrail"/*, 0, 0 */ },
98{ HDA_INTEL_BAY,"BayTrail"/*, 0, 0 */ },
99{ HDA_INTEL_HSW1,"Haswell"/*, 0, 0 */ },
100{ HDA_INTEL_HSW2,"Haswell"/*, 0, 0 */ },
101{ HDA_INTEL_HSW3,"Haswell"/*, 0, 0 */ },
102{ HDA_INTEL_BDW,"Broadwell"/*, 0, 0 */ },
103{ HDA_INTEL_CPT,"Cougar Point"/*, 0, 0 */ },
104{ HDA_INTEL_PATSBURG,"Patsburg"/*, 0, 0 */ },
105{ HDA_INTEL_PPT1,"Panther Point"/*, 0, 0 */ },
106{ HDA_INTEL_BRASWELL,"Braswell"/*, 0, 0 */ },
107{ HDA_INTEL_82801F,"82801F"/*, 0, 0 */ },
108{ HDA_INTEL_63XXESB,"631x/632xESB"/*, 0, 0 */ },
109{ HDA_INTEL_82801G,"82801G"/*, 0, 0 */ },
110{ HDA_INTEL_82801H,"82801H"/*, 0, 0 */ },
111{ HDA_INTEL_82801I,"82801I"/*, 0, 0 */ },
112{ HDA_INTEL_ICH9,"ICH9"/*, 0, 0 */ },
113{ HDA_INTEL_82801JI,"82801JI"/*, 0, 0 */ },
114{ HDA_INTEL_82801JD,"82801JD"/*, 0, 0 */ },
115{ HDA_INTEL_PCH,"5 Series/3400 Series"/*, 0, 0 */ },
116{ HDA_INTEL_PCH2,"5 Series/3400 Series"/*, 0, 0 */ },
117{ HDA_INTEL_SCH,"SCH"/*, 0, 0 */ },
118{ HDA_INTEL_LPT1,"Lynx Point"/*, 0, 0 */ },
119{ HDA_INTEL_LPT2,"Lynx Point"/*, 0, 0 */ },
120{ HDA_INTEL_WCPT,"Wildcat Point"/*, 0, 0 */ },
121{ HDA_INTEL_WELLS1,"Wellsburg"/*, 0, 0 */ },
122{ HDA_INTEL_WELLS2,"Wellsburg"/*, 0, 0 */ },
123{ HDA_INTEL_WCPTLP,"Wildcat Point-LP"/*, 0, 0 */ },
124{ HDA_INTEL_LPTLP1,"Lynx Point-LP"/*, 0, 0 */ },
125{ HDA_INTEL_LPTLP2,"Lynx Point-LP"/*, 0, 0 */ },
126{ HDA_INTEL_SRSPLP,"Sunrise Point-LP"/*, 0, 0 */ },
127{ HDA_INTEL_SRSP,"Sunrise Point"/*, 0, 0 */ },
128
129//10de NVIDIA Corporation
130{ HDA_NVIDIA_MCP51,"MCP51" /*, 0, HDAC_QUIRK_MSI */ },
131{ HDA_NVIDIA_MCP55,"MCP55" /*, 0, HDAC_QUIRK_MSI */ },
132{ HDA_NVIDIA_MCP61_1,"MCP61" /*, 0, 0 */ },
133{ HDA_NVIDIA_MCP61_2,"MCP61" /*, 0, 0 */ },
134{ HDA_NVIDIA_MCP65_1,"MCP65" /*, 0, 0 */ },
135{ HDA_NVIDIA_MCP65_2,"MCP65" /*, 0, 0 */ },
136{ HDA_NVIDIA_MCP67_1,"MCP67" /*, 0, 0 */ },
137{ HDA_NVIDIA_MCP67_2,"MCP67" /*, 0, 0 */ },
138{ HDA_NVIDIA_MCP73_1,"MCP73" /*, 0, 0 */ },
139{ HDA_NVIDIA_MCP73_2,"MCP73" /*, 0, 0 */ },
140{ HDA_NVIDIA_MCP78_1,"MCP78" /*, 0, HDAC_QUIRK_64BIT */ },
141{ HDA_NVIDIA_MCP78_2,"MCP78" /*, 0, HDAC_QUIRK_64BIT */ },
142{ HDA_NVIDIA_MCP78_3,"MCP78" /*, 0, HDAC_QUIRK_64BIT */ },
143{ HDA_NVIDIA_MCP78_4,"MCP78" /*, 0, HDAC_QUIRK_64BIT */ },
144{ HDA_NVIDIA_MCP79_1,"MCP79" /*, 0, 0 */ },
145{ HDA_NVIDIA_MCP79_2,"MCP79" /*, 0, 0 */ },
146{ HDA_NVIDIA_MCP79_3,"MCP79" /*, 0, 0 */ },
147{ HDA_NVIDIA_MCP79_4,"MCP79" /*, 0, 0 */ },
148{ HDA_NVIDIA_MCP89_1,"MCP89" /*, 0, 0 */ },
149{ HDA_NVIDIA_MCP89_2,"MCP89" /*, 0, 0 */ },
150{ HDA_NVIDIA_MCP89_3,"MCP89" /*, 0, 0 */ },
151{ HDA_NVIDIA_MCP89_4,"MCP89" /*, 0, 0 */ },
152{ HDA_NVIDIA_0BE2,"(0x0be2)" /*, 0, HDAC_QUIRK_MSI */ },
153{ HDA_NVIDIA_0BE3,"(0x0be3)" /*, 0, HDAC_QUIRK_MSI */ },
154{ HDA_NVIDIA_0BE4,"(0x0be4)" /*, 0, HDAC_QUIRK_MSI */ },
155{ HDA_NVIDIA_GT100,"GT100" /*, 0, HDAC_QUIRK_MSI */ },
156{ HDA_NVIDIA_GT104,"GT104" /*, 0, HDAC_QUIRK_MSI */ },
157{ HDA_NVIDIA_GT106,"GT106" /*, 0, HDAC_QUIRK_MSI */ },
158{ HDA_NVIDIA_GT108,"GT108" /*, 0, HDAC_QUIRK_MSI */ },
159{ HDA_NVIDIA_GT116,"GT116" /*, 0, HDAC_QUIRK_MSI */ },
160{ HDA_NVIDIA_GF119,"GF119" /*, 0, 0 */ },
161{ HDA_NVIDIA_GF110_1,"GF110" /*, 0, HDAC_QUIRK_MSI */ },
162{ HDA_NVIDIA_GF110_2,"GF110" /*, 0, HDAC_QUIRK_MSI */ },
163{ HDA_NVIDIA_GK110,"GK110" /*, 0, ? */ },
164{ HDA_NVIDIA_GK106,"GK106" /*, 0, ? */ },
165{ HDA_NVIDIA_GK107,"GK107" /*, 0, ? */ },
166{ HDA_NVIDIA_GK104,"GK104" /*, 0, ? */ },
167//1002 Advanced Micro Devices [AMD] nee ATI Technologies Inc
168{ HDA_ATI_SB450,"SB4x0" /*, 0, 0 */ },
169{ HDA_ATI_SB600,"SB600" /*, 0, 0 */ },
170{ HDA_ATI_RS600,"RS600" /*, 0, 0 */ },
171{ HDA_ATI_HUDSON,"Hudson" /*, 0, 0 */ },
172{ HDA_ATI_RS690,"RS690" /*, 0, 0 */ },
173{ HDA_ATI_RS780,"RS780" /*, 0, 0 */ },
174{ HDA_ATI_RS880,"RS880" /*, 0, 0 */ },
175{ HDA_ATI_TRINITY,"Trinity" /*, 0, ? */ },
176{ HDA_ATI_R600,"R600" /*, 0, 0 */ },
177{ HDA_ATI_RV610,"RV610" /*, 0, 0 */ },
178{ HDA_ATI_RV620,"RV620" /*, 0, 0 */ },
179{ HDA_ATI_RV630,"RV630" /*, 0, 0 */ },
180{ HDA_ATI_RV635,"RV635" /*, 0, 0 */ },
181{ HDA_ATI_RV710,"RV710" /*, 0, 0 */ },
182{ HDA_ATI_RV730,"RV730" /*, 0, 0 */ },
183{ HDA_ATI_RV740,"RV740" /*, 0, 0 */ },
184{ HDA_ATI_RV770,"RV770" /*, 0, 0 */ },
185{ HDA_ATI_RV810,"RV810" /*, 0, 0 */ },
186{ HDA_ATI_RV830,"RV830" /*, 0, 0 */ },
187{ HDA_ATI_RV840,"RV840" /*, 0, 0 */ },
188{ HDA_ATI_RV870,"RV870" /*, 0, 0 */ },
189{ HDA_ATI_RV910,"RV910" /*, 0, 0 */ },
190{ HDA_ATI_RV930,"RV930" /*, 0, 0 */ },
191{ HDA_ATI_RV940,"RV940" /*, 0, 0 */ },
192{ HDA_ATI_RV970,"RV970" /*, 0, 0 */ },
193{ HDA_ATI_R1000,"R1000" /*, 0, 0 */ }, // HDMi
194{ HDA_ATI_SI,"SI" /*, 0, 0 */ },
195{ HDA_ATI_VERDE,"Cape Verde" /*, 0, ? */ }, // HDMi
196//17f3 RDC Semiconductor, Inc.
197{ HDA_RDC_M3010,"M3010" /*, 0, 0 */ },
198//1106 VIA Technologies, Inc.
199{ HDA_VIA_VT82XX,"VT8251/8237A" /*, 0, 0 */ },
200//1039 Silicon Integrated Systems [SiS]
201{ HDA_SIS_966,"966" /*, 0, 0 */ },
202//10b9 ULi Electronics Inc.(Split off ALi Corporation in 2003)
203{ HDA_ULI_M5461,"M5461" /*, 0, 0 */ },
204/* Unknown */
205{ HDA_INTEL_ALL,"Unknown Intel device" /*, 0, 0 */ },
206{ HDA_NVIDIA_ALL,"Unknown NVIDIA device" /*, 0, 0 */ },
207{ HDA_ATI_ALL,"Unknown ATI device" /*, 0, 0 */ },
208{ HDA_VIA_ALL,"Unknown VIA device" /*, 0, 0 */ },
209{ HDA_SIS_ALL,"Unknown SiS device" /*, 0, 0 */ },
210{ HDA_ULI_ALL,"Unknown ULI device" /*, 0, 0 */ },
211};
212#define HDAC_DEVICES_LEN (sizeof(know_hda_controller) / sizeof(know_hda_controller[0]))
213
214/* CODECs */
215
216// ErmaC: TODO build function to probe the codecID
217/*
218static hdacc_codecs know_codecs[] = {
219{ HDA_CODEC_CS4206, 0, "Cirrus Logic CS4206" },
220{ HDA_CODEC_CS4207, 0, "Cirrus Logic CS4207" },
221{ HDA_CODEC_CS4210, 0, "Cirrus Logic CS4210" },
222
223{ HDA_CODEC_ALC221, 0, "Realtek ALC221" },
224{ HDA_CODEC_ALC260, 0, "Realtek ALC260" },
225{ HDA_CODEC_ALC262, 0, "Realtek ALC262" },
226{ HDA_CODEC_ALC267, 0, "Realtek ALC267" },
227{ HDA_CODEC_ALC268, 0, "Realtek ALC268" },
228{ HDA_CODEC_ALC269, 0, "Realtek ALC269" },
229{ HDA_CODEC_ALC270, 0, "Realtek ALC270" },
230{ HDA_CODEC_ALC272, 0, "Realtek ALC272" },
231{ HDA_CODEC_ALC273, 0, "Realtek ALC273" },
232{ HDA_CODEC_ALC275, 0, "Realtek ALC275" },
233{ HDA_CODEC_ALC276, 0, "Realtek ALC276" },
234{ HDA_CODEC_ALC660, 0, "Realtek ALC660-VD" },
235{ HDA_CODEC_ALC662, 0x0002, "Realtek ALC662 rev2" },
236{ HDA_CODEC_ALC662, 0, "Realtek ALC662" },
237{ HDA_CODEC_ALC663, 0, "Realtek ALC663" },
238{ HDA_CODEC_ALC665, 0, "Realtek ALC665" },
239{ HDA_CODEC_ALC670, 0, "Realtek ALC670" },
240{ HDA_CODEC_ALC680, 0, "Realtek ALC680" },
241{ HDA_CODEC_ALC861, 0x100340, "Realtek ALC660" },
242{ HDA_CODEC_ALC861, 0, "Realtek ALC861" },
243{ HDA_CODEC_ALC861VD, 0, "Realtek ALC861-VD" },
244{ HDA_CODEC_ALC880, 0, "Realtek ALC880" },
245{ HDA_CODEC_ALC882, 0, "Realtek ALC882" },
246{ HDA_CODEC_ALC883, 0, "Realtek ALC883" },
247{ HDA_CODEC_ALC885, 0x100101, "Realtek ALC889A" },
248{ HDA_CODEC_ALC885, 0x100103, "Realtek ALC889A" },
249{ HDA_CODEC_ALC885, 0, "Realtek ALC885" },
250{ HDA_CODEC_ALC887, 0, "Realtek ALC887" },
251{ HDA_CODEC_ALC888, 0x100101, "Realtek ALC1200" },
252{ HDA_CODEC_ALC888, 0, "Realtek ALC888" },
253{ HDA_CODEC_ALC889, 0, "Realtek ALC889" },
254{ HDA_CODEC_ALC892, 0, "Realtek ALC892" },
255{ HDA_CODEC_ALC898, 0, "Realtek ALC898" },
256{ HDA_CODEC_ALC899, 0,"Realtek ALC899" },
257{ HDA_CODEC_ALC900, 0, "Realtek ALC1150" },
258
259{ HDA_CODEC_AD1882, 0, "Analog Devices AD1882" },
260{ HDA_CODEC_AD1882A, 0, "Analog Devices AD1882A" },
261{ HDA_CODEC_AD1883, 0, "Analog Devices AD1883" },
262{ HDA_CODEC_AD1884, 0, "Analog Devices AD1884" },
263{ HDA_CODEC_AD1884A, 0, "Analog Devices AD1884A" },
264{ HDA_CODEC_AD1981HD, 0, "Analog Devices AD1981HD" },
265{ HDA_CODEC_AD1983, 0, "Analog Devices AD1983" },
266{ HDA_CODEC_AD1984, 0, "Analog Devices AD1984" },
267{ HDA_CODEC_AD1984A, 0, "Analog Devices AD1984A" },
268{ HDA_CODEC_AD1984B, 0, "Analog Devices AD1984B" },
269{ HDA_CODEC_AD1986A, 0, "Analog Devices AD1986A" },
270{ HDA_CODEC_AD1987, 0, "Analog Devices AD1987" },
271{ HDA_CODEC_AD1988, 0, "Analog Devices AD1988A" },
272{ HDA_CODEC_AD1988B, 0, "Analog Devices AD1988B" },
273{ HDA_CODEC_AD1989A, 0, "Analog Devices AD1989A" },
274{ HDA_CODEC_AD1989B, 0, "Analog Devices AD1989B" },
275{ HDA_CODEC_CA0110, 0, "Creative CA0110-IBG" },
276{ HDA_CODEC_CA0110_2, 0, "Creative CA0110-IBG" },
277{ HDA_CODEC_CA0132, 0, "Creative CA0132" },
278{ HDA_CODEC_SB0880, 0, "Creative SB0880 X-Fi" },
279{ HDA_CODEC_CMI9880, 0, "CMedia CMI9880" },
280{ HDA_CODEC_CMI98802, 0, "CMedia CMI9880" },
281
282{ HDA_CODEC_CXD9872RDK, 0, "Sigmatel CXD9872RD/K" },
283{ HDA_CODEC_CXD9872AKD, 0, "Sigmatel CXD9872AKD" },
284{ HDA_CODEC_STAC9200D, 0, "Sigmatel STAC9200D" },
285{ HDA_CODEC_STAC9204X, 0, "Sigmatel STAC9204X" },
286{ HDA_CODEC_STAC9204D, 0, "Sigmatel STAC9204D" },
287{ HDA_CODEC_STAC9205X, 0, "Sigmatel STAC9205X" },
288{ HDA_CODEC_STAC9205D, 0, "Sigmatel STAC9205D" },
289{ HDA_CODEC_STAC9220, 0, "Sigmatel STAC9220" },
290{ HDA_CODEC_STAC9220_A1, 0, "Sigmatel STAC9220_A1" },
291{ HDA_CODEC_STAC9220_A2, 0, "Sigmatel STAC9220_A2" },
292{ HDA_CODEC_STAC9221, 0, "Sigmatel STAC9221" },
293{ HDA_CODEC_STAC9221_A2, 0, "Sigmatel STAC9221_A2" },
294{ HDA_CODEC_STAC9221D, 0, "Sigmatel STAC9221D" },
295{ HDA_CODEC_STAC922XD, 0, "Sigmatel STAC9220D/9223D" },
296{ HDA_CODEC_STAC9227X, 0, "Sigmatel STAC9227X" },
297{ HDA_CODEC_STAC9227D, 0, "Sigmatel STAC9227D" },
298{ HDA_CODEC_STAC9228X, 0, "Sigmatel STAC9228X" },
299{ HDA_CODEC_STAC9228D, 0, "Sigmatel STAC9228D" },
300{ HDA_CODEC_STAC9229X, 0, "Sigmatel STAC9229X" },
301{ HDA_CODEC_STAC9229D, 0, "Sigmatel STAC9229D" },
302{ HDA_CODEC_STAC9230X, 0, "Sigmatel STAC9230X" },
303{ HDA_CODEC_STAC9230D, 0, "Sigmatel STAC9230D" },
304{ HDA_CODEC_STAC9250, 0, "Sigmatel STAC9250" },
305{ HDA_CODEC_STAC9251, 0, "Sigmatel STAC9251" },
306{ HDA_CODEC_STAC9255, 0, "Sigmatel STAC9255" },
307{ HDA_CODEC_STAC9255D, 0, "Sigmatel STAC9255D" },
308{ HDA_CODEC_STAC9254, 0, "Sigmatel STAC9254" },
309{ HDA_CODEC_STAC9254D, 0, "Sigmatel STAC9254D" },
310{ HDA_CODEC_STAC9271X, 0, "Sigmatel STAC9271X" },
311{ HDA_CODEC_STAC9271D, 0, "Sigmatel STAC9271D" },
312{ HDA_CODEC_STAC9272X, 0, "Sigmatel STAC9272X" },
313{ HDA_CODEC_STAC9272D, 0, "Sigmatel STAC9272D" },
314{ HDA_CODEC_STAC9273X, 0, "Sigmatel STAC9273X" },
315{ HDA_CODEC_STAC9273D, 0, "Sigmatel STAC9273D" },
316{ HDA_CODEC_STAC9274, 0, "Sigmatel STAC9274" },
317{ HDA_CODEC_STAC9274D, 0, "Sigmatel STAC9274D" },
318{ HDA_CODEC_STAC9274X5NH, 0, "Sigmatel STAC9274X5NH" },
319{ HDA_CODEC_STAC9274D5NH, 0, "Sigmatel STAC9274D5NH" },
320{ HDA_CODEC_STAC9872AK, 0, "Sigmatel STAC9872AK" },
321
322{ HDA_CODEC_IDT92HD005, 0, "IDT 92HD005" },
323{ HDA_CODEC_IDT92HD005D, 0, "IDT 92HD005D" },
324{ HDA_CODEC_IDT92HD206X, 0, "IDT 92HD206X" },
325{ HDA_CODEC_IDT92HD206D, 0, "IDT 92HD206D" },
326{ HDA_CODEC_IDT92HD66B1X5, 0, "IDT 92HD66B1X5" },
327{ HDA_CODEC_IDT92HD66B2X5, 0, "IDT 92HD66B2X5" },
328{ HDA_CODEC_IDT92HD66B3X5, 0, "IDT 92HD66B3X5" },
329{ HDA_CODEC_IDT92HD66C1X5, 0, "IDT 92HD66C1X5" },
330{ HDA_CODEC_IDT92HD66C2X5, 0, "IDT 92HD66C2X5" },
331{ HDA_CODEC_IDT92HD66C3X5, 0, "IDT 92HD66C3X5" },
332{ HDA_CODEC_IDT92HD66B1X3, 0, "IDT 92HD66B1X3" },
333{ HDA_CODEC_IDT92HD66B2X3, 0, "IDT 92HD66B2X3" },
334{ HDA_CODEC_IDT92HD66B3X3, 0, "IDT 92HD66B3X3" },
335{ HDA_CODEC_IDT92HD66C1X3, 0, "IDT 92HD66C1X3" },
336{ HDA_CODEC_IDT92HD66C2X3, 0, "IDT 92HD66C2X3" },
337{ HDA_CODEC_IDT92HD66C3_65, 0, "IDT 92HD66C3_65" },
338{ HDA_CODEC_IDT92HD700X, 0, "IDT 92HD700X" },
339{ HDA_CODEC_IDT92HD700D, 0, "IDT 92HD700D" },
340{ HDA_CODEC_IDT92HD71B5, 0, "IDT 92HD71B5" },
341{ HDA_CODEC_IDT92HD71B5_2, 0, "IDT 92HD71B5" },
342{ HDA_CODEC_IDT92HD71B6, 0, "IDT 92HD71B6" },
343{ HDA_CODEC_IDT92HD71B6_2, 0, "IDT 92HD71B6" },
344{ HDA_CODEC_IDT92HD71B7, 0, "IDT 92HD71B7" },
345{ HDA_CODEC_IDT92HD71B7_2, 0, "IDT 92HD71B7" },
346{ HDA_CODEC_IDT92HD71B8, 0, "IDT 92HD71B8" },
347{ HDA_CODEC_IDT92HD71B8_2, 0, "IDT 92HD71B8" },
348{ HDA_CODEC_IDT92HD73C1, 0, "IDT 92HD73C1" },
349{ HDA_CODEC_IDT92HD73D1, 0, "IDT 92HD73D1" },
350{ HDA_CODEC_IDT92HD73E1, 0, "IDT 92HD73E1" },
351{ HDA_CODEC_IDT92HD75B3, 0, "IDT 92HD75B3" },
352{ HDA_CODEC_IDT92HD75BX, 0, "IDT 92HD75BX" },
353{ HDA_CODEC_IDT92HD81B1C, 0, "IDT 92HD81B1C" },
354{ HDA_CODEC_IDT92HD81B1X, 0, "IDT 92HD81B1X" },
355{ HDA_CODEC_IDT92HD83C1C, 0, "IDT 92HD83C1C" },
356{ HDA_CODEC_IDT92HD83C1X, 0, "IDT 92HD83C1X" },
357{ HDA_CODEC_IDT92HD87B1_3, 0, "IDT 92HD87B1/3" },
358{ HDA_CODEC_IDT92HD87B2_4, 0, "IDT 92HD87B2/4" },
359{ HDA_CODEC_IDT92HD89C3, 0, "IDT 92HD89C3" },
360{ HDA_CODEC_IDT92HD89C2, 0, "IDT 92HD89C2" },
361{ HDA_CODEC_IDT92HD89C1, 0, "IDT 92HD89C1" },
362{ HDA_CODEC_IDT92HD89B3, 0, "IDT 92HD89B3" },
363{ HDA_CODEC_IDT92HD89B2, 0, "IDT 92HD89B2" },
364{ HDA_CODEC_IDT92HD89B1, 0, "IDT 92HD89B1" },
365{ HDA_CODEC_IDT92HD89E3, 0, "IDT 92HD89E3" },
366{ HDA_CODEC_IDT92HD89E2, 0, "IDT 92HD89E2" },
367{ HDA_CODEC_IDT92HD89E1, 0, "IDT 92HD89E1" },
368{ HDA_CODEC_IDT92HD89D3, 0, "IDT 92HD89D3" },
369{ HDA_CODEC_IDT92HD89D2, 0, "IDT 92HD89D2" },
370{ HDA_CODEC_IDT92HD89D1, 0, "IDT 92HD89D1" },
371{ HDA_CODEC_IDT92HD89F3, 0, "IDT 92HD89F3" },
372{ HDA_CODEC_IDT92HD89F2, 0, "IDT 92HD89F2" },
373{ HDA_CODEC_IDT92HD89F1, 0, "IDT 92HD89F1" },
374{ HDA_CODEC_IDT92HD90BXX, 0, "IDT 92HD90BXX" },
375{ HDA_CODEC_IDT92HD91BXX, 0, "IDT 92HD91BXX" },
376{ HDA_CODEC_IDT92HD93BXX, 0, "IDT 92HD93BXX" },
377{ HDA_CODEC_IDT92HD98BXX, 0, "IDT 92HD98BXX" },
378{ HDA_CODEC_IDT92HD99BXX, 0, "IDT 92HD99BXX" },
379
380{ HDA_CODEC_CX20549, 0, "Conexant CX20549 (Venice)" },
381{ HDA_CODEC_CX20551, 0, "Conexant CX20551 (Waikiki)" },
382{ HDA_CODEC_CX20561, 0, "Conexant CX20561 (Hermosa)" },
383{ HDA_CODEC_CX20582, 0, "Conexant CX20582 (Pebble)" },
384{ HDA_CODEC_CX20583, 0, "Conexant CX20583 (Pebble HSF)" },
385{ HDA_CODEC_CX20584, 0, "Conexant CX20584" },
386{ HDA_CODEC_CX20585, 0, "Conexant CX20585" },
387{ HDA_CODEC_CX20588, 0, "Conexant CX20588" },
388{ HDA_CODEC_CX20590, 0, "Conexant CX20590" },
389{ HDA_CODEC_CX20631, 0, "Conexant CX20631" },
390{ HDA_CODEC_CX20632, 0, "Conexant CX20632" },
391{ HDA_CODEC_CX20641, 0, "Conexant CX20641" },
392{ HDA_CODEC_CX20642, 0, "Conexant CX20642" },
393{ HDA_CODEC_CX20651, 0, "Conexant CX20651" },
394{ HDA_CODEC_CX20652, 0, "Conexant CX20652" },
395{ HDA_CODEC_CX20664, 0, "Conexant CX20664" },
396{ HDA_CODEC_CX20665, 0, "Conexant CX20665" },
397
398{ HDA_CODEC_VT1708_8, 0, "VIA VT1708_8" },
399{ HDA_CODEC_VT1708_9, 0, "VIA VT1708_9" },
400{ HDA_CODEC_VT1708_A, 0, "VIA VT1708_A" },
401{ HDA_CODEC_VT1708_B, 0, "VIA VT1708_B" },
402{ HDA_CODEC_VT1709_0, 0, "VIA VT1709_0" },
403{ HDA_CODEC_VT1709_1, 0, "VIA VT1709_1" },
404{ HDA_CODEC_VT1709_2, 0, "VIA VT1709_2" },
405{ HDA_CODEC_VT1709_3, 0, "VIA VT1709_3" },
406{ HDA_CODEC_VT1709_4, 0, "VIA VT1709_4" },
407{ HDA_CODEC_VT1709_5, 0, "VIA VT1709_5" },
408{ HDA_CODEC_VT1709_6, 0, "VIA VT1709_6" },
409{ HDA_CODEC_VT1709_7, 0, "VIA VT1709_7" },
410{ HDA_CODEC_VT1708B_0, 0, "VIA VT1708B_0" },
411{ HDA_CODEC_VT1708B_1, 0, "VIA VT1708B_1" },
412{ HDA_CODEC_VT1708B_2, 0, "VIA VT1708B_2" },
413{ HDA_CODEC_VT1708B_3, 0, "VIA VT1708B_3" },
414{ HDA_CODEC_VT1708B_4, 0, "VIA VT1708B_4" },
415{ HDA_CODEC_VT1708B_5, 0, "VIA VT1708B_5" },
416{ HDA_CODEC_VT1708B_6, 0, "VIA VT1708B_6" },
417{ HDA_CODEC_VT1708B_7, 0, "VIA VT1708B_7" },
418{ HDA_CODEC_VT1708S_0, 0, "VIA VT1708S_0" },
419{ HDA_CODEC_VT1708S_1, 0, "VIA VT1708S_1" },
420{ HDA_CODEC_VT1708S_2, 0, "VIA VT1708S_2" },
421{ HDA_CODEC_VT1708S_3, 0, "VIA VT1708S_3" },
422{ HDA_CODEC_VT1708S_4, 0, "VIA VT1708S_4" },
423{ HDA_CODEC_VT1708S_5, 0, "VIA VT1708S_5" },
424{ HDA_CODEC_VT1708S_6, 0, "VIA VT1708S_6" },
425{ HDA_CODEC_VT1708S_7, 0, "VIA VT1708S_7" },
426{ HDA_CODEC_VT1702_0, 0, "VIA VT1702_0" },
427{ HDA_CODEC_VT1702_1, 0, "VIA VT1702_1" },
428{ HDA_CODEC_VT1702_2, 0, "VIA VT1702_2" },
429{ HDA_CODEC_VT1702_3, 0, "VIA VT1702_3" },
430{ HDA_CODEC_VT1702_4, 0, "VIA VT1702_4" },
431{ HDA_CODEC_VT1702_5, 0, "VIA VT1702_5" },
432{ HDA_CODEC_VT1702_6, 0, "VIA VT1702_6" },
433{ HDA_CODEC_VT1702_7, 0, "VIA VT1702_7" },
434{ HDA_CODEC_VT1716S_0, 0, "VIA VT1716S_0" },
435{ HDA_CODEC_VT1716S_1, 0, "VIA VT1716S_1" },
436{ HDA_CODEC_VT1718S_0, 0, "VIA VT1718S_0" },
437{ HDA_CODEC_VT1718S_1, 0, "VIA VT1718S_1" },
438{ HDA_CODEC_VT1802_0, 0, "VIA VT1802_0" },
439{ HDA_CODEC_VT1802_1, 0, "VIA VT1802_1" },
440{ HDA_CODEC_VT1812, 0, "VIA VT1812" },
441{ HDA_CODEC_VT1818S, 0, "VIA VT1818S" },
442{ HDA_CODEC_VT1828S, 0, "VIA VT1828S" },
443{ HDA_CODEC_VT2002P_0, 0, "VIA VT2002P_0" },
444{ HDA_CODEC_VT2002P_1, 0, "VIA VT2002P_1" },
445{ HDA_CODEC_VT2020, 0, "VIA VT2020" },
446
447{ HDA_CODEC_ATIRS600_1, 0, "ATI RS600" },
448{ HDA_CODEC_ATIRS600_2, 0, "ATI RS600" },
449{ HDA_CODEC_ATIRS690, 0, "ATI RS690/780" },
450{ HDA_CODEC_ATIR6XX, 0, "ATI R6xx" },
451
452{ HDA_CODEC_NVIDIAMCP67, 0, "NVIDIA MCP67" },
453{ HDA_CODEC_NVIDIAMCP73, 0, "NVIDIA MCP73" },
454{ HDA_CODEC_NVIDIAMCP78, 0, "NVIDIA MCP78" },
455{ HDA_CODEC_NVIDIAMCP78_2, 0, "NVIDIA MCP78" },
456{ HDA_CODEC_NVIDIAMCP78_3, 0, "NVIDIA MCP78" },
457{ HDA_CODEC_NVIDIAMCP78_4, 0, "NVIDIA MCP78" },
458{ HDA_CODEC_NVIDIAMCP7A, 0, "NVIDIA MCP7A" },
459{ HDA_CODEC_NVIDIAGT220, 0, "NVIDIA GT220" },
460{ HDA_CODEC_NVIDIAGT21X, 0, "NVIDIA GT21x" },
461{ HDA_CODEC_NVIDIAMCP89, 0, "NVIDIA MCP89" },
462{ HDA_CODEC_NVIDIAGT240, 0, "NVIDIA GT240" },
463{ HDA_CODEC_NVIDIAGTS450, 0, "NVIDIA GTS450" },
464{ HDA_CODEC_NVIDIAGT440, 0, "NVIDIA GT440" },
465{ HDA_CODEC_NVIDIAGTX550, 0, "NVIDIA GTX550" },
466{ HDA_CODEC_NVIDIAGTX570, 0, "NVIDIA GTX570" },
467
468{ HDA_CODEC_INTELIP, 0, "Intel Ibex Peak" },
469{ HDA_CODEC_INTELBL, 0, "Intel Bearlake" },
470{ HDA_CODEC_INTELCA, 0, "Intel Cantiga" },
471{ HDA_CODEC_INTELEL, 0, "Intel Eaglelake" },
472{ HDA_CODEC_INTELIP2, 0, "Intel Ibex Peak" },
473{ HDA_CODEC_INTELCPT, 0, "Intel Cougar Point" },
474{ HDA_CODEC_INTELPPT, 0, "Intel Panther Point" },
475{ HDA_CODEC_INTELHSW, 0,"Intel Haswell" },
476{ HDA_CODEC_INTELCL, 0, "Intel Crestline" },
477{ HDA_CODEC_SII1390, 0, "Silicon Image SiI1390 HDMi" },
478{ HDA_CODEC_SII1392, 0, "Silicon Image SiI1392 HDMi" },
479// Unknown CODECs
480{ HDA_CODEC_ADXXXX, 0, "Analog Devices" },
481{ HDA_CODEC_AGEREXXXX, 0, "Lucent/Agere Systems" },
482{ HDA_CODEC_ALCXXXX, 0, "Realtek" },
483{ HDA_CODEC_ATIXXXX, 0, "ATI" },
484{ HDA_CODEC_CAXXXX, 0, "Creative" },
485{ HDA_CODEC_CMIXXXX, 0, "CMedia" },
486{ HDA_CODEC_CMIXXXX2, 0, "CMedia" },
487{ HDA_CODEC_CSXXXX, 0, "Cirrus Logic" },
488{ HDA_CODEC_CXXXXX, 0, "Conexant" },
489{ HDA_CODEC_CHXXXX, 0, "Chrontel" },
490{ HDA_CODEC_IDTXXXX, 0, "IDT" },
491{ HDA_CODEC_INTELXXXX, 0, "Intel" },
492{ HDA_CODEC_MOTOXXXX, 0, "Motorola" },
493{ HDA_CODEC_NVIDIAXXXX, 0, "NVIDIA" },
494{ HDA_CODEC_SIIXXXX, 0, "Silicon Image" },
495{ HDA_CODEC_STACXXXX, 0, "Sigmatel" },
496{ HDA_CODEC_VTXXXX, 0, "VIA" },
497};
498
499#define HDACC_CODECS_LEN (sizeof(know_codecs) / sizeof(know_codecs[0]))
500*/
501
502/*****************
503 * Device Methods
504 *****************/
505
506/* get HDA device name */
507static char *get_hda_controller_name(uint16_t controller_device_id, uint16_t controller_vendor_id)
508{
509static char desc[128];
510
511const char* name_format = "Unknown HD Audio device %s";
512uint32_t controller_model = ((controller_device_id << 16) | controller_vendor_id);
513int i;
514
515/* Get format for vendor ID */
516switch (controller_vendor_id)
517{
518case ATI_VENDORID:
519name_format = "ATI %s HDA Controller (HDMi)"; break;
520
521case INTEL_VENDORID:
522name_format = "Intel %s High Definition Audio Controller"; break;
523
524case NVIDIA_VENDORID:
525name_format = "nVidia %s HDA Controller (HDMi)"; break;
526
527case RDC_VENDORID:
528name_format = "RDC %s High Definition Audio Controller"; break;
529
530case SIS_VENDORID:
531name_format = "SiS %s HDA Controller"; break;
532
533case ULI_VENDORID:
534name_format = "ULI %s HDA Controller"; break;
535
536case VIA_VENDORID:
537name_format = "VIA %s HDA Controller"; break;
538
539default:
540break;
541}
542
543for (i = 0; i < HDAC_DEVICES_LEN; i++)
544{
545if (know_hda_controller[i].model == controller_model)
546{
547snprintf(desc, sizeof(desc), name_format, know_hda_controller[i].desc);
548return desc;
549}
550}
551
552/* Not in table */
553snprintf(desc, sizeof(desc),
554"Unknown HD Audio device, vendor %04x, model %04x",
555controller_vendor_id, controller_device_id);
556return desc;
557}
558
559static int devprop_add_hda_template(struct DevPropDevice *device)
560{
561if (!device)
562{
563return 0;
564}
565devices_number++;
566
567return 1;
568}
569
570bool setup_hda_devprop(pci_dt_t *hda_dev)
571{
572structDevPropDevice*device = NULL;
573char*devicepath = NULL;
574char*controller_name = NULL;
575intlen;
576uint8_tBuiltIn = 0x00;
577uint16_tcontroller_vendor_id = hda_dev->vendor_id;
578uint16_tcontroller_device_id = hda_dev->device_id;
579const char*value;
580
581verbose("\n------------------------\n");
582verbose("\tAUDIO DEVICE INFO\n");
583verbose("-------------------------\n");
584
585devicepath = get_pci_dev_path(hda_dev);
586controller_name = get_hda_controller_name(controller_device_id, controller_vendor_id);
587
588if (!string)
589{
590string = devprop_create_string();
591if (!string)
592{
593return 0;
594}
595}
596
597if (!devicepath)
598{
599return 0;
600}
601
602device = devprop_add_device(string, devicepath);
603if (!device)
604{
605return 0;
606}
607devprop_add_hda_template(device);
608
609switch ((controller_device_id << 16) | controller_vendor_id)
610{
611
612/***********************************************************************
613* The above case are intended as for HDEF device at address 0x001B0000
614***********************************************************************/
615case HDA_INTEL_OAK:
616case HDA_INTEL_BAY:
617case HDA_INTEL_HSW1:
618case HDA_INTEL_HSW2:
619case HDA_INTEL_HSW3:
620case HDA_INTEL_BDW:
621case HDA_INTEL_CPT:
622case HDA_INTEL_PATSBURG:
623case HDA_INTEL_PPT1:
624case HDA_INTEL_BRASWELL:
625case HDA_INTEL_82801F:
626case HDA_INTEL_63XXESB:
627case HDA_INTEL_82801G:
628case HDA_INTEL_82801H:
629case HDA_INTEL_82801I:
630case HDA_INTEL_ICH9:
631case HDA_INTEL_82801JI:
632case HDA_INTEL_82801JD:
633case HDA_INTEL_PCH:
634case HDA_INTEL_PCH2:
635case HDA_INTEL_SCH:
636case HDA_INTEL_LPT1:
637case HDA_INTEL_LPT2:
638case HDA_INTEL_WCPT:
639case HDA_INTEL_WELLS1:
640case HDA_INTEL_WELLS2:
641case HDA_INTEL_WCPTLP:
642case HDA_INTEL_LPTLP1:
643case HDA_INTEL_LPTLP2:
644case HDA_INTEL_SRSPLP:
645case HDA_INTEL_SRSP:
646
647/* if the key value kHDEFLayoutID as a value set that value, if not will assign a default layout */
648if (getValueForKey(kHDEFLayoutID, &value, &len, &bootInfo->chameleonConfig) && len == HDEF_LEN * 2)
649{
650uint8_t new_HDEF_layout_id[HDEF_LEN];
651if (hex2bin(value, new_HDEF_layout_id, HDEF_LEN) == 0)
652{
653memcpy(default_HDEF_layout_id, new_HDEF_layout_id, HDEF_LEN);
654verbose("Using user supplied HDEF layout-id: 0x%02x, 0x%02x, 0x%02x, 0x%02x\n",
655default_HDEF_layout_id[0], default_HDEF_layout_id[1], default_HDEF_layout_id[2], default_HDEF_layout_id[3]);
656}
657}
658else
659{
660verbose("Using default HDEF layout-id: 0x%02x, 0x%02x, 0x%02x, 0x%02x\n",
661 default_HDEF_layout_id[0], default_HDEF_layout_id[1], default_HDEF_layout_id[2], default_HDEF_layout_id[3]);
662}
663devprop_add_value(device, "layout-id", default_HDEF_layout_id, HDEF_LEN);
664devprop_add_value(device, "AAPL,slot-name", (uint8_t *)"Built-in", 9); // 0x09
665devprop_add_value(device, "name", (uint8_t *)"audio", 6); // 0x06
666devprop_add_value(device, "device_type", (uint8_t *)"High Definition Audio", 22); // 0x16
667devprop_add_value(device, "built-in", &BuiltIn, 1);
668devprop_add_value(device, "hda-gfx", (uint8_t *)"onboard-1", 10); // 0x0a
669// "AFGLowPowerState" = <03000000>
670break;
671
672/****************************************************************************************************************
673* The above case are intended as for HDAU (NVIDIA) device onboard audio for GFX card with Audio controller HDMi
674****************************************************************************************************************/
675case HDA_NVIDIA_GK107:
676case HDA_NVIDIA_GF110_1:
677case HDA_NVIDIA_GF110_2:
678case HDA_NVIDIA_GK106:
679case HDA_NVIDIA_GK104:
680case HDA_NVIDIA_GF119:
681case HDA_NVIDIA_GT116:
682case HDA_NVIDIA_GT104:
683case HDA_NVIDIA_GT108:
684case HDA_NVIDIA_GT106:
685case HDA_NVIDIA_GT100:
686case HDA_NVIDIA_0BE4:
687case HDA_NVIDIA_0BE3:
688case HDA_NVIDIA_0BE2:
689
690/* if the key value kHDAULayoutID as a value set that value, if not will assign a default layout */
691if (getValueForKey(kHDAULayoutID, &value, &len, &bootInfo->chameleonConfig) && len == HDAU_LEN * 2)
692{
693uint8_t new_HDAU_layout_id[HDAU_LEN];
694if (hex2bin(value, new_HDAU_layout_id, HDAU_LEN) == 0)
695{
696memcpy(default_HDAU_layout_id, new_HDAU_layout_id, HDAU_LEN);
697verbose("Using user supplied HDAU layout-id: 0x%02x, 0x%02x, 0x%02x, 0x%02x\n",
698 default_HDAU_layout_id[0], default_HDAU_layout_id[1], default_HDAU_layout_id[2], default_HDAU_layout_id[3]);
699}
700}
701else
702{
703verbose("Using default HDAU layout-id: 0x%02x, 0x%02x, 0x%02x, 0x%02x\n",
704 default_HDAU_layout_id[0], default_HDAU_layout_id[1], default_HDAU_layout_id[2], default_HDAU_layout_id[3]);
705}
706
707devprop_add_value(device, "layout-id", default_HDAU_layout_id, HDAU_LEN); /*FIX ME*/
708devprop_add_value(device, "@0,connector-type", connector_type_value, 4);
709devprop_add_value(device, "@1,connector-type", connector_type_value, 4);
710devprop_add_value(device, "hda-gfx", (uint8_t *)"onboard-2", 10);
711devprop_add_value(device, "built-in", &BuiltIn, 1);
712break;
713
714/*************************************************************************************************************
715* The above case are intended as for HDAU (ATi) device onboard audio for GFX card with Audio controller HDMi
716*************************************************************************************************************/
717case HDA_ATI_SB450:
718case HDA_ATI_SB600:
719case HDA_ATI_HUDSON:
720case HDA_ATI_RS600:
721case HDA_ATI_RS690:
722case HDA_ATI_RS780:
723case HDA_ATI_R600:
724case HDA_ATI_RV630:
725case HDA_ATI_RV610:
726case HDA_ATI_RV670:
727case HDA_ATI_RV635:
728case HDA_ATI_RV620:
729case HDA_ATI_RV770:
730case HDA_ATI_RV730:
731case HDA_ATI_RV710:
732case HDA_ATI_RV740:
733case HDA_ATI_RV870:
734case HDA_ATI_RV840:
735case HDA_ATI_RV830:
736case HDA_ATI_RV810:
737case HDA_ATI_RV970:
738case HDA_ATI_RV940:
739case HDA_ATI_RV930:
740case HDA_ATI_RV910:
741case HDA_ATI_R1000:
742case HDA_ATI_SI:
743case HDA_ATI_VERDE:
744
745 /* if the key value kHDAULayoutID as a value set that value, if not will assign a default layout */
746 if (getValueForKey(kHDAULayoutID, &value, &len, &bootInfo->chameleonConfig) && len == HDAU_LEN * 2)
747 {
748 uint8_t new_HDAU_layout_id[HDAU_LEN];
749 if (hex2bin(value, new_HDAU_layout_id, HDAU_LEN) == 0)
750 {
751 memcpy(default_HDAU_layout_id, new_HDAU_layout_id, HDAU_LEN);
752 verbose("Using user supplied HDAU layout-id: 0x%02x, 0x%02x, 0x%02x, 0x%02x\n",
753 default_HDAU_layout_id[0], default_HDAU_layout_id[1], default_HDAU_layout_id[2], default_HDAU_layout_id[3]);
754 }
755}
756else
757{
758verbose("Using default HDAU layout-id: 0x%02x, 0x%02x, 0x%02x, 0x%02x\n",
759 default_HDAU_layout_id[0], default_HDAU_layout_id[1], default_HDAU_layout_id[2], default_HDAU_layout_id[3]);
760 }
761
762 devprop_add_value(device, "layout-id", default_HDAU_layout_id, HDAU_LEN); /*FIX ME*/
763 devprop_add_value(device, "hda-gfx", (uint8_t *)"onboard-2", 10);
764 devprop_add_value(device, "built-in", &BuiltIn, 1);
765 break;
766
767 default:
768 break;
769}
770
771verbose("Class code: [%04x]\nModel name: %s [%04x:%04x] (rev %02x)\nSubsystem: [%04x:%04x]\n%s\ndevice number: %d\n",
772hda_dev->class_id, controller_name, hda_dev->vendor_id, hda_dev->device_id, hda_dev->revision_id,
773hda_dev->subsys_id.subsys.vendor_id, hda_dev->subsys_id.subsys.device_id, devicepath, devices_number);
774
775verbose("--------------------------------\n");
776
777stringdata = malloc(sizeof(uint8_t) * string->length);
778memcpy(stringdata, (uint8_t*)devprop_generate_string(string), string->length);
779stringlength = string->length;
780
781return true;
782}
783

Archive Download this file

Revision: 2665