Commit 23e52859 authored by Mark Brown's avatar Mark Brown

Add tdm support in acp machine driver

Merge series from Venkata Prasad Potturu <venkataprasad.potturu@amd.com>:

This patch set is to add new cpu dai, refactor dai format
implementation and clock enable/disable and add tdm support
in acp machine driver.
parents b6e98cf4 d386a10c
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include <sound/pcm_params.h> #include <sound/pcm_params.h>
#include <sound/soc-acpi.h> #include <sound/soc-acpi.h>
#include <sound/soc-dapm.h> #include <sound/soc-dapm.h>
#include <linux/dmi.h>
#include <linux/module.h> #include <linux/module.h>
#include "acp-mach.h" #include "acp-mach.h"
...@@ -27,6 +28,7 @@ static struct acp_card_drvdata rt5682_rt1019_data = { ...@@ -27,6 +28,7 @@ static struct acp_card_drvdata rt5682_rt1019_data = {
.hs_codec_id = RT5682, .hs_codec_id = RT5682,
.amp_codec_id = RT1019, .amp_codec_id = RT1019,
.dmic_codec_id = DMIC, .dmic_codec_id = DMIC,
.tdm_mode = false,
}; };
static struct acp_card_drvdata rt5682s_max_data = { static struct acp_card_drvdata rt5682s_max_data = {
...@@ -36,6 +38,7 @@ static struct acp_card_drvdata rt5682s_max_data = { ...@@ -36,6 +38,7 @@ static struct acp_card_drvdata rt5682s_max_data = {
.hs_codec_id = RT5682S, .hs_codec_id = RT5682S,
.amp_codec_id = MAX98360A, .amp_codec_id = MAX98360A,
.dmic_codec_id = DMIC, .dmic_codec_id = DMIC,
.tdm_mode = false,
}; };
static struct acp_card_drvdata rt5682s_rt1019_data = { static struct acp_card_drvdata rt5682s_rt1019_data = {
...@@ -45,6 +48,7 @@ static struct acp_card_drvdata rt5682s_rt1019_data = { ...@@ -45,6 +48,7 @@ static struct acp_card_drvdata rt5682s_rt1019_data = {
.hs_codec_id = RT5682S, .hs_codec_id = RT5682S,
.amp_codec_id = RT1019, .amp_codec_id = RT1019,
.dmic_codec_id = DMIC, .dmic_codec_id = DMIC,
.tdm_mode = false,
}; };
static struct acp_card_drvdata max_nau8825_data = { static struct acp_card_drvdata max_nau8825_data = {
...@@ -56,6 +60,7 @@ static struct acp_card_drvdata max_nau8825_data = { ...@@ -56,6 +60,7 @@ static struct acp_card_drvdata max_nau8825_data = {
.dmic_codec_id = DMIC, .dmic_codec_id = DMIC,
.soc_mclk = true, .soc_mclk = true,
.platform = REMBRANDT, .platform = REMBRANDT,
.tdm_mode = false,
}; };
static struct acp_card_drvdata rt5682s_rt1019_rmb_data = { static struct acp_card_drvdata rt5682s_rt1019_rmb_data = {
...@@ -67,6 +72,7 @@ static struct acp_card_drvdata rt5682s_rt1019_rmb_data = { ...@@ -67,6 +72,7 @@ static struct acp_card_drvdata rt5682s_rt1019_rmb_data = {
.dmic_codec_id = DMIC, .dmic_codec_id = DMIC,
.soc_mclk = true, .soc_mclk = true,
.platform = REMBRANDT, .platform = REMBRANDT,
.tdm_mode = false,
}; };
static const struct snd_kcontrol_new acp_controls[] = { static const struct snd_kcontrol_new acp_controls[] = {
...@@ -90,6 +96,8 @@ static int acp_asoc_probe(struct platform_device *pdev) ...@@ -90,6 +96,8 @@ static int acp_asoc_probe(struct platform_device *pdev)
{ {
struct snd_soc_card *card = NULL; struct snd_soc_card *card = NULL;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
const struct dmi_system_id *dmi_id;
struct acp_card_drvdata *acp_card_drvdata;
int ret; int ret;
if (!pdev->id_entry) if (!pdev->id_entry)
...@@ -108,6 +116,11 @@ static int acp_asoc_probe(struct platform_device *pdev) ...@@ -108,6 +116,11 @@ static int acp_asoc_probe(struct platform_device *pdev)
card->num_controls = ARRAY_SIZE(acp_controls); card->num_controls = ARRAY_SIZE(acp_controls);
card->drvdata = (struct acp_card_drvdata *)pdev->id_entry->driver_data; card->drvdata = (struct acp_card_drvdata *)pdev->id_entry->driver_data;
acp_card_drvdata = card->drvdata;
dmi_id = dmi_first_match(acp_quirk_table);
if (dmi_id && dmi_id->driver_data)
acp_card_drvdata->tdm_mode = dmi_id->driver_data;
acp_legacy_dai_links_create(card); acp_legacy_dai_links_create(card);
ret = devm_snd_soc_register_card(&pdev->dev, card); ret = devm_snd_soc_register_card(&pdev->dev, card);
......
This diff is collapsed.
...@@ -18,6 +18,8 @@ ...@@ -18,6 +18,8 @@
#include <linux/module.h> #include <linux/module.h>
#include <sound/soc.h> #include <sound/soc.h>
#define TDM_CHANNELS 8
enum be_id { enum be_id {
HEADSET_BE_ID = 0, HEADSET_BE_ID = 0,
AMP_BE_ID, AMP_BE_ID,
...@@ -58,9 +60,11 @@ struct acp_card_drvdata { ...@@ -58,9 +60,11 @@ struct acp_card_drvdata {
struct clk *wclk; struct clk *wclk;
struct clk *bclk; struct clk *bclk;
bool soc_mclk; bool soc_mclk;
bool tdm_mode;
}; };
int acp_sofdsp_dai_links_create(struct snd_soc_card *card); int acp_sofdsp_dai_links_create(struct snd_soc_card *card);
int acp_legacy_dai_links_create(struct snd_soc_card *card); int acp_legacy_dai_links_create(struct snd_soc_card *card);
extern const struct dmi_system_id acp_quirk_table[];
#endif #endif
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include <sound/pcm_params.h> #include <sound/pcm_params.h>
#include <sound/soc-acpi.h> #include <sound/soc-acpi.h>
#include <sound/soc-dapm.h> #include <sound/soc-dapm.h>
#include <linux/dmi.h>
#include <linux/module.h> #include <linux/module.h>
#include "acp-mach.h" #include "acp-mach.h"
...@@ -27,6 +28,7 @@ static struct acp_card_drvdata sof_rt5682_rt1019_data = { ...@@ -27,6 +28,7 @@ static struct acp_card_drvdata sof_rt5682_rt1019_data = {
.hs_codec_id = RT5682, .hs_codec_id = RT5682,
.amp_codec_id = RT1019, .amp_codec_id = RT1019,
.dmic_codec_id = DMIC, .dmic_codec_id = DMIC,
.tdm_mode = false,
}; };
static struct acp_card_drvdata sof_rt5682_max_data = { static struct acp_card_drvdata sof_rt5682_max_data = {
...@@ -36,6 +38,7 @@ static struct acp_card_drvdata sof_rt5682_max_data = { ...@@ -36,6 +38,7 @@ static struct acp_card_drvdata sof_rt5682_max_data = {
.hs_codec_id = RT5682, .hs_codec_id = RT5682,
.amp_codec_id = MAX98360A, .amp_codec_id = MAX98360A,
.dmic_codec_id = DMIC, .dmic_codec_id = DMIC,
.tdm_mode = false,
}; };
static struct acp_card_drvdata sof_rt5682s_rt1019_data = { static struct acp_card_drvdata sof_rt5682s_rt1019_data = {
...@@ -45,6 +48,7 @@ static struct acp_card_drvdata sof_rt5682s_rt1019_data = { ...@@ -45,6 +48,7 @@ static struct acp_card_drvdata sof_rt5682s_rt1019_data = {
.hs_codec_id = RT5682S, .hs_codec_id = RT5682S,
.amp_codec_id = RT1019, .amp_codec_id = RT1019,
.dmic_codec_id = DMIC, .dmic_codec_id = DMIC,
.tdm_mode = false,
}; };
static struct acp_card_drvdata sof_rt5682s_max_data = { static struct acp_card_drvdata sof_rt5682s_max_data = {
...@@ -54,6 +58,7 @@ static struct acp_card_drvdata sof_rt5682s_max_data = { ...@@ -54,6 +58,7 @@ static struct acp_card_drvdata sof_rt5682s_max_data = {
.hs_codec_id = RT5682S, .hs_codec_id = RT5682S,
.amp_codec_id = MAX98360A, .amp_codec_id = MAX98360A,
.dmic_codec_id = DMIC, .dmic_codec_id = DMIC,
.tdm_mode = false,
}; };
static struct acp_card_drvdata sof_nau8825_data = { static struct acp_card_drvdata sof_nau8825_data = {
...@@ -64,6 +69,7 @@ static struct acp_card_drvdata sof_nau8825_data = { ...@@ -64,6 +69,7 @@ static struct acp_card_drvdata sof_nau8825_data = {
.amp_codec_id = MAX98360A, .amp_codec_id = MAX98360A,
.dmic_codec_id = DMIC, .dmic_codec_id = DMIC,
.soc_mclk = true, .soc_mclk = true,
.tdm_mode = false,
}; };
static struct acp_card_drvdata sof_rt5682s_hs_rt1019_data = { static struct acp_card_drvdata sof_rt5682s_hs_rt1019_data = {
...@@ -74,6 +80,7 @@ static struct acp_card_drvdata sof_rt5682s_hs_rt1019_data = { ...@@ -74,6 +80,7 @@ static struct acp_card_drvdata sof_rt5682s_hs_rt1019_data = {
.amp_codec_id = RT1019, .amp_codec_id = RT1019,
.dmic_codec_id = DMIC, .dmic_codec_id = DMIC,
.soc_mclk = true, .soc_mclk = true,
.tdm_mode = false,
}; };
static const struct snd_kcontrol_new acp_controls[] = { static const struct snd_kcontrol_new acp_controls[] = {
...@@ -96,6 +103,8 @@ static int acp_sof_probe(struct platform_device *pdev) ...@@ -96,6 +103,8 @@ static int acp_sof_probe(struct platform_device *pdev)
{ {
struct snd_soc_card *card = NULL; struct snd_soc_card *card = NULL;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
const struct dmi_system_id *dmi_id;
struct acp_card_drvdata *acp_card_drvdata;
int ret; int ret;
if (!pdev->id_entry) if (!pdev->id_entry)
...@@ -114,6 +123,11 @@ static int acp_sof_probe(struct platform_device *pdev) ...@@ -114,6 +123,11 @@ static int acp_sof_probe(struct platform_device *pdev)
card->num_controls = ARRAY_SIZE(acp_controls); card->num_controls = ARRAY_SIZE(acp_controls);
card->drvdata = (struct acp_card_drvdata *)pdev->id_entry->driver_data; card->drvdata = (struct acp_card_drvdata *)pdev->id_entry->driver_data;
acp_card_drvdata = card->drvdata;
dmi_id = dmi_first_match(acp_quirk_table);
if (dmi_id && dmi_id->driver_data)
acp_card_drvdata->tdm_mode = dmi_id->driver_data;
acp_sofdsp_dai_links_create(card); acp_sofdsp_dai_links_create(card);
ret = devm_snd_soc_register_card(&pdev->dev, card); ret = devm_snd_soc_register_card(&pdev->dev, card);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment