mirror of
https://github.com/torvalds/linux.git
synced 2024-11-29 15:41:36 +00:00
ASoC: mediatek: common: add soundcard driver common code
Add common code to support of_node of codec parsing, so codec phandle can be assigned by sound-dai in dts. Signed-off-by: Trevor Wu <trevor.wu@mediatek.com> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> Link: https://lore.kernel.org/r/20230116034131.23943-12-trevor.wu@mediatek.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
692d25b67e
commit
4302187d95
@ -1,6 +1,6 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# platform driver
|
||||
snd-soc-mtk-common-objs := mtk-afe-platform-driver.o mtk-afe-fe-dai.o mtk-dsp-sof-common.o
|
||||
snd-soc-mtk-common-objs := mtk-afe-platform-driver.o mtk-afe-fe-dai.o mtk-dsp-sof-common.o mtk-soundcard-driver.o
|
||||
obj-$(CONFIG_SND_SOC_MEDIATEK) += snd-soc-mtk-common.o
|
||||
|
||||
obj-$(CONFIG_SND_SOC_MTK_BTCVSD) += mtk-btcvsd.o
|
||||
|
79
sound/soc/mediatek/common/mtk-soundcard-driver.c
Normal file
79
sound/soc/mediatek/common/mtk-soundcard-driver.c
Normal file
@ -0,0 +1,79 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* mtk-soundcard-driver.c -- MediaTek soundcard driver common
|
||||
*
|
||||
* Copyright (c) 2022 MediaTek Inc.
|
||||
* Author: Trevor Wu <trevor.wu@mediatek.com>
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
#include <sound/soc.h>
|
||||
|
||||
#include "mtk-soundcard-driver.h"
|
||||
|
||||
static int set_card_codec_info(struct snd_soc_card *card,
|
||||
struct device_node *sub_node,
|
||||
struct snd_soc_dai_link *dai_link)
|
||||
{
|
||||
struct device *dev = card->dev;
|
||||
struct device_node *codec_node;
|
||||
int ret;
|
||||
|
||||
codec_node = of_get_child_by_name(sub_node, "codec");
|
||||
if (!codec_node)
|
||||
return -EINVAL;
|
||||
|
||||
/* set card codec info */
|
||||
ret = snd_soc_of_get_dai_link_codecs(dev, codec_node, dai_link);
|
||||
|
||||
of_node_put(codec_node);
|
||||
|
||||
if (ret < 0)
|
||||
return dev_err_probe(dev, ret, "%s: codec dai not found\n",
|
||||
dai_link->name);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int parse_dai_link_info(struct snd_soc_card *card)
|
||||
{
|
||||
struct device *dev = card->dev;
|
||||
struct device_node *sub_node;
|
||||
struct snd_soc_dai_link *dai_link;
|
||||
const char *dai_link_name;
|
||||
int ret, i;
|
||||
|
||||
/* Loop over all the dai link sub nodes */
|
||||
for_each_available_child_of_node(dev->of_node, sub_node) {
|
||||
if (of_property_read_string(sub_node, "link-name",
|
||||
&dai_link_name))
|
||||
return -EINVAL;
|
||||
|
||||
for_each_card_prelinks(card, i, dai_link) {
|
||||
if (!strcmp(dai_link_name, dai_link->name))
|
||||
break;
|
||||
}
|
||||
|
||||
if (i >= card->num_links)
|
||||
return -EINVAL;
|
||||
|
||||
ret = set_card_codec_info(card, sub_node, dai_link);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(parse_dai_link_info);
|
||||
|
||||
void clean_card_reference(struct snd_soc_card *card)
|
||||
{
|
||||
struct snd_soc_dai_link *dai_link;
|
||||
int i;
|
||||
|
||||
/* release codec reference gotten by set_card_codec_info */
|
||||
for_each_card_prelinks(card, i, dai_link)
|
||||
snd_soc_of_put_dai_link_codecs(dai_link);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(clean_card_reference);
|
14
sound/soc/mediatek/common/mtk-soundcard-driver.h
Normal file
14
sound/soc/mediatek/common/mtk-soundcard-driver.h
Normal file
@ -0,0 +1,14 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* mtk-soundcard-driver.h -- MediaTek soundcard driver common definition
|
||||
*
|
||||
* Copyright (c) 2022 MediaTek Inc.
|
||||
* Author: Trevor Wu <trevor.wu@mediatek.com>
|
||||
*/
|
||||
|
||||
#ifndef _MTK_SOUNDCARD_DRIVER_H_
|
||||
#define _MTK_SOUNDCARD_DRIVER_H_
|
||||
|
||||
int parse_dai_link_info(struct snd_soc_card *card);
|
||||
void clean_card_reference(struct snd_soc_card *card);
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user