1 /*
2  *  skl-nhlt.h - Intel HDA Platform NHLT header
3  *
4  *  Copyright (C) 2015 Intel Corp
5  *  Author: Sanjiv Kumar <sanjiv.kumar@intel.com>
6  *  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7  *
8  *  This program 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; version 2 of the License.
11  *
12  *  This program is distributed in the hope that it will be useful, but
13  *  WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  *  General Public License for more details.
16  *
17  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
18  *
19  */
20 #ifndef __SKL_NHLT_H__
21 #define __SKL_NHLT_H__
22 
23 #include <linux/acpi.h>
24 
25 struct wav_fmt {
26 	u16 fmt_tag;
27 	u16 channels;
28 	u32 samples_per_sec;
29 	u32 avg_bytes_per_sec;
30 	u16 block_align;
31 	u16 bits_per_sample;
32 	u16 cb_size;
33 } __packed;
34 
35 struct wav_fmt_ext {
36 	struct wav_fmt fmt;
37 	union samples {
38 		u16 valid_bits_per_sample;
39 		u16 samples_per_block;
40 		u16 reserved;
41 	} sample;
42 	u32 channel_mask;
43 	u8 sub_fmt[16];
44 } __packed;
45 
46 enum nhlt_link_type {
47 	NHLT_LINK_HDA = 0,
48 	NHLT_LINK_DSP = 1,
49 	NHLT_LINK_DMIC = 2,
50 	NHLT_LINK_SSP = 3,
51 	NHLT_LINK_INVALID
52 };
53 
54 enum nhlt_device_type {
55 	NHLT_DEVICE_BT = 0,
56 	NHLT_DEVICE_DMIC = 1,
57 	NHLT_DEVICE_I2S = 4,
58 	NHLT_DEVICE_INVALID
59 };
60 
61 struct nhlt_specific_cfg {
62 	u32 size;
63 	u8 caps[0];
64 } __packed;
65 
66 struct nhlt_fmt_cfg {
67 	struct wav_fmt_ext fmt_ext;
68 	struct nhlt_specific_cfg config;
69 } __packed;
70 
71 struct nhlt_fmt {
72 	u8 fmt_count;
73 	struct nhlt_fmt_cfg fmt_config[0];
74 } __packed;
75 
76 struct nhlt_endpoint {
77 	u32  length;
78 	u8   linktype;
79 	u8   instance_id;
80 	u16  vendor_id;
81 	u16  device_id;
82 	u16  revision_id;
83 	u32  subsystem_id;
84 	u8   device_type;
85 	u8   direction;
86 	u8   virtual_bus_id;
87 	struct nhlt_specific_cfg config;
88 } __packed;
89 
90 struct nhlt_acpi_table {
91 	struct acpi_table_header header;
92 	u8 endpoint_count;
93 	struct nhlt_endpoint desc[0];
94 } __packed;
95 
96 struct nhlt_resource_desc  {
97 	u32 extra;
98 	u16 flags;
99 	u64 addr_spc_gra;
100 	u64 min_addr;
101 	u64 max_addr;
102 	u64 addr_trans_offset;
103 	u64 length;
104 } __packed;
105 
106 #define MIC_ARRAY_2CH 2
107 #define MIC_ARRAY_4CH 4
108 
109 struct nhlt_tdm_config {
110 	u8 virtual_slot;
111 	u8 config_type;
112 } __packed;
113 
114 struct nhlt_dmic_array_config {
115 	struct nhlt_tdm_config tdm_config;
116 	u8 array_type;
117 } __packed;
118 
119 enum {
120 	NHLT_MIC_ARRAY_2CH_SMALL = 0xa,
121 	NHLT_MIC_ARRAY_2CH_BIG = 0xb,
122 	NHLT_MIC_ARRAY_4CH_1ST_GEOM = 0xc,
123 	NHLT_MIC_ARRAY_4CH_L_SHAPED = 0xd,
124 	NHLT_MIC_ARRAY_4CH_2ND_GEOM = 0xe,
125 	NHLT_MIC_ARRAY_VENDOR_DEFINED = 0xf,
126 };
127 
128 #endif
129