Merge branch 'asoc-5.3' into asoc-next
Dieser Commit ist enthalten in:
@@ -156,6 +156,18 @@ config SND_SOC_INTEL_CHT_BSW_NAU8824_MACH
|
||||
Say Y or m if you have such a device. This is a recommended option.
|
||||
If unsure select "N".
|
||||
|
||||
config SND_SOC_INTEL_BYT_CHT_CX2072X_MACH
|
||||
tristate "Baytrail & Cherrytrail with CX2072X codec"
|
||||
depends on I2C && ACPI
|
||||
depends on X86_INTEL_LPSS || COMPILE_TEST
|
||||
select SND_SOC_ACPI
|
||||
select SND_SOC_CX2072X
|
||||
help
|
||||
This adds support for ASoC machine driver for Intel(R) Baytrail &
|
||||
Cherrytrail platforms with Conexant CX2072X audio codec.
|
||||
Say Y or m if you have such a device. This is a recommended option.
|
||||
If unsure select "N".
|
||||
|
||||
config SND_SOC_INTEL_BYT_CHT_DA7213_MACH
|
||||
tristate "Baytrail & Cherrytrail with DA7212/7213 codec"
|
||||
depends on I2C && ACPI
|
||||
@@ -388,11 +400,11 @@ if SND_SOC_SOF_HDA_COMMON || SND_SOC_SOF_BAYTRAIL
|
||||
config SND_SOC_INTEL_SOF_RT5682_MACH
|
||||
tristate "SOF with rt5682 codec in I2S Mode"
|
||||
depends on I2C && ACPI
|
||||
depends on (SND_SOC_SOF_HDA_COMMON && MFD_INTEL_LPSS) ||\
|
||||
(SND_SOC_SOF_BAYTRAIL && X86_INTEL_LPSS)
|
||||
depends on (SND_SOC_SOF_HDA_COMMON && (MFD_INTEL_LPSS || COMPILE_TEST)) ||\
|
||||
(SND_SOC_SOF_BAYTRAIL && (X86_INTEL_LPSS || COMPILE_TEST))
|
||||
select SND_SOC_RT5682
|
||||
select SND_SOC_DMIC
|
||||
select SND_SOC_HDAC_HDMI if SND_SOC_SOF_HDA_COMMON
|
||||
select SND_SOC_HDAC_HDMI
|
||||
help
|
||||
This adds support for ASoC machine driver for SOF platforms
|
||||
with rt5682 codec.
|
||||
|
@@ -13,6 +13,7 @@ snd-soc-sst-cht-bsw-rt5672-objs := cht_bsw_rt5672.o
|
||||
snd-soc-sst-cht-bsw-rt5645-objs := cht_bsw_rt5645.o
|
||||
snd-soc-sst-cht-bsw-max98090_ti-objs := cht_bsw_max98090_ti.o
|
||||
snd-soc-sst-cht-bsw-nau8824-objs := cht_bsw_nau8824.o
|
||||
snd-soc-sst-byt-cht-cx2072x-objs := bytcht_cx2072x.o
|
||||
snd-soc-sst-byt-cht-da7213-objs := bytcht_da7213.o
|
||||
snd-soc-sst-byt-cht-es8316-objs := bytcht_es8316.o
|
||||
snd-soc-sst-byt-cht-nocodec-objs := bytcht_nocodec.o
|
||||
@@ -42,6 +43,7 @@ obj-$(CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH) += snd-soc-sst-cht-bsw-rt5672.o
|
||||
obj-$(CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH) += snd-soc-sst-cht-bsw-rt5645.o
|
||||
obj-$(CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH) += snd-soc-sst-cht-bsw-max98090_ti.o
|
||||
obj-$(CONFIG_SND_SOC_INTEL_CHT_BSW_NAU8824_MACH) += snd-soc-sst-cht-bsw-nau8824.o
|
||||
obj-$(CONFIG_SND_SOC_INTEL_BYT_CHT_CX2072X_MACH) += snd-soc-sst-byt-cht-cx2072x.o
|
||||
obj-$(CONFIG_SND_SOC_INTEL_BYT_CHT_DA7213_MACH) += snd-soc-sst-byt-cht-da7213.o
|
||||
obj-$(CONFIG_SND_SOC_INTEL_BYT_CHT_ES8316_MACH) += snd-soc-sst-byt-cht-es8316.o
|
||||
obj-$(CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH) += snd-soc-sst-byt-cht-nocodec.o
|
||||
|
@@ -246,16 +246,24 @@ static int bdw_rt5677_init(struct snd_soc_pcm_runtime *rtd)
|
||||
}
|
||||
|
||||
/* broadwell digital audio interface glue - connects codec <--> CPU */
|
||||
SND_SOC_DAILINK_DEF(dummy,
|
||||
DAILINK_COMP_ARRAY(COMP_DUMMY()));
|
||||
|
||||
SND_SOC_DAILINK_DEF(fe,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("System Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(platform,
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("haswell-pcm-audio")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(be,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("i2c-RT5677CE:00", "rt5677-aif1")));
|
||||
|
||||
static struct snd_soc_dai_link bdw_rt5677_dais[] = {
|
||||
/* Front End DAI links */
|
||||
{
|
||||
.name = "System PCM",
|
||||
.stream_name = "System Playback/Capture",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "haswell-pcm-audio",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
#if !IS_ENABLED(CONFIG_SND_SOC_SOF_BROADWELL)
|
||||
.init = bdw_rt5677_rtd_init,
|
||||
#endif
|
||||
@@ -265,6 +273,7 @@ static struct snd_soc_dai_link bdw_rt5677_dais[] = {
|
||||
},
|
||||
.dpcm_capture = 1,
|
||||
.dpcm_playback = 1,
|
||||
SND_SOC_DAILINK_REG(fe, dummy, platform),
|
||||
},
|
||||
|
||||
/* Back End DAI links */
|
||||
@@ -272,11 +281,7 @@ static struct snd_soc_dai_link bdw_rt5677_dais[] = {
|
||||
/* SSP0 - Codec */
|
||||
.name = "Codec",
|
||||
.id = 0,
|
||||
.cpu_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "snd-soc-dummy",
|
||||
.no_pcm = 1,
|
||||
.codec_name = "i2c-RT5677CE:00",
|
||||
.codec_dai_name = "rt5677-aif1",
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS,
|
||||
.ignore_suspend = 1,
|
||||
@@ -286,6 +291,7 @@ static struct snd_soc_dai_link bdw_rt5677_dais[] = {
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
.init = bdw_rt5677_init,
|
||||
SND_SOC_DAILINK_REG(dummy, be, dummy),
|
||||
},
|
||||
};
|
||||
|
||||
|
@@ -143,67 +143,72 @@ static int broadwell_rtd_init(struct snd_soc_pcm_runtime *rtd)
|
||||
}
|
||||
#endif
|
||||
|
||||
SND_SOC_DAILINK_DEF(system,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("System Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(offload0,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("Offload0 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(offload1,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("Offload1 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(loopback,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("Loopback Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dummy,
|
||||
DAILINK_COMP_ARRAY(COMP_DUMMY()));
|
||||
|
||||
SND_SOC_DAILINK_DEF(platform,
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("haswell-pcm-audio")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("i2c-INT343A:00", "rt286-aif1")));
|
||||
|
||||
/* broadwell digital audio interface glue - connects codec <--> CPU */
|
||||
static struct snd_soc_dai_link broadwell_rt286_dais[] = {
|
||||
/* Front End DAI links */
|
||||
{
|
||||
.name = "System PCM",
|
||||
.stream_name = "System Playback/Capture",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "haswell-pcm-audio",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
#if !IS_ENABLED(CONFIG_SND_SOC_SOF_BROADWELL)
|
||||
.init = broadwell_rtd_init,
|
||||
#endif
|
||||
.trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
{
|
||||
.name = "Offload0",
|
||||
.stream_name = "Offload0 Playback",
|
||||
.cpu_dai_name = "Offload0 Pin",
|
||||
.platform_name = "haswell-pcm-audio",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
SND_SOC_DAILINK_REG(offload0, dummy, platform),
|
||||
},
|
||||
{
|
||||
.name = "Offload1",
|
||||
.stream_name = "Offload1 Playback",
|
||||
.cpu_dai_name = "Offload1 Pin",
|
||||
.platform_name = "haswell-pcm-audio",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
SND_SOC_DAILINK_REG(offload1, dummy, platform),
|
||||
},
|
||||
{
|
||||
.name = "Loopback PCM",
|
||||
.stream_name = "Loopback",
|
||||
.cpu_dai_name = "Loopback Pin",
|
||||
.platform_name = "haswell-pcm-audio",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_capture = 1,
|
||||
SND_SOC_DAILINK_REG(loopback, dummy, platform),
|
||||
},
|
||||
/* Back End DAI links */
|
||||
{
|
||||
/* SSP0 - Codec */
|
||||
.name = "Codec",
|
||||
.id = 0,
|
||||
.cpu_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "snd-soc-dummy",
|
||||
.no_pcm = 1,
|
||||
.codec_name = "i2c-INT343A:00",
|
||||
.codec_dai_name = "rt286-aif1",
|
||||
.init = broadwell_rt286_codec_init,
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS,
|
||||
@@ -213,6 +218,7 @@ static struct snd_soc_dai_link broadwell_rt286_dais[] = {
|
||||
.ops = &broadwell_rt286_ops,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
SND_SOC_DAILINK_REG(dummy, codec, dummy),
|
||||
},
|
||||
};
|
||||
|
||||
|
@@ -8,7 +8,6 @@
|
||||
* Intel Skylake I2S Machine driver
|
||||
*/
|
||||
|
||||
#include <asm/cpu_device_id.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_device.h>
|
||||
@@ -21,6 +20,7 @@
|
||||
#include "../../codecs/hdac_hdmi.h"
|
||||
#include "../../codecs/da7219.h"
|
||||
#include "../../codecs/da7219-aad.h"
|
||||
#include "../common/soc-intel-quirks.h"
|
||||
|
||||
#define BXT_DIALOG_CODEC_DAI "da7219-hifi"
|
||||
#define BXT_MAXIM_CODEC_DAI "HiFi"
|
||||
@@ -365,146 +365,181 @@ static const struct snd_soc_ops broxton_refcap_ops = {
|
||||
};
|
||||
|
||||
/* broxton digital audio interface glue - connects codec <--> CPU */
|
||||
SND_SOC_DAILINK_DEF(dummy,
|
||||
DAILINK_COMP_ARRAY(COMP_DUMMY()));
|
||||
|
||||
SND_SOC_DAILINK_DEF(system,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("System Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(system2,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("System Pin2")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(reference,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("Reference Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("DMIC Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi1,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI1 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi2,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI2 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi3,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI3 Pin")));
|
||||
|
||||
/* Back End DAI */
|
||||
SND_SOC_DAILINK_DEF(ssp5_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("SSP5 Pin")));
|
||||
SND_SOC_DAILINK_DEF(ssp5_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("MX98357A:00",
|
||||
BXT_MAXIM_CODEC_DAI)));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp1_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("SSP1 Pin")));
|
||||
SND_SOC_DAILINK_DEF(ssp1_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("i2c-DLGS7219:00",
|
||||
BXT_DIALOG_CODEC_DAI)));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("DMIC01 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic16k_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("DMIC16k Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("dmic-codec", "dmic-hifi")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp1_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp1 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp1_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi1")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp2_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp2 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp2_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2",
|
||||
"intel-hdmi-hifi2")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp3_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp3 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp3_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2",
|
||||
"intel-hdmi-hifi3")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(platform,
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("0000:00:0e.0")));
|
||||
|
||||
static struct snd_soc_dai_link broxton_dais[] = {
|
||||
/* Front End DAI links */
|
||||
[BXT_DPCM_AUDIO_PB] =
|
||||
{
|
||||
.name = "Bxt Audio Port",
|
||||
.stream_name = "Audio",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.nonatomic = 1,
|
||||
.init = broxton_da7219_fe_init,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
.ops = &broxton_da7219_fe_ops,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
[BXT_DPCM_AUDIO_CP] =
|
||||
{
|
||||
.name = "Bxt Audio Capture Port",
|
||||
.stream_name = "Audio Record",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.nonatomic = 1,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_capture = 1,
|
||||
.ops = &broxton_da7219_fe_ops,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
[BXT_DPCM_AUDIO_HS_PB] = {
|
||||
.name = "Bxt Audio Headset Playback",
|
||||
.stream_name = "Headset Playback",
|
||||
.cpu_dai_name = "System Pin2",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.nonatomic = 1,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
.ops = &broxton_da7219_fe_ops,
|
||||
SND_SOC_DAILINK_REG(system2, dummy, platform),
|
||||
},
|
||||
[BXT_DPCM_AUDIO_REF_CP] =
|
||||
{
|
||||
.name = "Bxt Audio Reference cap",
|
||||
.stream_name = "Refcap",
|
||||
.cpu_dai_name = "Reference Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.init = NULL,
|
||||
.dpcm_capture = 1,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
.ops = &broxton_refcap_ops,
|
||||
SND_SOC_DAILINK_REG(reference, dummy, platform),
|
||||
},
|
||||
[BXT_DPCM_AUDIO_DMIC_CP] =
|
||||
{
|
||||
.name = "Bxt Audio DMIC cap",
|
||||
.stream_name = "dmiccap",
|
||||
.cpu_dai_name = "DMIC Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.init = NULL,
|
||||
.dpcm_capture = 1,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
.ops = &broxton_dmic_ops,
|
||||
SND_SOC_DAILINK_REG(dmic, dummy, platform),
|
||||
},
|
||||
[BXT_DPCM_AUDIO_HDMI1_PB] =
|
||||
{
|
||||
.name = "Bxt HDMI Port1",
|
||||
.stream_name = "Hdmi1",
|
||||
.cpu_dai_name = "HDMI1 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi1, dummy, platform),
|
||||
},
|
||||
[BXT_DPCM_AUDIO_HDMI2_PB] =
|
||||
{
|
||||
.name = "Bxt HDMI Port2",
|
||||
.stream_name = "Hdmi2",
|
||||
.cpu_dai_name = "HDMI2 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi2, dummy, platform),
|
||||
},
|
||||
[BXT_DPCM_AUDIO_HDMI3_PB] =
|
||||
{
|
||||
.name = "Bxt HDMI Port3",
|
||||
.stream_name = "Hdmi3",
|
||||
.cpu_dai_name = "HDMI3 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi3, dummy, platform),
|
||||
},
|
||||
/* Back End DAI links */
|
||||
{
|
||||
/* SSP5 - Codec */
|
||||
.name = "SSP5-Codec",
|
||||
.id = 0,
|
||||
.cpu_dai_name = "SSP5 Pin",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.no_pcm = 1,
|
||||
.codec_name = "MX98357A:00",
|
||||
.codec_dai_name = BXT_MAXIM_CODEC_DAI,
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S |
|
||||
SND_SOC_DAIFMT_NB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS,
|
||||
.ignore_pmdown_time = 1,
|
||||
.be_hw_params_fixup = broxton_ssp_fixup,
|
||||
.dpcm_playback = 1,
|
||||
SND_SOC_DAILINK_REG(ssp5_pin, ssp5_codec, platform),
|
||||
},
|
||||
{
|
||||
/* SSP1 - Codec */
|
||||
.name = "SSP1-Codec",
|
||||
.id = 1,
|
||||
.cpu_dai_name = "SSP1 Pin",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.no_pcm = 1,
|
||||
.codec_name = "i2c-DLGS7219:00",
|
||||
.codec_dai_name = BXT_DIALOG_CODEC_DAI,
|
||||
.init = broxton_da7219_codec_init,
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS,
|
||||
@@ -512,57 +547,49 @@ static struct snd_soc_dai_link broxton_dais[] = {
|
||||
.be_hw_params_fixup = broxton_ssp_fixup,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
SND_SOC_DAILINK_REG(ssp1_pin, ssp1_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "dmic01",
|
||||
.id = 2,
|
||||
.cpu_dai_name = "DMIC01 Pin",
|
||||
.codec_name = "dmic-codec",
|
||||
.codec_dai_name = "dmic-hifi",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.ignore_suspend = 1,
|
||||
.be_hw_params_fixup = broxton_dmic_fixup,
|
||||
.dpcm_capture = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(dmic_pin, dmic_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp1",
|
||||
.id = 3,
|
||||
.cpu_dai_name = "iDisp1 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi1",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.init = broxton_hdmi_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp1_pin, idisp1_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp2",
|
||||
.id = 4,
|
||||
.cpu_dai_name = "iDisp2 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi2",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.init = broxton_hdmi_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp2_pin, idisp2_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp3",
|
||||
.id = 5,
|
||||
.cpu_dai_name = "iDisp3 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi3",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.init = broxton_hdmi_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp3_pin, idisp3_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "dmic16k",
|
||||
.id = 6,
|
||||
.be_hw_params_fixup = broxton_dmic_fixup,
|
||||
.dpcm_capture = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(dmic16k_pin, dmic_codec, platform),
|
||||
},
|
||||
};
|
||||
|
||||
static const struct x86_cpu_id glk_ids[] = {
|
||||
{ X86_VENDOR_INTEL, 6, 0x7A }, /* Geminilake CPU_ID */
|
||||
{}
|
||||
};
|
||||
|
||||
#define NAME_SIZE 32
|
||||
@@ -574,7 +601,7 @@ static int bxt_card_late_probe(struct snd_soc_card *card)
|
||||
int err, i = 0;
|
||||
char jack_name[NAME_SIZE];
|
||||
|
||||
if (x86_match_cpu(glk_ids))
|
||||
if (soc_intel_is_glk())
|
||||
snd_soc_dapm_add_routes(&card->dapm, gemini_map,
|
||||
ARRAY_SIZE(gemini_map));
|
||||
else
|
||||
@@ -637,23 +664,23 @@ static int broxton_audio_probe(struct platform_device *pdev)
|
||||
|
||||
broxton_audio_card.dev = &pdev->dev;
|
||||
snd_soc_card_set_drvdata(&broxton_audio_card, ctx);
|
||||
if (x86_match_cpu(glk_ids)) {
|
||||
if (soc_intel_is_glk()) {
|
||||
unsigned int i;
|
||||
|
||||
broxton_audio_card.name = "glkda7219max";
|
||||
/* Fixup the SSP entries for geminilake */
|
||||
for (i = 0; i < ARRAY_SIZE(broxton_dais); i++) {
|
||||
/* MAXIM_CODEC is connected to SSP1. */
|
||||
if (!strcmp(broxton_dais[i].codec_dai_name,
|
||||
if (!strcmp(broxton_dais[i].codecs->dai_name,
|
||||
BXT_MAXIM_CODEC_DAI)) {
|
||||
broxton_dais[i].name = "SSP1-Codec";
|
||||
broxton_dais[i].cpu_dai_name = "SSP1 Pin";
|
||||
broxton_dais[i].cpus->dai_name = "SSP1 Pin";
|
||||
}
|
||||
/* DIALOG_CODE is connected to SSP2 */
|
||||
else if (!strcmp(broxton_dais[i].codec_dai_name,
|
||||
else if (!strcmp(broxton_dais[i].codecs->dai_name,
|
||||
BXT_DIALOG_CODEC_DAI)) {
|
||||
broxton_dais[i].name = "SSP2-Codec";
|
||||
broxton_dais[i].cpu_dai_name = "SSP2 Pin";
|
||||
broxton_dais[i].cpus->dai_name = "SSP2 Pin";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -323,6 +323,64 @@ static const struct snd_soc_ops broxton_rt286_fe_ops = {
|
||||
.startup = bxt_fe_startup,
|
||||
};
|
||||
|
||||
SND_SOC_DAILINK_DEF(dummy,
|
||||
DAILINK_COMP_ARRAY(COMP_DUMMY()));
|
||||
|
||||
SND_SOC_DAILINK_DEF(system,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("System Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(reference,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("Reference Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("DMIC Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi1,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI1 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi2,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI2 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi3,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI3 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp5_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("SSP5 Pin")));
|
||||
SND_SOC_DAILINK_DEF(ssp5_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("i2c-INT343A:00",
|
||||
"rt298-aif1")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("DMIC01 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("dmic-codec",
|
||||
"dmic-hifi")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic16k,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("DMIC16k Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp1_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp1 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp1_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2",
|
||||
"intel-hdmi-hifi1")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp2_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp2 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp2_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2",
|
||||
"intel-hdmi-hifi2")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp3_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp3 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp3_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2",
|
||||
"intel-hdmi-hifi3")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(platform,
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("0000:00:0e.0")));
|
||||
|
||||
/* broxton digital audio interface glue - connects codec <--> CPU */
|
||||
static struct snd_soc_dai_link broxton_rt298_dais[] = {
|
||||
/* Front End DAI links */
|
||||
@@ -330,107 +388,82 @@ static struct snd_soc_dai_link broxton_rt298_dais[] = {
|
||||
{
|
||||
.name = "Bxt Audio Port",
|
||||
.stream_name = "Audio",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.init = broxton_rt298_fe_init,
|
||||
.trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
.ops = &broxton_rt286_fe_ops,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
[BXT_DPCM_AUDIO_CP] =
|
||||
{
|
||||
.name = "Bxt Audio Capture Port",
|
||||
.stream_name = "Audio Record",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_capture = 1,
|
||||
.ops = &broxton_rt286_fe_ops,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
[BXT_DPCM_AUDIO_REF_CP] =
|
||||
{
|
||||
.name = "Bxt Audio Reference cap",
|
||||
.stream_name = "refcap",
|
||||
.cpu_dai_name = "Reference Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.init = NULL,
|
||||
.dpcm_capture = 1,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(reference, dummy, platform),
|
||||
},
|
||||
[BXT_DPCM_AUDIO_DMIC_CP] =
|
||||
{
|
||||
.name = "Bxt Audio DMIC cap",
|
||||
.stream_name = "dmiccap",
|
||||
.cpu_dai_name = "DMIC Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.init = NULL,
|
||||
.dpcm_capture = 1,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
.ops = &broxton_dmic_ops,
|
||||
SND_SOC_DAILINK_REG(dmic, dummy, platform),
|
||||
},
|
||||
[BXT_DPCM_AUDIO_HDMI1_PB] =
|
||||
{
|
||||
.name = "Bxt HDMI Port1",
|
||||
.stream_name = "Hdmi1",
|
||||
.cpu_dai_name = "HDMI1 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi1, dummy, platform),
|
||||
},
|
||||
[BXT_DPCM_AUDIO_HDMI2_PB] =
|
||||
{
|
||||
.name = "Bxt HDMI Port2",
|
||||
.stream_name = "Hdmi2",
|
||||
.cpu_dai_name = "HDMI2 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi2, dummy, platform),
|
||||
},
|
||||
[BXT_DPCM_AUDIO_HDMI3_PB] =
|
||||
{
|
||||
.name = "Bxt HDMI Port3",
|
||||
.stream_name = "Hdmi3",
|
||||
.cpu_dai_name = "HDMI3 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi3, dummy, platform),
|
||||
},
|
||||
/* Back End DAI links */
|
||||
{
|
||||
/* SSP5 - Codec */
|
||||
.name = "SSP5-Codec",
|
||||
.id = 0,
|
||||
.cpu_dai_name = "SSP5 Pin",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.no_pcm = 1,
|
||||
.codec_name = "i2c-INT343A:00",
|
||||
.codec_dai_name = "rt298-aif1",
|
||||
.init = broxton_rt298_codec_init,
|
||||
.dai_fmt = SND_SOC_DAIFMT_DSP_A | SND_SOC_DAIFMT_NB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS,
|
||||
@@ -439,63 +472,49 @@ static struct snd_soc_dai_link broxton_rt298_dais[] = {
|
||||
.ops = &broxton_rt298_ops,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
SND_SOC_DAILINK_REG(ssp5_pin, ssp5_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "dmic01",
|
||||
.id = 1,
|
||||
.cpu_dai_name = "DMIC01 Pin",
|
||||
.codec_name = "dmic-codec",
|
||||
.codec_dai_name = "dmic-hifi",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.be_hw_params_fixup = broxton_dmic_fixup,
|
||||
.ignore_suspend = 1,
|
||||
.dpcm_capture = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(dmic_pin, dmic_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "dmic16k",
|
||||
.id = 2,
|
||||
.cpu_dai_name = "DMIC16k Pin",
|
||||
.codec_name = "dmic-codec",
|
||||
.codec_dai_name = "dmic-hifi",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.be_hw_params_fixup = broxton_dmic_fixup,
|
||||
.ignore_suspend = 1,
|
||||
.dpcm_capture = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(dmic16k, dmic_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp1",
|
||||
.id = 3,
|
||||
.cpu_dai_name = "iDisp1 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi1",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.init = broxton_hdmi_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp1_pin, idisp1_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp2",
|
||||
.id = 4,
|
||||
.cpu_dai_name = "iDisp2 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi2",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.init = broxton_hdmi_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp2_pin, idisp2_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp3",
|
||||
.id = 5,
|
||||
.cpu_dai_name = "iDisp3 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi3",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.init = broxton_hdmi_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp3_pin, idisp3_codec, platform),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -575,16 +594,16 @@ static int broxton_audio_probe(struct platform_device *pdev)
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(broxton_rt298_dais); i++) {
|
||||
if (!strncmp(card->dai_link[i].codec_name, "i2c-INT343A:00",
|
||||
I2C_NAME_SIZE)) {
|
||||
if (!strncmp(card->dai_link[i].codecs->name, "i2c-INT343A:00",
|
||||
I2C_NAME_SIZE)) {
|
||||
if (!strncmp(card->name, "broxton-rt298",
|
||||
PLATFORM_NAME_SIZE)) {
|
||||
PLATFORM_NAME_SIZE)) {
|
||||
card->dai_link[i].name = "SSP5-Codec";
|
||||
card->dai_link[i].cpu_dai_name = "SSP5 Pin";
|
||||
card->dai_link[i].cpus->dai_name = "SSP5 Pin";
|
||||
} else if (!strncmp(card->name, "geminilake-rt298",
|
||||
PLATFORM_NAME_SIZE)) {
|
||||
PLATFORM_NAME_SIZE)) {
|
||||
card->dai_link[i].name = "SSP2-Codec";
|
||||
card->dai_link[i].cpu_dai_name = "SSP2 Pin";
|
||||
card->dai_link[i].cpus->dai_name = "SSP2 Pin";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -109,17 +109,19 @@ static int byt_max98090_init(struct snd_soc_pcm_runtime *runtime)
|
||||
hs_jack_gpios);
|
||||
}
|
||||
|
||||
SND_SOC_DAILINK_DEFS(baytrail,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("baytrail-pcm-audio")),
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("i2c-193C9890:00", "HiFi")),
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("baytrail-pcm-audio")));
|
||||
|
||||
static struct snd_soc_dai_link byt_max98090_dais[] = {
|
||||
{
|
||||
.name = "Baytrail Audio",
|
||||
.stream_name = "Audio",
|
||||
.cpu_dai_name = "baytrail-pcm-audio",
|
||||
.codec_dai_name = "HiFi",
|
||||
.codec_name = "i2c-193C9890:00",
|
||||
.platform_name = "baytrail-pcm-audio",
|
||||
.init = byt_max98090_init,
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS,
|
||||
SND_SOC_DAILINK_REG(baytrail),
|
||||
},
|
||||
};
|
||||
|
||||
|
@@ -172,18 +172,20 @@ static struct snd_soc_ops byt_rt5640_ops = {
|
||||
.hw_params = byt_rt5640_hw_params,
|
||||
};
|
||||
|
||||
SND_SOC_DAILINK_DEFS(audio,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("baytrail-pcm-audio")),
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("i2c-10EC5640:00", "rt5640-aif1")),
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("baytrail-pcm-audio")));
|
||||
|
||||
static struct snd_soc_dai_link byt_rt5640_dais[] = {
|
||||
{
|
||||
.name = "Baytrail Audio",
|
||||
.stream_name = "Audio",
|
||||
.cpu_dai_name = "baytrail-pcm-audio",
|
||||
.codec_dai_name = "rt5640-aif1",
|
||||
.codec_name = "i2c-10EC5640:00",
|
||||
.platform_name = "baytrail-pcm-audio",
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS,
|
||||
.init = byt_rt5640_init,
|
||||
.ops = &byt_rt5640_ops,
|
||||
SND_SOC_DAILINK_REG(audio),
|
||||
},
|
||||
};
|
||||
|
||||
|
270
sound/soc/intel/boards/bytcht_cx2072x.c
Normale Datei
270
sound/soc/intel/boards/bytcht_cx2072x.c
Normale Datei
@@ -0,0 +1,270 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
//
|
||||
// ASoC DPCM Machine driver for Baytrail / Cherrytrail platforms with
|
||||
// CX2072X codec
|
||||
//
|
||||
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/slab.h>
|
||||
#include <sound/pcm.h>
|
||||
#include <sound/pcm_params.h>
|
||||
#include <sound/jack.h>
|
||||
#include <sound/soc.h>
|
||||
#include <sound/soc-acpi.h>
|
||||
#include "../../codecs/cx2072x.h"
|
||||
#include "../atom/sst-atom-controls.h"
|
||||
|
||||
static const struct snd_soc_dapm_widget byt_cht_cx2072x_widgets[] = {
|
||||
SND_SOC_DAPM_HP("Headphone", NULL),
|
||||
SND_SOC_DAPM_MIC("Headset Mic", NULL),
|
||||
SND_SOC_DAPM_MIC("Int Mic", NULL),
|
||||
SND_SOC_DAPM_SPK("Ext Spk", NULL),
|
||||
};
|
||||
|
||||
static const struct snd_soc_dapm_route byt_cht_cx2072x_audio_map[] = {
|
||||
/* External Speakers: HFL, HFR */
|
||||
{"Headphone", NULL, "PORTA"},
|
||||
{"Ext Spk", NULL, "PORTG"},
|
||||
{"PORTC", NULL, "Int Mic"},
|
||||
{"PORTD", NULL, "Headset Mic"},
|
||||
|
||||
{"Playback", NULL, "ssp2 Tx"},
|
||||
{"ssp2 Tx", NULL, "codec_out0"},
|
||||
{"ssp2 Tx", NULL, "codec_out1"},
|
||||
{"codec_in0", NULL, "ssp2 Rx"},
|
||||
{"codec_in1", NULL, "ssp2 Rx"},
|
||||
{"ssp2 Rx", NULL, "Capture"},
|
||||
};
|
||||
|
||||
static const struct snd_kcontrol_new byt_cht_cx2072x_controls[] = {
|
||||
SOC_DAPM_PIN_SWITCH("Headphone"),
|
||||
SOC_DAPM_PIN_SWITCH("Headset Mic"),
|
||||
SOC_DAPM_PIN_SWITCH("Int Mic"),
|
||||
SOC_DAPM_PIN_SWITCH("Ext Spk"),
|
||||
};
|
||||
|
||||
static struct snd_soc_jack byt_cht_cx2072x_headset;
|
||||
|
||||
/* Headset jack detection DAPM pins */
|
||||
static struct snd_soc_jack_pin byt_cht_cx2072x_headset_pins[] = {
|
||||
{
|
||||
.pin = "Headset Mic",
|
||||
.mask = SND_JACK_MICROPHONE,
|
||||
},
|
||||
{
|
||||
.pin = "Headphone",
|
||||
.mask = SND_JACK_HEADPHONE,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct acpi_gpio_params byt_cht_cx2072x_headset_gpios;
|
||||
static const struct acpi_gpio_mapping byt_cht_cx2072x_acpi_gpios[] = {
|
||||
{ "headset-gpios", &byt_cht_cx2072x_headset_gpios, 1 },
|
||||
{},
|
||||
};
|
||||
|
||||
static int byt_cht_cx2072x_init(struct snd_soc_pcm_runtime *rtd)
|
||||
{
|
||||
struct snd_soc_card *card = rtd->card;
|
||||
struct snd_soc_component *codec = rtd->codec_dai->component;
|
||||
int ret;
|
||||
|
||||
if (devm_acpi_dev_add_driver_gpios(codec->dev,
|
||||
byt_cht_cx2072x_acpi_gpios))
|
||||
dev_warn(rtd->dev, "Unable to add GPIO mapping table\n");
|
||||
|
||||
card->dapm.idle_bias_off = true;
|
||||
|
||||
/* set the default PLL rate, the clock is handled by the codec driver */
|
||||
ret = snd_soc_dai_set_sysclk(rtd->codec_dai, CX2072X_MCLK_EXTERNAL_PLL,
|
||||
19200000, SND_SOC_CLOCK_IN);
|
||||
if (ret) {
|
||||
dev_err(rtd->dev, "Could not set sysclk\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = snd_soc_card_jack_new(card, "Headset",
|
||||
SND_JACK_HEADSET | SND_JACK_BTN_0,
|
||||
&byt_cht_cx2072x_headset,
|
||||
byt_cht_cx2072x_headset_pins,
|
||||
ARRAY_SIZE(byt_cht_cx2072x_headset_pins));
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
snd_soc_component_set_jack(codec, &byt_cht_cx2072x_headset, NULL);
|
||||
|
||||
snd_soc_dai_set_bclk_ratio(rtd->codec_dai, 50);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int byt_cht_cx2072x_fixup(struct snd_soc_pcm_runtime *rtd,
|
||||
struct snd_pcm_hw_params *params)
|
||||
{
|
||||
struct snd_interval *rate =
|
||||
hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
|
||||
struct snd_interval *channels =
|
||||
hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
|
||||
int ret;
|
||||
|
||||
/* The DSP will covert the FE rate to 48k, stereo, 24bits */
|
||||
rate->min = rate->max = 48000;
|
||||
channels->min = channels->max = 2;
|
||||
|
||||
/* set SSP2 to 24-bit */
|
||||
params_set_format(params, SNDRV_PCM_FORMAT_S24_LE);
|
||||
|
||||
/*
|
||||
* Default mode for SSP configuration is TDM 4 slot, override config
|
||||
* with explicit setting to I2S 2ch 24-bit. The word length is set with
|
||||
* dai_set_tdm_slot() since there is no other API exposed
|
||||
*/
|
||||
ret = snd_soc_dai_set_fmt(rtd->cpu_dai,
|
||||
SND_SOC_DAIFMT_I2S |
|
||||
SND_SOC_DAIFMT_NB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS);
|
||||
if (ret < 0) {
|
||||
dev_err(rtd->dev, "can't set format to I2S, err %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = snd_soc_dai_set_tdm_slot(rtd->cpu_dai, 0x3, 0x3, 2, 24);
|
||||
if (ret < 0) {
|
||||
dev_err(rtd->dev, "can't set I2S config, err %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int byt_cht_cx2072x_aif1_startup(struct snd_pcm_substream *substream)
|
||||
{
|
||||
return snd_pcm_hw_constraint_single(substream->runtime,
|
||||
SNDRV_PCM_HW_PARAM_RATE, 48000);
|
||||
}
|
||||
|
||||
static struct snd_soc_ops byt_cht_cx2072x_aif1_ops = {
|
||||
.startup = byt_cht_cx2072x_aif1_startup,
|
||||
};
|
||||
|
||||
SND_SOC_DAILINK_DEF(dummy,
|
||||
DAILINK_COMP_ARRAY(COMP_DUMMY()));
|
||||
|
||||
SND_SOC_DAILINK_DEF(media,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("media-cpu-dai")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(deepbuffer,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("deepbuffer-cpu-dai")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp2,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("ssp2-port")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(cx2072x,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("i2c-14F10720:00", "cx2072x-hifi")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(platform,
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("sst-mfld-platform")));
|
||||
|
||||
static struct snd_soc_dai_link byt_cht_cx2072x_dais[] = {
|
||||
[MERR_DPCM_AUDIO] = {
|
||||
.name = "Audio Port",
|
||||
.stream_name = "Audio",
|
||||
.nonatomic = true,
|
||||
.dynamic = 1,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
.ops = &byt_cht_cx2072x_aif1_ops,
|
||||
SND_SOC_DAILINK_REG(media, dummy, platform),
|
||||
},
|
||||
[MERR_DPCM_DEEP_BUFFER] = {
|
||||
.name = "Deep-Buffer Audio Port",
|
||||
.stream_name = "Deep-Buffer Audio",
|
||||
.nonatomic = true,
|
||||
.dynamic = 1,
|
||||
.dpcm_playback = 1,
|
||||
.ops = &byt_cht_cx2072x_aif1_ops,
|
||||
SND_SOC_DAILINK_REG(deepbuffer, dummy, platform),
|
||||
},
|
||||
/* back ends */
|
||||
{
|
||||
.name = "SSP2-Codec",
|
||||
.id = 0,
|
||||
.no_pcm = 1,
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF
|
||||
| SND_SOC_DAIFMT_CBS_CFS,
|
||||
.init = byt_cht_cx2072x_init,
|
||||
.be_hw_params_fixup = byt_cht_cx2072x_fixup,
|
||||
.nonatomic = true,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
SND_SOC_DAILINK_REG(ssp2, cx2072x, platform),
|
||||
},
|
||||
};
|
||||
|
||||
/* SoC card */
|
||||
static struct snd_soc_card byt_cht_cx2072x_card = {
|
||||
.name = "bytcht-cx2072x",
|
||||
.owner = THIS_MODULE,
|
||||
.dai_link = byt_cht_cx2072x_dais,
|
||||
.num_links = ARRAY_SIZE(byt_cht_cx2072x_dais),
|
||||
.dapm_widgets = byt_cht_cx2072x_widgets,
|
||||
.num_dapm_widgets = ARRAY_SIZE(byt_cht_cx2072x_widgets),
|
||||
.dapm_routes = byt_cht_cx2072x_audio_map,
|
||||
.num_dapm_routes = ARRAY_SIZE(byt_cht_cx2072x_audio_map),
|
||||
.controls = byt_cht_cx2072x_controls,
|
||||
.num_controls = ARRAY_SIZE(byt_cht_cx2072x_controls),
|
||||
};
|
||||
|
||||
static char codec_name[SND_ACPI_I2C_ID_LEN];
|
||||
|
||||
static int snd_byt_cht_cx2072x_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct snd_soc_acpi_mach *mach;
|
||||
struct acpi_device *adev;
|
||||
int dai_index = 0;
|
||||
int i, ret;
|
||||
|
||||
byt_cht_cx2072x_card.dev = &pdev->dev;
|
||||
mach = dev_get_platdata(&pdev->dev);
|
||||
|
||||
/* fix index of codec dai */
|
||||
for (i = 0; i < ARRAY_SIZE(byt_cht_cx2072x_dais); i++) {
|
||||
if (!strcmp(byt_cht_cx2072x_dais[i].codecs->name,
|
||||
"i2c-14F10720:00")) {
|
||||
dai_index = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* fixup codec name based on HID */
|
||||
adev = acpi_dev_get_first_match_dev(mach->id, NULL, -1);
|
||||
if (adev) {
|
||||
snprintf(codec_name, sizeof(codec_name), "i2c-%s",
|
||||
acpi_dev_name(adev));
|
||||
put_device(&adev->dev);
|
||||
byt_cht_cx2072x_dais[dai_index].codecs->name = codec_name;
|
||||
}
|
||||
|
||||
/* override plaform name, if required */
|
||||
ret = snd_soc_fixup_dai_links_platform_name(&byt_cht_cx2072x_card,
|
||||
mach->mach_params.platform);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return devm_snd_soc_register_card(&pdev->dev, &byt_cht_cx2072x_card);
|
||||
}
|
||||
|
||||
static struct platform_driver snd_byt_cht_cx2072x_driver = {
|
||||
.driver = {
|
||||
.name = "bytcht_cx2072x",
|
||||
},
|
||||
.probe = snd_byt_cht_cx2072x_probe,
|
||||
};
|
||||
module_platform_driver(snd_byt_cht_cx2072x_driver);
|
||||
|
||||
MODULE_DESCRIPTION("ASoC Intel(R) Baytrail/Cherrytrail Machine driver");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
MODULE_ALIAS("platform:bytcht_cx2072x");
|
@@ -15,7 +15,6 @@
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/slab.h>
|
||||
#include <asm/platform_sst_audio.h>
|
||||
#include <sound/pcm.h>
|
||||
#include <sound/pcm_params.h>
|
||||
#include <sound/soc.h>
|
||||
@@ -151,42 +150,50 @@ static const struct snd_soc_ops ssp2_ops = {
|
||||
|
||||
};
|
||||
|
||||
SND_SOC_DAILINK_DEF(dummy,
|
||||
DAILINK_COMP_ARRAY(COMP_DUMMY()));
|
||||
|
||||
SND_SOC_DAILINK_DEF(media,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("media-cpu-dai")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(deepbuffer,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("deepbuffer-cpu-dai")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp2_port,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("ssp2-port")));
|
||||
SND_SOC_DAILINK_DEF(ssp2_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("i2c-DLGS7213:00",
|
||||
"da7213-hifi")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(platform,
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("sst-mfld-platform")));
|
||||
|
||||
static struct snd_soc_dai_link dailink[] = {
|
||||
[MERR_DPCM_AUDIO] = {
|
||||
.name = "Audio Port",
|
||||
.stream_name = "Audio",
|
||||
.cpu_dai_name = "media-cpu-dai",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.nonatomic = true,
|
||||
.dynamic = 1,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
.ops = &aif1_ops,
|
||||
SND_SOC_DAILINK_REG(media, dummy, platform),
|
||||
},
|
||||
[MERR_DPCM_DEEP_BUFFER] = {
|
||||
.name = "Deep-Buffer Audio Port",
|
||||
.stream_name = "Deep-Buffer Audio",
|
||||
.cpu_dai_name = "deepbuffer-cpu-dai",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.nonatomic = true,
|
||||
.dynamic = 1,
|
||||
.dpcm_playback = 1,
|
||||
.ops = &aif1_ops,
|
||||
SND_SOC_DAILINK_REG(deepbuffer, dummy, platform),
|
||||
},
|
||||
/* CODEC<->CODEC link */
|
||||
/* back ends */
|
||||
{
|
||||
.name = "SSP2-Codec",
|
||||
.id = 0,
|
||||
.cpu_dai_name = "ssp2-port",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.no_pcm = 1,
|
||||
.codec_dai_name = "da7213-hifi",
|
||||
.codec_name = "i2c-DLGS7213:00",
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF
|
||||
| SND_SOC_DAIFMT_CBS_CFS,
|
||||
.be_hw_params_fixup = codec_fixup,
|
||||
@@ -194,6 +201,7 @@ static struct snd_soc_dai_link dailink[] = {
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
.ops = &ssp2_ops,
|
||||
SND_SOC_DAILINK_REG(ssp2_port, ssp2_codec, platform),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -229,7 +237,7 @@ static int bytcht_da7213_probe(struct platform_device *pdev)
|
||||
|
||||
/* fix index of codec dai */
|
||||
for (i = 0; i < ARRAY_SIZE(dailink); i++) {
|
||||
if (!strcmp(dailink[i].codec_name, "i2c-DLGS7213:00")) {
|
||||
if (!strcmp(dailink[i].codecs->name, "i2c-DLGS7213:00")) {
|
||||
dai_index = i;
|
||||
break;
|
||||
}
|
||||
@@ -241,7 +249,7 @@ static int bytcht_da7213_probe(struct platform_device *pdev)
|
||||
snprintf(codec_name, sizeof(codec_name),
|
||||
"i2c-%s", acpi_dev_name(adev));
|
||||
put_device(&adev->dev);
|
||||
dailink[dai_index].codec_name = codec_name;
|
||||
dailink[dai_index].codecs->name = codec_name;
|
||||
}
|
||||
|
||||
/* override plaform name, if required */
|
||||
|
@@ -22,9 +22,6 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/slab.h>
|
||||
#include <asm/cpu_device_id.h>
|
||||
#include <asm/intel-family.h>
|
||||
#include <asm/platform_sst_audio.h>
|
||||
#include <sound/jack.h>
|
||||
#include <sound/pcm.h>
|
||||
#include <sound/pcm_params.h>
|
||||
@@ -32,6 +29,7 @@
|
||||
#include <sound/soc-acpi.h>
|
||||
#include "../atom/sst-atom-controls.h"
|
||||
#include "../common/sst-dsp.h"
|
||||
#include "../common/soc-intel-quirks.h"
|
||||
|
||||
/* jd-inv + terminating entry */
|
||||
#define MAX_NO_PROPS 2
|
||||
@@ -301,32 +299,43 @@ static const struct snd_soc_ops byt_cht_es8316_aif1_ops = {
|
||||
.startup = byt_cht_es8316_aif1_startup,
|
||||
};
|
||||
|
||||
SND_SOC_DAILINK_DEF(dummy,
|
||||
DAILINK_COMP_ARRAY(COMP_DUMMY()));
|
||||
|
||||
SND_SOC_DAILINK_DEF(media,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("media-cpu-dai")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(deepbuffer,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("deepbuffer-cpu-dai")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp2_port,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("ssp2-port")));
|
||||
SND_SOC_DAILINK_DEF(ssp2_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("i2c-ESSX8316:00", "ES8316 HiFi")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(platform,
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("sst-mfld-platform")));
|
||||
|
||||
static struct snd_soc_dai_link byt_cht_es8316_dais[] = {
|
||||
[MERR_DPCM_AUDIO] = {
|
||||
.name = "Audio Port",
|
||||
.stream_name = "Audio",
|
||||
.cpu_dai_name = "media-cpu-dai",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.nonatomic = true,
|
||||
.dynamic = 1,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
.ops = &byt_cht_es8316_aif1_ops,
|
||||
SND_SOC_DAILINK_REG(media, dummy, platform),
|
||||
},
|
||||
|
||||
[MERR_DPCM_DEEP_BUFFER] = {
|
||||
.name = "Deep-Buffer Audio Port",
|
||||
.stream_name = "Deep-Buffer Audio",
|
||||
.cpu_dai_name = "deepbuffer-cpu-dai",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.nonatomic = true,
|
||||
.dynamic = 1,
|
||||
.dpcm_playback = 1,
|
||||
.ops = &byt_cht_es8316_aif1_ops,
|
||||
SND_SOC_DAILINK_REG(deepbuffer, dummy, platform),
|
||||
},
|
||||
|
||||
/* back ends */
|
||||
@@ -336,11 +345,7 @@ static struct snd_soc_dai_link byt_cht_es8316_dais[] = {
|
||||
*/
|
||||
.name = "SSP2-Codec",
|
||||
.id = 0,
|
||||
.cpu_dai_name = "ssp2-port",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.no_pcm = 1,
|
||||
.codec_dai_name = "ES8316 HiFi",
|
||||
.codec_name = "i2c-ESSX8316:00",
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF
|
||||
| SND_SOC_DAIFMT_CBS_CFS,
|
||||
.be_hw_params_fixup = byt_cht_es8316_codec_fixup,
|
||||
@@ -348,6 +353,7 @@ static struct snd_soc_dai_link byt_cht_es8316_dais[] = {
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
.init = byt_cht_es8316_init,
|
||||
SND_SOC_DAILINK_REG(ssp2_port, ssp2_codec, platform),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -422,11 +428,6 @@ static struct snd_soc_card byt_cht_es8316_card = {
|
||||
.resume_post = byt_cht_es8316_resume,
|
||||
};
|
||||
|
||||
static const struct x86_cpu_id baytrail_cpu_ids[] = {
|
||||
{ X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_SILVERMONT }, /* Valleyview */
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct acpi_gpio_params first_gpio = { 0, 0, false };
|
||||
|
||||
static const struct acpi_gpio_mapping byt_cht_es8316_gpios[] = {
|
||||
@@ -470,7 +471,7 @@ static int snd_byt_cht_es8316_mc_probe(struct platform_device *pdev)
|
||||
mach = dev->platform_data;
|
||||
/* fix index of codec dai */
|
||||
for (i = 0; i < ARRAY_SIZE(byt_cht_es8316_dais); i++) {
|
||||
if (!strcmp(byt_cht_es8316_dais[i].codec_name,
|
||||
if (!strcmp(byt_cht_es8316_dais[i].codecs->name,
|
||||
"i2c-ESSX8316:00")) {
|
||||
dai_index = i;
|
||||
break;
|
||||
@@ -483,7 +484,7 @@ static int snd_byt_cht_es8316_mc_probe(struct platform_device *pdev)
|
||||
snprintf(codec_name, sizeof(codec_name),
|
||||
"i2c-%s", acpi_dev_name(adev));
|
||||
put_device(&adev->dev);
|
||||
byt_cht_es8316_dais[dai_index].codec_name = codec_name;
|
||||
byt_cht_es8316_dais[dai_index].codecs->name = codec_name;
|
||||
}
|
||||
|
||||
/* override plaform name, if required */
|
||||
@@ -499,8 +500,8 @@ static int snd_byt_cht_es8316_mc_probe(struct platform_device *pdev)
|
||||
dmi_id = dmi_first_match(byt_cht_es8316_quirk_table);
|
||||
if (dmi_id) {
|
||||
quirk = (unsigned long)dmi_id->driver_data;
|
||||
} else if (x86_match_cpu(baytrail_cpu_ids) &&
|
||||
mach->mach_params.acpi_ipc_irq_index == 0) {
|
||||
} else if (soc_intel_is_byt() &&
|
||||
mach->mach_params.acpi_ipc_irq_index == 0) {
|
||||
/* On BYTCR default to SSP0, internal-mic-in2-map, mono-spk */
|
||||
quirk = BYT_CHT_ES8316_SSP0 | BYT_CHT_ES8316_INTMIC_IN2_MAP |
|
||||
BYT_CHT_ES8316_MONO_SPEAKER;
|
||||
@@ -518,7 +519,7 @@ static int snd_byt_cht_es8316_mc_probe(struct platform_device *pdev)
|
||||
log_quirks(dev);
|
||||
|
||||
if (quirk & BYT_CHT_ES8316_SSP0)
|
||||
byt_cht_es8316_dais[dai_index].cpu_dai_name = "ssp0-port";
|
||||
byt_cht_es8316_dais[dai_index].cpus->dai_name = "ssp0-port";
|
||||
|
||||
/* get the clock */
|
||||
priv->mclk = devm_clk_get(dev, "pmc_plt_clk_3");
|
||||
|
@@ -97,44 +97,49 @@ static struct snd_soc_ops aif1_ops = {
|
||||
.startup = aif1_startup,
|
||||
};
|
||||
|
||||
SND_SOC_DAILINK_DEF(dummy,
|
||||
DAILINK_COMP_ARRAY(COMP_DUMMY()));
|
||||
|
||||
SND_SOC_DAILINK_DEF(media,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("media-cpu-dai")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(deepbuffer,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("deepbuffer-cpu-dai")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp2_port,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("ssp2-port")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(platform,
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("sst-mfld-platform")));
|
||||
|
||||
static struct snd_soc_dai_link dais[] = {
|
||||
[MERR_DPCM_AUDIO] = {
|
||||
.name = "Audio Port",
|
||||
.stream_name = "Audio",
|
||||
.cpu_dai_name = "media-cpu-dai",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.ignore_suspend = 1,
|
||||
.nonatomic = true,
|
||||
.dynamic = 1,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
.ops = &aif1_ops,
|
||||
SND_SOC_DAILINK_REG(media, dummy, platform),
|
||||
},
|
||||
[MERR_DPCM_DEEP_BUFFER] = {
|
||||
.name = "Deep-Buffer Audio Port",
|
||||
.stream_name = "Deep-Buffer Audio",
|
||||
.cpu_dai_name = "deepbuffer-cpu-dai",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.ignore_suspend = 1,
|
||||
.nonatomic = true,
|
||||
.dynamic = 1,
|
||||
.dpcm_playback = 1,
|
||||
.ops = &aif1_ops,
|
||||
SND_SOC_DAILINK_REG(deepbuffer, dummy, platform),
|
||||
},
|
||||
/* CODEC<->CODEC link */
|
||||
/* back ends */
|
||||
{
|
||||
.name = "SSP2-LowSpeed Connector",
|
||||
.id = 0,
|
||||
.cpu_dai_name = "ssp2-port",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.no_pcm = 1,
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF
|
||||
| SND_SOC_DAIFMT_CBS_CFS,
|
||||
.be_hw_params_fixup = codec_fixup,
|
||||
@@ -142,6 +147,7 @@ static struct snd_soc_dai_link dais[] = {
|
||||
.nonatomic = true,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
SND_SOC_DAILINK_REG(ssp2_port, dummy, platform),
|
||||
},
|
||||
};
|
||||
|
||||
|
@@ -20,7 +20,6 @@
|
||||
#include <linux/dmi.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/slab.h>
|
||||
#include <asm/cpu_device_id.h>
|
||||
#include <sound/pcm.h>
|
||||
#include <sound/pcm_params.h>
|
||||
#include <sound/soc.h>
|
||||
@@ -30,6 +29,7 @@
|
||||
#include "../../codecs/rt5640.h"
|
||||
#include "../atom/sst-atom-controls.h"
|
||||
#include "../common/sst-dsp.h"
|
||||
#include "../common/soc-intel-quirks.h"
|
||||
|
||||
enum {
|
||||
BYT_RT5640_DMIC1_MAP,
|
||||
@@ -1018,41 +1018,51 @@ static const struct snd_soc_ops byt_rt5640_be_ssp2_ops = {
|
||||
.hw_params = byt_rt5640_aif1_hw_params,
|
||||
};
|
||||
|
||||
SND_SOC_DAILINK_DEF(dummy,
|
||||
DAILINK_COMP_ARRAY(COMP_DUMMY()));
|
||||
|
||||
SND_SOC_DAILINK_DEF(media,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("media-cpu-dai")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(deepbuffer,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("deepbuffer-cpu-dai")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp2_port,
|
||||
/* overwritten for ssp0 routing */
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("ssp2-port")));
|
||||
SND_SOC_DAILINK_DEF(ssp2_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC(
|
||||
/* overwritten with HID */ "i2c-10EC5640:00",
|
||||
/* changed w/ quirk */ "rt5640-aif1")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(platform,
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("sst-mfld-platform")));
|
||||
|
||||
static struct snd_soc_dai_link byt_rt5640_dais[] = {
|
||||
[MERR_DPCM_AUDIO] = {
|
||||
.name = "Baytrail Audio Port",
|
||||
.stream_name = "Baytrail Audio",
|
||||
.cpu_dai_name = "media-cpu-dai",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.nonatomic = true,
|
||||
.dynamic = 1,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
.ops = &byt_rt5640_aif1_ops,
|
||||
SND_SOC_DAILINK_REG(media, dummy, platform),
|
||||
},
|
||||
[MERR_DPCM_DEEP_BUFFER] = {
|
||||
.name = "Deep-Buffer Audio Port",
|
||||
.stream_name = "Deep-Buffer Audio",
|
||||
.cpu_dai_name = "deepbuffer-cpu-dai",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.nonatomic = true,
|
||||
.dynamic = 1,
|
||||
.dpcm_playback = 1,
|
||||
.ops = &byt_rt5640_aif1_ops,
|
||||
SND_SOC_DAILINK_REG(deepbuffer, dummy, platform),
|
||||
},
|
||||
/* back ends */
|
||||
{
|
||||
.name = "SSP2-Codec",
|
||||
.id = 0,
|
||||
.cpu_dai_name = "ssp2-port", /* overwritten for ssp0 routing */
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.no_pcm = 1,
|
||||
.codec_dai_name = "rt5640-aif1", /* changed w/ quirk */
|
||||
.codec_name = "i2c-10EC5640:00", /* overwritten with HID */
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF
|
||||
| SND_SOC_DAIFMT_CBS_CFS,
|
||||
.be_hw_params_fixup = byt_rt5640_codec_fixup,
|
||||
@@ -1062,6 +1072,7 @@ static struct snd_soc_dai_link byt_rt5640_dais[] = {
|
||||
.dpcm_capture = 1,
|
||||
.init = byt_rt5640_init,
|
||||
.ops = &byt_rt5640_be_ssp2_ops,
|
||||
SND_SOC_DAILINK_REG(ssp2_port, ssp2_codec, platform),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1122,18 +1133,6 @@ static struct snd_soc_card byt_rt5640_card = {
|
||||
.resume_post = byt_rt5640_resume,
|
||||
};
|
||||
|
||||
static bool is_valleyview(void)
|
||||
{
|
||||
static const struct x86_cpu_id cpu_ids[] = {
|
||||
{ X86_VENDOR_INTEL, 6, 55 }, /* Valleyview, Bay Trail */
|
||||
{}
|
||||
};
|
||||
|
||||
if (!x86_match_cpu(cpu_ids))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
struct acpi_chan_package { /* ACPICA seems to require 64 bit integers */
|
||||
u64 aif_value; /* 1: AIF1, 2: AIF2 */
|
||||
u64 mclock_value; /* usually 25MHz (0x17d7940), ignored */
|
||||
@@ -1163,7 +1162,8 @@ static int snd_byt_rt5640_mc_probe(struct platform_device *pdev)
|
||||
|
||||
/* fix index of codec dai */
|
||||
for (i = 0; i < ARRAY_SIZE(byt_rt5640_dais); i++) {
|
||||
if (!strcmp(byt_rt5640_dais[i].codec_name, "i2c-10EC5640:00")) {
|
||||
if (!strcmp(byt_rt5640_dais[i].codecs->name,
|
||||
"i2c-10EC5640:00")) {
|
||||
dai_index = i;
|
||||
break;
|
||||
}
|
||||
@@ -1175,14 +1175,14 @@ static int snd_byt_rt5640_mc_probe(struct platform_device *pdev)
|
||||
snprintf(byt_rt5640_codec_name, sizeof(byt_rt5640_codec_name),
|
||||
"i2c-%s", acpi_dev_name(adev));
|
||||
put_device(&adev->dev);
|
||||
byt_rt5640_dais[dai_index].codec_name = byt_rt5640_codec_name;
|
||||
byt_rt5640_dais[dai_index].codecs->name = byt_rt5640_codec_name;
|
||||
}
|
||||
|
||||
/*
|
||||
* swap SSP0 if bytcr is detected
|
||||
* (will be overridden if DMI quirk is detected)
|
||||
*/
|
||||
if (is_valleyview()) {
|
||||
if (soc_intel_is_byt()) {
|
||||
if (mach->mach_params.acpi_ipc_irq_index == 0)
|
||||
is_bytcr = true;
|
||||
}
|
||||
@@ -1267,7 +1267,7 @@ static int snd_byt_rt5640_mc_probe(struct platform_device *pdev)
|
||||
sizeof(byt_rt5640_codec_aif_name),
|
||||
"%s", "rt5640-aif2");
|
||||
|
||||
byt_rt5640_dais[dai_index].codec_dai_name =
|
||||
byt_rt5640_dais[dai_index].codecs->dai_name =
|
||||
byt_rt5640_codec_aif_name;
|
||||
}
|
||||
|
||||
@@ -1279,7 +1279,7 @@ static int snd_byt_rt5640_mc_probe(struct platform_device *pdev)
|
||||
sizeof(byt_rt5640_cpu_dai_name),
|
||||
"%s", "ssp0-port");
|
||||
|
||||
byt_rt5640_dais[dai_index].cpu_dai_name =
|
||||
byt_rt5640_dais[dai_index].cpus->dai_name =
|
||||
byt_rt5640_cpu_dai_name;
|
||||
}
|
||||
|
||||
|
@@ -22,8 +22,6 @@
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/gpio/machine.h>
|
||||
#include <linux/slab.h>
|
||||
#include <asm/cpu_device_id.h>
|
||||
#include <asm/intel-family.h>
|
||||
#include <sound/pcm.h>
|
||||
#include <sound/pcm_params.h>
|
||||
#include <sound/soc.h>
|
||||
@@ -31,6 +29,7 @@
|
||||
#include <sound/soc-acpi.h>
|
||||
#include "../../codecs/rt5651.h"
|
||||
#include "../atom/sst-atom-controls.h"
|
||||
#include "../common/soc-intel-quirks.h"
|
||||
|
||||
enum {
|
||||
BYT_RT5651_DMIC_MAP,
|
||||
@@ -738,42 +737,49 @@ static const struct snd_soc_ops byt_rt5651_be_ssp2_ops = {
|
||||
.hw_params = byt_rt5651_aif1_hw_params,
|
||||
};
|
||||
|
||||
SND_SOC_DAILINK_DEF(dummy,
|
||||
DAILINK_COMP_ARRAY(COMP_DUMMY()));
|
||||
|
||||
SND_SOC_DAILINK_DEF(media,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("media-cpu-dai")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(deepbuffer,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("deepbuffer-cpu-dai")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp2_port,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("ssp2-port")));
|
||||
SND_SOC_DAILINK_DEF(ssp2_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("i2c-10EC5651:00", "rt5651-aif1")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(platform,
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("sst-mfld-platform")));
|
||||
|
||||
static struct snd_soc_dai_link byt_rt5651_dais[] = {
|
||||
[MERR_DPCM_AUDIO] = {
|
||||
.name = "Audio Port",
|
||||
.stream_name = "Audio",
|
||||
.cpu_dai_name = "media-cpu-dai",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.nonatomic = true,
|
||||
.dynamic = 1,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
.ops = &byt_rt5651_aif1_ops,
|
||||
SND_SOC_DAILINK_REG(media, dummy, platform),
|
||||
},
|
||||
[MERR_DPCM_DEEP_BUFFER] = {
|
||||
.name = "Deep-Buffer Audio Port",
|
||||
.stream_name = "Deep-Buffer Audio",
|
||||
.cpu_dai_name = "deepbuffer-cpu-dai",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.nonatomic = true,
|
||||
.dynamic = 1,
|
||||
.dpcm_playback = 1,
|
||||
.ops = &byt_rt5651_aif1_ops,
|
||||
SND_SOC_DAILINK_REG(deepbuffer, dummy, platform),
|
||||
},
|
||||
/* CODEC<->CODEC link */
|
||||
/* back ends */
|
||||
{
|
||||
.name = "SSP2-Codec",
|
||||
.id = 0,
|
||||
.cpu_dai_name = "ssp2-port",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.no_pcm = 1,
|
||||
.codec_dai_name = "rt5651-aif1",
|
||||
.codec_name = "i2c-10EC5651:00",
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF
|
||||
| SND_SOC_DAIFMT_CBS_CFS,
|
||||
.be_hw_params_fixup = byt_rt5651_codec_fixup,
|
||||
@@ -783,6 +789,7 @@ static struct snd_soc_dai_link byt_rt5651_dais[] = {
|
||||
.dpcm_capture = 1,
|
||||
.init = byt_rt5651_init,
|
||||
.ops = &byt_rt5651_be_ssp2_ops,
|
||||
SND_SOC_DAILINK_REG(ssp2_port, ssp2_codec, platform),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -844,16 +851,6 @@ static struct snd_soc_card byt_rt5651_card = {
|
||||
.resume_post = byt_rt5651_resume,
|
||||
};
|
||||
|
||||
static const struct x86_cpu_id baytrail_cpu_ids[] = {
|
||||
{ X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_SILVERMONT }, /* Valleyview */
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct x86_cpu_id cherrytrail_cpu_ids[] = {
|
||||
{ X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_AIRMONT }, /* Braswell */
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct acpi_gpio_params ext_amp_enable_gpios = { 0, 0, false };
|
||||
|
||||
static const struct acpi_gpio_mapping cht_rt5651_gpios[] = {
|
||||
@@ -897,7 +894,8 @@ static int snd_byt_rt5651_mc_probe(struct platform_device *pdev)
|
||||
|
||||
/* fix index of codec dai */
|
||||
for (i = 0; i < ARRAY_SIZE(byt_rt5651_dais); i++) {
|
||||
if (!strcmp(byt_rt5651_dais[i].codec_name, "i2c-10EC5651:00")) {
|
||||
if (!strcmp(byt_rt5651_dais[i].codecs->name,
|
||||
"i2c-10EC5651:00")) {
|
||||
dai_index = i;
|
||||
break;
|
||||
}
|
||||
@@ -909,7 +907,7 @@ static int snd_byt_rt5651_mc_probe(struct platform_device *pdev)
|
||||
snprintf(byt_rt5651_codec_name, sizeof(byt_rt5651_codec_name),
|
||||
"i2c-%s", acpi_dev_name(adev));
|
||||
put_device(&adev->dev);
|
||||
byt_rt5651_dais[dai_index].codec_name = byt_rt5651_codec_name;
|
||||
byt_rt5651_dais[dai_index].codecs->name = byt_rt5651_codec_name;
|
||||
} else {
|
||||
dev_err(&pdev->dev, "Error cannot find '%s' dev\n", mach->id);
|
||||
return -ENODEV;
|
||||
@@ -924,7 +922,7 @@ static int snd_byt_rt5651_mc_probe(struct platform_device *pdev)
|
||||
* swap SSP0 if bytcr is detected
|
||||
* (will be overridden if DMI quirk is detected)
|
||||
*/
|
||||
if (x86_match_cpu(baytrail_cpu_ids)) {
|
||||
if (soc_intel_is_byt()) {
|
||||
if (mach->mach_params.acpi_ipc_irq_index == 0)
|
||||
is_bytcr = true;
|
||||
}
|
||||
@@ -993,7 +991,7 @@ static int snd_byt_rt5651_mc_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
/* Cherry Trail devices use an external amplifier enable gpio */
|
||||
if (x86_match_cpu(cherrytrail_cpu_ids) && !byt_rt5651_gpios)
|
||||
if (soc_intel_is_cht() && !byt_rt5651_gpios)
|
||||
byt_rt5651_gpios = cht_rt5651_gpios;
|
||||
|
||||
if (byt_rt5651_gpios) {
|
||||
@@ -1049,7 +1047,7 @@ static int snd_byt_rt5651_mc_probe(struct platform_device *pdev)
|
||||
sizeof(byt_rt5651_codec_aif_name),
|
||||
"%s", "rt5651-aif2");
|
||||
|
||||
byt_rt5651_dais[dai_index].codec_dai_name =
|
||||
byt_rt5651_dais[dai_index].codecs->dai_name =
|
||||
byt_rt5651_codec_aif_name;
|
||||
}
|
||||
|
||||
@@ -1060,7 +1058,7 @@ static int snd_byt_rt5651_mc_probe(struct platform_device *pdev)
|
||||
sizeof(byt_rt5651_cpu_dai_name),
|
||||
"%s", "ssp0-port");
|
||||
|
||||
byt_rt5651_dais[dai_index].cpu_dai_name =
|
||||
byt_rt5651_dais[dai_index].cpus->dai_name =
|
||||
byt_rt5651_cpu_dai_name;
|
||||
}
|
||||
|
||||
|
@@ -329,41 +329,48 @@ static struct snd_soc_aux_dev cht_max98090_headset_dev = {
|
||||
.codec_name = "i2c-104C227E:00",
|
||||
};
|
||||
|
||||
SND_SOC_DAILINK_DEF(dummy,
|
||||
DAILINK_COMP_ARRAY(COMP_DUMMY()));
|
||||
|
||||
SND_SOC_DAILINK_DEF(media,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("media-cpu-dai")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(deepbuffer,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("deepbuffer-cpu-dai")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp2_port,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("ssp2-port")));
|
||||
SND_SOC_DAILINK_DEF(ssp2_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("i2c-193C9890:00", "HiFi")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(platform,
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("sst-mfld-platform")));
|
||||
|
||||
static struct snd_soc_dai_link cht_dailink[] = {
|
||||
[MERR_DPCM_AUDIO] = {
|
||||
.name = "Audio Port",
|
||||
.stream_name = "Audio",
|
||||
.cpu_dai_name = "media-cpu-dai",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.nonatomic = true,
|
||||
.dynamic = 1,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
.ops = &cht_aif1_ops,
|
||||
SND_SOC_DAILINK_REG(media, dummy, platform),
|
||||
},
|
||||
[MERR_DPCM_DEEP_BUFFER] = {
|
||||
.name = "Deep-Buffer Audio Port",
|
||||
.stream_name = "Deep-Buffer Audio",
|
||||
.cpu_dai_name = "deepbuffer-cpu-dai",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.nonatomic = true,
|
||||
.dynamic = 1,
|
||||
.dpcm_playback = 1,
|
||||
.ops = &cht_aif1_ops,
|
||||
SND_SOC_DAILINK_REG(deepbuffer, dummy, platform),
|
||||
},
|
||||
/* back ends */
|
||||
{
|
||||
.name = "SSP2-Codec",
|
||||
.id = 0,
|
||||
.cpu_dai_name = "ssp2-port",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.no_pcm = 1,
|
||||
.codec_dai_name = "HiFi",
|
||||
.codec_name = "i2c-193C9890:00",
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF
|
||||
| SND_SOC_DAIFMT_CBS_CFS,
|
||||
.init = cht_codec_init,
|
||||
@@ -371,6 +378,7 @@ static struct snd_soc_dai_link cht_dailink[] = {
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
.ops = &cht_be_ssp2_ops,
|
||||
SND_SOC_DAILINK_REG(ssp2_port, ssp2_codec, platform),
|
||||
},
|
||||
};
|
||||
|
||||
|
@@ -167,51 +167,59 @@ static const struct snd_soc_ops cht_be_ssp2_ops = {
|
||||
.hw_params = cht_aif1_hw_params,
|
||||
};
|
||||
|
||||
SND_SOC_DAILINK_DEF(dummy,
|
||||
DAILINK_COMP_ARRAY(COMP_DUMMY()));
|
||||
|
||||
SND_SOC_DAILINK_DEF(media,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("media-cpu-dai")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(deepbuffer,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("deepbuffer-cpu-dai")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(compress,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("compress-cpu-dai")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp2_port,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("ssp2-port")));
|
||||
SND_SOC_DAILINK_DEF(ssp2_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("i2c-10508824:00",
|
||||
NAU8824_CODEC_DAI)));
|
||||
|
||||
SND_SOC_DAILINK_DEF(platform,
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("sst-mfld-platform")));
|
||||
|
||||
static struct snd_soc_dai_link cht_dailink[] = {
|
||||
/* Front End DAI links */
|
||||
[MERR_DPCM_AUDIO] = {
|
||||
.name = "Audio Port",
|
||||
.stream_name = "Audio",
|
||||
.cpu_dai_name = "media-cpu-dai",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.nonatomic = true,
|
||||
.dynamic = 1,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
.ops = &cht_aif1_ops,
|
||||
SND_SOC_DAILINK_REG(media, dummy, platform),
|
||||
},
|
||||
[MERR_DPCM_DEEP_BUFFER] = {
|
||||
.name = "Deep-Buffer Audio Port",
|
||||
.stream_name = "Deep-Buffer Audio",
|
||||
.cpu_dai_name = "deepbuffer-cpu-dai",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.nonatomic = true,
|
||||
.dynamic = 1,
|
||||
.dpcm_playback = 1,
|
||||
.ops = &cht_aif1_ops,
|
||||
SND_SOC_DAILINK_REG(deepbuffer, dummy, platform),
|
||||
},
|
||||
[MERR_DPCM_COMPR] = {
|
||||
.name = "Compressed Port",
|
||||
.stream_name = "Compress",
|
||||
.cpu_dai_name = "compress-cpu-dai",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
SND_SOC_DAILINK_REG(compress, dummy, platform),
|
||||
},
|
||||
/* Back End DAI links */
|
||||
{
|
||||
/* SSP2 - Codec */
|
||||
.name = "SSP2-Codec",
|
||||
.id = 1,
|
||||
.cpu_dai_name = "ssp2-port",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.no_pcm = 1,
|
||||
.codec_dai_name = NAU8824_CODEC_DAI,
|
||||
.codec_name = "i2c-10508824:00",
|
||||
.dai_fmt = SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_IB_NF
|
||||
| SND_SOC_DAIFMT_CBS_CFS,
|
||||
.init = cht_codec_init,
|
||||
@@ -219,6 +227,7 @@ static struct snd_soc_dai_link cht_dailink[] = {
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
.ops = &cht_be_ssp2_ops,
|
||||
SND_SOC_DAILINK_REG(ssp2_port, ssp2_codec, platform),
|
||||
},
|
||||
};
|
||||
|
||||
|
@@ -18,7 +18,6 @@
|
||||
#include <linux/clk.h>
|
||||
#include <linux/dmi.h>
|
||||
#include <linux/slab.h>
|
||||
#include <asm/cpu_device_id.h>
|
||||
#include <sound/pcm.h>
|
||||
#include <sound/pcm_params.h>
|
||||
#include <sound/soc.h>
|
||||
@@ -26,6 +25,7 @@
|
||||
#include <sound/soc-acpi.h>
|
||||
#include "../../codecs/rt5645.h"
|
||||
#include "../atom/sst-atom-controls.h"
|
||||
#include "../common/soc-intel-quirks.h"
|
||||
|
||||
#define CHT_PLAT_CLK_3_HZ 19200000
|
||||
#define CHT_CODEC_DAI1 "rt5645-aif1"
|
||||
@@ -417,48 +417,56 @@ static const struct snd_soc_ops cht_be_ssp2_ops = {
|
||||
.hw_params = cht_aif1_hw_params,
|
||||
};
|
||||
|
||||
SND_SOC_DAILINK_DEF(dummy,
|
||||
DAILINK_COMP_ARRAY(COMP_DUMMY()));
|
||||
|
||||
SND_SOC_DAILINK_DEF(media,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("media-cpu-dai")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(deepbuffer,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("deepbuffer-cpu-dai")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp2_port,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("ssp2-port")));
|
||||
SND_SOC_DAILINK_DEF(ssp2_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("i2c-10EC5645:00", "rt5645-aif1")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(platform,
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("sst-mfld-platform")));
|
||||
|
||||
static struct snd_soc_dai_link cht_dailink[] = {
|
||||
[MERR_DPCM_AUDIO] = {
|
||||
.name = "Audio Port",
|
||||
.stream_name = "Audio",
|
||||
.cpu_dai_name = "media-cpu-dai",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.nonatomic = true,
|
||||
.dynamic = 1,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
.ops = &cht_aif1_ops,
|
||||
SND_SOC_DAILINK_REG(media, dummy, platform),
|
||||
},
|
||||
[MERR_DPCM_DEEP_BUFFER] = {
|
||||
.name = "Deep-Buffer Audio Port",
|
||||
.stream_name = "Deep-Buffer Audio",
|
||||
.cpu_dai_name = "deepbuffer-cpu-dai",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.nonatomic = true,
|
||||
.dynamic = 1,
|
||||
.dpcm_playback = 1,
|
||||
.ops = &cht_aif1_ops,
|
||||
SND_SOC_DAILINK_REG(deepbuffer, dummy, platform),
|
||||
},
|
||||
/* CODEC<->CODEC link */
|
||||
/* back ends */
|
||||
{
|
||||
.name = "SSP2-Codec",
|
||||
.id = 0,
|
||||
.cpu_dai_name = "ssp2-port",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.no_pcm = 1,
|
||||
.codec_dai_name = "rt5645-aif1",
|
||||
.codec_name = "i2c-10EC5645:00",
|
||||
.init = cht_codec_init,
|
||||
.be_hw_params_fixup = cht_codec_fixup,
|
||||
.nonatomic = true,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
.ops = &cht_be_ssp2_ops,
|
||||
SND_SOC_DAILINK_REG(ssp2_port, ssp2_codec, platform),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -501,18 +509,6 @@ static char cht_rt5645_codec_name[SND_ACPI_I2C_ID_LEN];
|
||||
static char cht_rt5645_codec_aif_name[12]; /* = "rt5645-aif[1|2]" */
|
||||
static char cht_rt5645_cpu_dai_name[10]; /* = "ssp[0|2]-port" */
|
||||
|
||||
static bool is_valleyview(void)
|
||||
{
|
||||
static const struct x86_cpu_id cpu_ids[] = {
|
||||
{ X86_VENDOR_INTEL, 6, 55 }, /* Valleyview, Bay Trail */
|
||||
{}
|
||||
};
|
||||
|
||||
if (!x86_match_cpu(cpu_ids))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
struct acpi_chan_package { /* ACPICA seems to require 64 bit integers */
|
||||
u64 aif_value; /* 1: AIF1, 2: AIF2 */
|
||||
u64 mclock_value; /* usually 25MHz (0x17d7940), ignored */
|
||||
@@ -559,8 +555,9 @@ static int snd_cht_mc_probe(struct platform_device *pdev)
|
||||
|
||||
/* set correct codec name */
|
||||
for (i = 0; i < ARRAY_SIZE(cht_dailink); i++)
|
||||
if (!strcmp(card->dai_link[i].codec_name, "i2c-10EC5645:00")) {
|
||||
card->dai_link[i].codec_name = drv->codec_name;
|
||||
if (!strcmp(card->dai_link[i].codecs->name,
|
||||
"i2c-10EC5645:00")) {
|
||||
card->dai_link[i].codecs->name = drv->codec_name;
|
||||
dai_index = i;
|
||||
}
|
||||
|
||||
@@ -570,14 +567,14 @@ static int snd_cht_mc_probe(struct platform_device *pdev)
|
||||
snprintf(cht_rt5645_codec_name, sizeof(cht_rt5645_codec_name),
|
||||
"i2c-%s", acpi_dev_name(adev));
|
||||
put_device(&adev->dev);
|
||||
cht_dailink[dai_index].codec_name = cht_rt5645_codec_name;
|
||||
cht_dailink[dai_index].codecs->name = cht_rt5645_codec_name;
|
||||
}
|
||||
|
||||
/*
|
||||
* swap SSP0 if bytcr is detected
|
||||
* (will be overridden if DMI quirk is detected)
|
||||
*/
|
||||
if (is_valleyview()) {
|
||||
if (soc_intel_is_byt()) {
|
||||
if (mach->mach_params.acpi_ipc_irq_index == 0)
|
||||
is_bytcr = true;
|
||||
}
|
||||
@@ -641,7 +638,7 @@ static int snd_cht_mc_probe(struct platform_device *pdev)
|
||||
sizeof(cht_rt5645_codec_aif_name),
|
||||
"%s", "rt5645-aif2");
|
||||
|
||||
cht_dailink[dai_index].codec_dai_name =
|
||||
cht_dailink[dai_index].codecs->dai_name =
|
||||
cht_rt5645_codec_aif_name;
|
||||
}
|
||||
|
||||
@@ -653,7 +650,7 @@ static int snd_cht_mc_probe(struct platform_device *pdev)
|
||||
sizeof(cht_rt5645_cpu_dai_name),
|
||||
"%s", "ssp0-port");
|
||||
|
||||
cht_dailink[dai_index].cpu_dai_name =
|
||||
cht_dailink[dai_index].cpus->dai_name =
|
||||
cht_rt5645_cpu_dai_name;
|
||||
}
|
||||
|
||||
|
@@ -287,32 +287,44 @@ static const struct snd_soc_ops cht_be_ssp2_ops = {
|
||||
.hw_params = cht_aif1_hw_params,
|
||||
};
|
||||
|
||||
SND_SOC_DAILINK_DEF(dummy,
|
||||
DAILINK_COMP_ARRAY(COMP_DUMMY()));
|
||||
|
||||
SND_SOC_DAILINK_DEF(media,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("media-cpu-dai")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(deepbuffer,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("deepbuffer-cpu-dai")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp2_port,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("ssp2-port")));
|
||||
SND_SOC_DAILINK_DEF(ssp2_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("i2c-10EC5670:00",
|
||||
"rt5670-aif1")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(platform,
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("sst-mfld-platform")));
|
||||
|
||||
static struct snd_soc_dai_link cht_dailink[] = {
|
||||
/* Front End DAI links */
|
||||
[MERR_DPCM_AUDIO] = {
|
||||
.name = "Audio Port",
|
||||
.stream_name = "Audio",
|
||||
.cpu_dai_name = "media-cpu-dai",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.nonatomic = true,
|
||||
.dynamic = 1,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
.ops = &cht_aif1_ops,
|
||||
SND_SOC_DAILINK_REG(media, dummy, platform),
|
||||
},
|
||||
[MERR_DPCM_DEEP_BUFFER] = {
|
||||
.name = "Deep-Buffer Audio Port",
|
||||
.stream_name = "Deep-Buffer Audio",
|
||||
.cpu_dai_name = "deepbuffer-cpu-dai",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.nonatomic = true,
|
||||
.dynamic = 1,
|
||||
.dpcm_playback = 1,
|
||||
.ops = &cht_aif1_ops,
|
||||
SND_SOC_DAILINK_REG(deepbuffer, dummy, platform),
|
||||
},
|
||||
|
||||
/* Back End DAI links */
|
||||
@@ -320,17 +332,14 @@ static struct snd_soc_dai_link cht_dailink[] = {
|
||||
/* SSP2 - Codec */
|
||||
.name = "SSP2-Codec",
|
||||
.id = 0,
|
||||
.cpu_dai_name = "ssp2-port",
|
||||
.platform_name = "sst-mfld-platform",
|
||||
.no_pcm = 1,
|
||||
.nonatomic = true,
|
||||
.codec_dai_name = "rt5670-aif1",
|
||||
.codec_name = "i2c-10EC5670:00",
|
||||
.init = cht_codec_init,
|
||||
.be_hw_params_fixup = cht_codec_fixup,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
.ops = &cht_be_ssp2_ops,
|
||||
SND_SOC_DAILINK_REG(ssp2_port, ssp2_codec, platform),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -409,9 +418,9 @@ static int snd_cht_mc_probe(struct platform_device *pdev)
|
||||
"i2c-%s", acpi_dev_name(adev));
|
||||
put_device(&adev->dev);
|
||||
for (i = 0; i < ARRAY_SIZE(cht_dailink); i++) {
|
||||
if (!strcmp(cht_dailink[i].codec_name,
|
||||
RT5672_I2C_DEFAULT)) {
|
||||
cht_dailink[i].codec_name = drv->codec_name;
|
||||
if (!strcmp(cht_dailink[i].codecs->name,
|
||||
RT5672_I2C_DEFAULT)) {
|
||||
cht_dailink[i].codecs->name = drv->codec_name;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@@ -17,7 +17,6 @@
|
||||
#include <sound/pcm_params.h>
|
||||
#include <sound/soc.h>
|
||||
#include <sound/soc-acpi.h>
|
||||
#include "../skylake/skl.h"
|
||||
#include "../../codecs/rt5682.h"
|
||||
#include "../../codecs/hdac_hdmi.h"
|
||||
|
||||
@@ -169,9 +168,10 @@ static int geminilake_rt5682_codec_init(struct snd_soc_pcm_runtime *rtd)
|
||||
jack = &ctx->geminilake_headset;
|
||||
|
||||
snd_jack_set_key(jack->jack, SND_JACK_BTN_0, KEY_PLAYPAUSE);
|
||||
snd_jack_set_key(jack->jack, SND_JACK_BTN_1, KEY_VOLUMEUP);
|
||||
snd_jack_set_key(jack->jack, SND_JACK_BTN_2, KEY_VOLUMEDOWN);
|
||||
snd_jack_set_key(jack->jack, SND_JACK_BTN_3, KEY_VOICECOMMAND);
|
||||
snd_jack_set_key(jack->jack, SND_JACK_BTN_1, KEY_VOICECOMMAND);
|
||||
snd_jack_set_key(jack->jack, SND_JACK_BTN_2, KEY_VOLUMEUP);
|
||||
snd_jack_set_key(jack->jack, SND_JACK_BTN_3, KEY_VOLUMEDOWN);
|
||||
|
||||
ret = snd_soc_component_set_jack(component, jack, NULL);
|
||||
|
||||
if (ret) {
|
||||
@@ -317,152 +317,180 @@ static const struct snd_soc_ops geminilake_refcap_ops = {
|
||||
.startup = geminilake_refcap_startup,
|
||||
};
|
||||
|
||||
SND_SOC_DAILINK_DEF(dummy,
|
||||
DAILINK_COMP_ARRAY(COMP_DUMMY()));
|
||||
|
||||
SND_SOC_DAILINK_DEF(system,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("System Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(system2,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("System Pin2")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(echoref,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("Echoref Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(reference,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("Reference Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("DMIC Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi1,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI1 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi2,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI2 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi3,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI3 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp1_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("SSP1 Pin")));
|
||||
SND_SOC_DAILINK_DEF(ssp1_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC(MAXIM_DEV0_NAME,
|
||||
GLK_MAXIM_CODEC_DAI)));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp2_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("SSP2 Pin")));
|
||||
SND_SOC_DAILINK_DEF(ssp2_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("i2c-10EC5682:00",
|
||||
GLK_REALTEK_CODEC_DAI)));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("DMIC01 Pin")));
|
||||
SND_SOC_DAILINK_DEF(dmic_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("dmic-codec", "dmic-hifi")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp1_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp1 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp1_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi1")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp2_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp2 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp2_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi2")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp3_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp3 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp3_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi3")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(platform,
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("0000:00:0e.0")));
|
||||
|
||||
/* geminilake digital audio interface glue - connects codec <--> CPU */
|
||||
static struct snd_soc_dai_link geminilake_dais[] = {
|
||||
/* Front End DAI links */
|
||||
[GLK_DPCM_AUDIO_PB] = {
|
||||
.name = "Glk Audio Port",
|
||||
.stream_name = "Audio",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.nonatomic = 1,
|
||||
.init = geminilake_rt5682_fe_init,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
[GLK_DPCM_AUDIO_CP] = {
|
||||
.name = "Glk Audio Capture Port",
|
||||
.stream_name = "Audio Record",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.nonatomic = 1,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_capture = 1,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
[GLK_DPCM_AUDIO_HS_PB] = {
|
||||
.name = "Glk Audio Headset Playback",
|
||||
.stream_name = "Headset Audio",
|
||||
.cpu_dai_name = "System Pin2",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.dpcm_playback = 1,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(system2, dummy, platform),
|
||||
},
|
||||
[GLK_DPCM_AUDIO_ECHO_REF_CP] = {
|
||||
.name = "Glk Audio Echo Reference cap",
|
||||
.stream_name = "Echoreference Capture",
|
||||
.cpu_dai_name = "Echoref Pin",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.init = NULL,
|
||||
.capture_only = 1,
|
||||
.nonatomic = 1,
|
||||
SND_SOC_DAILINK_REG(echoref, dummy, platform),
|
||||
},
|
||||
[GLK_DPCM_AUDIO_REF_CP] = {
|
||||
.name = "Glk Audio Reference cap",
|
||||
.stream_name = "Refcap",
|
||||
.cpu_dai_name = "Reference Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.init = NULL,
|
||||
.dpcm_capture = 1,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
.ops = &geminilake_refcap_ops,
|
||||
SND_SOC_DAILINK_REG(reference, dummy, platform),
|
||||
},
|
||||
[GLK_DPCM_AUDIO_DMIC_CP] = {
|
||||
.name = "Glk Audio DMIC cap",
|
||||
.stream_name = "dmiccap",
|
||||
.cpu_dai_name = "DMIC Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.init = NULL,
|
||||
.dpcm_capture = 1,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
.ops = &geminilake_dmic_ops,
|
||||
SND_SOC_DAILINK_REG(dmic, dummy, platform),
|
||||
},
|
||||
[GLK_DPCM_AUDIO_HDMI1_PB] = {
|
||||
.name = "Glk HDMI Port1",
|
||||
.stream_name = "Hdmi1",
|
||||
.cpu_dai_name = "HDMI1 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi1, dummy, platform),
|
||||
},
|
||||
[GLK_DPCM_AUDIO_HDMI2_PB] = {
|
||||
.name = "Glk HDMI Port2",
|
||||
.stream_name = "Hdmi2",
|
||||
.cpu_dai_name = "HDMI2 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi2, dummy, platform),
|
||||
},
|
||||
[GLK_DPCM_AUDIO_HDMI3_PB] = {
|
||||
.name = "Glk HDMI Port3",
|
||||
.stream_name = "Hdmi3",
|
||||
.cpu_dai_name = "HDMI3 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi3, dummy, platform),
|
||||
},
|
||||
/* Back End DAI links */
|
||||
{
|
||||
/* SSP1 - Codec */
|
||||
.name = "SSP1-Codec",
|
||||
.id = 0,
|
||||
.cpu_dai_name = "SSP1 Pin",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.no_pcm = 1,
|
||||
.codec_name = MAXIM_DEV0_NAME,
|
||||
.codec_dai_name = GLK_MAXIM_CODEC_DAI,
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S |
|
||||
SND_SOC_DAIFMT_NB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS,
|
||||
.ignore_pmdown_time = 1,
|
||||
.be_hw_params_fixup = geminilake_ssp_fixup,
|
||||
.dpcm_playback = 1,
|
||||
SND_SOC_DAILINK_REG(ssp1_pin, ssp1_codec, platform),
|
||||
},
|
||||
{
|
||||
/* SSP2 - Codec */
|
||||
.name = "SSP2-Codec",
|
||||
.id = 1,
|
||||
.cpu_dai_name = "SSP2 Pin",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.no_pcm = 1,
|
||||
.codec_name = "i2c-10EC5682:00",
|
||||
.codec_dai_name = GLK_REALTEK_CODEC_DAI,
|
||||
.init = geminilake_rt5682_codec_init,
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS,
|
||||
@@ -471,51 +499,40 @@ static struct snd_soc_dai_link geminilake_dais[] = {
|
||||
.ops = &geminilake_rt5682_ops,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
SND_SOC_DAILINK_REG(ssp2_pin, ssp2_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "dmic01",
|
||||
.id = 2,
|
||||
.cpu_dai_name = "DMIC01 Pin",
|
||||
.codec_name = "dmic-codec",
|
||||
.codec_dai_name = "dmic-hifi",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.ignore_suspend = 1,
|
||||
.be_hw_params_fixup = geminilake_dmic_fixup,
|
||||
.dpcm_capture = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(dmic_pin, dmic_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp1",
|
||||
.id = 3,
|
||||
.cpu_dai_name = "iDisp1 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi1",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.init = geminilake_hdmi_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp1_pin, idisp1_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp2",
|
||||
.id = 4,
|
||||
.cpu_dai_name = "iDisp2 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi2",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.init = geminilake_hdmi_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp2_pin, idisp2_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp3",
|
||||
.id = 5,
|
||||
.cpu_dai_name = "iDisp3 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi3",
|
||||
.platform_name = "0000:00:0e.0",
|
||||
.init = geminilake_hdmi_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp3_pin, idisp3_codec, platform),
|
||||
},
|
||||
};
|
||||
|
||||
|
@@ -96,53 +96,62 @@ static int haswell_rtd_init(struct snd_soc_pcm_runtime *rtd)
|
||||
return 0;
|
||||
}
|
||||
|
||||
SND_SOC_DAILINK_DEF(dummy,
|
||||
DAILINK_COMP_ARRAY(COMP_DUMMY()));
|
||||
|
||||
SND_SOC_DAILINK_DEF(system,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("System Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(offload0,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("Offload0 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(offload1,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("Offload1 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(loopback,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("Loopback Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("i2c-INT33CA:00", "rt5640-aif1")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(platform,
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("haswell-pcm-audio")));
|
||||
|
||||
static struct snd_soc_dai_link haswell_rt5640_dais[] = {
|
||||
/* Front End DAI links */
|
||||
{
|
||||
.name = "System",
|
||||
.stream_name = "System Playback/Capture",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "haswell-pcm-audio",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.init = haswell_rtd_init,
|
||||
.trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
{
|
||||
.name = "Offload0",
|
||||
.stream_name = "Offload0 Playback",
|
||||
.cpu_dai_name = "Offload0 Pin",
|
||||
.platform_name = "haswell-pcm-audio",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
SND_SOC_DAILINK_REG(offload0, dummy, platform),
|
||||
},
|
||||
{
|
||||
.name = "Offload1",
|
||||
.stream_name = "Offload1 Playback",
|
||||
.cpu_dai_name = "Offload1 Pin",
|
||||
.platform_name = "haswell-pcm-audio",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
SND_SOC_DAILINK_REG(offload1, dummy, platform),
|
||||
},
|
||||
{
|
||||
.name = "Loopback",
|
||||
.stream_name = "Loopback",
|
||||
.cpu_dai_name = "Loopback Pin",
|
||||
.platform_name = "haswell-pcm-audio",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_capture = 1,
|
||||
SND_SOC_DAILINK_REG(loopback, dummy, platform),
|
||||
},
|
||||
|
||||
/* Back End DAI links */
|
||||
@@ -150,11 +159,7 @@ static struct snd_soc_dai_link haswell_rt5640_dais[] = {
|
||||
/* SSP0 - Codec */
|
||||
.name = "Codec",
|
||||
.id = 0,
|
||||
.cpu_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "snd-soc-dummy",
|
||||
.no_pcm = 1,
|
||||
.codec_name = "i2c-INT33CA:00",
|
||||
.codec_dai_name = "rt5640-aif1",
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS,
|
||||
.ignore_suspend = 1,
|
||||
@@ -163,6 +168,7 @@ static struct snd_soc_dai_link haswell_rt5640_dais[] = {
|
||||
.ops = &haswell_rt5640_ops,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
SND_SOC_DAILINK_REG(dummy, codec, dummy),
|
||||
},
|
||||
};
|
||||
|
||||
|
@@ -19,7 +19,6 @@
|
||||
#include <sound/soc.h>
|
||||
#include "../../codecs/da7219.h"
|
||||
#include "../../codecs/hdac_hdmi.h"
|
||||
#include "../skylake/skl.h"
|
||||
#include "../../codecs/da7219-aad.h"
|
||||
|
||||
#define KBL_DIALOG_CODEC_DAI "da7219-hifi"
|
||||
@@ -350,92 +349,128 @@ static const unsigned int ch_mono[] = {
|
||||
1,
|
||||
};
|
||||
|
||||
SND_SOC_DAILINK_DEF(dummy,
|
||||
DAILINK_COMP_ARRAY(COMP_DUMMY()));
|
||||
|
||||
SND_SOC_DAILINK_DEF(system,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("System Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("DMIC Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi1,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI1 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi2,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI2 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi3,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI3 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp0_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("SSP0 Pin")));
|
||||
SND_SOC_DAILINK_DEF(ssp0_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC(MAXIM_DEV0_NAME,
|
||||
KBL_MAXIM_CODEC_DAI)));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp1_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("SSP1 Pin")));
|
||||
SND_SOC_DAILINK_DEF(ssp1_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("i2c-DLGS7219:00",
|
||||
KBL_DIALOG_CODEC_DAI)));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("DMIC01 Pin")));
|
||||
SND_SOC_DAILINK_DEF(dmic_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("dmic-codec", "dmic-hifi")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp1_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp1 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp1_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2",
|
||||
"intel-hdmi-hifi1")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp2_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp2 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp2_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi2")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp3_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp3 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp3_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi3")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(platform,
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("0000:00:1f.3")));
|
||||
|
||||
/* kabylake digital audio interface glue - connects codec <--> CPU */
|
||||
static struct snd_soc_dai_link kabylake_dais[] = {
|
||||
/* Front End DAI links */
|
||||
[KBL_DPCM_AUDIO_PB] = {
|
||||
.name = "Kbl Audio Port",
|
||||
.stream_name = "Audio",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.nonatomic = 1,
|
||||
.init = kabylake_da7219_fe_init,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
.ops = &kabylake_da7219_fe_ops,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_CP] = {
|
||||
.name = "Kbl Audio Capture Port",
|
||||
.stream_name = "Audio Record",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.nonatomic = 1,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_capture = 1,
|
||||
.ops = &kabylake_da7219_fe_ops,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_DMIC_CP] = {
|
||||
.name = "Kbl Audio DMIC cap",
|
||||
.stream_name = "dmiccap",
|
||||
.cpu_dai_name = "DMIC Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = NULL,
|
||||
.dpcm_capture = 1,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
.ops = &kabylake_dmic_ops,
|
||||
SND_SOC_DAILINK_REG(dmic, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_HDMI1_PB] = {
|
||||
.name = "Kbl HDMI Port1",
|
||||
.stream_name = "Hdmi1",
|
||||
.cpu_dai_name = "HDMI1 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi1, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_HDMI2_PB] = {
|
||||
.name = "Kbl HDMI Port2",
|
||||
.stream_name = "Hdmi2",
|
||||
.cpu_dai_name = "HDMI2 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi2, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_HDMI3_PB] = {
|
||||
.name = "Kbl HDMI Port3",
|
||||
.stream_name = "Hdmi3",
|
||||
.cpu_dai_name = "HDMI3 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi3, dummy, platform),
|
||||
},
|
||||
|
||||
/* Back End DAI links */
|
||||
@@ -443,27 +478,20 @@ static struct snd_soc_dai_link kabylake_dais[] = {
|
||||
/* SSP0 - Codec */
|
||||
.name = "SSP0-Codec",
|
||||
.id = 0,
|
||||
.cpu_dai_name = "SSP0 Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.no_pcm = 1,
|
||||
.codec_name = MAXIM_DEV0_NAME,
|
||||
.codec_dai_name = KBL_MAXIM_CODEC_DAI,
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S |
|
||||
SND_SOC_DAIFMT_NB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS,
|
||||
.ignore_pmdown_time = 1,
|
||||
.be_hw_params_fixup = kabylake_ssp_fixup,
|
||||
.dpcm_playback = 1,
|
||||
SND_SOC_DAILINK_REG(ssp0_pin, ssp0_codec, platform),
|
||||
},
|
||||
{
|
||||
/* SSP1 - Codec */
|
||||
.name = "SSP1-Codec",
|
||||
.id = 1,
|
||||
.cpu_dai_name = "SSP1 Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.no_pcm = 1,
|
||||
.codec_name = "i2c-DLGS7219:00",
|
||||
.codec_dai_name = KBL_DIALOG_CODEC_DAI,
|
||||
.init = kabylake_da7219_codec_init,
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS,
|
||||
@@ -471,51 +499,40 @@ static struct snd_soc_dai_link kabylake_dais[] = {
|
||||
.be_hw_params_fixup = kabylake_ssp_fixup,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
SND_SOC_DAILINK_REG(ssp1_pin, ssp1_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "dmic01",
|
||||
.id = 2,
|
||||
.cpu_dai_name = "DMIC01 Pin",
|
||||
.codec_name = "dmic-codec",
|
||||
.codec_dai_name = "dmic-hifi",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.be_hw_params_fixup = kabylake_dmic_fixup,
|
||||
.ignore_suspend = 1,
|
||||
.dpcm_capture = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(dmic_pin, dmic_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp1",
|
||||
.id = 3,
|
||||
.cpu_dai_name = "iDisp1 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi1",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = kabylake_hdmi1_init,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp1_pin, idisp1_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp2",
|
||||
.id = 4,
|
||||
.cpu_dai_name = "iDisp2 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi2",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = kabylake_hdmi2_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp2_pin, idisp2_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp3",
|
||||
.id = 5,
|
||||
.cpu_dai_name = "iDisp3 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi3",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = kabylake_hdmi3_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp3_pin, idisp3_codec, platform),
|
||||
},
|
||||
};
|
||||
|
||||
|
@@ -19,7 +19,6 @@
|
||||
#include <sound/soc.h>
|
||||
#include "../../codecs/da7219.h"
|
||||
#include "../../codecs/hdac_hdmi.h"
|
||||
#include "../skylake/skl.h"
|
||||
#include "../../codecs/da7219-aad.h"
|
||||
|
||||
#define KBL_DIALOG_CODEC_DAI "da7219-hifi"
|
||||
@@ -219,8 +218,60 @@ static int kabylake_ssp0_hw_params(struct snd_pcm_substream *substream,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int kabylake_ssp0_trigger(struct snd_pcm_substream *substream, int cmd)
|
||||
{
|
||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||
int j, ret;
|
||||
|
||||
for (j = 0; j < rtd->num_codecs; j++) {
|
||||
struct snd_soc_dai *codec_dai = rtd->codec_dais[j];
|
||||
const char *name = codec_dai->component->name;
|
||||
struct snd_soc_component *component = codec_dai->component;
|
||||
struct snd_soc_dapm_context *dapm =
|
||||
snd_soc_component_get_dapm(component);
|
||||
char pin_name[20];
|
||||
|
||||
if (strcmp(name, MAX98927_DEV0_NAME) &&
|
||||
strcmp(name, MAX98927_DEV1_NAME) &&
|
||||
strcmp(name, MAX98373_DEV0_NAME) &&
|
||||
strcmp(name, MAX98373_DEV1_NAME))
|
||||
continue;
|
||||
|
||||
snprintf(pin_name, ARRAY_SIZE(pin_name), "%s Spk",
|
||||
codec_dai->component->name_prefix);
|
||||
|
||||
switch (cmd) {
|
||||
case SNDRV_PCM_TRIGGER_START:
|
||||
case SNDRV_PCM_TRIGGER_RESUME:
|
||||
case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
|
||||
ret = snd_soc_dapm_enable_pin(dapm, pin_name);
|
||||
if (ret) {
|
||||
dev_err(rtd->dev, "failed to enable %s: %d\n",
|
||||
pin_name, ret);
|
||||
return ret;
|
||||
}
|
||||
snd_soc_dapm_sync(dapm);
|
||||
break;
|
||||
case SNDRV_PCM_TRIGGER_STOP:
|
||||
case SNDRV_PCM_TRIGGER_SUSPEND:
|
||||
case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
|
||||
ret = snd_soc_dapm_disable_pin(dapm, pin_name);
|
||||
if (ret) {
|
||||
dev_err(rtd->dev, "failed to disable %s: %d\n",
|
||||
pin_name, ret);
|
||||
return ret;
|
||||
}
|
||||
snd_soc_dapm_sync(dapm);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct snd_soc_ops kabylake_ssp0_ops = {
|
||||
.hw_params = kabylake_ssp0_hw_params,
|
||||
.trigger = kabylake_ssp0_trigger,
|
||||
};
|
||||
|
||||
static int kabylake_ssp_fixup(struct snd_soc_pcm_runtime *rtd,
|
||||
@@ -543,19 +594,6 @@ static struct snd_soc_codec_conf max98373_codec_conf[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct snd_soc_dai_link_component max98927_ssp0_codec_components[] = {
|
||||
{ /* Left */
|
||||
.name = MAX98927_DEV0_NAME,
|
||||
.dai_name = MAX98927_CODEC_DAI,
|
||||
},
|
||||
|
||||
{ /* For Right */
|
||||
.name = MAX98927_DEV1_NAME,
|
||||
.dai_name = MAX98927_CODEC_DAI,
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
static struct snd_soc_dai_link_component max98373_ssp0_codec_components[] = {
|
||||
{ /* Left */
|
||||
.name = MAX98373_DEV0_NAME,
|
||||
@@ -569,110 +607,148 @@ static struct snd_soc_dai_link_component max98373_ssp0_codec_components[] = {
|
||||
|
||||
};
|
||||
|
||||
SND_SOC_DAILINK_DEF(dummy,
|
||||
DAILINK_COMP_ARRAY(COMP_DUMMY()));
|
||||
|
||||
SND_SOC_DAILINK_DEF(system,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("System Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(echoref,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("Echoref Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(reference,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("Reference Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("DMIC Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi1,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI1 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi2,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI2 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi3,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI3 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(system2,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("System Pin2")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp0_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("SSP0 Pin")));
|
||||
SND_SOC_DAILINK_DEF(ssp0_codec,
|
||||
DAILINK_COMP_ARRAY(
|
||||
/* Left */ COMP_CODEC(MAX98927_DEV0_NAME, MAX98927_CODEC_DAI),
|
||||
/* For Right */ COMP_CODEC(MAX98927_DEV1_NAME, MAX98927_CODEC_DAI)));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp1_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("SSP1 Pin")));
|
||||
SND_SOC_DAILINK_DEF(ssp1_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("i2c-DLGS7219:00",
|
||||
KBL_DIALOG_CODEC_DAI)));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("DMIC01 Pin")));
|
||||
SND_SOC_DAILINK_DEF(dmic_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("dmic-codec", "dmic-hifi")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp1_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp1 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp1_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi1")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp2_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp2 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp2_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi2")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp3_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp3 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp3_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi3")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(platform,
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("0000:00:1f.3")));
|
||||
|
||||
/* kabylake digital audio interface glue - connects codec <--> CPU */
|
||||
static struct snd_soc_dai_link kabylake_dais[] = {
|
||||
/* Front End DAI links */
|
||||
[KBL_DPCM_AUDIO_PB] = {
|
||||
.name = "Kbl Audio Port",
|
||||
.stream_name = "Audio",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.nonatomic = 1,
|
||||
.init = kabylake_da7219_fe_init,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
.ops = &kabylake_da7219_fe_ops,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_ECHO_REF_CP] = {
|
||||
.name = "Kbl Audio Echo Reference cap",
|
||||
.stream_name = "Echoreference Capture",
|
||||
.cpu_dai_name = "Echoref Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = NULL,
|
||||
.capture_only = 1,
|
||||
.nonatomic = 1,
|
||||
SND_SOC_DAILINK_REG(echoref, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_REF_CP] = {
|
||||
.name = "Kbl Audio Reference cap",
|
||||
.stream_name = "Wake on Voice",
|
||||
.cpu_dai_name = "Reference Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = NULL,
|
||||
.dpcm_capture = 1,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
.ops = &skylake_refcap_ops,
|
||||
SND_SOC_DAILINK_REG(reference, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_DMIC_CP] = {
|
||||
.name = "Kbl Audio DMIC cap",
|
||||
.stream_name = "dmiccap",
|
||||
.cpu_dai_name = "DMIC Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = NULL,
|
||||
.dpcm_capture = 1,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
.ops = &kabylake_dmic_ops,
|
||||
SND_SOC_DAILINK_REG(dmic, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_HDMI1_PB] = {
|
||||
.name = "Kbl HDMI Port1",
|
||||
.stream_name = "Hdmi1",
|
||||
.cpu_dai_name = "HDMI1 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi1, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_HDMI2_PB] = {
|
||||
.name = "Kbl HDMI Port2",
|
||||
.stream_name = "Hdmi2",
|
||||
.cpu_dai_name = "HDMI2 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi2, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_HDMI3_PB] = {
|
||||
.name = "Kbl HDMI Port3",
|
||||
.stream_name = "Hdmi3",
|
||||
.cpu_dai_name = "HDMI3 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi3, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_HS_PB] = {
|
||||
.name = "Kbl Audio Headset Playback",
|
||||
.stream_name = "Headset Audio",
|
||||
.cpu_dai_name = "System Pin2",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
@@ -680,21 +756,18 @@ static struct snd_soc_dai_link kabylake_dais[] = {
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.ops = &kabylake_da7219_fe_ops,
|
||||
|
||||
SND_SOC_DAILINK_REG(system2, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_CP] = {
|
||||
.name = "Kbl Audio Capture Port",
|
||||
.stream_name = "Audio Record",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.nonatomic = 1,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_capture = 1,
|
||||
.ops = &kabylake_da7219_fe_ops,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
|
||||
/* Back End DAI links */
|
||||
@@ -702,11 +775,7 @@ static struct snd_soc_dai_link kabylake_dais[] = {
|
||||
/* SSP0 - Codec */
|
||||
.name = "SSP0-Codec",
|
||||
.id = 0,
|
||||
.cpu_dai_name = "SSP0 Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.no_pcm = 1,
|
||||
.codecs = max98927_ssp0_codec_components,
|
||||
.num_codecs = ARRAY_SIZE(max98927_ssp0_codec_components),
|
||||
.dai_fmt = SND_SOC_DAIFMT_DSP_B |
|
||||
SND_SOC_DAIFMT_NB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS,
|
||||
@@ -715,16 +784,13 @@ static struct snd_soc_dai_link kabylake_dais[] = {
|
||||
.ignore_pmdown_time = 1,
|
||||
.be_hw_params_fixup = kabylake_ssp_fixup,
|
||||
.ops = &kabylake_ssp0_ops,
|
||||
SND_SOC_DAILINK_REG(ssp0_pin, ssp0_codec, platform),
|
||||
},
|
||||
{
|
||||
/* SSP1 - Codec */
|
||||
.name = "SSP1-Codec",
|
||||
.id = 1,
|
||||
.cpu_dai_name = "SSP1 Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.no_pcm = 1,
|
||||
.codec_name = "i2c-DLGS7219:00",
|
||||
.codec_dai_name = KBL_DIALOG_CODEC_DAI,
|
||||
.init = kabylake_da7219_codec_init,
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS,
|
||||
@@ -732,52 +798,41 @@ static struct snd_soc_dai_link kabylake_dais[] = {
|
||||
.be_hw_params_fixup = kabylake_ssp_fixup,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
SND_SOC_DAILINK_REG(ssp1_pin, ssp1_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "dmic01",
|
||||
.id = 2,
|
||||
.cpu_dai_name = "DMIC01 Pin",
|
||||
.codec_name = "dmic-codec",
|
||||
.codec_dai_name = "dmic-hifi",
|
||||
.init = kabylake_dmic_init,
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.be_hw_params_fixup = kabylake_dmic_fixup,
|
||||
.ignore_suspend = 1,
|
||||
.dpcm_capture = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(dmic_pin, dmic_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp1",
|
||||
.id = 3,
|
||||
.cpu_dai_name = "iDisp1 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi1",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = kabylake_hdmi1_init,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp1_pin, idisp1_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp2",
|
||||
.id = 4,
|
||||
.cpu_dai_name = "iDisp2 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi2",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = kabylake_hdmi2_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp2_pin, idisp2_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp3",
|
||||
.id = 5,
|
||||
.cpu_dai_name = "iDisp3 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi3",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = kabylake_hdmi3_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp3_pin, idisp3_codec, platform),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -787,96 +842,75 @@ static struct snd_soc_dai_link kabylake_max98_927_373_dais[] = {
|
||||
[KBL_DPCM_AUDIO_PB] = {
|
||||
.name = "Kbl Audio Port",
|
||||
.stream_name = "Audio",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.nonatomic = 1,
|
||||
.init = kabylake_da7219_fe_init,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
.ops = &kabylake_da7219_fe_ops,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_ECHO_REF_CP] = {
|
||||
.name = "Kbl Audio Echo Reference cap",
|
||||
.stream_name = "Echoreference Capture",
|
||||
.cpu_dai_name = "Echoref Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = NULL,
|
||||
.capture_only = 1,
|
||||
.nonatomic = 1,
|
||||
SND_SOC_DAILINK_REG(echoref, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_REF_CP] = {
|
||||
.name = "Kbl Audio Reference cap",
|
||||
.stream_name = "Wake on Voice",
|
||||
.cpu_dai_name = "Reference Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = NULL,
|
||||
.dpcm_capture = 1,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
.ops = &skylake_refcap_ops,
|
||||
SND_SOC_DAILINK_REG(reference, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_DMIC_CP] = {
|
||||
.name = "Kbl Audio DMIC cap",
|
||||
.stream_name = "dmiccap",
|
||||
.cpu_dai_name = "DMIC Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = NULL,
|
||||
.dpcm_capture = 1,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
.ops = &kabylake_dmic_ops,
|
||||
SND_SOC_DAILINK_REG(dmic, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_HDMI1_PB] = {
|
||||
.name = "Kbl HDMI Port1",
|
||||
.stream_name = "Hdmi1",
|
||||
.cpu_dai_name = "HDMI1 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi1, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_HDMI2_PB] = {
|
||||
.name = "Kbl HDMI Port2",
|
||||
.stream_name = "Hdmi2",
|
||||
.cpu_dai_name = "HDMI2 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi2, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_HDMI3_PB] = {
|
||||
.name = "Kbl HDMI Port3",
|
||||
.stream_name = "Hdmi3",
|
||||
.cpu_dai_name = "HDMI3 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi3, dummy, platform),
|
||||
},
|
||||
|
||||
/* Back End DAI links */
|
||||
@@ -884,11 +918,7 @@ static struct snd_soc_dai_link kabylake_max98_927_373_dais[] = {
|
||||
/* SSP0 - Codec */
|
||||
.name = "SSP0-Codec",
|
||||
.id = 0,
|
||||
.cpu_dai_name = "SSP0 Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.no_pcm = 1,
|
||||
.codecs = max98927_ssp0_codec_components,
|
||||
.num_codecs = ARRAY_SIZE(max98927_ssp0_codec_components),
|
||||
.dai_fmt = SND_SOC_DAIFMT_DSP_B |
|
||||
SND_SOC_DAIFMT_NB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS,
|
||||
@@ -897,52 +927,41 @@ static struct snd_soc_dai_link kabylake_max98_927_373_dais[] = {
|
||||
.ignore_pmdown_time = 1,
|
||||
.be_hw_params_fixup = kabylake_ssp_fixup,
|
||||
.ops = &kabylake_ssp0_ops,
|
||||
SND_SOC_DAILINK_REG(ssp0_pin, ssp0_codec),
|
||||
},
|
||||
{
|
||||
.name = "dmic01",
|
||||
.id = 1,
|
||||
.cpu_dai_name = "DMIC01 Pin",
|
||||
.codec_name = "dmic-codec",
|
||||
.codec_dai_name = "dmic-hifi",
|
||||
.init = kabylake_dmic_init,
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.be_hw_params_fixup = kabylake_dmic_fixup,
|
||||
.ignore_suspend = 1,
|
||||
.dpcm_capture = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(dmic_pin, dmic_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp1",
|
||||
.id = 2,
|
||||
.cpu_dai_name = "iDisp1 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi1",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = kabylake_hdmi1_init,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp1_pin, idisp1_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp2",
|
||||
.id = 3,
|
||||
.cpu_dai_name = "iDisp2 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi2",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = kabylake_hdmi2_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp2_pin, idisp2_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp3",
|
||||
.id = 4,
|
||||
.cpu_dai_name = "iDisp3 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi3",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = kabylake_hdmi3_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp3_pin, idisp3_codec, platform),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -950,6 +969,7 @@ static int kabylake_card_late_probe(struct snd_soc_card *card)
|
||||
{
|
||||
struct kbl_codec_private *ctx = snd_soc_card_get_drvdata(card);
|
||||
struct kbl_hdmi_pcm *pcm;
|
||||
struct snd_soc_dapm_context *dapm = &card->dapm;
|
||||
struct snd_soc_component *component = NULL;
|
||||
int err, i = 0;
|
||||
char jack_name[NAME_SIZE];
|
||||
@@ -976,9 +996,25 @@ static int kabylake_card_late_probe(struct snd_soc_card *card)
|
||||
if (!component)
|
||||
return -EINVAL;
|
||||
|
||||
return hdac_hdmi_jack_port_init(component, &card->dapm);
|
||||
|
||||
return 0;
|
||||
err = hdac_hdmi_jack_port_init(component, &card->dapm);
|
||||
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
err = snd_soc_dapm_disable_pin(dapm, "Left Spk");
|
||||
if (err) {
|
||||
dev_err(card->dev, "failed to disable Left Spk: %d\n", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
err = snd_soc_dapm_disable_pin(dapm, "Right Spk");
|
||||
if (err) {
|
||||
dev_err(card->dev, "failed to disable Right Spk: %d\n", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
return snd_soc_dapm_sync(dapm);
|
||||
}
|
||||
|
||||
/* kabylake audio machine driver for SPT + DA7219 */
|
||||
|
@@ -317,78 +317,101 @@ static const struct snd_soc_ops kabylake_rt5660_fe_ops = {
|
||||
.startup = kbl_fe_startup,
|
||||
};
|
||||
|
||||
SND_SOC_DAILINK_DEF(dummy,
|
||||
DAILINK_COMP_ARRAY(COMP_DUMMY()));
|
||||
|
||||
SND_SOC_DAILINK_DEF(system,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("System Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi1,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI1 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi2,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI2 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi3,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI3 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp0_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("SSP0 Pin")));
|
||||
SND_SOC_DAILINK_DEF(ssp0_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("i2c-10EC3277:00", KBL_RT5660_CODEC_DAI)));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp1_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp1 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp1_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi1")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp2_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp2 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp2_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi2")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp3_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp3 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp3_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi3")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(platform,
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("0000:00:1f.3")));
|
||||
|
||||
/* kabylake digital audio interface glue - connects rt5660 codec <--> CPU */
|
||||
static struct snd_soc_dai_link kabylake_rt5660_dais[] = {
|
||||
/* Front End DAI links */
|
||||
[KBL_DPCM_AUDIO_PB] = {
|
||||
.name = "Kbl Audio Port",
|
||||
.stream_name = "Audio",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.nonatomic = 1,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
.ops = &kabylake_rt5660_fe_ops,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_CP] = {
|
||||
.name = "Kbl Audio Capture Port",
|
||||
.stream_name = "Audio Record",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.nonatomic = 1,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_capture = 1,
|
||||
.ops = &kabylake_rt5660_fe_ops,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_HDMI1_PB] = {
|
||||
.name = "Kbl HDMI Port1",
|
||||
.stream_name = "Hdmi1",
|
||||
.cpu_dai_name = "HDMI1 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi1, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_HDMI2_PB] = {
|
||||
.name = "Kbl HDMI Port2",
|
||||
.stream_name = "Hdmi2",
|
||||
.cpu_dai_name = "HDMI2 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi2, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_HDMI3_PB] = {
|
||||
.name = "Kbl HDMI Port3",
|
||||
.stream_name = "Hdmi3",
|
||||
.cpu_dai_name = "HDMI3 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi3, dummy, platform),
|
||||
},
|
||||
|
||||
/* Back End DAI links */
|
||||
@@ -396,11 +419,7 @@ static struct snd_soc_dai_link kabylake_rt5660_dais[] = {
|
||||
/* SSP0 - Codec */
|
||||
.name = "SSP0-Codec",
|
||||
.id = 0,
|
||||
.cpu_dai_name = "SSP0 Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.no_pcm = 1,
|
||||
.codec_name = "i2c-10EC3277:00",
|
||||
.codec_dai_name = KBL_RT5660_CODEC_DAI,
|
||||
.init = kabylake_rt5660_codec_init,
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S |
|
||||
SND_SOC_DAIFMT_NB_NF |
|
||||
@@ -410,39 +429,31 @@ static struct snd_soc_dai_link kabylake_rt5660_dais[] = {
|
||||
.ops = &kabylake_rt5660_ops,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
SND_SOC_DAILINK_REG(ssp0_pin, ssp0_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp1",
|
||||
.id = 1,
|
||||
.cpu_dai_name = "iDisp1 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi1",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = kabylake_hdmi1_init,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp1_pin, idisp1_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp2",
|
||||
.id = 2,
|
||||
.cpu_dai_name = "iDisp2 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi2",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = kabylake_hdmi2_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp2_pin, idisp2_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp3",
|
||||
.id = 3,
|
||||
.cpu_dai_name = "iDisp3 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi3",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = kabylake_hdmi3_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp3_pin, idisp3_codec, platform),
|
||||
},
|
||||
};
|
||||
|
||||
|
@@ -238,17 +238,6 @@ static struct snd_soc_codec_conf max98927_codec_conf[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct snd_soc_dai_link_component max98927_codec_components[] = {
|
||||
{ /* Left */
|
||||
.name = MAXIM_DEV0_NAME,
|
||||
.dai_name = KBL_MAXIM_CODEC_DAI,
|
||||
},
|
||||
{ /* Right */
|
||||
.name = MAXIM_DEV1_NAME,
|
||||
.dai_name = KBL_MAXIM_CODEC_DAI,
|
||||
},
|
||||
};
|
||||
|
||||
static int kabylake_rt5663_fe_init(struct snd_soc_pcm_runtime *rtd)
|
||||
{
|
||||
int ret;
|
||||
@@ -582,127 +571,163 @@ static struct snd_soc_ops skylake_refcap_ops = {
|
||||
.startup = kabylake_refcap_startup,
|
||||
};
|
||||
|
||||
SND_SOC_DAILINK_DEF(dummy,
|
||||
DAILINK_COMP_ARRAY(COMP_DUMMY()));
|
||||
|
||||
SND_SOC_DAILINK_DEF(system,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("System Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(system2,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("System Pin2")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(echoref,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("Echoref Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(reference,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("Reference Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("DMIC Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi1,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI1 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi2,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI2 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi3,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI3 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp0_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("SSP0 Pin")));
|
||||
SND_SOC_DAILINK_DEF(ssp0_codec,
|
||||
DAILINK_COMP_ARRAY(
|
||||
/* Left */ COMP_CODEC(MAXIM_DEV0_NAME, KBL_MAXIM_CODEC_DAI),
|
||||
/* Right */ COMP_CODEC(MAXIM_DEV1_NAME, KBL_MAXIM_CODEC_DAI)));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp1_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("SSP1 Pin")));
|
||||
SND_SOC_DAILINK_DEF(ssp1_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("i2c-10EC5663:00",
|
||||
KBL_REALTEK_CODEC_DAI)));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic01_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("DMIC01 Pin")));
|
||||
SND_SOC_DAILINK_DEF(dmic_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("dmic-codec", "dmic-hifi")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp1_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp1 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp1_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi1")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp2_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp2 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp2_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi2")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp3_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp3 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp3_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi3")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(platform,
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("0000:00:1f.3")));
|
||||
|
||||
/* kabylake digital audio interface glue - connects codec <--> CPU */
|
||||
static struct snd_soc_dai_link kabylake_dais[] = {
|
||||
/* Front End DAI links */
|
||||
[KBL_DPCM_AUDIO_PB] = {
|
||||
.name = "Kbl Audio Port",
|
||||
.stream_name = "Audio",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.nonatomic = 1,
|
||||
.init = kabylake_rt5663_fe_init,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
.ops = &kabylake_rt5663_fe_ops,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_CP] = {
|
||||
.name = "Kbl Audio Capture Port",
|
||||
.stream_name = "Audio Record",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.nonatomic = 1,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_capture = 1,
|
||||
.ops = &kabylake_rt5663_fe_ops,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_HS_PB] = {
|
||||
.name = "Kbl Audio Headset Playback",
|
||||
.stream_name = "Headset Audio",
|
||||
.cpu_dai_name = "System Pin2",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(system2, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_ECHO_REF_CP] = {
|
||||
.name = "Kbl Audio Echo Reference cap",
|
||||
.stream_name = "Echoreference Capture",
|
||||
.cpu_dai_name = "Echoref Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = NULL,
|
||||
.capture_only = 1,
|
||||
.nonatomic = 1,
|
||||
SND_SOC_DAILINK_REG(echoref, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_REF_CP] = {
|
||||
.name = "Kbl Audio Reference cap",
|
||||
.stream_name = "Wake on Voice",
|
||||
.cpu_dai_name = "Reference Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = NULL,
|
||||
.dpcm_capture = 1,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
.ops = &skylake_refcap_ops,
|
||||
SND_SOC_DAILINK_REG(reference, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_DMIC_CP] = {
|
||||
.name = "Kbl Audio DMIC cap",
|
||||
.stream_name = "dmiccap",
|
||||
.cpu_dai_name = "DMIC Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = NULL,
|
||||
.dpcm_capture = 1,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
.ops = &kabylake_dmic_ops,
|
||||
SND_SOC_DAILINK_REG(dmic, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_HDMI1_PB] = {
|
||||
.name = "Kbl HDMI Port1",
|
||||
.stream_name = "Hdmi1",
|
||||
.cpu_dai_name = "HDMI1 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi1, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_HDMI2_PB] = {
|
||||
.name = "Kbl HDMI Port2",
|
||||
.stream_name = "Hdmi2",
|
||||
.cpu_dai_name = "HDMI2 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi2, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_HDMI3_PB] = {
|
||||
.name = "Kbl HDMI Port3",
|
||||
.stream_name = "Hdmi3",
|
||||
.cpu_dai_name = "HDMI3 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi3, dummy, platform),
|
||||
},
|
||||
|
||||
/* Back End DAI links */
|
||||
@@ -710,11 +735,7 @@ static struct snd_soc_dai_link kabylake_dais[] = {
|
||||
/* SSP0 - Codec */
|
||||
.name = "SSP0-Codec",
|
||||
.id = 0,
|
||||
.cpu_dai_name = "SSP0 Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.no_pcm = 1,
|
||||
.codecs = max98927_codec_components,
|
||||
.num_codecs = ARRAY_SIZE(max98927_codec_components),
|
||||
.dai_fmt = SND_SOC_DAIFMT_DSP_B |
|
||||
SND_SOC_DAIFMT_NB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS,
|
||||
@@ -722,16 +743,13 @@ static struct snd_soc_dai_link kabylake_dais[] = {
|
||||
.be_hw_params_fixup = kabylake_ssp_fixup,
|
||||
.dpcm_playback = 1,
|
||||
.ops = &kabylake_ssp0_ops,
|
||||
SND_SOC_DAILINK_REG(ssp0_pin, ssp0_codec, platform),
|
||||
},
|
||||
{
|
||||
/* SSP1 - Codec */
|
||||
.name = "SSP1-Codec",
|
||||
.id = 1,
|
||||
.cpu_dai_name = "SSP1 Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.no_pcm = 1,
|
||||
.codec_name = "i2c-10EC5663:00",
|
||||
.codec_dai_name = KBL_REALTEK_CODEC_DAI,
|
||||
.init = kabylake_rt5663_max98927_codec_init,
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS,
|
||||
@@ -740,51 +758,40 @@ static struct snd_soc_dai_link kabylake_dais[] = {
|
||||
.ops = &kabylake_rt5663_ops,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
SND_SOC_DAILINK_REG(ssp1_pin, ssp1_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "dmic01",
|
||||
.id = 2,
|
||||
.cpu_dai_name = "DMIC01 Pin",
|
||||
.codec_name = "dmic-codec",
|
||||
.codec_dai_name = "dmic-hifi",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.be_hw_params_fixup = kabylake_dmic_fixup,
|
||||
.ignore_suspend = 1,
|
||||
.dpcm_capture = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(dmic01_pin, dmic_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp1",
|
||||
.id = 3,
|
||||
.cpu_dai_name = "iDisp1 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi1",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = kabylake_hdmi1_init,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp1_pin, idisp1_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp2",
|
||||
.id = 4,
|
||||
.cpu_dai_name = "iDisp2 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi2",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = kabylake_hdmi2_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp2_pin, idisp2_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp3",
|
||||
.id = 5,
|
||||
.cpu_dai_name = "iDisp3 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi3",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = kabylake_hdmi3_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp3_pin, idisp3_codec, platform),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -793,58 +800,46 @@ static struct snd_soc_dai_link kabylake_5663_dais[] = {
|
||||
[KBL_DPCM_AUDIO_5663_PB] = {
|
||||
.name = "Kbl Audio Port",
|
||||
.stream_name = "Audio",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.nonatomic = 1,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
.ops = &kabylake_rt5663_fe_ops,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_5663_CP] = {
|
||||
.name = "Kbl Audio Capture Port",
|
||||
.stream_name = "Audio Record",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.nonatomic = 1,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_capture = 1,
|
||||
.ops = &kabylake_rt5663_fe_ops,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_5663_HDMI1_PB] = {
|
||||
.name = "Kbl HDMI Port1",
|
||||
.stream_name = "Hdmi1",
|
||||
.cpu_dai_name = "HDMI1 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi1, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_5663_HDMI2_PB] = {
|
||||
.name = "Kbl HDMI Port2",
|
||||
.stream_name = "Hdmi2",
|
||||
.cpu_dai_name = "HDMI2 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi2, dummy, platform),
|
||||
},
|
||||
|
||||
/* Back End DAI links */
|
||||
@@ -852,11 +847,7 @@ static struct snd_soc_dai_link kabylake_5663_dais[] = {
|
||||
/* SSP1 - Codec */
|
||||
.name = "SSP1-Codec",
|
||||
.id = 0,
|
||||
.cpu_dai_name = "SSP1 Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.no_pcm = 1,
|
||||
.codec_name = "i2c-10EC5663:00",
|
||||
.codec_dai_name = KBL_REALTEK_CODEC_DAI,
|
||||
.init = kabylake_rt5663_codec_init,
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS,
|
||||
@@ -865,28 +856,23 @@ static struct snd_soc_dai_link kabylake_5663_dais[] = {
|
||||
.ops = &kabylake_rt5663_ops,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
SND_SOC_DAILINK_REG(ssp1_pin, ssp1_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp1",
|
||||
.id = 1,
|
||||
.cpu_dai_name = "iDisp1 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi1",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = kabylake_5663_hdmi1_init,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp1_pin, idisp1_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp2",
|
||||
.id = 2,
|
||||
.cpu_dai_name = "iDisp2 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi2",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = kabylake_5663_hdmi2_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp2_pin, idisp2_codec, platform),
|
||||
},
|
||||
};
|
||||
|
||||
|
@@ -137,20 +137,6 @@ static struct snd_soc_codec_conf max98927_codec_conf[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct snd_soc_dai_link_component ssp0_codec_components[] = {
|
||||
{ /* Left */
|
||||
.name = MAXIM_DEV0_NAME,
|
||||
.dai_name = KBL_MAXIM_CODEC_DAI,
|
||||
},
|
||||
{ /* Right */
|
||||
.name = MAXIM_DEV1_NAME,
|
||||
.dai_name = KBL_MAXIM_CODEC_DAI,
|
||||
},
|
||||
{ /*dmic */
|
||||
.name = RT5514_DEV_NAME,
|
||||
.dai_name = KBL_REALTEK_DMIC_CODEC_DAI,
|
||||
},
|
||||
};
|
||||
|
||||
static int kabylake_rt5663_fe_init(struct snd_soc_pcm_runtime *rtd)
|
||||
{
|
||||
@@ -422,108 +408,136 @@ static struct snd_soc_ops kabylake_dmic_ops = {
|
||||
.startup = kabylake_dmic_startup,
|
||||
};
|
||||
|
||||
SND_SOC_DAILINK_DEF(dummy,
|
||||
DAILINK_COMP_ARRAY(COMP_DUMMY()));
|
||||
|
||||
SND_SOC_DAILINK_DEF(system,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("System Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(system2,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("System Pin2")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(echoref,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("Echoref Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(spi_cpu,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("spi-PRP0001:00")));
|
||||
SND_SOC_DAILINK_DEF(spi_platform,
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("spi-PRP0001:00")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("DMIC Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi1,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI1 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi2,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI2 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp0_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("SSP0 Pin")));
|
||||
SND_SOC_DAILINK_DEF(ssp0_codec,
|
||||
DAILINK_COMP_ARRAY(
|
||||
/* Left */ COMP_CODEC(MAXIM_DEV0_NAME, KBL_MAXIM_CODEC_DAI),
|
||||
/* Right */COMP_CODEC(MAXIM_DEV1_NAME, KBL_MAXIM_CODEC_DAI),
|
||||
/* dmic */ COMP_CODEC(RT5514_DEV_NAME, KBL_REALTEK_DMIC_CODEC_DAI)));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp1_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("SSP1 Pin")));
|
||||
SND_SOC_DAILINK_DEF(ssp1_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC(RT5663_DEV_NAME, KBL_REALTEK_CODEC_DAI)));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp1_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp1 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp1_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi1")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp2_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp2 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp2_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi2")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(platform,
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("0000:00:1f.3")));
|
||||
|
||||
/* kabylake digital audio interface glue - connects codec <--> CPU */
|
||||
static struct snd_soc_dai_link kabylake_dais[] = {
|
||||
/* Front End DAI links */
|
||||
[KBL_DPCM_AUDIO_PB] = {
|
||||
.name = "Kbl Audio Port",
|
||||
.stream_name = "Audio",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.nonatomic = 1,
|
||||
.init = kabylake_rt5663_fe_init,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
.ops = &kabylake_rt5663_fe_ops,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_CP] = {
|
||||
.name = "Kbl Audio Capture Port",
|
||||
.stream_name = "Audio Record",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.nonatomic = 1,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_capture = 1,
|
||||
.ops = &kabylake_rt5663_fe_ops,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_HS_PB] = {
|
||||
.name = "Kbl Audio Headset Playback",
|
||||
.stream_name = "Headset Audio",
|
||||
.cpu_dai_name = "System Pin2",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(system2, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_ECHO_REF_CP] = {
|
||||
.name = "Kbl Audio Echo Reference cap",
|
||||
.stream_name = "Echoreference Capture",
|
||||
.cpu_dai_name = "Echoref Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = NULL,
|
||||
.capture_only = 1,
|
||||
.nonatomic = 1,
|
||||
SND_SOC_DAILINK_REG(echoref, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_RT5514_DSP] = {
|
||||
.name = "rt5514 dsp",
|
||||
.stream_name = "Wake on Voice",
|
||||
.cpu_dai_name = "spi-PRP0001:00",
|
||||
.platform_name = "spi-PRP0001:00",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
SND_SOC_DAILINK_REG(spi_cpu, dummy, spi_platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_DMIC_CP] = {
|
||||
.name = "Kbl Audio DMIC cap",
|
||||
.stream_name = "dmiccap",
|
||||
.cpu_dai_name = "DMIC Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = NULL,
|
||||
.dpcm_capture = 1,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
.ops = &kabylake_dmic_ops,
|
||||
SND_SOC_DAILINK_REG(dmic, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_HDMI1_PB] = {
|
||||
.name = "Kbl HDMI Port1",
|
||||
.stream_name = "Hdmi1",
|
||||
.cpu_dai_name = "HDMI1 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi1, dummy, platform),
|
||||
},
|
||||
[KBL_DPCM_AUDIO_HDMI2_PB] = {
|
||||
.name = "Kbl HDMI Port2",
|
||||
.stream_name = "Hdmi2",
|
||||
.cpu_dai_name = "HDMI2 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi2, dummy, platform),
|
||||
},
|
||||
/* Back End DAI links */
|
||||
/* single Back end dai for both max speakers and dmic */
|
||||
@@ -531,11 +545,7 @@ static struct snd_soc_dai_link kabylake_dais[] = {
|
||||
/* SSP0 - Codec */
|
||||
.name = "SSP0-Codec",
|
||||
.id = 0,
|
||||
.cpu_dai_name = "SSP0 Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.no_pcm = 1,
|
||||
.codecs = ssp0_codec_components,
|
||||
.num_codecs = ARRAY_SIZE(ssp0_codec_components),
|
||||
.dai_fmt = SND_SOC_DAIFMT_DSP_B |
|
||||
SND_SOC_DAIFMT_NB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS,
|
||||
@@ -544,15 +554,12 @@ static struct snd_soc_dai_link kabylake_dais[] = {
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
.ops = &kabylake_ssp0_ops,
|
||||
SND_SOC_DAILINK_REG(ssp0_pin, ssp0_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "SSP1-Codec",
|
||||
.id = 1,
|
||||
.cpu_dai_name = "SSP1 Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.no_pcm = 1,
|
||||
.codec_name = RT5663_DEV_NAME,
|
||||
.codec_dai_name = KBL_REALTEK_CODEC_DAI,
|
||||
.init = kabylake_rt5663_codec_init,
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS,
|
||||
@@ -561,28 +568,23 @@ static struct snd_soc_dai_link kabylake_dais[] = {
|
||||
.ops = &kabylake_rt5663_ops,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
SND_SOC_DAILINK_REG(ssp1_pin, ssp1_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp1",
|
||||
.id = 3,
|
||||
.cpu_dai_name = "iDisp1 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi1",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = kabylake_hdmi1_init,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp1_pin, idisp1_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp2",
|
||||
.id = 4,
|
||||
.cpu_dai_name = "iDisp2 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi2",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = kabylake_hdmi2_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp2_pin, idisp2_codec, platform),
|
||||
},
|
||||
};
|
||||
|
||||
|
@@ -12,7 +12,6 @@
|
||||
#include <sound/pcm_params.h>
|
||||
#include <sound/soc.h>
|
||||
#include "../../codecs/hdac_hdmi.h"
|
||||
#include "../skylake/skl.h"
|
||||
#include "skl_hda_dsp_common.h"
|
||||
|
||||
#define NAME_SIZE 32
|
||||
@@ -39,77 +38,93 @@ int skl_hda_hdmi_add_pcm(struct snd_soc_card *card, int device)
|
||||
return 0;
|
||||
}
|
||||
|
||||
SND_SOC_DAILINK_DEFS(idisp1,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp1 Pin")),
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi1")));
|
||||
|
||||
SND_SOC_DAILINK_DEFS(idisp2,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp2 Pin")),
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi2")));
|
||||
|
||||
SND_SOC_DAILINK_DEFS(idisp3,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp3 Pin")),
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi3")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(analog_cpu,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("Analog CPU DAI")));
|
||||
SND_SOC_DAILINK_DEF(analog_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D0", "Analog Codec DAI")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(digital_cpu,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("Digital CPU DAI")));
|
||||
SND_SOC_DAILINK_DEF(digital_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D0", "Digital Codec DAI")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("DMIC01 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("dmic-codec", "dmic-hifi")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic16k,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("DMIC16k Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(platform,
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("0000:00:1f.3")));
|
||||
|
||||
/* skl_hda_digital audio interface glue - connects codec <--> CPU */
|
||||
struct snd_soc_dai_link skl_hda_be_dai_links[HDA_DSP_MAX_BE_DAI_LINKS] = {
|
||||
/* Back End DAI links */
|
||||
{
|
||||
.name = "iDisp1",
|
||||
.id = 1,
|
||||
.cpu_dai_name = "iDisp1 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi1",
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp1),
|
||||
},
|
||||
{
|
||||
.name = "iDisp2",
|
||||
.id = 2,
|
||||
.cpu_dai_name = "iDisp2 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi2",
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp2),
|
||||
},
|
||||
{
|
||||
.name = "iDisp3",
|
||||
.id = 3,
|
||||
.cpu_dai_name = "iDisp3 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi3",
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp3),
|
||||
},
|
||||
{
|
||||
.name = "Analog Playback and Capture",
|
||||
.id = 4,
|
||||
.cpu_dai_name = "Analog CPU DAI",
|
||||
.codec_name = "ehdaudio0D0",
|
||||
.codec_dai_name = "Analog Codec DAI",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(analog_cpu, analog_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "Digital Playback and Capture",
|
||||
.id = 5,
|
||||
.cpu_dai_name = "Digital CPU DAI",
|
||||
.codec_name = "ehdaudio0D0",
|
||||
.codec_dai_name = "Digital Codec DAI",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(digital_cpu, digital_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "dmic01",
|
||||
.id = 6,
|
||||
.cpu_dai_name = "DMIC01 Pin",
|
||||
.codec_name = "dmic-codec",
|
||||
.codec_dai_name = "dmic-hifi",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_capture = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(dmic_pin, dmic_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "dmic16k",
|
||||
.id = 7,
|
||||
.cpu_dai_name = "DMIC16k Pin",
|
||||
.codec_name = "dmic-codec",
|
||||
.codec_dai_name = "dmic-hifi",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_capture = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(dmic16k, dmic_codec, platform),
|
||||
},
|
||||
};
|
||||
|
||||
|
@@ -69,7 +69,7 @@ skl_hda_add_dai_link(struct snd_soc_card *card, struct snd_soc_dai_link *link)
|
||||
int ret = 0;
|
||||
|
||||
dev_dbg(card->dev, "%s: dai link name - %s\n", __func__, link->name);
|
||||
link->platform_name = ctx->platform_name;
|
||||
link->platforms->name = ctx->platform_name;
|
||||
link->nonatomic = 1;
|
||||
|
||||
if (strstr(link->name, "HDMI")) {
|
||||
@@ -142,7 +142,7 @@ static int skl_hda_fill_card_info(struct snd_soc_acpi_mach_params *mach_params)
|
||||
card->num_dapm_routes = num_route;
|
||||
|
||||
for_each_card_prelinks(card, i, dai_link)
|
||||
dai_link->platform_name = mach_params->platform;
|
||||
dai_link->platforms->name = mach_params->platform;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -396,105 +396,139 @@ static const struct snd_soc_ops skylake_refcap_ops = {
|
||||
.startup = skylake_refcap_startup,
|
||||
};
|
||||
|
||||
SND_SOC_DAILINK_DEF(dummy,
|
||||
DAILINK_COMP_ARRAY(COMP_DUMMY()));
|
||||
|
||||
SND_SOC_DAILINK_DEF(system,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("System Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(reference,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("Reference Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("DMIC Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi1,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI1 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi2,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI2 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi3,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI3 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp0_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("SSP0 Pin")));
|
||||
SND_SOC_DAILINK_DEF(ssp0_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("MX98357A:00", SKL_MAXIM_CODEC_DAI)));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp1_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("SSP1 Pin")));
|
||||
SND_SOC_DAILINK_DEF(ssp1_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("i2c-10508825:00",
|
||||
SKL_NUVOTON_CODEC_DAI)));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("DMIC01 Pin")));
|
||||
SND_SOC_DAILINK_DEF(dmic_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("dmic-codec", "dmic-hifi")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp1_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp1 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp1_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi1")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp2_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp2 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp2_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi2")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp3_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp3 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp3_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi3")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(platform,
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("0000:00:1f.3")));
|
||||
|
||||
/* skylake digital audio interface glue - connects codec <--> CPU */
|
||||
static struct snd_soc_dai_link skylake_dais[] = {
|
||||
/* Front End DAI links */
|
||||
[SKL_DPCM_AUDIO_PB] = {
|
||||
.name = "Skl Audio Port",
|
||||
.stream_name = "Audio",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.nonatomic = 1,
|
||||
.init = skylake_nau8825_fe_init,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
.ops = &skylake_nau8825_fe_ops,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
[SKL_DPCM_AUDIO_CP] = {
|
||||
.name = "Skl Audio Capture Port",
|
||||
.stream_name = "Audio Record",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.nonatomic = 1,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_capture = 1,
|
||||
.ops = &skylake_nau8825_fe_ops,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
[SKL_DPCM_AUDIO_REF_CP] = {
|
||||
.name = "Skl Audio Reference cap",
|
||||
.stream_name = "Wake on Voice",
|
||||
.cpu_dai_name = "Reference Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = NULL,
|
||||
.dpcm_capture = 1,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
.ops = &skylake_refcap_ops,
|
||||
SND_SOC_DAILINK_REG(reference, dummy, platform),
|
||||
},
|
||||
[SKL_DPCM_AUDIO_DMIC_CP] = {
|
||||
.name = "Skl Audio DMIC cap",
|
||||
.stream_name = "dmiccap",
|
||||
.cpu_dai_name = "DMIC Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = NULL,
|
||||
.dpcm_capture = 1,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
.ops = &skylake_dmic_ops,
|
||||
SND_SOC_DAILINK_REG(dmic, dummy, platform),
|
||||
},
|
||||
[SKL_DPCM_AUDIO_HDMI1_PB] = {
|
||||
.name = "Skl HDMI Port1",
|
||||
.stream_name = "Hdmi1",
|
||||
.cpu_dai_name = "HDMI1 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi1, dummy, platform),
|
||||
},
|
||||
[SKL_DPCM_AUDIO_HDMI2_PB] = {
|
||||
.name = "Skl HDMI Port2",
|
||||
.stream_name = "Hdmi2",
|
||||
.cpu_dai_name = "HDMI2 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi2, dummy, platform),
|
||||
},
|
||||
[SKL_DPCM_AUDIO_HDMI3_PB] = {
|
||||
.name = "Skl HDMI Port3",
|
||||
.stream_name = "Hdmi3",
|
||||
.cpu_dai_name = "HDMI3 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi3, dummy, platform),
|
||||
},
|
||||
|
||||
/* Back End DAI links */
|
||||
@@ -502,27 +536,20 @@ static struct snd_soc_dai_link skylake_dais[] = {
|
||||
/* SSP0 - Codec */
|
||||
.name = "SSP0-Codec",
|
||||
.id = 0,
|
||||
.cpu_dai_name = "SSP0 Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.no_pcm = 1,
|
||||
.codec_name = "MX98357A:00",
|
||||
.codec_dai_name = SKL_MAXIM_CODEC_DAI,
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S |
|
||||
SND_SOC_DAIFMT_NB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS,
|
||||
.ignore_pmdown_time = 1,
|
||||
.be_hw_params_fixup = skylake_ssp_fixup,
|
||||
.dpcm_playback = 1,
|
||||
SND_SOC_DAILINK_REG(ssp0_pin, ssp0_codec, platform),
|
||||
},
|
||||
{
|
||||
/* SSP1 - Codec */
|
||||
.name = "SSP1-Codec",
|
||||
.id = 1,
|
||||
.cpu_dai_name = "SSP1 Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.no_pcm = 1,
|
||||
.codec_name = "i2c-10508825:00",
|
||||
.codec_dai_name = SKL_NUVOTON_CODEC_DAI,
|
||||
.init = skylake_nau8825_codec_init,
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS,
|
||||
@@ -531,51 +558,40 @@ static struct snd_soc_dai_link skylake_dais[] = {
|
||||
.ops = &skylake_nau8825_ops,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
SND_SOC_DAILINK_REG(ssp1_pin, ssp1_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "dmic01",
|
||||
.id = 2,
|
||||
.cpu_dai_name = "DMIC01 Pin",
|
||||
.codec_name = "dmic-codec",
|
||||
.codec_dai_name = "dmic-hifi",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.be_hw_params_fixup = skylake_dmic_fixup,
|
||||
.ignore_suspend = 1,
|
||||
.dpcm_capture = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(dmic_pin, dmic_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp1",
|
||||
.id = 3,
|
||||
.cpu_dai_name = "iDisp1 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi1",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = skylake_hdmi1_init,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp1_pin, idisp1_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp2",
|
||||
.id = 4,
|
||||
.cpu_dai_name = "iDisp2 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi2",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = skylake_hdmi2_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp2_pin, idisp2_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp3",
|
||||
.id = 5,
|
||||
.cpu_dai_name = "iDisp3 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi3",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = skylake_hdmi3_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp3_pin, idisp3_codec, platform),
|
||||
},
|
||||
};
|
||||
|
||||
|
@@ -156,17 +156,6 @@ static struct snd_soc_codec_conf ssm4567_codec_conf[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct snd_soc_dai_link_component ssm4567_codec_components[] = {
|
||||
{ /* Left */
|
||||
.name = "i2c-INT343B:00",
|
||||
.dai_name = SKL_SSM_CODEC_DAI,
|
||||
},
|
||||
{ /* Right */
|
||||
.name = "i2c-INT343B:01",
|
||||
.dai_name = SKL_SSM_CODEC_DAI,
|
||||
},
|
||||
};
|
||||
|
||||
static int skylake_ssm4567_codec_init(struct snd_soc_pcm_runtime *rtd)
|
||||
{
|
||||
int ret;
|
||||
@@ -445,105 +434,140 @@ static const struct snd_soc_ops skylake_refcap_ops = {
|
||||
.startup = skylake_refcap_startup,
|
||||
};
|
||||
|
||||
SND_SOC_DAILINK_DEF(dummy,
|
||||
DAILINK_COMP_ARRAY(COMP_DUMMY()));
|
||||
|
||||
SND_SOC_DAILINK_DEF(system,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("System Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(reference,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("Reference Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("DMIC Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi1,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI1 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi2,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI2 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi3,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI3 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp0_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("SSP0 Pin")));
|
||||
SND_SOC_DAILINK_DEF(ssp0_codec,
|
||||
DAILINK_COMP_ARRAY(
|
||||
/* Left */ COMP_CODEC("i2c-INT343B:00", SKL_SSM_CODEC_DAI),
|
||||
/* Right */ COMP_CODEC("i2c-INT343B:01", SKL_SSM_CODEC_DAI)));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp1_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("SSP1 Pin")));
|
||||
SND_SOC_DAILINK_DEF(ssp1_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("i2c-10508825:00", SKL_NUVOTON_CODEC_DAI)));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic01_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("DMIC01 Pin")));
|
||||
SND_SOC_DAILINK_DEF(dmic_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("dmic-codec", "dmic-hifi")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp1_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp1 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp1_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi1")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp2_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp2 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp2_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi2")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp3_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp3 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp3_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi3")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(platform,
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("0000:00:1f.3")));
|
||||
|
||||
/* skylake digital audio interface glue - connects codec <--> CPU */
|
||||
static struct snd_soc_dai_link skylake_dais[] = {
|
||||
/* Front End DAI links */
|
||||
[SKL_DPCM_AUDIO_PB] = {
|
||||
.name = "Skl Audio Port",
|
||||
.stream_name = "Audio",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.nonatomic = 1,
|
||||
.init = skylake_nau8825_fe_init,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
.ops = &skylake_nau8825_fe_ops,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
[SKL_DPCM_AUDIO_CP] = {
|
||||
.name = "Skl Audio Capture Port",
|
||||
.stream_name = "Audio Record",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.nonatomic = 1,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_capture = 1,
|
||||
.ops = &skylake_nau8825_fe_ops,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
[SKL_DPCM_AUDIO_REF_CP] = {
|
||||
.name = "Skl Audio Reference cap",
|
||||
.stream_name = "Wake on Voice",
|
||||
.cpu_dai_name = "Reference Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = NULL,
|
||||
.dpcm_capture = 1,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
.ops = &skylake_refcap_ops,
|
||||
SND_SOC_DAILINK_REG(reference, dummy, platform),
|
||||
},
|
||||
[SKL_DPCM_AUDIO_DMIC_CP] = {
|
||||
.name = "Skl Audio DMIC cap",
|
||||
.stream_name = "dmiccap",
|
||||
.cpu_dai_name = "DMIC Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = NULL,
|
||||
.dpcm_capture = 1,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
.ops = &skylake_dmic_ops,
|
||||
SND_SOC_DAILINK_REG(dmic, dummy, platform),
|
||||
},
|
||||
[SKL_DPCM_AUDIO_HDMI1_PB] = {
|
||||
.name = "Skl HDMI Port1",
|
||||
.stream_name = "Hdmi1",
|
||||
.cpu_dai_name = "HDMI1 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi1, dummy, platform),
|
||||
},
|
||||
[SKL_DPCM_AUDIO_HDMI2_PB] = {
|
||||
.name = "Skl HDMI Port2",
|
||||
.stream_name = "Hdmi2",
|
||||
.cpu_dai_name = "HDMI2 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi2, dummy, platform),
|
||||
},
|
||||
[SKL_DPCM_AUDIO_HDMI3_PB] = {
|
||||
.name = "Skl HDMI Port3",
|
||||
.stream_name = "Hdmi3",
|
||||
.cpu_dai_name = "HDMI3 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi3, dummy, platform),
|
||||
},
|
||||
|
||||
/* Back End DAI links */
|
||||
@@ -551,11 +575,7 @@ static struct snd_soc_dai_link skylake_dais[] = {
|
||||
/* SSP0 - Codec */
|
||||
.name = "SSP0-Codec",
|
||||
.id = 0,
|
||||
.cpu_dai_name = "SSP0 Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.no_pcm = 1,
|
||||
.codecs = ssm4567_codec_components,
|
||||
.num_codecs = ARRAY_SIZE(ssm4567_codec_components),
|
||||
.dai_fmt = SND_SOC_DAIFMT_DSP_A |
|
||||
SND_SOC_DAIFMT_IB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS,
|
||||
@@ -564,16 +584,13 @@ static struct snd_soc_dai_link skylake_dais[] = {
|
||||
.be_hw_params_fixup = skylake_ssp_fixup,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
SND_SOC_DAILINK_REG(ssp0_pin, ssp0_codec, platform),
|
||||
},
|
||||
{
|
||||
/* SSP1 - Codec */
|
||||
.name = "SSP1-Codec",
|
||||
.id = 1,
|
||||
.cpu_dai_name = "SSP1 Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.no_pcm = 1,
|
||||
.codec_name = "i2c-10508825:00",
|
||||
.codec_dai_name = SKL_NUVOTON_CODEC_DAI,
|
||||
.init = skylake_nau8825_codec_init,
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS,
|
||||
@@ -582,51 +599,40 @@ static struct snd_soc_dai_link skylake_dais[] = {
|
||||
.ops = &skylake_nau8825_ops,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
SND_SOC_DAILINK_REG(ssp1_pin, ssp1_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "dmic01",
|
||||
.id = 2,
|
||||
.cpu_dai_name = "DMIC01 Pin",
|
||||
.codec_name = "dmic-codec",
|
||||
.codec_dai_name = "dmic-hifi",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.ignore_suspend = 1,
|
||||
.be_hw_params_fixup = skylake_dmic_fixup,
|
||||
.dpcm_capture = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(dmic01_pin, dmic_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp1",
|
||||
.id = 3,
|
||||
.cpu_dai_name = "iDisp1 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi1",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = skylake_hdmi1_init,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp1_pin, idisp1_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp2",
|
||||
.id = 4,
|
||||
.cpu_dai_name = "iDisp2 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi2",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = skylake_hdmi2_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp2_pin, idisp2_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp3",
|
||||
.id = 5,
|
||||
.cpu_dai_name = "iDisp3 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi3",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = skylake_hdmi3_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp3_pin, idisp3_codec, platform),
|
||||
},
|
||||
};
|
||||
|
||||
|
@@ -283,18 +283,66 @@ static const struct snd_soc_ops skylake_dmic_ops = {
|
||||
.startup = skylake_dmic_startup,
|
||||
};
|
||||
|
||||
SND_SOC_DAILINK_DEF(dummy,
|
||||
DAILINK_COMP_ARRAY(COMP_DUMMY()));
|
||||
|
||||
SND_SOC_DAILINK_DEF(system,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("System Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(deepbuffer,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("Deepbuffer Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(reference,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("Reference Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("DMIC Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi1,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI1 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi2,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI2 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(hdmi3,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("HDMI3 Pin")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(ssp0_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("SSP0 Pin")));
|
||||
SND_SOC_DAILINK_DEF(ssp0_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("i2c-INT343A:00", "rt286-aif1")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(dmic01_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("DMIC01 Pin")));
|
||||
SND_SOC_DAILINK_DEF(dmic_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("dmic-codec", "dmic-hifi")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp1_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp1 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp1_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi1")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp2_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp2 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp2_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi2")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(idisp3_pin,
|
||||
DAILINK_COMP_ARRAY(COMP_CPU("iDisp3 Pin")));
|
||||
SND_SOC_DAILINK_DEF(idisp3_codec,
|
||||
DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi3")));
|
||||
|
||||
SND_SOC_DAILINK_DEF(platform,
|
||||
DAILINK_COMP_ARRAY(COMP_PLATFORM("0000:00:1f.3")));
|
||||
|
||||
/* skylake digital audio interface glue - connects codec <--> CPU */
|
||||
static struct snd_soc_dai_link skylake_rt286_dais[] = {
|
||||
/* Front End DAI links */
|
||||
[SKL_DPCM_AUDIO_PB] = {
|
||||
.name = "Skl Audio Port",
|
||||
.stream_name = "Audio",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.init = skylake_rt286_fe_init,
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST,
|
||||
@@ -302,100 +350,79 @@ static struct snd_soc_dai_link skylake_rt286_dais[] = {
|
||||
},
|
||||
.dpcm_playback = 1,
|
||||
.ops = &skylake_rt286_fe_ops,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
[SKL_DPCM_AUDIO_DB_PB] = {
|
||||
.name = "Skl Deepbuffer Port",
|
||||
.stream_name = "Deep Buffer Audio",
|
||||
.cpu_dai_name = "Deepbuffer Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST,
|
||||
SND_SOC_DPCM_TRIGGER_POST
|
||||
},
|
||||
.dpcm_playback = 1,
|
||||
.ops = &skylake_rt286_fe_ops,
|
||||
|
||||
SND_SOC_DAILINK_REG(deepbuffer, dummy, platform),
|
||||
},
|
||||
[SKL_DPCM_AUDIO_CP] = {
|
||||
.name = "Skl Audio Capture Port",
|
||||
.stream_name = "Audio Record",
|
||||
.cpu_dai_name = "System Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.trigger = {
|
||||
SND_SOC_DPCM_TRIGGER_POST,
|
||||
SND_SOC_DPCM_TRIGGER_POST
|
||||
},
|
||||
.dpcm_capture = 1,
|
||||
.ops = &skylake_rt286_fe_ops,
|
||||
SND_SOC_DAILINK_REG(system, dummy, platform),
|
||||
},
|
||||
[SKL_DPCM_AUDIO_REF_CP] = {
|
||||
.name = "Skl Audio Reference cap",
|
||||
.stream_name = "refcap",
|
||||
.cpu_dai_name = "Reference Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = NULL,
|
||||
.dpcm_capture = 1,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(reference, dummy, platform),
|
||||
},
|
||||
[SKL_DPCM_AUDIO_DMIC_CP] = {
|
||||
.name = "Skl Audio DMIC cap",
|
||||
.stream_name = "dmiccap",
|
||||
.cpu_dai_name = "DMIC Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = NULL,
|
||||
.dpcm_capture = 1,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
.ops = &skylake_dmic_ops,
|
||||
SND_SOC_DAILINK_REG(dmic, dummy, platform),
|
||||
},
|
||||
[SKL_DPCM_AUDIO_HDMI1_PB] = {
|
||||
.name = "Skl HDMI Port1",
|
||||
.stream_name = "Hdmi1",
|
||||
.cpu_dai_name = "HDMI1 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi1, dummy, platform),
|
||||
},
|
||||
[SKL_DPCM_AUDIO_HDMI2_PB] = {
|
||||
.name = "Skl HDMI Port2",
|
||||
.stream_name = "Hdmi2",
|
||||
.cpu_dai_name = "HDMI2 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi2, dummy, platform),
|
||||
},
|
||||
[SKL_DPCM_AUDIO_HDMI3_PB] = {
|
||||
.name = "Skl HDMI Port3",
|
||||
.stream_name = "Hdmi3",
|
||||
.cpu_dai_name = "HDMI3 Pin",
|
||||
.codec_name = "snd-soc-dummy",
|
||||
.codec_dai_name = "snd-soc-dummy-dai",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.dpcm_playback = 1,
|
||||
.init = NULL,
|
||||
.nonatomic = 1,
|
||||
.dynamic = 1,
|
||||
SND_SOC_DAILINK_REG(hdmi3, dummy, platform),
|
||||
},
|
||||
|
||||
/* Back End DAI links */
|
||||
@@ -403,11 +430,7 @@ static struct snd_soc_dai_link skylake_rt286_dais[] = {
|
||||
/* SSP0 - Codec */
|
||||
.name = "SSP0-Codec",
|
||||
.id = 0,
|
||||
.cpu_dai_name = "SSP0 Pin",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.no_pcm = 1,
|
||||
.codec_name = "i2c-INT343A:00",
|
||||
.codec_dai_name = "rt286-aif1",
|
||||
.init = skylake_rt286_codec_init,
|
||||
.dai_fmt = SND_SOC_DAIFMT_I2S |
|
||||
SND_SOC_DAIFMT_NB_NF |
|
||||
@@ -417,51 +440,40 @@ static struct snd_soc_dai_link skylake_rt286_dais[] = {
|
||||
.ops = &skylake_rt286_ops,
|
||||
.dpcm_playback = 1,
|
||||
.dpcm_capture = 1,
|
||||
SND_SOC_DAILINK_REG(ssp0_pin, ssp0_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "dmic01",
|
||||
.id = 1,
|
||||
.cpu_dai_name = "DMIC01 Pin",
|
||||
.codec_name = "dmic-codec",
|
||||
.codec_dai_name = "dmic-hifi",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.be_hw_params_fixup = skylake_dmic_fixup,
|
||||
.ignore_suspend = 1,
|
||||
.dpcm_capture = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(dmic01_pin, dmic_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp1",
|
||||
.id = 2,
|
||||
.cpu_dai_name = "iDisp1 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi1",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = skylake_hdmi_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp1_pin, idisp1_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp2",
|
||||
.id = 3,
|
||||
.cpu_dai_name = "iDisp2 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi2",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = skylake_hdmi_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp2_pin, idisp2_codec, platform),
|
||||
},
|
||||
{
|
||||
.name = "iDisp3",
|
||||
.id = 4,
|
||||
.cpu_dai_name = "iDisp3 Pin",
|
||||
.codec_name = "ehdaudio0D2",
|
||||
.codec_dai_name = "intel-hdmi-hifi3",
|
||||
.platform_name = "0000:00:1f.3",
|
||||
.init = skylake_hdmi_init,
|
||||
.dpcm_playback = 1,
|
||||
.no_pcm = 1,
|
||||
SND_SOC_DAILINK_REG(idisp3_pin, idisp3_codec, platform),
|
||||
},
|
||||
};
|
||||
|
||||
|
@@ -9,9 +9,8 @@
|
||||
#include <linux/input.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/dmi.h>
|
||||
#include <asm/cpu_device_id.h>
|
||||
#include <asm/intel-family.h>
|
||||
#include <sound/core.h>
|
||||
#include <sound/jack.h>
|
||||
#include <sound/pcm.h>
|
||||
@@ -21,6 +20,7 @@
|
||||
#include <sound/soc-acpi.h>
|
||||
#include "../../codecs/rt5682.h"
|
||||
#include "../../codecs/hdac_hdmi.h"
|
||||
#include "../common/soc-intel-quirks.h"
|
||||
|
||||
#define NAME_SIZE 32
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
#define SOF_RT5682_SSP_AMP_MASK (GENMASK(8, 6))
|
||||
#define SOF_RT5682_SSP_AMP(quirk) \
|
||||
(((quirk) << SOF_RT5682_SSP_AMP_SHIFT) & SOF_RT5682_SSP_AMP_MASK)
|
||||
#define SOF_RT5682_MCLK_BYTCHT_EN BIT(9)
|
||||
|
||||
/* Default: MCLK on, MCLK 19.2M, SSP0 */
|
||||
static unsigned long sof_rt5682_quirk = SOF_RT5682_MCLK_EN |
|
||||
@@ -49,6 +50,7 @@ struct sof_hdmi_pcm {
|
||||
};
|
||||
|
||||
struct sof_card_private {
|
||||
struct clk *mclk;
|
||||
struct snd_soc_jack sof_headset;
|
||||
struct list_head hdmi_pcm_list;
|
||||
};
|
||||
@@ -60,6 +62,22 @@ static int sof_rt5682_quirk_cb(const struct dmi_system_id *id)
|
||||
}
|
||||
|
||||
static const struct dmi_system_id sof_rt5682_quirk_table[] = {
|
||||
{
|
||||
.callback = sof_rt5682_quirk_cb,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Circuitco"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Minnowboard Max"),
|
||||
},
|
||||
.driver_data = (void *)(SOF_RT5682_SSP_CODEC(2)),
|
||||
},
|
||||
{
|
||||
.callback = sof_rt5682_quirk_cb,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "AAEON"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "UP-CHT01"),
|
||||
},
|
||||
.driver_data = (void *)(SOF_RT5682_SSP_CODEC(2)),
|
||||
},
|
||||
{
|
||||
.callback = sof_rt5682_quirk_cb,
|
||||
.matches = {
|
||||
@@ -128,6 +146,27 @@ static int sof_rt5682_codec_init(struct snd_soc_pcm_runtime *rtd)
|
||||
RT5682_CLK_SEL_I2S1_ASRC);
|
||||
}
|
||||
|
||||
if (sof_rt5682_quirk & SOF_RT5682_MCLK_BYTCHT_EN) {
|
||||
/*
|
||||
* The firmware might enable the clock at
|
||||
* boot (this information may or may not
|
||||
* be reflected in the enable clock register).
|
||||
* To change the rate we must disable the clock
|
||||
* first to cover these cases. Due to common
|
||||
* clock framework restrictions that do not allow
|
||||
* to disable a clock that has not been enabled,
|
||||
* we need to enable the clock first.
|
||||
*/
|
||||
ret = clk_prepare_enable(ctx->mclk);
|
||||
if (!ret)
|
||||
clk_disable_unprepare(ctx->mclk);
|
||||
|
||||
ret = clk_set_rate(ctx->mclk, 19200000);
|
||||
|
||||
if (ret)
|
||||
dev_err(rtd->dev, "unable to set MCLK rate\n");
|
||||
}
|
||||
|
||||
/*
|
||||
* Headset buttons map to the google Reference headset.
|
||||
* These can be configured by userspace.
|
||||
@@ -162,10 +201,20 @@ static int sof_rt5682_hw_params(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_hw_params *params)
|
||||
{
|
||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||
struct sof_card_private *ctx = snd_soc_card_get_drvdata(rtd->card);
|
||||
struct snd_soc_dai *codec_dai = rtd->codec_dai;
|
||||
int clk_id, clk_freq, pll_out, ret;
|
||||
|
||||
if (sof_rt5682_quirk & SOF_RT5682_MCLK_EN) {
|
||||
if (sof_rt5682_quirk & SOF_RT5682_MCLK_BYTCHT_EN) {
|
||||
ret = clk_prepare_enable(ctx->mclk);
|
||||
if (ret < 0) {
|
||||
dev_err(rtd->dev,
|
||||
"could not configure MCLK state");
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
clk_id = RT5682_PLL1_S_MCLK;
|
||||
if (sof_rt5682_quirk & SOF_RT5682_MCLK_24MHZ)
|
||||
clk_freq = 24000000;
|
||||
@@ -304,12 +353,6 @@ static struct snd_soc_card sof_audio_card_rt5682 = {
|
||||
.late_probe = sof_card_late_probe,
|
||||
};
|
||||
|
||||
static const struct x86_cpu_id legacy_cpi_ids[] = {
|
||||
{ X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_SILVERMONT }, /* Baytrail */
|
||||
{ X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_AIRMONT }, /* Cherrytrail */
|
||||
{}
|
||||
};
|
||||
|
||||
static struct snd_soc_dai_link_component rt5682_component[] = {
|
||||
{
|
||||
.name = "i2c-10EC5682:00",
|
||||
@@ -334,16 +377,19 @@ static struct snd_soc_dai_link_component max98357a_component[] = {
|
||||
static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
|
||||
int ssp_codec,
|
||||
int ssp_amp,
|
||||
int dmic_num,
|
||||
int dmic_be_num,
|
||||
int hdmi_num)
|
||||
{
|
||||
struct snd_soc_dai_link_component *idisp_components;
|
||||
struct snd_soc_dai_link_component *cpus;
|
||||
struct snd_soc_dai_link *links;
|
||||
int i, id = 0;
|
||||
|
||||
links = devm_kzalloc(dev, sizeof(struct snd_soc_dai_link) *
|
||||
sof_audio_card_rt5682.num_links, GFP_KERNEL);
|
||||
if (!links)
|
||||
cpus = devm_kzalloc(dev, sizeof(struct snd_soc_dai_link_component) *
|
||||
sof_audio_card_rt5682.num_links, GFP_KERNEL);
|
||||
if (!links || !cpus)
|
||||
goto devm_err;
|
||||
|
||||
/* codec SSP */
|
||||
@@ -363,11 +409,13 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
|
||||
links[id].dpcm_playback = 1;
|
||||
links[id].dpcm_capture = 1;
|
||||
links[id].no_pcm = 1;
|
||||
links[id].cpus = &cpus[id];
|
||||
links[id].num_cpus = 1;
|
||||
if (is_legacy_cpu) {
|
||||
links[id].cpu_dai_name = devm_kasprintf(dev, GFP_KERNEL,
|
||||
"ssp%d-port",
|
||||
ssp_codec);
|
||||
if (!links[id].cpu_dai_name)
|
||||
links[id].cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL,
|
||||
"ssp%d-port",
|
||||
ssp_codec);
|
||||
if (!links[id].cpus->dai_name)
|
||||
goto devm_err;
|
||||
} else {
|
||||
/*
|
||||
@@ -380,27 +428,32 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
|
||||
* It can be removed once we can control MCLK by driver.
|
||||
*/
|
||||
links[id].ignore_pmdown_time = 1;
|
||||
links[id].cpu_dai_name = devm_kasprintf(dev, GFP_KERNEL,
|
||||
"SSP%d Pin",
|
||||
ssp_codec);
|
||||
if (!links[id].cpu_dai_name)
|
||||
links[id].cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL,
|
||||
"SSP%d Pin",
|
||||
ssp_codec);
|
||||
if (!links[id].cpus->dai_name)
|
||||
goto devm_err;
|
||||
}
|
||||
id++;
|
||||
|
||||
/* dmic */
|
||||
for (i = 1; i <= dmic_num; i++) {
|
||||
links[id].name = devm_kasprintf(dev, GFP_KERNEL,
|
||||
"dmic%02d", i);
|
||||
if (!links[id].name)
|
||||
goto devm_err;
|
||||
if (dmic_be_num > 0) {
|
||||
/* at least we have dmic01 */
|
||||
links[id].name = "dmic01";
|
||||
links[id].cpus = &cpus[id];
|
||||
links[id].cpus->dai_name = "DMIC01 Pin";
|
||||
if (dmic_be_num > 1) {
|
||||
/* set up 2 BE links at most */
|
||||
links[id + 1].name = "dmic16k";
|
||||
links[id + 1].cpus = &cpus[id + 1];
|
||||
links[id + 1].cpus->dai_name = "DMIC16k Pin";
|
||||
dmic_be_num = 2;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < dmic_be_num; i++) {
|
||||
links[id].id = id;
|
||||
links[id].cpu_dai_name = devm_kasprintf(dev, GFP_KERNEL,
|
||||
"DMIC%02d Pin", i);
|
||||
if (!links[id].cpu_dai_name)
|
||||
goto devm_err;
|
||||
|
||||
links[id].num_cpus = 1;
|
||||
links[id].codecs = dmic_component;
|
||||
links[id].num_codecs = ARRAY_SIZE(dmic_component);
|
||||
links[id].platforms = platform_component;
|
||||
@@ -426,9 +479,11 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
|
||||
goto devm_err;
|
||||
|
||||
links[id].id = id;
|
||||
links[id].cpu_dai_name = devm_kasprintf(dev, GFP_KERNEL,
|
||||
"iDisp%d Pin", i);
|
||||
if (!links[id].cpu_dai_name)
|
||||
links[id].cpus = &cpus[id];
|
||||
links[id].num_cpus = 1;
|
||||
links[id].cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL,
|
||||
"iDisp%d Pin", i);
|
||||
if (!links[id].cpus->dai_name)
|
||||
goto devm_err;
|
||||
|
||||
idisp_components[i - 1].name = "ehdaudio0D2";
|
||||
@@ -465,18 +520,20 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
|
||||
links[id].nonatomic = true;
|
||||
links[id].dpcm_playback = 1;
|
||||
links[id].no_pcm = 1;
|
||||
links[id].cpus = &cpus[id];
|
||||
links[id].num_cpus = 1;
|
||||
if (is_legacy_cpu) {
|
||||
links[id].cpu_dai_name = devm_kasprintf(dev, GFP_KERNEL,
|
||||
"ssp%d-port",
|
||||
ssp_amp);
|
||||
if (!links[id].cpu_dai_name)
|
||||
links[id].cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL,
|
||||
"ssp%d-port",
|
||||
ssp_amp);
|
||||
if (!links[id].cpus->dai_name)
|
||||
goto devm_err;
|
||||
|
||||
} else {
|
||||
links[id].cpu_dai_name = devm_kasprintf(dev, GFP_KERNEL,
|
||||
"SSP%d Pin",
|
||||
ssp_amp);
|
||||
if (!links[id].cpu_dai_name)
|
||||
links[id].cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL,
|
||||
"SSP%d Pin",
|
||||
ssp_amp);
|
||||
if (!links[id].cpus->dai_name)
|
||||
goto devm_err;
|
||||
}
|
||||
}
|
||||
@@ -491,26 +548,39 @@ static int sof_audio_probe(struct platform_device *pdev)
|
||||
struct snd_soc_dai_link *dai_links;
|
||||
struct snd_soc_acpi_mach *mach;
|
||||
struct sof_card_private *ctx;
|
||||
int dmic_num, hdmi_num;
|
||||
int dmic_be_num, hdmi_num;
|
||||
int ret, ssp_amp, ssp_codec;
|
||||
|
||||
ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL);
|
||||
if (!ctx)
|
||||
return -ENOMEM;
|
||||
|
||||
if (x86_match_cpu(legacy_cpi_ids)) {
|
||||
if (soc_intel_is_byt() || soc_intel_is_cht()) {
|
||||
is_legacy_cpu = 1;
|
||||
dmic_num = 0;
|
||||
dmic_be_num = 0;
|
||||
hdmi_num = 0;
|
||||
/* default quirk for legacy cpu */
|
||||
sof_rt5682_quirk = SOF_RT5682_SSP_CODEC(2);
|
||||
sof_rt5682_quirk = SOF_RT5682_MCLK_EN |
|
||||
SOF_RT5682_MCLK_BYTCHT_EN |
|
||||
SOF_RT5682_SSP_CODEC(2);
|
||||
} else {
|
||||
dmic_num = 1;
|
||||
dmic_be_num = 2;
|
||||
hdmi_num = 3;
|
||||
}
|
||||
|
||||
dmi_check_system(sof_rt5682_quirk_table);
|
||||
|
||||
/* need to get main clock from pmc */
|
||||
if (sof_rt5682_quirk & SOF_RT5682_MCLK_BYTCHT_EN) {
|
||||
ctx->mclk = devm_clk_get(&pdev->dev, "pmc_plt_clk_3");
|
||||
ret = clk_prepare_enable(ctx->mclk);
|
||||
if (ret < 0) {
|
||||
dev_err(&pdev->dev,
|
||||
"could not configure MCLK state");
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
dev_dbg(&pdev->dev, "sof_rt5682_quirk = %lx\n", sof_rt5682_quirk);
|
||||
|
||||
ssp_amp = (sof_rt5682_quirk & SOF_RT5682_SSP_AMP_MASK) >>
|
||||
@@ -519,12 +589,13 @@ static int sof_audio_probe(struct platform_device *pdev)
|
||||
ssp_codec = sof_rt5682_quirk & SOF_RT5682_SSP_CODEC_MASK;
|
||||
|
||||
/* compute number of dai links */
|
||||
sof_audio_card_rt5682.num_links = 1 + dmic_num + hdmi_num;
|
||||
sof_audio_card_rt5682.num_links = 1 + dmic_be_num + hdmi_num;
|
||||
|
||||
if (sof_rt5682_quirk & SOF_SPEAKER_AMP_PRESENT)
|
||||
sof_audio_card_rt5682.num_links++;
|
||||
|
||||
dai_links = sof_card_dai_links_create(&pdev->dev, ssp_codec, ssp_amp,
|
||||
dmic_num, hdmi_num);
|
||||
dmic_be_num, hdmi_num);
|
||||
if (!dai_links)
|
||||
return -ENOMEM;
|
||||
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren