blob: c98b03cdea6ecddbcc178e8c98e85a68f6ddc699 [file] [log] [blame]
Vladimir Serbinenko3129f792014-10-15 21:51:47 +02001package main
2
3import (
4 "fmt"
5 "sort"
6)
7
8type azalia struct {
9}
10
11func (i azalia) Scan(ctx Context, addr PCIDevData) {
12 az := Create(ctx, "hda_verb.c")
13 defer az.Close()
14
Arthur Heymans59302852017-05-01 10:33:56 +020015 Add_gpl(az)
Vladimir Serbinenko3129f792014-10-15 21:51:47 +020016 az.WriteString(
17 `#include <device/azalia_device.h>
18
19const u32 cim_verb_data[] = {
20`)
21
22 for _, codec := range ctx.InfoSource.GetAzaliaCodecs() {
Angel Pons6779d232020-01-08 15:05:56 +010023 fmt.Fprintf(az, "\t0x%08x,\t/* Codec Vendor / Device ID: %s */\n",
Vladimir Serbinenko3129f792014-10-15 21:51:47 +020024 codec.VendorID, codec.Name)
Angel Pons6779d232020-01-08 15:05:56 +010025 fmt.Fprintf(az, "\t0x%08x,\t/* Subsystem ID */\n",
Vladimir Serbinenko3129f792014-10-15 21:51:47 +020026 codec.SubsystemID)
Angel Pons6779d232020-01-08 15:05:56 +010027 fmt.Fprintf(az, "\t%d,\t\t/* Number of 4 dword sets */\n",
Vladimir Serbinenko3129f792014-10-15 21:51:47 +020028 len(codec.PinConfig)+1)
Angel Pons223a30c2020-02-14 13:36:13 +010029 fmt.Fprintf(az, "\tAZALIA_SUBVENDOR(%d, 0x%08x),\n",
Vladimir Serbinenko3129f792014-10-15 21:51:47 +020030 codec.CodecNo, codec.SubsystemID)
31
32 keys := []int{}
33 for nid, _ := range codec.PinConfig {
34 keys = append(keys, nid)
35 }
36
37 sort.Ints(keys)
38
39 for _, nid := range keys {
Angel Pons223a30c2020-02-14 13:36:13 +010040 fmt.Fprintf(az, "\tAZALIA_PIN_CFG(%d, 0x%02x, 0x%08x),\n",
Vladimir Serbinenko3129f792014-10-15 21:51:47 +020041 codec.CodecNo, nid, codec.PinConfig[nid])
42 }
Angel Pons6779d232020-01-08 15:05:56 +010043 az.WriteString("\n");
Vladimir Serbinenko3129f792014-10-15 21:51:47 +020044 }
45
46 az.WriteString(
47 `};
48
49const u32 pc_beep_verbs[0] = {};
50
51AZALIA_ARRAY_SIZES;
52`)
53
Angel Pons6779d232020-01-08 15:05:56 +010054 PutPCIDev(addr, "")
Vladimir Serbinenko3129f792014-10-15 21:51:47 +020055}
56
57func init() {
58 /* I82801GX/I945 */
59 RegisterPCI(0x8086, 0x27d8, azalia{})
60 /* BD82X6X/sandybridge */
61 RegisterPCI(0x8086, 0x1c20, azalia{})
62 /* C216/ivybridge */
63 RegisterPCI(0x8086, 0x1e20, azalia{})
64}