blob: fe23c7021b3bcb8a2c8a25cf5ba8bd0d033df322 [file] [log] [blame]
Angel Pons32859fc2020-04-02 23:48:27 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Andrew Wub7bb70d2013-08-12 20:07:47 +08002
3#ifndef DEVICE_AZALIA_H
4#define DEVICE_AZALIA_H
5
Furquan Shaikh76cedd22020-05-02 10:24:23 -07006#include <acpi/acpi.h>
Kyösti Mälkki13f66502019-03-03 08:01:05 +02007#include <device/mmio.h>
Andrew Wub7bb70d2013-08-12 20:07:47 +08008#include <device/device.h>
Elyes HAOUAS6d097b82020-08-03 15:42:23 +02009#include <stdint.h>
Andrew Wub7bb70d2013-08-12 20:07:47 +080010
11void azalia_audio_init(struct device *dev);
12extern struct device_operations default_azalia_audio_ops;
13
Vladimir Serbinenko75c83872014-09-05 01:01:31 +020014extern const u32 cim_verb_data[];
15extern const u32 cim_verb_data_size;
16extern const u32 pc_beep_verbs[];
17extern const u32 pc_beep_verbs_size;
18
Patrick Rudolph9a521d72020-03-20 10:07:53 +010019enum azalia_pin_connection {
20 JACK = 0,
21 NC,
22 INTEGRATED,
23 JACK_AND_INTEGRATED,
24};
25
26enum azalia_pin_color {
27 COLOR_UNKNOWN = 0,
28 BLACK,
29 GREY,
30 BLUE,
31 GREEN,
32 RED,
33 ORANGE,
34 YELLOW,
35 PURPLE,
36 PINK,
37 WHITE = 0xe,
38 COLOR_OTHER = 0xf,
39};
40
41enum azalia_pin_type {
42 TYPE_UNKNOWN = 0,
43 STEREO_MONO_1_8,
44 STEREO_MONO_1_4,
45 ATAPI,
46 RCA,
47 OPTIONAL,
48 OTHER_DIGITAL,
49 OTHER_ANALOG,
50 MULTICHANNEL_ANALOG,
51 XLR,
52 RJ_11,
53 COMBINATION,
54 TYPE_OTHER = 0xf
55};
56
57enum azalia_pin_device {
58 LINE_OUT = 0,
59 SPEAKER,
60 HP_OUT,
61 CD,
62 SPDIF_OUT,
63 DIGITAL_OTHER_OUT,
64 MODEM_LINE_SIDE,
65 MODEM_HANDSET_SIDE,
66 LINE_IN,
67 AUX,
68 MIC_IN,
69 TELEPHONY,
70 SPDIF_IN,
71 DIGITAL_OTHER_IN,
72 DEVICE_OTHER = 0xf,
73};
74
75enum azalia_pin_location_1 {
76 NA = 0,
77 REAR,
78 FRONT,
79 LEFT,
80 RIGHT,
81 TOP,
82 BOTTOM,
83 SPECIAL7,
84 SPECIAL8,
85 SPECIAL9,
86};
87
88enum azalia_pin_location_2 {
89 EXTERNAL_PRIMARY_CHASSIS = 0,
90 INTERNAL,
91 SEPARATE_CHASSIS,
92 LOCATION_OTHER
93};
94
95#define AZALIA_PIN_DESC(conn, location2, location1, dev, type, color, no_presence_detect, \
96 association, sequence) \
97 (((conn) << 30) | \
98 ((location2) << 27) | \
99 ((location1) << 24) | \
100 ((dev) << 20) | \
101 ((type) << 16) | \
102 ((color) << 12) | \
103 ((no_presence_detect) << 8) | \
104 ((sequence) << 4) | \
105 ((sequence) << 0))
106
Lee Leahy6a566d72017-03-07 17:45:12 -0800107#define AZALIA_ARRAY_SIZES const u32 pc_beep_verbs_size = \
108 ARRAY_SIZE(pc_beep_verbs); \
Vladimir Serbinenko75c83872014-09-05 01:01:31 +0200109 const u32 cim_verb_data_size = sizeof(cim_verb_data)
Vladimir Serbinenko6a3a8ce2014-08-17 23:48:42 +0200110
Lee Leahy6a566d72017-03-07 17:45:12 -0800111#define AZALIA_PIN_CFG(codec, pin, val) \
112 (((codec) << 28) | ((pin) << 20) | (0x71c << 8) \
113 | ((val) & 0xff)), \
114 (((codec) << 28) | ((pin) << 20) | (0x71d << 8) \
115 | (((val) >> 8) & 0xff)), \
116 (((codec) << 28) | ((pin) << 20) | (0x71e << 8) \
117 | (((val) >> 16) & 0xff)), \
118 (((codec) << 28) | ((pin) << 20) | (0x71f << 8) \
119 | (((val) >> 24) & 0xff))
Vladimir Serbinenko8f0da582014-09-04 21:34:13 +0200120
Lijian Zhao5c9237f2018-11-08 17:57:33 -0800121#define AZALIA_RESET(pin) \
122 (((pin) << 20) | 0x7ff00), (((pin) << 20) | 0x7ff00), \
123 (((pin) << 20) | 0x7ff00), (((pin) << 20) | 0x7ff00)
124
Vladimir Serbinenko8f0da582014-09-04 21:34:13 +0200125#define AZALIA_SUBVENDOR(codec, val) \
Lee Leahyf00e4462017-03-07 13:17:49 -0800126 (((codec) << 28) | (0x01720 << 8) | ((val) & 0xff)), \
127 (((codec) << 28) | (0x01721 << 8) | (((val) >> 8) & 0xff)), \
128 (((codec) << 28) | (0x01722 << 8) | (((val) >> 16) & 0xff)), \
129 (((codec) << 28) | (0x01723 << 8) | (((val) >> 24) & 0xff))
Vladimir Serbinenko8f0da582014-09-04 21:34:13 +0200130
Andrew Wub7bb70d2013-08-12 20:07:47 +0800131#endif /* DEVICE_AZALIA_H */