forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 132
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ASoC: Intel: sof_sdw: Add rt722 support
RT722 is a multi-function codec which supports headset, amp, and dmic functions. Each function provides a DAI which can be used in different dailinks. The RT711 supports up to 3 SoundWire lanes, but that should not have any impact in the machine driver: the lanes are allocated and controlled by the manager and bandwidth allocation algorithm. Signed-off-by: Chao Song <[email protected]>
- Loading branch information
Showing
6 changed files
with
150 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
// SPDX-License-Identifier: GPL-2.0-only | ||
// Copyright (c) 2023 Intel Corporation | ||
|
||
/* | ||
* sof_sdw_rt722_sdca - Helpers to handle RT722-SDCA from generic machine driver | ||
*/ | ||
|
||
#include <linux/device.h> | ||
#include <linux/errno.h> | ||
#include <linux/soundwire/sdw.h> | ||
#include <linux/soundwire/sdw_type.h> | ||
#include <sound/control.h> | ||
#include <sound/soc.h> | ||
#include <sound/soc-acpi.h> | ||
#include <sound/soc-dapm.h> | ||
#include "sof_sdw_common.h" | ||
|
||
static const struct snd_soc_dapm_widget rt722_spk_widgets[] = { | ||
SND_SOC_DAPM_SPK("Speaker", NULL), | ||
}; | ||
|
||
static const struct snd_soc_dapm_route rt722_spk_map[] = { | ||
{ "Speaker", NULL, "rt722 SPK" }, | ||
}; | ||
|
||
static const struct snd_kcontrol_new rt722_spk_controls[] = { | ||
SOC_DAPM_PIN_SWITCH("Speaker"), | ||
}; | ||
|
||
static int rt722_spk_init(struct snd_soc_pcm_runtime *rtd) | ||
{ | ||
struct snd_soc_card *card = rtd->card; | ||
int ret; | ||
|
||
card->components = devm_kasprintf(card->dev, GFP_KERNEL, | ||
"%s spk:rt722", | ||
card->components); | ||
if (!card->components) | ||
return -ENOMEM; | ||
|
||
ret = snd_soc_add_card_controls(card, rt722_spk_controls, | ||
ARRAY_SIZE(rt722_spk_controls)); | ||
if (ret) { | ||
dev_err(card->dev, "failed to add rt722 spk controls: %d\n", ret); | ||
return ret; | ||
} | ||
|
||
ret = snd_soc_dapm_new_controls(&card->dapm, rt722_spk_widgets, | ||
ARRAY_SIZE(rt722_spk_widgets)); | ||
if (ret) { | ||
dev_err(card->dev, "failed to add rt722 spk widgets: %d\n", ret); | ||
return ret; | ||
} | ||
|
||
ret = snd_soc_dapm_add_routes(&card->dapm, rt722_spk_map, ARRAY_SIZE(rt722_spk_map)); | ||
if (ret) | ||
dev_err(rtd->dev, "failed to add rt722 spk map: %d\n", ret); | ||
|
||
return ret; | ||
} | ||
|
||
int sof_sdw_rt722_spk_init(struct snd_soc_card *card, | ||
const struct snd_soc_acpi_link_adr *link, | ||
struct snd_soc_dai_link *dai_links, | ||
struct sof_sdw_codec_info *info, | ||
bool playback) | ||
{ | ||
dai_links->init = rt722_spk_init; | ||
|
||
return 0; | ||
} | ||
|
||
static int rt722_sdca_dmic_rtd_init(struct snd_soc_pcm_runtime *rtd) | ||
{ | ||
struct snd_soc_card *card = rtd->card; | ||
struct snd_soc_dai *codec_dai = snd_soc_rtd_to_codec(rtd, 0); | ||
struct snd_soc_component *component = codec_dai->component; | ||
|
||
card->components = devm_kasprintf(card->dev, GFP_KERNEL, | ||
"%s mic:%s", | ||
card->components, component->name_prefix); | ||
if (!card->components) | ||
return -ENOMEM; | ||
|
||
return 0; | ||
} | ||
|
||
int sof_sdw_rt722_sdca_dmic_init(struct snd_soc_card *card, | ||
const struct snd_soc_acpi_link_adr *link, | ||
struct snd_soc_dai_link *dai_links, | ||
struct sof_sdw_codec_info *info, | ||
bool playback) | ||
{ | ||
dai_links->init = rt722_sdca_dmic_rtd_init; | ||
|
||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters