1// SPDX-License-Identifier: GPL-2.0-only 2// Copyright (c) 2024 Intel Corporation 3 4/* 5 * sof_sdw_rt_dmic - Helpers to handle Realtek SDW DMIC from generic machine driver 6 */ 7 8#include <linux/device.h> 9#include <linux/errno.h> 10#include <sound/soc.h> 11#include <sound/soc-acpi.h> 12#include "sof_board_helpers.h" 13#include "sof_sdw_common.h" 14 15static const char * const dmics[] = { 16 "rt715", 17 "rt715-sdca", 18 "rt712-sdca-dmic", 19 "rt722-sdca", 20}; 21 22int rt_dmic_rtd_init(struct snd_soc_pcm_runtime *rtd, struct snd_soc_dai *dai) 23{ 24 struct snd_soc_card *card = rtd->card; 25 struct snd_soc_component *component; 26 struct snd_soc_dai *codec_dai; 27 char *mic_name; 28 29 codec_dai = get_codec_dai_by_name(rtd, dmics, ARRAY_SIZE(dmics)); 30 if (!codec_dai) 31 return -EINVAL; 32 33 component = codec_dai->component; 34 35 /* 36 * rt715-sdca (aka rt714) is a special case that uses different name in card->components 37 * and component->name_prefix. 38 */ 39 if (!strcmp(component->name_prefix, "rt714")) 40 mic_name = devm_kasprintf(card->dev, GFP_KERNEL, "rt715-sdca"); 41 else 42 mic_name = devm_kasprintf(card->dev, GFP_KERNEL, "%s", component->name_prefix); 43 44 card->components = devm_kasprintf(card->dev, GFP_KERNEL, 45 "%s mic:%s", card->components, 46 mic_name); 47 if (!card->components) 48 return -ENOMEM; 49 50 dev_dbg(card->dev, "card->components: %s\n", card->components); 51 52 return 0; 53} 54MODULE_IMPORT_NS(SND_SOC_INTEL_SOF_BOARD_HELPERS); 55