1 // SPDX-License-Identifier: GPL-2.0-only
2 // This file incorporates work covered by the following copyright notice:
3 // Copyright (c) 2023 Intel Corporation
4 // Copyright (c) 2024 Advanced Micro Devices, Inc.
7 * soc_sdw_cs_amp - Helpers to handle CS35L56 from generic machine driver
10 #include <linux/device.h>
11 #include <linux/errno.h>
12 #include <sound/soc.h>
13 #include <sound/soc-acpi.h>
14 #include <sound/soc-dai.h>
15 #include <sound/soc_sdw_utils.h>
17 #define CODEC_NAME_SIZE 8
19 int asoc_sdw_cs_spk_rtd_init(struct snd_soc_pcm_runtime
*rtd
, struct snd_soc_dai
*dai
)
21 const char *dai_name
= rtd
->dai_link
->codecs
->dai_name
;
22 struct snd_soc_card
*card
= rtd
->card
;
23 char codec_name
[CODEC_NAME_SIZE
];
25 struct snd_soc_dapm_route route
= { "Speaker", NULL
, widget_name
};
26 struct snd_soc_dai
*codec_dai
;
29 snprintf(codec_name
, CODEC_NAME_SIZE
, "%s", dai_name
);
30 card
->components
= devm_kasprintf(card
->dev
, GFP_KERNEL
,
32 card
->components
, codec_name
);
33 if (!card
->components
)
36 for_each_rtd_codec_dais(rtd
, i
, codec_dai
) {
37 if (!strstr(codec_dai
->name
, "cs35l56"))
40 snprintf(widget_name
, sizeof(widget_name
), "%s SPK",
41 codec_dai
->component
->name_prefix
);
42 ret
= snd_soc_dapm_add_routes(&card
->dapm
, &route
, 1);
49 EXPORT_SYMBOL_NS(asoc_sdw_cs_spk_rtd_init
, "SND_SOC_SDW_UTILS");
51 int asoc_sdw_cs_amp_init(struct snd_soc_card
*card
,
52 struct snd_soc_dai_link
*dai_links
,
53 struct asoc_sdw_codec_info
*info
,
56 /* Do init on playback link only. */
64 EXPORT_SYMBOL_NS(asoc_sdw_cs_amp_init
, "SND_SOC_SDW_UTILS");