mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 23:22:31 +02:00
ASoC: Intel: avs: Update machine board card names
Merge series from Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>: As discussed in user bug report [1] & [2], it was identified that HDA card provides wrong FE device numbers to be used with UCM, at the same time it was requested that we change card names to better names. This patchset does that, by adding option for going back to old behaviour in first patch. Using existing way of enumerating FEs from topology in second patch. Then setting new names in all cards while providing fallback to old name. Only exception is probe card, which is used for debug purposes only, where we just directly rename card. Do note that patch 2, will require updated topologies if topology exposes more than 1 FE on card. Old topologies didn't assign id field and it defaulted to 0, however when we use this field by setting snd_soc_component_driver::use_dai_pcm_id field, we need topologies with distinct values in FEs. Necessary changes are provided in avsdk and avs-topology-xml repositories ([4] & [5]). linux-firmware update will follow as soon as this changeset is merged. [1] Link: https://bugzilla.kernel.org/show_bug.cgi?id=219654 [2] Link: https://github.com/alsa-project/alsa-ucm-conf/pull/499 [3] Link: https://lore.kernel.org/linux-sound/20250127144445.2739017-1-amadeuszx.slawinski@linux.intel.com/ [4]a879c8ae4b[5]9b94d52cbcbdbc8d6ba9
This commit is contained in:
commit
25293be4a7
|
|
@ -340,7 +340,7 @@ struct avs_soc_component {
|
|||
extern const struct snd_soc_dai_ops avs_dai_fe_ops;
|
||||
|
||||
int avs_soc_component_register(struct device *dev, const char *name,
|
||||
const struct snd_soc_component_driver *drv,
|
||||
struct snd_soc_component_driver *drv,
|
||||
struct snd_soc_dai_driver *cpu_dais, int num_cpu_dais);
|
||||
int avs_dmic_platform_register(struct avs_dev *adev, const char *name);
|
||||
int avs_i2s_platform_register(struct avs_dev *adev, const char *name, unsigned long port_mask,
|
||||
|
|
|
|||
|
|
@ -17,11 +17,16 @@
|
|||
#include <sound/soc-acpi.h>
|
||||
#include <sound/soc-component.h>
|
||||
#include "avs.h"
|
||||
#include "utils.h"
|
||||
|
||||
static bool i2s_test;
|
||||
module_param(i2s_test, bool, 0444);
|
||||
MODULE_PARM_DESC(i2s_test, "Probe I2S test-board and skip all other I2S boards");
|
||||
|
||||
bool obsolete_card_names = IS_ENABLED(CONFIG_SND_SOC_INTEL_AVS_CARDNAME_OBSOLETE);
|
||||
module_param_named(obsolete_card_names, obsolete_card_names, bool, 0444);
|
||||
MODULE_PARM_DESC(obsolete_card_names, "Use obsolete card names 0=no, 1=yes");
|
||||
|
||||
static const struct dmi_system_id kbl_dmi_table[] = {
|
||||
{
|
||||
.matches = {
|
||||
|
|
@ -141,7 +146,7 @@ static struct snd_soc_acpi_mach avs_kbl_i2s_machines[] = {
|
|||
.mach_params = {
|
||||
.i2s_link_mask = AVS_SSP(0),
|
||||
},
|
||||
.pdata = (unsigned long[]){ 0x2, 0, 0, 0, 0, 0 }, /* SSP0 TDMs */
|
||||
.pdata = (struct avs_mach_pdata[]){ { .tdms = (unsigned long[]){ 0x2 } } },
|
||||
.tplg_filename = "rt5514-tplg.bin",
|
||||
},
|
||||
{
|
||||
|
|
@ -202,7 +207,9 @@ static struct snd_soc_acpi_mach avs_apl_i2s_machines[] = {
|
|||
.mach_params = {
|
||||
.i2s_link_mask = AVS_SSP_RANGE(0, 5),
|
||||
},
|
||||
.pdata = (unsigned long[]){ 0x1, 0x1, 0x14, 0x1, 0x1, 0x1 }, /* SSP2 TDMs */
|
||||
.pdata = (struct avs_mach_pdata[]){ {
|
||||
.tdms = (unsigned long[]){ 0x1, 0x1, 0x14, 0x1, 0x1, 0x1 }
|
||||
} },
|
||||
.tplg_filename = "tdf8532-tplg.bin",
|
||||
},
|
||||
{
|
||||
|
|
@ -445,6 +452,7 @@ static int avs_register_dmic_board(struct avs_dev *adev)
|
|||
{
|
||||
struct platform_device *codec, *board;
|
||||
struct snd_soc_acpi_mach mach = {{0}};
|
||||
struct avs_mach_pdata *pdata;
|
||||
int ret;
|
||||
|
||||
if (!acpi_nhlt_find_endpoint(ACPI_NHLT_LINKTYPE_PDM, -1, -1, -1)) {
|
||||
|
|
@ -468,6 +476,11 @@ static int avs_register_dmic_board(struct avs_dev *adev)
|
|||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
pdata = devm_kzalloc(adev->dev, sizeof(*pdata), GFP_KERNEL);
|
||||
if (!pdata)
|
||||
return -ENOMEM;
|
||||
pdata->obsolete_card_names = obsolete_card_names;
|
||||
mach.pdata = pdata;
|
||||
mach.tplg_filename = "dmic-tplg.bin";
|
||||
mach.mach_params.platform = "dmic-platform";
|
||||
|
||||
|
|
@ -490,6 +503,7 @@ static int avs_register_dmic_board(struct avs_dev *adev)
|
|||
static int avs_register_i2s_board(struct avs_dev *adev, struct snd_soc_acpi_mach *mach)
|
||||
{
|
||||
struct platform_device *board;
|
||||
struct avs_mach_pdata *pdata;
|
||||
int num_ssps;
|
||||
char *name;
|
||||
int ret;
|
||||
|
|
@ -507,7 +521,15 @@ static int avs_register_i2s_board(struct avs_dev *adev, struct snd_soc_acpi_mach
|
|||
if (!name)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = avs_i2s_platform_register(adev, name, mach->mach_params.i2s_link_mask, mach->pdata);
|
||||
pdata = mach->pdata;
|
||||
if (!pdata)
|
||||
pdata = devm_kzalloc(adev->dev, sizeof(*pdata), GFP_KERNEL);
|
||||
if (!pdata)
|
||||
return -ENOMEM;
|
||||
pdata->obsolete_card_names = obsolete_card_names;
|
||||
mach->pdata = pdata;
|
||||
|
||||
ret = avs_i2s_platform_register(adev, name, mach->mach_params.i2s_link_mask, pdata->tdms);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
|
@ -584,6 +606,7 @@ static int avs_register_hda_board(struct avs_dev *adev, struct hda_codec *codec)
|
|||
{
|
||||
struct snd_soc_acpi_mach mach = {{0}};
|
||||
struct platform_device *board;
|
||||
struct avs_mach_pdata *pdata;
|
||||
struct hdac_device *hdev = &codec->core;
|
||||
char *pname;
|
||||
int ret, id;
|
||||
|
|
@ -592,11 +615,17 @@ static int avs_register_hda_board(struct avs_dev *adev, struct hda_codec *codec)
|
|||
if (!pname)
|
||||
return -ENOMEM;
|
||||
|
||||
pdata = devm_kzalloc(adev->dev, sizeof(*pdata), GFP_KERNEL);
|
||||
if (!pdata)
|
||||
return -ENOMEM;
|
||||
pdata->obsolete_card_names = obsolete_card_names;
|
||||
pdata->codec = codec;
|
||||
|
||||
ret = avs_hda_platform_register(adev, pname);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
mach.pdata = codec;
|
||||
mach.pdata = pdata;
|
||||
mach.mach_params.platform = pname;
|
||||
mach.tplg_filename = devm_kasprintf(adev->dev, GFP_KERNEL, "hda-%08x-tplg.bin",
|
||||
hdev->vendor_id);
|
||||
|
|
|
|||
|
|
@ -4,6 +4,14 @@ menu "Intel AVS Machine drivers"
|
|||
|
||||
comment "Available DSP configurations"
|
||||
|
||||
config SND_SOC_INTEL_AVS_CARDNAME_OBSOLETE
|
||||
bool "Use obsolete card names"
|
||||
default n
|
||||
help
|
||||
Use obsolete names for some of avs cards. This option should be
|
||||
used if your system depends on old card names, for example having
|
||||
not up to date UCM files.
|
||||
|
||||
config SND_SOC_INTEL_AVS_MACH_DA7219
|
||||
tristate "da7219 I2S board"
|
||||
depends on I2C
|
||||
|
|
|
|||
|
|
@ -214,6 +214,7 @@ static int avs_da7219_probe(struct platform_device *pdev)
|
|||
{
|
||||
struct snd_soc_dai_link *dai_link;
|
||||
struct snd_soc_acpi_mach *mach;
|
||||
struct avs_mach_pdata *pdata;
|
||||
struct snd_soc_card *card;
|
||||
struct snd_soc_jack *jack;
|
||||
struct device *dev = &pdev->dev;
|
||||
|
|
@ -222,6 +223,7 @@ static int avs_da7219_probe(struct platform_device *pdev)
|
|||
|
||||
mach = dev_get_platdata(dev);
|
||||
pname = mach->mach_params.platform;
|
||||
pdata = mach->pdata;
|
||||
|
||||
ret = avs_mach_get_ssp_tdm(dev, mach, &ssp_port, &tdm_slot);
|
||||
if (ret)
|
||||
|
|
@ -238,7 +240,12 @@ static int avs_da7219_probe(struct platform_device *pdev)
|
|||
if (!jack || !card)
|
||||
return -ENOMEM;
|
||||
|
||||
card->name = "avs_da7219";
|
||||
if (pdata->obsolete_card_names) {
|
||||
card->name = "avs_da7219";
|
||||
} else {
|
||||
card->driver_name = "avs_da7219";
|
||||
card->long_name = card->name = "AVS I2S DA7219";
|
||||
}
|
||||
card->dev = dev;
|
||||
card->owner = THIS_MODULE;
|
||||
card->dai_link = dai_link;
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@
|
|||
#include <linux/module.h>
|
||||
#include <sound/soc.h>
|
||||
#include <sound/soc-acpi.h>
|
||||
#include "../utils.h"
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic_pin, DAILINK_COMP_ARRAY(COMP_CPU("DMIC Pin")));
|
||||
SND_SOC_DAILINK_DEF(dmic_wov_pin, DAILINK_COMP_ARRAY(COMP_CPU("DMIC WoV Pin")));
|
||||
|
|
@ -49,17 +50,24 @@ static const struct snd_soc_dapm_route card_routes[] = {
|
|||
static int avs_dmic_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct snd_soc_acpi_mach *mach;
|
||||
struct avs_mach_pdata *pdata;
|
||||
struct snd_soc_card *card;
|
||||
struct device *dev = &pdev->dev;
|
||||
int ret;
|
||||
|
||||
mach = dev_get_platdata(dev);
|
||||
pdata = mach->pdata;
|
||||
|
||||
card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL);
|
||||
if (!card)
|
||||
return -ENOMEM;
|
||||
|
||||
card->name = "avs_dmic";
|
||||
if (pdata->obsolete_card_names) {
|
||||
card->name = "avs_dmic";
|
||||
} else {
|
||||
card->driver_name = "avs_dmic";
|
||||
card->long_name = card->name = "AVS DMIC";
|
||||
}
|
||||
card->dev = dev;
|
||||
card->owner = THIS_MODULE;
|
||||
card->dai_link = card_dai_links;
|
||||
|
|
|
|||
|
|
@ -259,6 +259,7 @@ static int avs_es8336_probe(struct platform_device *pdev)
|
|||
{
|
||||
struct snd_soc_dai_link *dai_link;
|
||||
struct snd_soc_acpi_mach *mach;
|
||||
struct avs_mach_pdata *pdata;
|
||||
struct avs_card_drvdata *data;
|
||||
struct snd_soc_card *card;
|
||||
struct device *dev = &pdev->dev;
|
||||
|
|
@ -267,6 +268,7 @@ static int avs_es8336_probe(struct platform_device *pdev)
|
|||
|
||||
mach = dev_get_platdata(dev);
|
||||
pname = mach->mach_params.platform;
|
||||
pdata = mach->pdata;
|
||||
|
||||
ret = avs_mach_get_ssp_tdm(dev, mach, &ssp_port, &tdm_slot);
|
||||
if (ret)
|
||||
|
|
@ -283,7 +285,12 @@ static int avs_es8336_probe(struct platform_device *pdev)
|
|||
if (!data || !card)
|
||||
return -ENOMEM;
|
||||
|
||||
card->name = "avs_es8336";
|
||||
if (pdata->obsolete_card_names) {
|
||||
card->name = "avs_es8336";
|
||||
} else {
|
||||
card->driver_name = "avs_es8336";
|
||||
card->long_name = card->name = "AVS I2S ES8336";
|
||||
}
|
||||
card->dev = dev;
|
||||
card->owner = THIS_MODULE;
|
||||
card->suspend_pre = avs_card_suspend_pre;
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@
|
|||
#include <sound/soc.h>
|
||||
#include <sound/soc-acpi.h>
|
||||
#include "../../../codecs/hda.h"
|
||||
#include "../utils.h"
|
||||
|
||||
static int avs_create_dai_links(struct device *dev, struct hda_codec *codec, int pcm_count,
|
||||
const char *platform_name, struct snd_soc_dai_link **links)
|
||||
|
|
@ -95,7 +96,8 @@ avs_card_hdmi_pcm_at(struct snd_soc_card *card, int hdmi_idx)
|
|||
static int avs_card_late_probe(struct snd_soc_card *card)
|
||||
{
|
||||
struct snd_soc_acpi_mach *mach = dev_get_platdata(card->dev);
|
||||
struct hda_codec *codec = mach->pdata;
|
||||
struct avs_mach_pdata *pdata = mach->pdata;
|
||||
struct hda_codec *codec = pdata->codec;
|
||||
struct hda_pcm *hpcm;
|
||||
/* Topology pcm indexing is 1-based */
|
||||
int i = 1;
|
||||
|
|
@ -124,6 +126,7 @@ static int avs_card_late_probe(struct snd_soc_card *card)
|
|||
static int avs_probing_link_init(struct snd_soc_pcm_runtime *rtm)
|
||||
{
|
||||
struct snd_soc_acpi_mach *mach;
|
||||
struct avs_mach_pdata *pdata;
|
||||
struct snd_soc_dai_link *links = NULL;
|
||||
struct snd_soc_card *card = rtm->card;
|
||||
struct hda_codec *codec;
|
||||
|
|
@ -131,7 +134,8 @@ static int avs_probing_link_init(struct snd_soc_pcm_runtime *rtm)
|
|||
int ret, pcm_count = 0;
|
||||
|
||||
mach = dev_get_platdata(card->dev);
|
||||
codec = mach->pdata;
|
||||
pdata = mach->pdata;
|
||||
codec = pdata->codec;
|
||||
|
||||
if (list_empty(&codec->pcm_list_head))
|
||||
return -EINVAL;
|
||||
|
|
@ -167,12 +171,14 @@ static int avs_hdaudio_probe(struct platform_device *pdev)
|
|||
{
|
||||
struct snd_soc_dai_link *binder;
|
||||
struct snd_soc_acpi_mach *mach;
|
||||
struct avs_mach_pdata *pdata;
|
||||
struct snd_soc_card *card;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct hda_codec *codec;
|
||||
|
||||
mach = dev_get_platdata(dev);
|
||||
codec = mach->pdata;
|
||||
pdata = mach->pdata;
|
||||
codec = pdata->codec;
|
||||
|
||||
/* codec may be unloaded before card's probe() fires */
|
||||
if (!device_is_registered(&codec->core.dev))
|
||||
|
|
@ -200,7 +206,16 @@ static int avs_hdaudio_probe(struct platform_device *pdev)
|
|||
if (!card)
|
||||
return -ENOMEM;
|
||||
|
||||
card->name = binder->codecs->name;
|
||||
if (pdata->obsolete_card_names) {
|
||||
card->name = binder->codecs->name;
|
||||
} else {
|
||||
card->driver_name = "avs_hdaudio";
|
||||
if (hda_codec_is_display(codec))
|
||||
card->long_name = card->name = "AVS HDMI";
|
||||
else
|
||||
card->long_name = card->name = "AVS HD-Audio";
|
||||
}
|
||||
|
||||
card->dev = dev;
|
||||
card->owner = THIS_MODULE;
|
||||
card->dai_link = binder;
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ static int avs_i2s_test_probe(struct platform_device *pdev)
|
|||
{
|
||||
struct snd_soc_dai_link *dai_link;
|
||||
struct snd_soc_acpi_mach *mach;
|
||||
struct avs_mach_pdata *pdata;
|
||||
struct snd_soc_card *card;
|
||||
struct device *dev = &pdev->dev;
|
||||
const char *pname;
|
||||
|
|
@ -63,6 +64,7 @@ static int avs_i2s_test_probe(struct platform_device *pdev)
|
|||
|
||||
mach = dev_get_platdata(dev);
|
||||
pname = mach->mach_params.platform;
|
||||
pdata = mach->pdata;
|
||||
|
||||
if (!avs_mach_singular_ssp(mach)) {
|
||||
dev_err(dev, "Invalid SSP configuration\n");
|
||||
|
|
@ -80,8 +82,15 @@ static int avs_i2s_test_probe(struct platform_device *pdev)
|
|||
if (!card)
|
||||
return -ENOMEM;
|
||||
|
||||
card->name = devm_kasprintf(dev, GFP_KERNEL,
|
||||
AVS_STRING_FMT("ssp", "-loopback", ssp_port, tdm_slot));
|
||||
if (pdata->obsolete_card_names) {
|
||||
card->name = devm_kasprintf(dev, GFP_KERNEL,
|
||||
AVS_STRING_FMT("ssp", "-loopback", ssp_port, tdm_slot));
|
||||
} else {
|
||||
card->driver_name = "avs_i2s_test";
|
||||
card->long_name = card->name = devm_kasprintf(dev, GFP_KERNEL,
|
||||
AVS_STRING_FMT("AVS I2S TEST-", "",
|
||||
ssp_port, tdm_slot));
|
||||
}
|
||||
if (!card->name)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
|
|||
|
|
@ -93,6 +93,7 @@ static int avs_max98357a_probe(struct platform_device *pdev)
|
|||
{
|
||||
struct snd_soc_dai_link *dai_link;
|
||||
struct snd_soc_acpi_mach *mach;
|
||||
struct avs_mach_pdata *pdata;
|
||||
struct snd_soc_card *card;
|
||||
struct device *dev = &pdev->dev;
|
||||
const char *pname;
|
||||
|
|
@ -100,6 +101,7 @@ static int avs_max98357a_probe(struct platform_device *pdev)
|
|||
|
||||
mach = dev_get_platdata(dev);
|
||||
pname = mach->mach_params.platform;
|
||||
pdata = mach->pdata;
|
||||
|
||||
ret = avs_mach_get_ssp_tdm(dev, mach, &ssp_port, &tdm_slot);
|
||||
if (ret)
|
||||
|
|
@ -115,7 +117,12 @@ static int avs_max98357a_probe(struct platform_device *pdev)
|
|||
if (!card)
|
||||
return -ENOMEM;
|
||||
|
||||
card->name = "avs_max98357a";
|
||||
if (pdata->obsolete_card_names) {
|
||||
card->name = "avs_max98357a";
|
||||
} else {
|
||||
card->driver_name = "avs_max98357a";
|
||||
card->long_name = card->name = "AVS I2S MAX98357A";
|
||||
}
|
||||
card->dev = dev;
|
||||
card->owner = THIS_MODULE;
|
||||
card->dai_link = dai_link;
|
||||
|
|
|
|||
|
|
@ -146,6 +146,7 @@ static int avs_max98373_probe(struct platform_device *pdev)
|
|||
{
|
||||
struct snd_soc_dai_link *dai_link;
|
||||
struct snd_soc_acpi_mach *mach;
|
||||
struct avs_mach_pdata *pdata;
|
||||
struct snd_soc_card *card;
|
||||
struct device *dev = &pdev->dev;
|
||||
const char *pname;
|
||||
|
|
@ -153,6 +154,7 @@ static int avs_max98373_probe(struct platform_device *pdev)
|
|||
|
||||
mach = dev_get_platdata(dev);
|
||||
pname = mach->mach_params.platform;
|
||||
pdata = mach->pdata;
|
||||
|
||||
ret = avs_mach_get_ssp_tdm(dev, mach, &ssp_port, &tdm_slot);
|
||||
if (ret)
|
||||
|
|
@ -168,7 +170,12 @@ static int avs_max98373_probe(struct platform_device *pdev)
|
|||
if (!card)
|
||||
return -ENOMEM;
|
||||
|
||||
card->name = "avs_max98373";
|
||||
if (pdata->obsolete_card_names) {
|
||||
card->name = "avs_max98373";
|
||||
} else {
|
||||
card->driver_name = "avs_max98373";
|
||||
card->long_name = card->name = "AVS I2S MAX98373";
|
||||
}
|
||||
card->dev = dev;
|
||||
card->owner = THIS_MODULE;
|
||||
card->dai_link = dai_link;
|
||||
|
|
|
|||
|
|
@ -143,6 +143,7 @@ static int avs_max98927_probe(struct platform_device *pdev)
|
|||
{
|
||||
struct snd_soc_dai_link *dai_link;
|
||||
struct snd_soc_acpi_mach *mach;
|
||||
struct avs_mach_pdata *pdata;
|
||||
struct snd_soc_card *card;
|
||||
struct device *dev = &pdev->dev;
|
||||
const char *pname;
|
||||
|
|
@ -150,6 +151,7 @@ static int avs_max98927_probe(struct platform_device *pdev)
|
|||
|
||||
mach = dev_get_platdata(dev);
|
||||
pname = mach->mach_params.platform;
|
||||
pdata = mach->pdata;
|
||||
|
||||
ret = avs_mach_get_ssp_tdm(dev, mach, &ssp_port, &tdm_slot);
|
||||
if (ret)
|
||||
|
|
@ -165,7 +167,12 @@ static int avs_max98927_probe(struct platform_device *pdev)
|
|||
if (!card)
|
||||
return -ENOMEM;
|
||||
|
||||
card->name = "avs_max98927";
|
||||
if (pdata->obsolete_card_names) {
|
||||
card->name = "avs_max98927";
|
||||
} else {
|
||||
card->driver_name = "avs_max98927";
|
||||
card->long_name = card->name = "AVS I2S MAX98927";
|
||||
}
|
||||
card->dev = dev;
|
||||
card->owner = THIS_MODULE;
|
||||
card->dai_link = dai_link;
|
||||
|
|
|
|||
|
|
@ -246,6 +246,7 @@ static int avs_nau8825_probe(struct platform_device *pdev)
|
|||
{
|
||||
struct snd_soc_dai_link *dai_link;
|
||||
struct snd_soc_acpi_mach *mach;
|
||||
struct avs_mach_pdata *pdata;
|
||||
struct snd_soc_card *card;
|
||||
struct snd_soc_jack *jack;
|
||||
struct device *dev = &pdev->dev;
|
||||
|
|
@ -254,6 +255,7 @@ static int avs_nau8825_probe(struct platform_device *pdev)
|
|||
|
||||
mach = dev_get_platdata(dev);
|
||||
pname = mach->mach_params.platform;
|
||||
pdata = mach->pdata;
|
||||
|
||||
ret = avs_mach_get_ssp_tdm(dev, mach, &ssp_port, &tdm_slot);
|
||||
if (ret)
|
||||
|
|
@ -270,7 +272,12 @@ static int avs_nau8825_probe(struct platform_device *pdev)
|
|||
if (!jack || !card)
|
||||
return -ENOMEM;
|
||||
|
||||
card->name = "avs_nau8825";
|
||||
if (pdata->obsolete_card_names) {
|
||||
card->name = "avs_nau8825";
|
||||
} else {
|
||||
card->driver_name = "avs_nau8825";
|
||||
card->long_name = card->name = "AVS I2S NAU8825";
|
||||
}
|
||||
card->dev = dev;
|
||||
card->owner = THIS_MODULE;
|
||||
card->suspend_pre = avs_card_suspend_pre;
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@
|
|||
#include <sound/pcm.h>
|
||||
#include <sound/pcm_params.h>
|
||||
#include <sound/soc.h>
|
||||
#include <sound/soc-acpi.h>
|
||||
#include "../utils.h"
|
||||
|
||||
static const struct snd_soc_dapm_widget card_widgets[] = {
|
||||
SND_SOC_DAPM_HP("CPB Stereo HP 1", NULL),
|
||||
|
|
@ -95,10 +97,15 @@ static int avs_create_dai_links(struct device *dev, struct snd_soc_dai_link **li
|
|||
|
||||
static int avs_pcm3168a_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct snd_soc_acpi_mach *mach;
|
||||
struct avs_mach_pdata *pdata;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct snd_soc_card *card;
|
||||
int ret;
|
||||
|
||||
mach = dev_get_platdata(dev);
|
||||
pdata = mach->pdata;
|
||||
|
||||
card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL);
|
||||
if (!card)
|
||||
return -ENOMEM;
|
||||
|
|
@ -107,7 +114,12 @@ static int avs_pcm3168a_probe(struct platform_device *pdev)
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
card->name = "avs_pcm3168a";
|
||||
if (pdata->obsolete_card_names) {
|
||||
card->name = "avs_pcm3168a";
|
||||
} else {
|
||||
card->driver_name = "avs_pcm3168a";
|
||||
card->long_name = card->name = "AVS I2S PCM3168A";
|
||||
}
|
||||
card->dev = dev;
|
||||
card->owner = THIS_MODULE;
|
||||
card->dapm_widgets = card_widgets;
|
||||
|
|
|
|||
|
|
@ -36,7 +36,8 @@ static int avs_probe_mb_probe(struct platform_device *pdev)
|
|||
if (!card)
|
||||
return -ENOMEM;
|
||||
|
||||
card->name = "avs_probe_mb";
|
||||
card->driver_name = "avs_probe_mb";
|
||||
card->long_name = card->name = "AVS PROBE";
|
||||
card->dev = dev;
|
||||
card->owner = THIS_MODULE;
|
||||
card->dai_link = probe_mb_dai_links;
|
||||
|
|
|
|||
|
|
@ -210,6 +210,7 @@ static int avs_rt274_probe(struct platform_device *pdev)
|
|||
{
|
||||
struct snd_soc_dai_link *dai_link;
|
||||
struct snd_soc_acpi_mach *mach;
|
||||
struct avs_mach_pdata *pdata;
|
||||
struct snd_soc_card *card;
|
||||
struct snd_soc_jack *jack;
|
||||
struct device *dev = &pdev->dev;
|
||||
|
|
@ -218,6 +219,7 @@ static int avs_rt274_probe(struct platform_device *pdev)
|
|||
|
||||
mach = dev_get_platdata(dev);
|
||||
pname = mach->mach_params.platform;
|
||||
pdata = mach->pdata;
|
||||
|
||||
ret = avs_mach_get_ssp_tdm(dev, mach, &ssp_port, &tdm_slot);
|
||||
if (ret)
|
||||
|
|
@ -234,7 +236,12 @@ static int avs_rt274_probe(struct platform_device *pdev)
|
|||
if (!jack || !card)
|
||||
return -ENOMEM;
|
||||
|
||||
card->name = "avs_rt274";
|
||||
if (pdata->obsolete_card_names) {
|
||||
card->name = "avs_rt274";
|
||||
} else {
|
||||
card->driver_name = "avs_rt274";
|
||||
card->long_name = card->name = "AVS I2S ALC274";
|
||||
}
|
||||
card->dev = dev;
|
||||
card->owner = THIS_MODULE;
|
||||
card->suspend_pre = avs_card_suspend_pre;
|
||||
|
|
|
|||
|
|
@ -179,6 +179,7 @@ static int avs_rt286_probe(struct platform_device *pdev)
|
|||
{
|
||||
struct snd_soc_dai_link *dai_link;
|
||||
struct snd_soc_acpi_mach *mach;
|
||||
struct avs_mach_pdata *pdata;
|
||||
struct snd_soc_card *card;
|
||||
struct snd_soc_jack *jack;
|
||||
struct device *dev = &pdev->dev;
|
||||
|
|
@ -187,6 +188,7 @@ static int avs_rt286_probe(struct platform_device *pdev)
|
|||
|
||||
mach = dev_get_platdata(dev);
|
||||
pname = mach->mach_params.platform;
|
||||
pdata = mach->pdata;
|
||||
|
||||
ret = avs_mach_get_ssp_tdm(dev, mach, &ssp_port, &tdm_slot);
|
||||
if (ret)
|
||||
|
|
@ -204,7 +206,12 @@ static int avs_rt286_probe(struct platform_device *pdev)
|
|||
if (!jack || !card)
|
||||
return -ENOMEM;
|
||||
|
||||
card->name = "avs_rt286";
|
||||
if (pdata->obsolete_card_names) {
|
||||
card->name = "avs_rt286";
|
||||
} else {
|
||||
card->driver_name = "avs_rt286";
|
||||
card->long_name = card->name = "AVS I2S ALC286";
|
||||
}
|
||||
card->dev = dev;
|
||||
card->owner = THIS_MODULE;
|
||||
card->suspend_pre = avs_card_suspend_pre;
|
||||
|
|
|
|||
|
|
@ -199,6 +199,7 @@ static int avs_rt298_probe(struct platform_device *pdev)
|
|||
{
|
||||
struct snd_soc_dai_link *dai_link;
|
||||
struct snd_soc_acpi_mach *mach;
|
||||
struct avs_mach_pdata *pdata;
|
||||
struct snd_soc_card *card;
|
||||
struct snd_soc_jack *jack;
|
||||
struct device *dev = &pdev->dev;
|
||||
|
|
@ -207,6 +208,7 @@ static int avs_rt298_probe(struct platform_device *pdev)
|
|||
|
||||
mach = dev_get_platdata(dev);
|
||||
pname = mach->mach_params.platform;
|
||||
pdata = mach->pdata;
|
||||
|
||||
ret = avs_mach_get_ssp_tdm(dev, mach, &ssp_port, &tdm_slot);
|
||||
if (ret)
|
||||
|
|
@ -223,7 +225,12 @@ static int avs_rt298_probe(struct platform_device *pdev)
|
|||
if (!jack || !card)
|
||||
return -ENOMEM;
|
||||
|
||||
card->name = "avs_rt298";
|
||||
if (pdata->obsolete_card_names) {
|
||||
card->name = "avs_rt298";
|
||||
} else {
|
||||
card->driver_name = "avs_rt298";
|
||||
card->long_name = card->name = "AVS I2S ALC298";
|
||||
}
|
||||
card->dev = dev;
|
||||
card->owner = THIS_MODULE;
|
||||
card->suspend_pre = avs_card_suspend_pre;
|
||||
|
|
|
|||
|
|
@ -133,6 +133,7 @@ static int avs_rt5514_probe(struct platform_device *pdev)
|
|||
{
|
||||
struct snd_soc_dai_link *dai_link;
|
||||
struct snd_soc_acpi_mach *mach;
|
||||
struct avs_mach_pdata *pdata;
|
||||
struct snd_soc_card *card;
|
||||
struct device *dev = &pdev->dev;
|
||||
const char *pname;
|
||||
|
|
@ -140,6 +141,7 @@ static int avs_rt5514_probe(struct platform_device *pdev)
|
|||
|
||||
mach = dev_get_platdata(dev);
|
||||
pname = mach->mach_params.platform;
|
||||
pdata = mach->pdata;
|
||||
|
||||
ret = avs_mach_get_ssp_tdm(dev, mach, &ssp_port, &tdm_slot);
|
||||
if (ret)
|
||||
|
|
@ -155,7 +157,12 @@ static int avs_rt5514_probe(struct platform_device *pdev)
|
|||
if (!card)
|
||||
return -ENOMEM;
|
||||
|
||||
card->name = "avs_rt5514";
|
||||
if (pdata->obsolete_card_names) {
|
||||
card->name = "avs_rt5514";
|
||||
} else {
|
||||
card->driver_name = "avs_rt5514";
|
||||
card->long_name = card->name = "AVS I2S ALC5514";
|
||||
}
|
||||
card->dev = dev;
|
||||
card->owner = THIS_MODULE;
|
||||
card->dai_link = dai_link;
|
||||
|
|
|
|||
|
|
@ -198,6 +198,7 @@ static int avs_rt5663_probe(struct platform_device *pdev)
|
|||
{
|
||||
struct snd_soc_dai_link *dai_link;
|
||||
struct snd_soc_acpi_mach *mach;
|
||||
struct avs_mach_pdata *pdata;
|
||||
struct snd_soc_card *card;
|
||||
struct rt5663_private *priv;
|
||||
struct device *dev = &pdev->dev;
|
||||
|
|
@ -206,6 +207,7 @@ static int avs_rt5663_probe(struct platform_device *pdev)
|
|||
|
||||
mach = dev_get_platdata(dev);
|
||||
pname = mach->mach_params.platform;
|
||||
pdata = mach->pdata;
|
||||
|
||||
ret = avs_mach_get_ssp_tdm(dev, mach, &ssp_port, &tdm_slot);
|
||||
if (ret)
|
||||
|
|
@ -222,7 +224,12 @@ static int avs_rt5663_probe(struct platform_device *pdev)
|
|||
if (!priv || !card)
|
||||
return -ENOMEM;
|
||||
|
||||
card->name = "avs_rt5663";
|
||||
if (pdata->obsolete_card_names) {
|
||||
card->name = "avs_rt5663";
|
||||
} else {
|
||||
card->driver_name = "avs_rt5663";
|
||||
card->long_name = card->name = "AVS I2S ALC5640";
|
||||
}
|
||||
card->dev = dev;
|
||||
card->owner = THIS_MODULE;
|
||||
card->suspend_pre = avs_card_suspend_pre;
|
||||
|
|
|
|||
|
|
@ -268,6 +268,7 @@ static int avs_rt5682_probe(struct platform_device *pdev)
|
|||
{
|
||||
struct snd_soc_dai_link *dai_link;
|
||||
struct snd_soc_acpi_mach *mach;
|
||||
struct avs_mach_pdata *pdata;
|
||||
struct snd_soc_card *card;
|
||||
struct snd_soc_jack *jack;
|
||||
struct device *dev = &pdev->dev;
|
||||
|
|
@ -282,6 +283,7 @@ static int avs_rt5682_probe(struct platform_device *pdev)
|
|||
|
||||
mach = dev_get_platdata(dev);
|
||||
pname = mach->mach_params.platform;
|
||||
pdata = mach->pdata;
|
||||
|
||||
ret = avs_mach_get_ssp_tdm(dev, mach, &ssp_port, &tdm_slot);
|
||||
if (ret)
|
||||
|
|
@ -298,7 +300,12 @@ static int avs_rt5682_probe(struct platform_device *pdev)
|
|||
if (!jack || !card)
|
||||
return -ENOMEM;
|
||||
|
||||
card->name = "avs_rt5682";
|
||||
if (pdata->obsolete_card_names) {
|
||||
card->name = "avs_rt5682";
|
||||
} else {
|
||||
card->driver_name = "avs_rt5682";
|
||||
card->long_name = card->name = "AVS I2S ALC5682";
|
||||
}
|
||||
card->dev = dev;
|
||||
card->owner = THIS_MODULE;
|
||||
card->suspend_pre = avs_card_suspend_pre;
|
||||
|
|
|
|||
|
|
@ -132,6 +132,7 @@ static int avs_ssm4567_probe(struct platform_device *pdev)
|
|||
{
|
||||
struct snd_soc_dai_link *dai_link;
|
||||
struct snd_soc_acpi_mach *mach;
|
||||
struct avs_mach_pdata *pdata;
|
||||
struct snd_soc_card *card;
|
||||
struct device *dev = &pdev->dev;
|
||||
const char *pname;
|
||||
|
|
@ -139,6 +140,7 @@ static int avs_ssm4567_probe(struct platform_device *pdev)
|
|||
|
||||
mach = dev_get_platdata(dev);
|
||||
pname = mach->mach_params.platform;
|
||||
pdata = mach->pdata;
|
||||
|
||||
ret = avs_mach_get_ssp_tdm(dev, mach, &ssp_port, &tdm_slot);
|
||||
if (ret)
|
||||
|
|
@ -154,7 +156,12 @@ static int avs_ssm4567_probe(struct platform_device *pdev)
|
|||
if (!card)
|
||||
return -ENOMEM;
|
||||
|
||||
card->name = "avs_ssm4567";
|
||||
if (pdata->obsolete_card_names) {
|
||||
card->name = "avs_ssm4567";
|
||||
} else {
|
||||
card->driver_name = "avs_ssm4567";
|
||||
card->long_name = card->name = "AVS I2S SSM4567";
|
||||
}
|
||||
card->dev = dev;
|
||||
card->owner = THIS_MODULE;
|
||||
card->dai_link = dai_link;
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
#include "path.h"
|
||||
#include "pcm.h"
|
||||
#include "topology.h"
|
||||
#include "utils.h"
|
||||
#include "../../codecs/hda.h"
|
||||
|
||||
struct avs_dma_data {
|
||||
|
|
@ -1266,7 +1267,7 @@ static int avs_component_construct(struct snd_soc_component *component,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static const struct snd_soc_component_driver avs_component_driver = {
|
||||
static struct snd_soc_component_driver avs_component_driver = {
|
||||
.name = "avs-pcm",
|
||||
.probe = avs_component_probe,
|
||||
.remove = avs_component_remove,
|
||||
|
|
@ -1281,7 +1282,7 @@ static const struct snd_soc_component_driver avs_component_driver = {
|
|||
};
|
||||
|
||||
int avs_soc_component_register(struct device *dev, const char *name,
|
||||
const struct snd_soc_component_driver *drv,
|
||||
struct snd_soc_component_driver *drv,
|
||||
struct snd_soc_dai_driver *cpu_dais, int num_cpu_dais)
|
||||
{
|
||||
struct avs_soc_component *acomp;
|
||||
|
|
@ -1299,6 +1300,8 @@ int avs_soc_component_register(struct device *dev, const char *name,
|
|||
acomp->base.name = name;
|
||||
INIT_LIST_HEAD(&acomp->node);
|
||||
|
||||
drv->use_dai_pcm_id = !obsolete_card_names;
|
||||
|
||||
return snd_soc_add_component(&acomp->base, cpu_dais, num_cpu_dais);
|
||||
}
|
||||
|
||||
|
|
@ -1480,6 +1483,7 @@ static int avs_component_hda_probe(struct snd_soc_component *component)
|
|||
struct snd_soc_dapm_context *dapm;
|
||||
struct snd_soc_dai_driver *dais;
|
||||
struct snd_soc_acpi_mach *mach;
|
||||
struct avs_mach_pdata *pdata;
|
||||
struct hda_codec *codec;
|
||||
struct hda_pcm *pcm;
|
||||
const char *cname;
|
||||
|
|
@ -1489,7 +1493,8 @@ static int avs_component_hda_probe(struct snd_soc_component *component)
|
|||
if (!mach)
|
||||
return -EINVAL;
|
||||
|
||||
codec = mach->pdata;
|
||||
pdata = mach->pdata;
|
||||
codec = pdata->codec;
|
||||
if (list_empty(&codec->pcm_list_head))
|
||||
return -EINVAL;
|
||||
list_for_each_entry(pcm, &codec->pcm_list_head, list)
|
||||
|
|
@ -1623,7 +1628,7 @@ static int avs_component_hda_open(struct snd_soc_component *component,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static const struct snd_soc_component_driver avs_hda_component_driver = {
|
||||
static struct snd_soc_component_driver avs_hda_component_driver = {
|
||||
.name = "avs-hda-pcm",
|
||||
.probe = avs_component_hda_probe,
|
||||
.remove = avs_component_hda_remove,
|
||||
|
|
|
|||
|
|
@ -284,7 +284,7 @@ static struct snd_soc_dai_driver probe_cpu_dais[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static const struct snd_soc_component_driver avs_probe_component_driver = {
|
||||
static struct snd_soc_component_driver avs_probe_component_driver = {
|
||||
.name = "avs-probe-compr",
|
||||
.compress_ops = &avs_probe_compress_ops,
|
||||
.module_get_upon_open = 1, /* increment refcount when a stream is opened */
|
||||
|
|
|
|||
|
|
@ -11,6 +11,16 @@
|
|||
|
||||
#include <sound/soc-acpi.h>
|
||||
|
||||
extern bool obsolete_card_names;
|
||||
|
||||
struct avs_mach_pdata {
|
||||
struct hda_codec *codec;
|
||||
unsigned long *tdms;
|
||||
char *codec_name; /* DMIC only */
|
||||
|
||||
bool obsolete_card_names;
|
||||
};
|
||||
|
||||
static inline bool avs_mach_singular_ssp(struct snd_soc_acpi_mach *mach)
|
||||
{
|
||||
return hweight_long(mach->mach_params.i2s_link_mask) == 1;
|
||||
|
|
@ -23,14 +33,16 @@ static inline u32 avs_mach_ssp_port(struct snd_soc_acpi_mach *mach)
|
|||
|
||||
static inline bool avs_mach_singular_tdm(struct snd_soc_acpi_mach *mach, u32 port)
|
||||
{
|
||||
unsigned long *tdms = mach->pdata;
|
||||
struct avs_mach_pdata *pdata = mach->pdata;
|
||||
unsigned long *tdms = pdata->tdms;
|
||||
|
||||
return !tdms || (hweight_long(tdms[port]) == 1);
|
||||
}
|
||||
|
||||
static inline u32 avs_mach_ssp_tdm(struct snd_soc_acpi_mach *mach, u32 port)
|
||||
{
|
||||
unsigned long *tdms = mach->pdata;
|
||||
struct avs_mach_pdata *pdata = mach->pdata;
|
||||
unsigned long *tdms = pdata->tdms;
|
||||
|
||||
return tdms ? __ffs(tdms[port]) : 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user