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