1c72fcc34Sopenharmony_ci// SPDX-License-Identifier: BSD-3-Clause
2c72fcc34Sopenharmony_ci//
3c72fcc34Sopenharmony_ci// Copyright(c) 2021 Intel Corporation. All rights reserved.
4c72fcc34Sopenharmony_ci//
5c72fcc34Sopenharmony_ci// Author: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
6c72fcc34Sopenharmony_ci//         Jaska Uimonen <jaska.uimonen@linux.intel.com>
7c72fcc34Sopenharmony_ci
8c72fcc34Sopenharmony_ci#include "aconfig.h"
9c72fcc34Sopenharmony_ci#include <stdio.h>
10c72fcc34Sopenharmony_ci#include <stdint.h>
11c72fcc34Sopenharmony_ci#include <alsa/global.h>
12c72fcc34Sopenharmony_ci#include "dmic-debug.h"
13c72fcc34Sopenharmony_ci
14c72fcc34Sopenharmony_ci#ifdef NHLT_DEBUG
15c72fcc34Sopenharmony_ci
16c72fcc34Sopenharmony_ci/* print blob as bytes hex string like: 0x11,0xff,0xff,0xff etc. */
17c72fcc34Sopenharmony_civoid dmic_print_bytes_as_hex(uint8_t *src, size_t size)
18c72fcc34Sopenharmony_ci{
19c72fcc34Sopenharmony_ci	int i, j, lines, remain;
20c72fcc34Sopenharmony_ci
21c72fcc34Sopenharmony_ci	fprintf(stdout, "printing dmic vendor blob as bytes:\n");
22c72fcc34Sopenharmony_ci
23c72fcc34Sopenharmony_ci	lines = size / 8;
24c72fcc34Sopenharmony_ci	remain = size % 8;
25c72fcc34Sopenharmony_ci	for (i = 0; i < lines; i++) {
26c72fcc34Sopenharmony_ci		for (j = 0; j < 8; j++) {
27c72fcc34Sopenharmony_ci			fprintf(stdout, "0x%02x,", *src);
28c72fcc34Sopenharmony_ci			src++;
29c72fcc34Sopenharmony_ci		}
30c72fcc34Sopenharmony_ci		fprintf(stdout, "\n");
31c72fcc34Sopenharmony_ci	}
32c72fcc34Sopenharmony_ci	for (i = 0; i < remain; i++) {
33c72fcc34Sopenharmony_ci		fprintf(stdout, "0x%02x,", *src);
34c72fcc34Sopenharmony_ci		src++;
35c72fcc34Sopenharmony_ci	}
36c72fcc34Sopenharmony_ci
37c72fcc34Sopenharmony_ci	fprintf(stdout, "\n");
38c72fcc34Sopenharmony_ci}
39c72fcc34Sopenharmony_ci
40c72fcc34Sopenharmony_ci/* print blob as 32 bit integer hex string like: 0xffffffff,0x00000010 etc. */
41c72fcc34Sopenharmony_civoid dmic_print_integers_as_hex(uint32_t *src, size_t size)
42c72fcc34Sopenharmony_ci{
43c72fcc34Sopenharmony_ci	int i, j, lines, remain;
44c72fcc34Sopenharmony_ci
45c72fcc34Sopenharmony_ci	fprintf(stdout, "printing dmic vendor blob as integers:\n");
46c72fcc34Sopenharmony_ci
47c72fcc34Sopenharmony_ci	lines = size / 8;
48c72fcc34Sopenharmony_ci	remain = size % 8;
49c72fcc34Sopenharmony_ci	for (i = 0; i < lines; i++) {
50c72fcc34Sopenharmony_ci		for (j = 0; j < 8; j++) {
51c72fcc34Sopenharmony_ci			fprintf(stdout, "0x%08x,", *src);
52c72fcc34Sopenharmony_ci			src++;
53c72fcc34Sopenharmony_ci		}
54c72fcc34Sopenharmony_ci		fprintf(stdout, "\n");
55c72fcc34Sopenharmony_ci	}
56c72fcc34Sopenharmony_ci	for (i = 0; i < remain; i++) {
57c72fcc34Sopenharmony_ci		fprintf(stdout, "0x%08x,", *src);
58c72fcc34Sopenharmony_ci		src++;
59c72fcc34Sopenharmony_ci	}
60c72fcc34Sopenharmony_ci
61c72fcc34Sopenharmony_ci	fprintf(stdout, "\n");
62c72fcc34Sopenharmony_ci}
63c72fcc34Sopenharmony_ci
64c72fcc34Sopenharmony_civoid dmic_print_internal(struct intel_dmic_params *dmic)
65c72fcc34Sopenharmony_ci{
66c72fcc34Sopenharmony_ci	int i, j, line, lines, remain;
67c72fcc34Sopenharmony_ci
68c72fcc34Sopenharmony_ci	fprintf(stdout, "printing dmic nhlt internal data:\n");
69c72fcc34Sopenharmony_ci
70c72fcc34Sopenharmony_ci	/* top level struct */
71c72fcc34Sopenharmony_ci	fprintf(stdout, "gateway attributes: 0x%08x\n", dmic->dmic_blob.gateway_attributes);
72c72fcc34Sopenharmony_ci
73c72fcc34Sopenharmony_ci	fprintf(stdout, "ts_group: 0x%08x 0x%08x 0x%08x 0x%08x\n", dmic->dmic_blob.ts_group[0],
74c72fcc34Sopenharmony_ci		dmic->dmic_blob.ts_group[1], dmic->dmic_blob.ts_group[2],
75c72fcc34Sopenharmony_ci		dmic->dmic_blob.ts_group[3]);
76c72fcc34Sopenharmony_ci
77c72fcc34Sopenharmony_ci	fprintf(stdout, "clock_on_delay: 0x%08x\n", dmic->dmic_blob.clock_on_delay);
78c72fcc34Sopenharmony_ci
79c72fcc34Sopenharmony_ci	fprintf(stdout, "channel_ctrl_mask: 0x%08x\n", dmic->dmic_blob.channel_ctrl_mask);
80c72fcc34Sopenharmony_ci
81c72fcc34Sopenharmony_ci	fprintf(stdout, "chan_ctrl_cfg: 0x%08x 0x%08x\n", dmic->dmic_blob.chan_ctrl_cfg[0],
82c72fcc34Sopenharmony_ci		dmic->dmic_blob.chan_ctrl_cfg[1]);
83c72fcc34Sopenharmony_ci
84c72fcc34Sopenharmony_ci	fprintf(stdout, "channel_pdm_mask: 0x%08x\n", dmic->dmic_blob.channel_pdm_mask);
85c72fcc34Sopenharmony_ci
86c72fcc34Sopenharmony_ci	/* first pdm struct */
87c72fcc34Sopenharmony_ci	fprintf(stdout, "pdm_ctrl_cfg 0\n");
88c72fcc34Sopenharmony_ci	fprintf(stdout, "cic_control: 0x%08x\n", dmic->dmic_blob_pdm[0].cic_control);
89c72fcc34Sopenharmony_ci	fprintf(stdout, "cic_config: 0x%08x\n", dmic->dmic_blob_pdm[0].cic_config);
90c72fcc34Sopenharmony_ci	fprintf(stdout, "mic_control: 0x%08x\n", dmic->dmic_blob_pdm[0].mic_control);
91c72fcc34Sopenharmony_ci	fprintf(stdout, "pdmsm: 0x%08x\n", dmic->dmic_blob_pdm[0].pdmsm);
92c72fcc34Sopenharmony_ci	fprintf(stdout, "reuse_fir_from_pdm: 0x%08x\n", dmic->dmic_blob_pdm[0].reuse_fir_from_pdm);
93c72fcc34Sopenharmony_ci
94c72fcc34Sopenharmony_ci	/* first pdm struct, first fir */
95c72fcc34Sopenharmony_ci	fprintf(stdout, "fir_config 0\n");
96c72fcc34Sopenharmony_ci	fprintf(stdout, "fir_control: 0x%08x\n", dmic->dmic_blob_fir[0][0].fir_control);
97c72fcc34Sopenharmony_ci	fprintf(stdout, "fir_config: 0x%08x\n", dmic->dmic_blob_fir[0][0].fir_config);
98c72fcc34Sopenharmony_ci	fprintf(stdout, "dc_offset_left: 0x%08x\n", dmic->dmic_blob_fir[0][0].dc_offset_left);
99c72fcc34Sopenharmony_ci	fprintf(stdout, "dc_offset_right: 0x%08x\n", dmic->dmic_blob_fir[0][0].dc_offset_right);
100c72fcc34Sopenharmony_ci	fprintf(stdout, "out_gain_left: 0x%08x\n", dmic->dmic_blob_fir[0][0].out_gain_left);
101c72fcc34Sopenharmony_ci	fprintf(stdout, "out_gain_right: 0x%08x\n", dmic->dmic_blob_fir[0][0].out_gain_right);
102c72fcc34Sopenharmony_ci
103c72fcc34Sopenharmony_ci	/* first pdm struct, second fir */
104c72fcc34Sopenharmony_ci	fprintf(stdout, "fir_config 1\n");
105c72fcc34Sopenharmony_ci	fprintf(stdout, "fir_control: 0x%08x\n", dmic->dmic_blob_fir[0][1].fir_control);
106c72fcc34Sopenharmony_ci	fprintf(stdout, "fir_config: 0x%08x\n", dmic->dmic_blob_fir[0][1].fir_config);
107c72fcc34Sopenharmony_ci	fprintf(stdout, "dc_offset_left: 0x%08x\n", dmic->dmic_blob_fir[0][1].dc_offset_left);
108c72fcc34Sopenharmony_ci	fprintf(stdout, "dc_offset_right: 0x%08x\n", dmic->dmic_blob_fir[0][1].dc_offset_right);
109c72fcc34Sopenharmony_ci	fprintf(stdout, "out_gain_left: 0x%08x\n", dmic->dmic_blob_fir[0][1].out_gain_left);
110c72fcc34Sopenharmony_ci	fprintf(stdout, "out_gain_right: 0x%08x\n", dmic->dmic_blob_fir[0][1].out_gain_right);
111c72fcc34Sopenharmony_ci
112c72fcc34Sopenharmony_ci	/* first pdm struct, fir coeffs */
113c72fcc34Sopenharmony_ci	for (j = 0; j < DMIC_HW_CONTROLLERS; j++) {
114c72fcc34Sopenharmony_ci		fprintf(stdout, "fir_coeffs a length %u:\n", dmic->dmic_fir_array.fir_len[0]);
115c72fcc34Sopenharmony_ci		lines = dmic->dmic_fir_array.fir_len[0] / 8;
116c72fcc34Sopenharmony_ci		remain = dmic->dmic_fir_array.fir_len[0] % 8;
117c72fcc34Sopenharmony_ci		for (i = 0; i < lines; i++) {
118c72fcc34Sopenharmony_ci			line = i * 8;
119c72fcc34Sopenharmony_ci			fprintf(stdout, "%d %d %d %d %d %d %d %d %d\n", i,
120c72fcc34Sopenharmony_ci				dmic->dmic_fir_array.fir_coeffs[j][0][line],
121c72fcc34Sopenharmony_ci				dmic->dmic_fir_array.fir_coeffs[j][0][line + 1],
122c72fcc34Sopenharmony_ci				dmic->dmic_fir_array.fir_coeffs[j][0][line + 2],
123c72fcc34Sopenharmony_ci				dmic->dmic_fir_array.fir_coeffs[j][0][line + 3],
124c72fcc34Sopenharmony_ci				dmic->dmic_fir_array.fir_coeffs[j][0][line + 4],
125c72fcc34Sopenharmony_ci				dmic->dmic_fir_array.fir_coeffs[j][0][line + 5],
126c72fcc34Sopenharmony_ci				dmic->dmic_fir_array.fir_coeffs[j][0][line + 6],
127c72fcc34Sopenharmony_ci				dmic->dmic_fir_array.fir_coeffs[j][0][line + 7]);
128c72fcc34Sopenharmony_ci		}
129c72fcc34Sopenharmony_ci		line += 1;
130c72fcc34Sopenharmony_ci		for (i = 0; i < remain; i++)
131c72fcc34Sopenharmony_ci			fprintf(stdout, "%d ", dmic->dmic_fir_array.fir_coeffs[j][0][line + i]);
132c72fcc34Sopenharmony_ci	}
133c72fcc34Sopenharmony_ci
134c72fcc34Sopenharmony_ci	/* second pdm struct */
135c72fcc34Sopenharmony_ci	fprintf(stdout, "pdm_ctrl_cfg 1\n");
136c72fcc34Sopenharmony_ci	fprintf(stdout, "cic_control: 0x%08x\n", dmic->dmic_blob_pdm[1].cic_control);
137c72fcc34Sopenharmony_ci	fprintf(stdout, "cic_config: 0x%08x\n", dmic->dmic_blob_pdm[1].cic_config);
138c72fcc34Sopenharmony_ci	fprintf(stdout, "mic_control: 0x%08x\n", dmic->dmic_blob_pdm[1].mic_control);
139c72fcc34Sopenharmony_ci	fprintf(stdout, "pdmsm: 0x%08x\n", dmic->dmic_blob_pdm[1].pdmsm);
140c72fcc34Sopenharmony_ci	fprintf(stdout, "reuse_fir_from_pdm: 0x%08x\n", dmic->dmic_blob_pdm[1].reuse_fir_from_pdm);
141c72fcc34Sopenharmony_ci
142c72fcc34Sopenharmony_ci	/* second pdm struct, first fir */
143c72fcc34Sopenharmony_ci	fprintf(stdout, "fir_config 0\n");
144c72fcc34Sopenharmony_ci	fprintf(stdout, "fir_control: 0x%08x\n", dmic->dmic_blob_fir[1][0].fir_control);
145c72fcc34Sopenharmony_ci	fprintf(stdout, "fir_config: 0x%08x\n", dmic->dmic_blob_fir[1][0].fir_config);
146c72fcc34Sopenharmony_ci	fprintf(stdout, "dc_offset_left: 0x%08x\n", dmic->dmic_blob_fir[1][0].dc_offset_left);
147c72fcc34Sopenharmony_ci	fprintf(stdout, "dc_offset_right: 0x%08x\n", dmic->dmic_blob_fir[1][0].dc_offset_right);
148c72fcc34Sopenharmony_ci	fprintf(stdout, "out_gain_left: 0x%08x\n", dmic->dmic_blob_fir[1][0].out_gain_left);
149c72fcc34Sopenharmony_ci	fprintf(stdout, "out_gain_right: 0x%08x\n", dmic->dmic_blob_fir[1][0].out_gain_right);
150c72fcc34Sopenharmony_ci
151c72fcc34Sopenharmony_ci	/* second pdm struct, second fir */
152c72fcc34Sopenharmony_ci	fprintf(stdout, "fir_config 1\n");
153c72fcc34Sopenharmony_ci	fprintf(stdout, "fir_control: 0x%08x\n", dmic->dmic_blob_fir[1][1].fir_control);
154c72fcc34Sopenharmony_ci	fprintf(stdout, "fir_config: 0x%08x\n", dmic->dmic_blob_fir[1][1].fir_config);
155c72fcc34Sopenharmony_ci	fprintf(stdout, "dc_offset_left: 0x%08x\n", dmic->dmic_blob_fir[1][1].dc_offset_left);
156c72fcc34Sopenharmony_ci	fprintf(stdout, "dc_offset_right: 0x%08x\n", dmic->dmic_blob_fir[1][1].dc_offset_right);
157c72fcc34Sopenharmony_ci	fprintf(stdout, "out_gain_left: 0x%08x\n", dmic->dmic_blob_fir[1][1].out_gain_left);
158c72fcc34Sopenharmony_ci	fprintf(stdout, "out_gain_right: 0x%08x\n", dmic->dmic_blob_fir[1][1].out_gain_right);
159c72fcc34Sopenharmony_ci
160c72fcc34Sopenharmony_ci	for (j = 0; j < DMIC_HW_CONTROLLERS; j++) {
161c72fcc34Sopenharmony_ci		fprintf(stdout, "fir_coeffs b length %u:\n", dmic->dmic_fir_array.fir_len[1]);
162c72fcc34Sopenharmony_ci		lines = dmic->dmic_fir_array.fir_len[1] / 8;
163c72fcc34Sopenharmony_ci		remain = dmic->dmic_fir_array.fir_len[1] % 8;
164c72fcc34Sopenharmony_ci		for (i = 0; i < lines; i++) {
165c72fcc34Sopenharmony_ci			line = i * 8;
166c72fcc34Sopenharmony_ci			fprintf(stdout, "%d %d %d %d %d %d %d %d %d\n", i,
167c72fcc34Sopenharmony_ci				dmic->dmic_fir_array.fir_coeffs[j][1][line],
168c72fcc34Sopenharmony_ci				dmic->dmic_fir_array.fir_coeffs[j][1][line + 1],
169c72fcc34Sopenharmony_ci				dmic->dmic_fir_array.fir_coeffs[j][1][line + 2],
170c72fcc34Sopenharmony_ci				dmic->dmic_fir_array.fir_coeffs[j][1][line + 3],
171c72fcc34Sopenharmony_ci				dmic->dmic_fir_array.fir_coeffs[j][1][line + 4],
172c72fcc34Sopenharmony_ci				dmic->dmic_fir_array.fir_coeffs[j][1][line + 5],
173c72fcc34Sopenharmony_ci				dmic->dmic_fir_array.fir_coeffs[j][1][line + 6],
174c72fcc34Sopenharmony_ci				dmic->dmic_fir_array.fir_coeffs[j][1][line + 7]);
175c72fcc34Sopenharmony_ci		}
176c72fcc34Sopenharmony_ci		line += 1;
177c72fcc34Sopenharmony_ci		for (i = 0; i < remain; i++)
178c72fcc34Sopenharmony_ci			fprintf(stdout, "%d ", dmic->dmic_fir_array.fir_coeffs[j][1][line + i]);
179c72fcc34Sopenharmony_ci	}
180c72fcc34Sopenharmony_ci
181c72fcc34Sopenharmony_ci	fprintf(stdout, "\n");
182c72fcc34Sopenharmony_ci}
183c72fcc34Sopenharmony_ci
184c72fcc34Sopenharmony_ci#else /* NHLT_DEBUG */
185c72fcc34Sopenharmony_civoid dmic_print_bytes_as_hex(uint8_t *src ATTRIBUTE_UNUSED, size_t size ATTRIBUTE_UNUSED) {}
186c72fcc34Sopenharmony_civoid dmic_print_integers_as_hex(uint32_t *src ATTRIBUTE_UNUSED, size_t size ATTRIBUTE_UNUSED) {}
187c72fcc34Sopenharmony_civoid dmic_print_internal(struct intel_dmic_params *dmic ATTRIBUTE_UNUSED) {}
188c72fcc34Sopenharmony_ci#endif
189