Commit 93c964af authored by Mark Brown's avatar Mark Brown

Merge series "ASoC: Intel: machine driver updates for 5.14" from Pierre-Louis...

Merge series "ASoC: Intel: machine driver updates for 5.14" from Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>:

Some of the patches in this series for TigerLake and AlderLake
SoundWire/Bluetooth support were missed in a previous submission,
resend them as is, and add new patches for the CS42L42 machine driver.

Brent Lu (3):
  ASoC: Intel: maxim-common: support max98357a
  ASoC: Intel: add sof-cs42l42 machine driver
  ASoC: Intel: sof_rt5682: code refactor for max98357a

Libin Yang (1):
  ASoC: Intel: sof_sdw: add SOF_RT715_DAI_ID_FIX for AlderLake

Pierre-Louis Bossart (4):
  ASoC: Intel: sof_sdw: add mutual exclusion between PCH DMIC and RT715
  ASoC: Intel: boards: handle hda-dsp-common as a module
  ASoC: Intel: boards: create sof-maxim-common module
  ASoC: Intel: boards: remove .nonatomic for BE dailinks

Vamshi Krishna Gopal (2):
  ASoC: Intel: soc-acpi: add entries for i2s machines in ADL match table
  ASoC: Intel: boards: add support for adl boards in sof-rt5682

Yong Zhi (3):
  ASoC: Intel: Boards: tgl_max98373: Add BT offload support
  ASoC: Intel: sof_sdw: add support for Bluetooth offload
  ASoC: Intel: sof_rt5682: Enable Bluetooth offload on tgl and adl

 sound/soc/intel/boards/Kconfig                |  36 +-
 sound/soc/intel/boards/Makefile               |  30 +-
 sound/soc/intel/boards/bxt_da7219_max98357a.c |   1 +
 sound/soc/intel/boards/bxt_rt298.c            |   1 +
 sound/soc/intel/boards/bytcht_cx2072x.c       |   1 -
 sound/soc/intel/boards/bytcht_da7213.c        |   1 -
 sound/soc/intel/boards/bytcht_es8316.c        |   1 -
 sound/soc/intel/boards/bytcht_nocodec.c       |   1 -
 sound/soc/intel/boards/bytcr_rt5640.c         |   1 -
 sound/soc/intel/boards/bytcr_rt5651.c         |   1 -
 sound/soc/intel/boards/bytcr_wm5102.c         |   1 -
 sound/soc/intel/boards/cht_bsw_rt5645.c       |   1 -
 sound/soc/intel/boards/cht_bsw_rt5672.c       |   1 -
 sound/soc/intel/boards/cml_rt1011_rt5682.c    |   1 +
 sound/soc/intel/boards/ehl_rt5660.c           |   2 +-
 sound/soc/intel/boards/glk_rt5682_max98357a.c |   1 +
 sound/soc/intel/boards/hda_dsp_common.c       |   5 +
 sound/soc/intel/boards/skl_hda_dsp_generic.c  |   1 +
 sound/soc/intel/boards/sof_cs42l42.c          | 509 ++++++++++++++++++
 sound/soc/intel/boards/sof_da7219_max98373.c  |   1 +
 sound/soc/intel/boards/sof_maxim_common.c     |  84 ++-
 sound/soc/intel/boards/sof_maxim_common.h     |  14 +-
 sound/soc/intel/boards/sof_pcm512x.c          |   2 +-
 sound/soc/intel/boards/sof_rt5682.c           | 119 +++-
 sound/soc/intel/boards/sof_sdw.c              |  55 +-
 sound/soc/intel/boards/sof_sdw_common.h       |   8 +
 sound/soc/intel/boards/sof_sdw_max98373.c     |   4 +-
 sound/soc/intel/boards/sof_wm8804.c           |   1 -
 .../intel/common/soc-acpi-intel-adl-match.c   |  26 +
 .../intel/common/soc-acpi-intel-glk-match.c   |  10 +
 30 files changed, 861 insertions(+), 59 deletions(-)
 create mode 100644 sound/soc/intel/boards/sof_cs42l42.c

--
2.25.1
parents b63ecaea b70029ab
...@@ -26,6 +26,12 @@ config SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES ...@@ -26,6 +26,12 @@ config SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES
interface. interface.
If unsure select N. If unsure select N.
config SND_SOC_INTEL_HDA_DSP_COMMON
tristate
config SND_SOC_INTEL_SOF_MAXIM_COMMON
tristate
if SND_SOC_INTEL_CATPT if SND_SOC_INTEL_CATPT
config SND_SOC_INTEL_HASWELL_MACH config SND_SOC_INTEL_HASWELL_MACH
...@@ -278,6 +284,7 @@ config SND_SOC_INTEL_DA7219_MAX98357A_GENERIC ...@@ -278,6 +284,7 @@ config SND_SOC_INTEL_DA7219_MAX98357A_GENERIC
select SND_SOC_MAX98390 select SND_SOC_MAX98390
select SND_SOC_DMIC select SND_SOC_DMIC
select SND_SOC_HDAC_HDMI select SND_SOC_HDAC_HDMI
select SND_SOC_INTEL_HDA_DSP_COMMON
config SND_SOC_INTEL_BXT_DA7219_MAX98357A_COMMON config SND_SOC_INTEL_BXT_DA7219_MAX98357A_COMMON
tristate tristate
...@@ -304,6 +311,7 @@ config SND_SOC_INTEL_BXT_RT298_MACH ...@@ -304,6 +311,7 @@ config SND_SOC_INTEL_BXT_RT298_MACH
select SND_SOC_RT298 select SND_SOC_RT298
select SND_SOC_DMIC select SND_SOC_DMIC
select SND_SOC_HDAC_HDMI select SND_SOC_HDAC_HDMI
select SND_SOC_INTEL_HDA_DSP_COMMON
help help
This adds support for ASoC machine driver for Broxton platforms This adds support for ASoC machine driver for Broxton platforms
with RT286 I2S audio codec. with RT286 I2S audio codec.
...@@ -422,6 +430,7 @@ config SND_SOC_INTEL_GLK_RT5682_MAX98357A_MACH ...@@ -422,6 +430,7 @@ config SND_SOC_INTEL_GLK_RT5682_MAX98357A_MACH
select SND_SOC_MAX98357A select SND_SOC_MAX98357A
select SND_SOC_DMIC select SND_SOC_DMIC
select SND_SOC_HDAC_HDMI select SND_SOC_HDAC_HDMI
select SND_SOC_INTEL_HDA_DSP_COMMON
help help
This adds support for ASoC machine driver for Geminilake platforms This adds support for ASoC machine driver for Geminilake platforms
with RT5682 + MAX98357A I2S audio codec. with RT5682 + MAX98357A I2S audio codec.
...@@ -437,6 +446,7 @@ config SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH ...@@ -437,6 +446,7 @@ config SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH
depends on SND_HDA_CODEC_HDMI depends on SND_HDA_CODEC_HDMI
depends on GPIOLIB depends on GPIOLIB
select SND_SOC_HDAC_HDMI select SND_SOC_HDAC_HDMI
select SND_SOC_INTEL_HDA_DSP_COMMON
select SND_SOC_DMIC select SND_SOC_DMIC
# SND_SOC_HDAC_HDA is already selected # SND_SOC_HDAC_HDA is already selected
help help
...@@ -461,18 +471,38 @@ config SND_SOC_INTEL_SOF_RT5682_MACH ...@@ -461,18 +471,38 @@ config SND_SOC_INTEL_SOF_RT5682_MACH
select SND_SOC_RT5682_I2C select SND_SOC_RT5682_I2C
select SND_SOC_DMIC select SND_SOC_DMIC
select SND_SOC_HDAC_HDMI select SND_SOC_HDAC_HDMI
select SND_SOC_INTEL_HDA_DSP_COMMON
select SND_SOC_INTEL_SOF_MAXIM_COMMON
help help
This adds support for ASoC machine driver for SOF platforms This adds support for ASoC machine driver for SOF platforms
with rt5682 codec. with rt5682 codec.
Say Y if you have such a device. Say Y if you have such a device.
If unsure select "N". If unsure select "N".
config SND_SOC_INTEL_SOF_CS42L42_MACH
tristate "SOF with cs42l42 codec in I2S Mode"
depends on I2C && ACPI
depends on ((SND_HDA_CODEC_HDMI && SND_SOC_SOF_HDA_AUDIO_CODEC) &&\
(MFD_INTEL_LPSS || COMPILE_TEST))
select SND_SOC_CS42L42
select SND_SOC_MAX98357A
select SND_SOC_DMIC
select SND_SOC_HDAC_HDMI
select SND_SOC_INTEL_HDA_DSP_COMMON
select SND_SOC_INTEL_SOF_MAXIM_COMMON
help
This adds support for ASoC machine driver for SOF platforms
with cs42l42 codec.
Say Y if you have such a device.
If unsure select "N".
config SND_SOC_INTEL_SOF_PCM512x_MACH config SND_SOC_INTEL_SOF_PCM512x_MACH
tristate "SOF with TI PCM512x codec" tristate "SOF with TI PCM512x codec"
depends on I2C && ACPI depends on I2C && ACPI
depends on (SND_SOC_SOF_HDA_AUDIO_CODEC && (MFD_INTEL_LPSS || COMPILE_TEST)) ||\ depends on (SND_SOC_SOF_HDA_AUDIO_CODEC && (MFD_INTEL_LPSS || COMPILE_TEST)) ||\
(SND_SOC_SOF_BAYTRAIL && (X86_INTEL_LPSS || COMPILE_TEST)) (SND_SOC_SOF_BAYTRAIL && (X86_INTEL_LPSS || COMPILE_TEST))
depends on SND_HDA_CODEC_HDMI depends on SND_HDA_CODEC_HDMI
select SND_SOC_INTEL_HDA_DSP_COMMON
select SND_SOC_PCM512x_I2C select SND_SOC_PCM512x_I2C
help help
This adds support for ASoC machine driver for SOF platforms This adds support for ASoC machine driver for SOF platforms
...@@ -504,6 +534,7 @@ config SND_SOC_INTEL_SOF_CML_RT1011_RT5682_MACH ...@@ -504,6 +534,7 @@ config SND_SOC_INTEL_SOF_CML_RT1011_RT5682_MACH
select SND_SOC_RT5682_I2C select SND_SOC_RT5682_I2C
select SND_SOC_DMIC select SND_SOC_DMIC
select SND_SOC_HDAC_HDMI select SND_SOC_HDAC_HDMI
select SND_SOC_INTEL_HDA_DSP_COMMON
help help
This adds support for ASoC machine driver for SOF platform with This adds support for ASoC machine driver for SOF platform with
RT1011 + RT5682 I2S codec. RT1011 + RT5682 I2S codec.
...@@ -519,6 +550,7 @@ config SND_SOC_INTEL_SOF_DA7219_MAX98373_MACH ...@@ -519,6 +550,7 @@ config SND_SOC_INTEL_SOF_DA7219_MAX98373_MACH
depends on I2C && ACPI && GPIOLIB depends on I2C && ACPI && GPIOLIB
depends on MFD_INTEL_LPSS || COMPILE_TEST depends on MFD_INTEL_LPSS || COMPILE_TEST
depends on SND_HDA_CODEC_HDMI && SND_SOC_SOF_HDA_AUDIO_CODEC depends on SND_HDA_CODEC_HDMI && SND_SOC_SOF_HDA_AUDIO_CODEC
select SND_SOC_INTEL_HDA_DSP_COMMON
select SND_SOC_DA7219 select SND_SOC_DA7219
select SND_SOC_MAX98373_I2C select SND_SOC_MAX98373_I2C
select SND_SOC_DMIC select SND_SOC_DMIC
...@@ -539,6 +571,7 @@ config SND_SOC_INTEL_EHL_RT5660_MACH ...@@ -539,6 +571,7 @@ config SND_SOC_INTEL_EHL_RT5660_MACH
depends on SND_HDA_CODEC_HDMI && SND_SOC_SOF_HDA_AUDIO_CODEC depends on SND_HDA_CODEC_HDMI && SND_SOC_SOF_HDA_AUDIO_CODEC
select SND_SOC_RT5660 select SND_SOC_RT5660
select SND_SOC_DMIC select SND_SOC_DMIC
select SND_SOC_INTEL_HDA_DSP_COMMON
help help
This adds support for ASoC machine driver for Elkhart Lake This adds support for ASoC machine driver for Elkhart Lake
platform with RT5660 I2S audio codec. platform with RT5660 I2S audio codec.
...@@ -566,6 +599,8 @@ config SND_SOC_INTEL_SOUNDWIRE_SOF_MACH ...@@ -566,6 +599,8 @@ config SND_SOC_INTEL_SOUNDWIRE_SOF_MACH
select SND_SOC_RT715_SDCA_SDW select SND_SOC_RT715_SDCA_SDW
select SND_SOC_RT5682_SDW select SND_SOC_RT5682_SDW
select SND_SOC_DMIC select SND_SOC_DMIC
select SND_SOC_INTEL_HDA_DSP_COMMON
select SND_SOC_INTEL_SOF_MAXIM_COMMON
help help
Add support for Intel SoundWire-based platforms connected to Add support for Intel SoundWire-based platforms connected to
MAX98373, RT700, RT711, RT1308 and RT715 MAX98373, RT700, RT711, RT1308 and RT715
...@@ -573,5 +608,4 @@ config SND_SOC_INTEL_SOUNDWIRE_SOF_MACH ...@@ -573,5 +608,4 @@ config SND_SOC_INTEL_SOUNDWIRE_SOF_MACH
endif endif
endif ## SND_SOC_INTEL_MACH endif ## SND_SOC_INTEL_MACH
...@@ -3,11 +3,11 @@ snd-soc-sst-haswell-objs := haswell.o ...@@ -3,11 +3,11 @@ snd-soc-sst-haswell-objs := haswell.o
snd-soc-sst-bdw-rt5650-mach-objs := bdw-rt5650.o snd-soc-sst-bdw-rt5650-mach-objs := bdw-rt5650.o
snd-soc-sst-bdw-rt5677-mach-objs := bdw-rt5677.o snd-soc-sst-bdw-rt5677-mach-objs := bdw-rt5677.o
snd-soc-sst-broadwell-objs := broadwell.o snd-soc-sst-broadwell-objs := broadwell.o
snd-soc-sst-bxt-da7219_max98357a-objs := bxt_da7219_max98357a.o hda_dsp_common.o snd-soc-sst-bxt-da7219_max98357a-objs := bxt_da7219_max98357a.o
snd-soc-sst-bxt-rt298-objs := bxt_rt298.o hda_dsp_common.o snd-soc-sst-bxt-rt298-objs := bxt_rt298.o
snd-soc-sst-sof-pcm512x-objs := sof_pcm512x.o hda_dsp_common.o snd-soc-sst-sof-pcm512x-objs := sof_pcm512x.o
snd-soc-sst-sof-wm8804-objs := sof_wm8804.o snd-soc-sst-sof-wm8804-objs := sof_wm8804.o
snd-soc-sst-glk-rt5682_max98357a-objs := glk_rt5682_max98357a.o hda_dsp_common.o snd-soc-sst-glk-rt5682_max98357a-objs := glk_rt5682_max98357a.o
snd-soc-sst-bytcr-rt5640-objs := bytcr_rt5640.o snd-soc-sst-bytcr-rt5640-objs := bytcr_rt5640.o
snd-soc-sst-bytcr-rt5651-objs := bytcr_rt5651.o snd-soc-sst-bytcr-rt5651-objs := bytcr_rt5651.o
snd-soc-sst-bytcr-wm5102-objs := bytcr_wm5102.o snd-soc-sst-bytcr-wm5102-objs := bytcr_wm5102.o
...@@ -19,28 +19,29 @@ snd-soc-sst-byt-cht-cx2072x-objs := bytcht_cx2072x.o ...@@ -19,28 +19,29 @@ 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-da7213-objs := bytcht_da7213.o
snd-soc-sst-byt-cht-es8316-objs := bytcht_es8316.o snd-soc-sst-byt-cht-es8316-objs := bytcht_es8316.o
snd-soc-sst-byt-cht-nocodec-objs := bytcht_nocodec.o snd-soc-sst-byt-cht-nocodec-objs := bytcht_nocodec.o
snd-soc-sof_rt5682-objs := sof_rt5682.o hda_dsp_common.o sof_maxim_common.o sof_realtek_common.o snd-soc-sof_rt5682-objs := sof_rt5682.o sof_realtek_common.o
snd-soc-cml_rt1011_rt5682-objs := cml_rt1011_rt5682.o hda_dsp_common.o snd-soc-sof_cs42l42-objs := sof_cs42l42.o
snd-soc-cml_rt1011_rt5682-objs := cml_rt1011_rt5682.o
snd-soc-kbl_da7219_max98357a-objs := kbl_da7219_max98357a.o snd-soc-kbl_da7219_max98357a-objs := kbl_da7219_max98357a.o
snd-soc-kbl_da7219_max98927-objs := kbl_da7219_max98927.o snd-soc-kbl_da7219_max98927-objs := kbl_da7219_max98927.o
snd-soc-kbl_rt5663_max98927-objs := kbl_rt5663_max98927.o snd-soc-kbl_rt5663_max98927-objs := kbl_rt5663_max98927.o
snd-soc-kbl_rt5663_rt5514_max98927-objs := kbl_rt5663_rt5514_max98927.o snd-soc-kbl_rt5663_rt5514_max98927-objs := kbl_rt5663_rt5514_max98927.o
snd-soc-kbl_rt5660-objs := kbl_rt5660.o snd-soc-kbl_rt5660-objs := kbl_rt5660.o
snd-soc-skl_rt286-objs := skl_rt286.o snd-soc-skl_rt286-objs := skl_rt286.o
snd-soc-skl_hda_dsp-objs := skl_hda_dsp_generic.o skl_hda_dsp_common.o hda_dsp_common.o snd-soc-skl_hda_dsp-objs := skl_hda_dsp_generic.o skl_hda_dsp_common.o
snd-skl_nau88l25_max98357a-objs := skl_nau88l25_max98357a.o snd-skl_nau88l25_max98357a-objs := skl_nau88l25_max98357a.o
snd-soc-skl_nau88l25_ssm4567-objs := skl_nau88l25_ssm4567.o snd-soc-skl_nau88l25_ssm4567-objs := skl_nau88l25_ssm4567.o
snd-soc-sof_da7219_max98373-objs := sof_da7219_max98373.o hda_dsp_common.o snd-soc-sof_da7219_max98373-objs := sof_da7219_max98373.o
snd-soc-ehl-rt5660-objs := ehl_rt5660.o hda_dsp_common.o snd-soc-ehl-rt5660-objs := ehl_rt5660.o
snd-soc-sof-sdw-objs += sof_sdw.o \ snd-soc-sof-sdw-objs += sof_sdw.o \
sof_sdw_max98373.o \ sof_sdw_max98373.o \
sof_sdw_rt1308.o sof_sdw_rt1316.o \ sof_sdw_rt1308.o sof_sdw_rt1316.o \
sof_sdw_rt5682.o sof_sdw_rt700.o \ sof_sdw_rt5682.o sof_sdw_rt700.o \
sof_sdw_rt711.o sof_sdw_rt711_sdca.o \ sof_sdw_rt711.o sof_sdw_rt711_sdca.o \
sof_sdw_rt715.o sof_sdw_rt715_sdca.o \ sof_sdw_rt715.o sof_sdw_rt715_sdca.o \
sof_maxim_common.o \ sof_sdw_dmic.o sof_sdw_hdmi.o
sof_sdw_dmic.o sof_sdw_hdmi.o hda_dsp_common.o
obj-$(CONFIG_SND_SOC_INTEL_SOF_RT5682_MACH) += snd-soc-sof_rt5682.o obj-$(CONFIG_SND_SOC_INTEL_SOF_RT5682_MACH) += snd-soc-sof_rt5682.o
obj-$(CONFIG_SND_SOC_INTEL_SOF_CS42L42_MACH) += snd-soc-sof_cs42l42.o
obj-$(CONFIG_SND_SOC_INTEL_HASWELL_MACH) += snd-soc-sst-haswell.o obj-$(CONFIG_SND_SOC_INTEL_HASWELL_MACH) += snd-soc-sst-haswell.o
obj-$(CONFIG_SND_SOC_INTEL_BXT_DA7219_MAX98357A_COMMON) += snd-soc-sst-bxt-da7219_max98357a.o obj-$(CONFIG_SND_SOC_INTEL_BXT_DA7219_MAX98357A_COMMON) += snd-soc-sst-bxt-da7219_max98357a.o
obj-$(CONFIG_SND_SOC_INTEL_BXT_RT298_MACH) += snd-soc-sst-bxt-rt298.o obj-$(CONFIG_SND_SOC_INTEL_BXT_RT298_MACH) += snd-soc-sst-bxt-rt298.o
...@@ -74,3 +75,10 @@ obj-$(CONFIG_SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH) += snd-soc-skl_hda_dsp.o ...@@ -74,3 +75,10 @@ obj-$(CONFIG_SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH) += snd-soc-skl_hda_dsp.o
obj-$(CONFIG_SND_SOC_INTEL_SOF_DA7219_MAX98373_MACH) += snd-soc-sof_da7219_max98373.o obj-$(CONFIG_SND_SOC_INTEL_SOF_DA7219_MAX98373_MACH) += snd-soc-sof_da7219_max98373.o
obj-$(CONFIG_SND_SOC_INTEL_EHL_RT5660_MACH) += snd-soc-ehl-rt5660.o obj-$(CONFIG_SND_SOC_INTEL_EHL_RT5660_MACH) += snd-soc-ehl-rt5660.o
obj-$(CONFIG_SND_SOC_INTEL_SOUNDWIRE_SOF_MACH) += snd-soc-sof-sdw.o obj-$(CONFIG_SND_SOC_INTEL_SOUNDWIRE_SOF_MACH) += snd-soc-sof-sdw.o
# common modules
snd-soc-intel-hda-dsp-common-objs := hda_dsp_common.o
obj-$(CONFIG_SND_SOC_INTEL_HDA_DSP_COMMON) += snd-soc-intel-hda-dsp-common.o
snd-soc-intel-sof-maxim-common-objs += sof_maxim_common.o
obj-$(CONFIG_SND_SOC_INTEL_SOF_MAXIM_COMMON) += snd-soc-intel-sof-maxim-common.o
...@@ -869,3 +869,4 @@ MODULE_LICENSE("GPL v2"); ...@@ -869,3 +869,4 @@ MODULE_LICENSE("GPL v2");
MODULE_ALIAS("platform:bxt_da7219_max98357a"); MODULE_ALIAS("platform:bxt_da7219_max98357a");
MODULE_ALIAS("platform:glk_da7219_max98357a"); MODULE_ALIAS("platform:glk_da7219_max98357a");
MODULE_ALIAS("platform:cml_da7219_max98357a"); MODULE_ALIAS("platform:cml_da7219_max98357a");
MODULE_IMPORT_NS(SND_SOC_INTEL_HDA_DSP_COMMON);
...@@ -667,3 +667,4 @@ MODULE_DESCRIPTION("Intel SST Audio for Broxton"); ...@@ -667,3 +667,4 @@ MODULE_DESCRIPTION("Intel SST Audio for Broxton");
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
MODULE_ALIAS("platform:bxt_alc298s_i2s"); MODULE_ALIAS("platform:bxt_alc298s_i2s");
MODULE_ALIAS("platform:glk_alc298s_i2s"); MODULE_ALIAS("platform:glk_alc298s_i2s");
MODULE_IMPORT_NS(SND_SOC_INTEL_HDA_DSP_COMMON);
...@@ -198,7 +198,6 @@ static struct snd_soc_dai_link byt_cht_cx2072x_dais[] = { ...@@ -198,7 +198,6 @@ static struct snd_soc_dai_link byt_cht_cx2072x_dais[] = {
| SND_SOC_DAIFMT_CBS_CFS, | SND_SOC_DAIFMT_CBS_CFS,
.init = byt_cht_cx2072x_init, .init = byt_cht_cx2072x_init,
.be_hw_params_fixup = byt_cht_cx2072x_fixup, .be_hw_params_fixup = byt_cht_cx2072x_fixup,
.nonatomic = true,
.dpcm_playback = 1, .dpcm_playback = 1,
.dpcm_capture = 1, .dpcm_capture = 1,
SND_SOC_DAILINK_REG(ssp2, cx2072x, platform), SND_SOC_DAILINK_REG(ssp2, cx2072x, platform),
......
...@@ -197,7 +197,6 @@ static struct snd_soc_dai_link dailink[] = { ...@@ -197,7 +197,6 @@ static struct snd_soc_dai_link dailink[] = {
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF
| SND_SOC_DAIFMT_CBS_CFS, | SND_SOC_DAIFMT_CBS_CFS,
.be_hw_params_fixup = codec_fixup, .be_hw_params_fixup = codec_fixup,
.nonatomic = true,
.dpcm_playback = 1, .dpcm_playback = 1,
.dpcm_capture = 1, .dpcm_capture = 1,
.ops = &ssp2_ops, .ops = &ssp2_ops,
......
...@@ -337,7 +337,6 @@ static struct snd_soc_dai_link byt_cht_es8316_dais[] = { ...@@ -337,7 +337,6 @@ static struct snd_soc_dai_link byt_cht_es8316_dais[] = {
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF
| SND_SOC_DAIFMT_CBS_CFS, | SND_SOC_DAIFMT_CBS_CFS,
.be_hw_params_fixup = byt_cht_es8316_codec_fixup, .be_hw_params_fixup = byt_cht_es8316_codec_fixup,
.nonatomic = true,
.dpcm_playback = 1, .dpcm_playback = 1,
.dpcm_capture = 1, .dpcm_capture = 1,
.init = byt_cht_es8316_init, .init = byt_cht_es8316_init,
......
...@@ -144,7 +144,6 @@ static struct snd_soc_dai_link dais[] = { ...@@ -144,7 +144,6 @@ static struct snd_soc_dai_link dais[] = {
| SND_SOC_DAIFMT_CBS_CFS, | SND_SOC_DAIFMT_CBS_CFS,
.be_hw_params_fixup = codec_fixup, .be_hw_params_fixup = codec_fixup,
.ignore_suspend = 1, .ignore_suspend = 1,
.nonatomic = true,
.dpcm_playback = 1, .dpcm_playback = 1,
.dpcm_capture = 1, .dpcm_capture = 1,
SND_SOC_DAILINK_REG(ssp2_port, dummy, platform), SND_SOC_DAILINK_REG(ssp2_port, dummy, platform),
......
...@@ -1180,7 +1180,6 @@ static struct snd_soc_dai_link byt_rt5640_dais[] = { ...@@ -1180,7 +1180,6 @@ static struct snd_soc_dai_link byt_rt5640_dais[] = {
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF
| SND_SOC_DAIFMT_CBS_CFS, | SND_SOC_DAIFMT_CBS_CFS,
.be_hw_params_fixup = byt_rt5640_codec_fixup, .be_hw_params_fixup = byt_rt5640_codec_fixup,
.nonatomic = true,
.dpcm_playback = 1, .dpcm_playback = 1,
.dpcm_capture = 1, .dpcm_capture = 1,
.init = byt_rt5640_init, .init = byt_rt5640_init,
......
...@@ -786,7 +786,6 @@ static struct snd_soc_dai_link byt_rt5651_dais[] = { ...@@ -786,7 +786,6 @@ static struct snd_soc_dai_link byt_rt5651_dais[] = {
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF
| SND_SOC_DAIFMT_CBS_CFS, | SND_SOC_DAIFMT_CBS_CFS,
.be_hw_params_fixup = byt_rt5651_codec_fixup, .be_hw_params_fixup = byt_rt5651_codec_fixup,
.nonatomic = true,
.dpcm_playback = 1, .dpcm_playback = 1,
.dpcm_capture = 1, .dpcm_capture = 1,
.init = byt_rt5651_init, .init = byt_rt5651_init,
......
...@@ -351,7 +351,6 @@ static struct snd_soc_dai_link byt_wm5102_dais[] = { ...@@ -351,7 +351,6 @@ static struct snd_soc_dai_link byt_wm5102_dais[] = {
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF
| SND_SOC_DAIFMT_CBS_CFS, | SND_SOC_DAIFMT_CBS_CFS,
.be_hw_params_fixup = byt_wm5102_codec_fixup, .be_hw_params_fixup = byt_wm5102_codec_fixup,
.nonatomic = true,
.dpcm_playback = 1, .dpcm_playback = 1,
.dpcm_capture = 1, .dpcm_capture = 1,
.init = byt_wm5102_init, .init = byt_wm5102_init,
......
...@@ -471,7 +471,6 @@ static struct snd_soc_dai_link cht_dailink[] = { ...@@ -471,7 +471,6 @@ static struct snd_soc_dai_link cht_dailink[] = {
.no_pcm = 1, .no_pcm = 1,
.init = cht_codec_init, .init = cht_codec_init,
.be_hw_params_fixup = cht_codec_fixup, .be_hw_params_fixup = cht_codec_fixup,
.nonatomic = true,
.dpcm_playback = 1, .dpcm_playback = 1,
.dpcm_capture = 1, .dpcm_capture = 1,
.ops = &cht_be_ssp2_ops, .ops = &cht_be_ssp2_ops,
......
...@@ -375,7 +375,6 @@ static struct snd_soc_dai_link cht_dailink[] = { ...@@ -375,7 +375,6 @@ static struct snd_soc_dai_link cht_dailink[] = {
.name = "SSP2-Codec", .name = "SSP2-Codec",
.id = 0, .id = 0,
.no_pcm = 1, .no_pcm = 1,
.nonatomic = true,
.init = cht_codec_init, .init = cht_codec_init,
.be_hw_params_fixup = cht_codec_fixup, .be_hw_params_fixup = cht_codec_fixup,
.dpcm_playback = 1, .dpcm_playback = 1,
......
...@@ -594,3 +594,4 @@ MODULE_AUTHOR("Shuming Fan <shumingf@realtek.com>"); ...@@ -594,3 +594,4 @@ MODULE_AUTHOR("Shuming Fan <shumingf@realtek.com>");
MODULE_AUTHOR("Mac Chiang <mac.chiang@intel.com>"); MODULE_AUTHOR("Mac Chiang <mac.chiang@intel.com>");
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
MODULE_ALIAS("platform:cml_rt1011_rt5682"); MODULE_ALIAS("platform:cml_rt1011_rt5682");
MODULE_IMPORT_NS(SND_SOC_INTEL_HDA_DSP_COMMON);
...@@ -181,7 +181,6 @@ static struct snd_soc_dai_link ehl_rt5660_dailink[] = { ...@@ -181,7 +181,6 @@ static struct snd_soc_dai_link ehl_rt5660_dailink[] = {
.dpcm_playback = 1, .dpcm_playback = 1,
.dpcm_capture = 1, .dpcm_capture = 1,
.ops = &rt5660_ops, .ops = &rt5660_ops,
.nonatomic = true,
SND_SOC_DAILINK_REG(ssp0_pin, rt5660_codec, platform), SND_SOC_DAILINK_REG(ssp0_pin, rt5660_codec, platform),
}, },
{ {
...@@ -321,3 +320,4 @@ MODULE_DESCRIPTION("ASoC Intel(R) Elkhartlake + rt5660 Machine driver"); ...@@ -321,3 +320,4 @@ MODULE_DESCRIPTION("ASoC Intel(R) Elkhartlake + rt5660 Machine driver");
MODULE_AUTHOR("libin.yang@intel.com"); MODULE_AUTHOR("libin.yang@intel.com");
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
MODULE_ALIAS("platform:ehl_rt5660"); MODULE_ALIAS("platform:ehl_rt5660");
MODULE_IMPORT_NS(SND_SOC_INTEL_HDA_DSP_COMMON);
...@@ -642,3 +642,4 @@ MODULE_AUTHOR("Naveen Manohar <naveen.m@intel.com>"); ...@@ -642,3 +642,4 @@ MODULE_AUTHOR("Naveen Manohar <naveen.m@intel.com>");
MODULE_AUTHOR("Harsha Priya <harshapriya.n@intel.com>"); MODULE_AUTHOR("Harsha Priya <harshapriya.n@intel.com>");
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
MODULE_ALIAS("platform:glk_rt5682_max98357a"); MODULE_ALIAS("platform:glk_rt5682_max98357a");
MODULE_IMPORT_NS(SND_SOC_INTEL_HDA_DSP_COMMON);
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
// //
// Copyright(c) 2019 Intel Corporation. All rights reserved. // Copyright(c) 2019 Intel Corporation. All rights reserved.
#include <linux/module.h>
#include <sound/pcm.h> #include <sound/pcm.h>
#include <sound/soc.h> #include <sound/soc.h>
#include <sound/hda_codec.h> #include <sound/hda_codec.h>
...@@ -82,5 +83,9 @@ int hda_dsp_hdmi_build_controls(struct snd_soc_card *card, ...@@ -82,5 +83,9 @@ int hda_dsp_hdmi_build_controls(struct snd_soc_card *card,
return err; return err;
} }
EXPORT_SYMBOL_NS(hda_dsp_hdmi_build_controls, SND_SOC_INTEL_HDA_DSP_COMMON);
#endif #endif
MODULE_DESCRIPTION("ASoC Intel HDMI helpers");
MODULE_LICENSE("GPL");
...@@ -258,3 +258,4 @@ MODULE_DESCRIPTION("SKL/KBL/BXT/APL HDA Generic Machine driver"); ...@@ -258,3 +258,4 @@ MODULE_DESCRIPTION("SKL/KBL/BXT/APL HDA Generic Machine driver");
MODULE_AUTHOR("Rakesh Ughreja <rakesh.a.ughreja@intel.com>"); MODULE_AUTHOR("Rakesh Ughreja <rakesh.a.ughreja@intel.com>");
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
MODULE_ALIAS("platform:skl_hda_dsp_generic"); MODULE_ALIAS("platform:skl_hda_dsp_generic");
MODULE_IMPORT_NS(SND_SOC_INTEL_HDA_DSP_COMMON);
This diff is collapsed.
...@@ -457,3 +457,4 @@ MODULE_AUTHOR("Yong Zhi <yong.zhi@intel.com>"); ...@@ -457,3 +457,4 @@ MODULE_AUTHOR("Yong Zhi <yong.zhi@intel.com>");
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
MODULE_ALIAS("platform:sof_da7219_max98360a"); MODULE_ALIAS("platform:sof_da7219_max98360a");
MODULE_ALIAS("platform:sof_da7219_max98373"); MODULE_ALIAS("platform:sof_da7219_max98373");
MODULE_IMPORT_NS(SND_SOC_INTEL_HDA_DSP_COMMON);
// SPDX-License-Identifier: GPL-2.0-only // SPDX-License-Identifier: GPL-2.0-only
// //
// Copyright(c) 2020 Intel Corporation. All rights reserved. // Copyright(c) 2020 Intel Corporation. All rights reserved.
#include <linux/module.h>
#include <linux/string.h> #include <linux/string.h>
#include <sound/pcm.h> #include <sound/pcm.h>
#include <sound/soc.h> #include <sound/soc.h>
...@@ -16,6 +17,7 @@ const struct snd_soc_dapm_route max_98373_dapm_routes[] = { ...@@ -16,6 +17,7 @@ const struct snd_soc_dapm_route max_98373_dapm_routes[] = {
{ "Left Spk", NULL, "Left BE_OUT" }, { "Left Spk", NULL, "Left BE_OUT" },
{ "Right Spk", NULL, "Right BE_OUT" }, { "Right Spk", NULL, "Right BE_OUT" },
}; };
EXPORT_SYMBOL_NS(max_98373_dapm_routes, SND_SOC_INTEL_SOF_MAXIM_COMMON);
static struct snd_soc_codec_conf max_98373_codec_conf[] = { static struct snd_soc_codec_conf max_98373_codec_conf[] = {
{ {
...@@ -38,8 +40,9 @@ struct snd_soc_dai_link_component max_98373_components[] = { ...@@ -38,8 +40,9 @@ struct snd_soc_dai_link_component max_98373_components[] = {
.dai_name = MAX_98373_CODEC_DAI, .dai_name = MAX_98373_CODEC_DAI,
}, },
}; };
EXPORT_SYMBOL_NS(max_98373_components, SND_SOC_INTEL_SOF_MAXIM_COMMON);
static int max98373_hw_params(struct snd_pcm_substream *substream, static int max_98373_hw_params(struct snd_pcm_substream *substream,
struct snd_pcm_hw_params *params) struct snd_pcm_hw_params *params)
{ {
struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
...@@ -59,7 +62,7 @@ static int max98373_hw_params(struct snd_pcm_substream *substream, ...@@ -59,7 +62,7 @@ static int max98373_hw_params(struct snd_pcm_substream *substream,
return 0; return 0;
} }
int max98373_trigger(struct snd_pcm_substream *substream, int cmd) int max_98373_trigger(struct snd_pcm_substream *substream, int cmd)
{ {
struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
struct snd_soc_dai *codec_dai; struct snd_soc_dai *codec_dai;
...@@ -102,13 +105,15 @@ int max98373_trigger(struct snd_pcm_substream *substream, int cmd) ...@@ -102,13 +105,15 @@ int max98373_trigger(struct snd_pcm_substream *substream, int cmd)
return ret; return ret;
} }
EXPORT_SYMBOL_NS(max_98373_trigger, SND_SOC_INTEL_SOF_MAXIM_COMMON);
struct snd_soc_ops max_98373_ops = { struct snd_soc_ops max_98373_ops = {
.hw_params = max98373_hw_params, .hw_params = max_98373_hw_params,
.trigger = max98373_trigger, .trigger = max_98373_trigger,
}; };
EXPORT_SYMBOL_NS(max_98373_ops, SND_SOC_INTEL_SOF_MAXIM_COMMON);
int max98373_spk_codec_init(struct snd_soc_pcm_runtime *rtd) int max_98373_spk_codec_init(struct snd_soc_pcm_runtime *rtd)
{ {
struct snd_soc_card *card = rtd->card; struct snd_soc_card *card = rtd->card;
int ret; int ret;
...@@ -119,9 +124,74 @@ int max98373_spk_codec_init(struct snd_soc_pcm_runtime *rtd) ...@@ -119,9 +124,74 @@ int max98373_spk_codec_init(struct snd_soc_pcm_runtime *rtd)
dev_err(rtd->dev, "Speaker map addition failed: %d\n", ret); dev_err(rtd->dev, "Speaker map addition failed: %d\n", ret);
return ret; return ret;
} }
EXPORT_SYMBOL_NS(max_98373_spk_codec_init, SND_SOC_INTEL_SOF_MAXIM_COMMON);
void sof_max98373_codec_conf(struct snd_soc_card *card) void max_98373_set_codec_conf(struct snd_soc_card *card)
{ {
card->codec_conf = max_98373_codec_conf; card->codec_conf = max_98373_codec_conf;
card->num_configs = ARRAY_SIZE(max_98373_codec_conf); card->num_configs = ARRAY_SIZE(max_98373_codec_conf);
} }
EXPORT_SYMBOL_NS(max_98373_set_codec_conf, SND_SOC_INTEL_SOF_MAXIM_COMMON);
/*
* Maxim MAX98357A
*/
static const struct snd_kcontrol_new max_98357a_kcontrols[] = {
SOC_DAPM_PIN_SWITCH("Spk"),
};
static const struct snd_soc_dapm_widget max_98357a_dapm_widgets[] = {
SND_SOC_DAPM_SPK("Spk", NULL),
};
static const struct snd_soc_dapm_route max_98357a_dapm_routes[] = {
/* speaker */
{"Spk", NULL, "Speaker"},
};
static struct snd_soc_dai_link_component max_98357a_components[] = {
{
.name = MAX_98357A_DEV0_NAME,
.dai_name = MAX_98357A_CODEC_DAI,
}
};
static int max_98357a_init(struct snd_soc_pcm_runtime *rtd)
{
struct snd_soc_card *card = rtd->card;
int ret;
ret = snd_soc_dapm_new_controls(&card->dapm, max_98357a_dapm_widgets,
ARRAY_SIZE(max_98357a_dapm_widgets));
if (ret) {
dev_err(rtd->dev, "unable to add dapm controls, ret %d\n", ret);
/* Don't need to add routes if widget addition failed */
return ret;
}
ret = snd_soc_add_card_controls(card, max_98357a_kcontrols,
ARRAY_SIZE(max_98357a_kcontrols));
if (ret) {
dev_err(rtd->dev, "unable to add card controls, ret %d\n", ret);
return ret;
}
ret = snd_soc_dapm_add_routes(&card->dapm, max_98357a_dapm_routes,
ARRAY_SIZE(max_98357a_dapm_routes));
if (ret)
dev_err(rtd->dev, "unable to add dapm routes, ret %d\n", ret);
return ret;
}
void max_98357a_dai_link(struct snd_soc_dai_link *link)
{
link->codecs = max_98357a_components;
link->num_codecs = ARRAY_SIZE(max_98357a_components);
link->init = max_98357a_init;
}
EXPORT_SYMBOL_NS(max_98357a_dai_link, SND_SOC_INTEL_SOF_MAXIM_COMMON);
MODULE_DESCRIPTION("ASoC Intel SOF Maxim helpers");
MODULE_LICENSE("GPL");
...@@ -20,8 +20,16 @@ extern struct snd_soc_dai_link_component max_98373_components[2]; ...@@ -20,8 +20,16 @@ extern struct snd_soc_dai_link_component max_98373_components[2];
extern struct snd_soc_ops max_98373_ops; extern struct snd_soc_ops max_98373_ops;
extern const struct snd_soc_dapm_route max_98373_dapm_routes[]; extern const struct snd_soc_dapm_route max_98373_dapm_routes[];
int max98373_spk_codec_init(struct snd_soc_pcm_runtime *rtd); int max_98373_spk_codec_init(struct snd_soc_pcm_runtime *rtd);
void sof_max98373_codec_conf(struct snd_soc_card *card); void max_98373_set_codec_conf(struct snd_soc_card *card);
int max98373_trigger(struct snd_pcm_substream *substream, int cmd); int max_98373_trigger(struct snd_pcm_substream *substream, int cmd);
/*
* Maxim MAX98357A
*/
#define MAX_98357A_CODEC_DAI "HiFi"
#define MAX_98357A_DEV0_NAME "MX98357A:00"
void max_98357a_dai_link(struct snd_soc_dai_link *link);
#endif /* __SOF_MAXIM_COMMON_H */ #endif /* __SOF_MAXIM_COMMON_H */
...@@ -241,7 +241,6 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev, ...@@ -241,7 +241,6 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
links[id].num_platforms = ARRAY_SIZE(platform_component); links[id].num_platforms = ARRAY_SIZE(platform_component);
links[id].init = sof_pcm512x_codec_init; links[id].init = sof_pcm512x_codec_init;
links[id].ops = &sof_pcm512x_ops; links[id].ops = &sof_pcm512x_ops;
links[id].nonatomic = true;
links[id].dpcm_playback = 1; links[id].dpcm_playback = 1;
/* /*
* capture only supported with specific versions of the Hifiberry DAC+ * capture only supported with specific versions of the Hifiberry DAC+
...@@ -437,3 +436,4 @@ MODULE_DESCRIPTION("ASoC Intel(R) SOF + PCM512x Machine driver"); ...@@ -437,3 +436,4 @@ MODULE_DESCRIPTION("ASoC Intel(R) SOF + PCM512x Machine driver");
MODULE_AUTHOR("Pierre-Louis Bossart"); MODULE_AUTHOR("Pierre-Louis Bossart");
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
MODULE_ALIAS("platform:sof_pcm512x"); MODULE_ALIAS("platform:sof_pcm512x");
MODULE_IMPORT_NS(SND_SOC_INTEL_HDA_DSP_COMMON);
...@@ -50,6 +50,13 @@ ...@@ -50,6 +50,13 @@
#define SOF_MAX98373_SPEAKER_AMP_PRESENT BIT(17) #define SOF_MAX98373_SPEAKER_AMP_PRESENT BIT(17)
#define SOF_MAX98360A_SPEAKER_AMP_PRESENT BIT(18) #define SOF_MAX98360A_SPEAKER_AMP_PRESENT BIT(18)
/* BT audio offload: reserve 3 bits for future */
#define SOF_BT_OFFLOAD_SSP_SHIFT 19
#define SOF_BT_OFFLOAD_SSP_MASK (GENMASK(21, 19))
#define SOF_BT_OFFLOAD_SSP(quirk) \
(((quirk) << SOF_BT_OFFLOAD_SSP_SHIFT) & SOF_BT_OFFLOAD_SSP_MASK)
#define SOF_SSP_BT_OFFLOAD_PRESENT BIT(22)
/* Default: MCLK on, MCLK 19.2M, SSP0 */ /* Default: MCLK on, MCLK 19.2M, SSP0 */
static unsigned long sof_rt5682_quirk = SOF_RT5682_MCLK_EN | static unsigned long sof_rt5682_quirk = SOF_RT5682_MCLK_EN |
SOF_RT5682_SSP_CODEC(0); SOF_RT5682_SSP_CODEC(0);
...@@ -444,20 +451,26 @@ static int sof_card_late_probe(struct snd_soc_card *card) ...@@ -444,20 +451,26 @@ static int sof_card_late_probe(struct snd_soc_card *card)
static const struct snd_kcontrol_new sof_controls[] = { static const struct snd_kcontrol_new sof_controls[] = {
SOC_DAPM_PIN_SWITCH("Headphone Jack"), SOC_DAPM_PIN_SWITCH("Headphone Jack"),
SOC_DAPM_PIN_SWITCH("Headset Mic"), SOC_DAPM_PIN_SWITCH("Headset Mic"),
SOC_DAPM_PIN_SWITCH("Spk"),
SOC_DAPM_PIN_SWITCH("Left Spk"), SOC_DAPM_PIN_SWITCH("Left Spk"),
SOC_DAPM_PIN_SWITCH("Right Spk"), SOC_DAPM_PIN_SWITCH("Right Spk"),
}; };
static const struct snd_kcontrol_new speaker_controls[] = {
SOC_DAPM_PIN_SWITCH("Spk"),
};
static const struct snd_soc_dapm_widget sof_widgets[] = { static const struct snd_soc_dapm_widget sof_widgets[] = {
SND_SOC_DAPM_HP("Headphone Jack", NULL), SND_SOC_DAPM_HP("Headphone Jack", NULL),
SND_SOC_DAPM_MIC("Headset Mic", NULL), SND_SOC_DAPM_MIC("Headset Mic", NULL),
SND_SOC_DAPM_SPK("Spk", NULL),
SND_SOC_DAPM_SPK("Left Spk", NULL), SND_SOC_DAPM_SPK("Left Spk", NULL),
SND_SOC_DAPM_SPK("Right Spk", NULL), SND_SOC_DAPM_SPK("Right Spk", NULL),
}; };
static const struct snd_soc_dapm_widget speaker_widgets[] = {
SND_SOC_DAPM_SPK("Spk", NULL),
};
static const struct snd_soc_dapm_widget dmic_widgets[] = { static const struct snd_soc_dapm_widget dmic_widgets[] = {
SND_SOC_DAPM_MIC("SoC DMIC", NULL), SND_SOC_DAPM_MIC("SoC DMIC", NULL),
}; };
...@@ -497,6 +510,21 @@ static int speaker_codec_init(struct snd_soc_pcm_runtime *rtd) ...@@ -497,6 +510,21 @@ static int speaker_codec_init(struct snd_soc_pcm_runtime *rtd)
struct snd_soc_card *card = rtd->card; struct snd_soc_card *card = rtd->card;
int ret; int ret;
ret = snd_soc_dapm_new_controls(&card->dapm, speaker_widgets,
ARRAY_SIZE(speaker_widgets));
if (ret) {
dev_err(rtd->dev, "unable to add dapm controls, ret %d\n", ret);
/* Don't need to add routes if widget addition failed */
return ret;
}
ret = snd_soc_add_card_controls(card, speaker_controls,
ARRAY_SIZE(speaker_controls));
if (ret) {
dev_err(rtd->dev, "unable to add card controls, ret %d\n", ret);
return ret;
}
ret = snd_soc_dapm_add_routes(&card->dapm, speaker_map, ret = snd_soc_dapm_add_routes(&card->dapm, speaker_map,
ARRAY_SIZE(speaker_map)); ARRAY_SIZE(speaker_map));
...@@ -566,13 +594,6 @@ static struct snd_soc_dai_link_component dmic_component[] = { ...@@ -566,13 +594,6 @@ static struct snd_soc_dai_link_component dmic_component[] = {
} }
}; };
static struct snd_soc_dai_link_component max98357a_component[] = {
{
.name = "MX98357A:00",
.dai_name = "HiFi",
}
};
static struct snd_soc_dai_link_component max98360a_component[] = { static struct snd_soc_dai_link_component max98360a_component[] = {
{ {
.name = "MX98360A:00", .name = "MX98360A:00",
...@@ -591,6 +612,13 @@ static struct snd_soc_dai_link_component rt1015_components[] = { ...@@ -591,6 +612,13 @@ static struct snd_soc_dai_link_component rt1015_components[] = {
}, },
}; };
static struct snd_soc_dai_link_component dummy_component[] = {
{
.name = "snd-soc-dummy",
.dai_name = "snd-soc-dummy-dai",
}
};
static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev, static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
int ssp_codec, int ssp_codec,
int ssp_amp, int ssp_amp,
...@@ -623,7 +651,6 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev, ...@@ -623,7 +651,6 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
links[id].init = sof_rt5682_codec_init; links[id].init = sof_rt5682_codec_init;
links[id].exit = sof_rt5682_codec_exit; links[id].exit = sof_rt5682_codec_exit;
links[id].ops = &sof_rt5682_ops; links[id].ops = &sof_rt5682_ops;
links[id].nonatomic = true;
links[id].dpcm_playback = 1; links[id].dpcm_playback = 1;
links[id].dpcm_capture = 1; links[id].dpcm_capture = 1;
links[id].no_pcm = 1; links[id].no_pcm = 1;
...@@ -742,7 +769,7 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev, ...@@ -742,7 +769,7 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
SOF_MAX98373_SPEAKER_AMP_PRESENT) { SOF_MAX98373_SPEAKER_AMP_PRESENT) {
links[id].codecs = max_98373_components; links[id].codecs = max_98373_components;
links[id].num_codecs = ARRAY_SIZE(max_98373_components); links[id].num_codecs = ARRAY_SIZE(max_98373_components);
links[id].init = max98373_spk_codec_init; links[id].init = max_98373_spk_codec_init;
links[id].ops = &max_98373_ops; links[id].ops = &max_98373_ops;
/* feedback stream */ /* feedback stream */
links[id].dpcm_capture = 1; links[id].dpcm_capture = 1;
...@@ -755,13 +782,10 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev, ...@@ -755,13 +782,10 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
SOF_RT1011_SPEAKER_AMP_PRESENT) { SOF_RT1011_SPEAKER_AMP_PRESENT) {
sof_rt1011_dai_link(&links[id]); sof_rt1011_dai_link(&links[id]);
} else { } else {
links[id].codecs = max98357a_component; max_98357a_dai_link(&links[id]);
links[id].num_codecs = ARRAY_SIZE(max98357a_component);
links[id].init = speaker_codec_init;
} }
links[id].platforms = platform_component; links[id].platforms = platform_component;
links[id].num_platforms = ARRAY_SIZE(platform_component); links[id].num_platforms = ARRAY_SIZE(platform_component);
links[id].nonatomic = true;
links[id].dpcm_playback = 1; links[id].dpcm_playback = 1;
links[id].no_pcm = 1; links[id].no_pcm = 1;
links[id].cpus = &cpus[id]; links[id].cpus = &cpus[id];
...@@ -780,6 +804,31 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev, ...@@ -780,6 +804,31 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
if (!links[id].cpus->dai_name) if (!links[id].cpus->dai_name)
goto devm_err; goto devm_err;
} }
id++;
}
/* BT audio offload */
if (sof_rt5682_quirk & SOF_SSP_BT_OFFLOAD_PRESENT) {
int port = (sof_rt5682_quirk & SOF_BT_OFFLOAD_SSP_MASK) >>
SOF_BT_OFFLOAD_SSP_SHIFT;
links[id].id = id;
links[id].cpus = &cpus[id];
links[id].cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL,
"SSP%d Pin", port);
if (!links[id].cpus->dai_name)
goto devm_err;
links[id].name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-BT", port);
if (!links[id].name)
goto devm_err;
links[id].codecs = dummy_component;
links[id].num_codecs = ARRAY_SIZE(dummy_component);
links[id].platforms = platform_component;
links[id].num_platforms = ARRAY_SIZE(platform_component);
links[id].dpcm_playback = 1;
links[id].dpcm_capture = 1;
links[id].no_pcm = 1;
links[id].num_cpus = 1;
} }
return links; return links;
...@@ -863,12 +912,15 @@ static int sof_audio_probe(struct platform_device *pdev) ...@@ -863,12 +912,15 @@ static int sof_audio_probe(struct platform_device *pdev)
sof_audio_card_rt5682.num_links++; sof_audio_card_rt5682.num_links++;
if (sof_rt5682_quirk & SOF_MAX98373_SPEAKER_AMP_PRESENT) if (sof_rt5682_quirk & SOF_MAX98373_SPEAKER_AMP_PRESENT)
sof_max98373_codec_conf(&sof_audio_card_rt5682); max_98373_set_codec_conf(&sof_audio_card_rt5682);
else if (sof_rt5682_quirk & SOF_RT1011_SPEAKER_AMP_PRESENT) else if (sof_rt5682_quirk & SOF_RT1011_SPEAKER_AMP_PRESENT)
sof_rt1011_codec_conf(&sof_audio_card_rt5682); sof_rt1011_codec_conf(&sof_audio_card_rt5682);
else if (sof_rt5682_quirk & SOF_RT1015P_SPEAKER_AMP_PRESENT) else if (sof_rt5682_quirk & SOF_RT1015P_SPEAKER_AMP_PRESENT)
sof_rt1015p_codec_conf(&sof_audio_card_rt5682); sof_rt1015p_codec_conf(&sof_audio_card_rt5682);
if (sof_rt5682_quirk & SOF_SSP_BT_OFFLOAD_PRESENT)
sof_audio_card_rt5682.num_links++;
dai_links = sof_card_dai_links_create(&pdev->dev, ssp_codec, ssp_amp, dai_links = sof_card_dai_links_create(&pdev->dev, ssp_codec, ssp_amp,
dmic_be_num, hdmi_num); dmic_be_num, hdmi_num);
if (!dai_links) if (!dai_links)
...@@ -909,7 +961,9 @@ static const struct platform_device_id board_ids[] = { ...@@ -909,7 +961,9 @@ static const struct platform_device_id board_ids[] = {
SOF_RT5682_SSP_CODEC(0) | SOF_RT5682_SSP_CODEC(0) |
SOF_SPEAKER_AMP_PRESENT | SOF_SPEAKER_AMP_PRESENT |
SOF_RT5682_SSP_AMP(1) | SOF_RT5682_SSP_AMP(1) |
SOF_RT5682_NUM_HDMIDEV(4)), SOF_RT5682_NUM_HDMIDEV(4) |
SOF_BT_OFFLOAD_SSP(2) |
SOF_SSP_BT_OFFLOAD_PRESENT),
}, },
{ {
.name = "jsl_rt5682_rt1015", .name = "jsl_rt5682_rt1015",
...@@ -927,7 +981,9 @@ static const struct platform_device_id board_ids[] = { ...@@ -927,7 +981,9 @@ static const struct platform_device_id board_ids[] = {
SOF_SPEAKER_AMP_PRESENT | SOF_SPEAKER_AMP_PRESENT |
SOF_MAX98373_SPEAKER_AMP_PRESENT | SOF_MAX98373_SPEAKER_AMP_PRESENT |
SOF_RT5682_SSP_AMP(1) | SOF_RT5682_SSP_AMP(1) |
SOF_RT5682_NUM_HDMIDEV(4)), SOF_RT5682_NUM_HDMIDEV(4) |
SOF_BT_OFFLOAD_SSP(2) |
SOF_SSP_BT_OFFLOAD_PRESENT),
}, },
{ {
.name = "jsl_rt5682_max98360a", .name = "jsl_rt5682_max98360a",
...@@ -955,7 +1011,9 @@ static const struct platform_device_id board_ids[] = { ...@@ -955,7 +1011,9 @@ static const struct platform_device_id board_ids[] = {
SOF_SPEAKER_AMP_PRESENT | SOF_SPEAKER_AMP_PRESENT |
SOF_RT1011_SPEAKER_AMP_PRESENT | SOF_RT1011_SPEAKER_AMP_PRESENT |
SOF_RT5682_SSP_AMP(1) | SOF_RT5682_SSP_AMP(1) |
SOF_RT5682_NUM_HDMIDEV(4)), SOF_RT5682_NUM_HDMIDEV(4) |
SOF_BT_OFFLOAD_SSP(2) |
SOF_SSP_BT_OFFLOAD_PRESENT),
}, },
{ {
.name = "jsl_rt5682_rt1015p", .name = "jsl_rt5682_rt1015p",
...@@ -966,6 +1024,25 @@ static const struct platform_device_id board_ids[] = { ...@@ -966,6 +1024,25 @@ static const struct platform_device_id board_ids[] = {
SOF_RT1015P_SPEAKER_AMP_PRESENT | SOF_RT1015P_SPEAKER_AMP_PRESENT |
SOF_RT5682_SSP_AMP(1)), SOF_RT5682_SSP_AMP(1)),
}, },
{
.name = "adl_max98373_rt5682",
.driver_data = (kernel_ulong_t)(SOF_RT5682_MCLK_EN |
SOF_RT5682_SSP_CODEC(0) |
SOF_SPEAKER_AMP_PRESENT |
SOF_MAX98373_SPEAKER_AMP_PRESENT |
SOF_RT5682_SSP_AMP(1) |
SOF_RT5682_NUM_HDMIDEV(4) |
SOF_BT_OFFLOAD_SSP(2) |
SOF_SSP_BT_OFFLOAD_PRESENT),
},
{
.name = "adl_max98357a_rt5682",
.driver_data = (kernel_ulong_t)(SOF_RT5682_MCLK_EN |
SOF_RT5682_SSP_CODEC(0) |
SOF_SPEAKER_AMP_PRESENT |
SOF_RT5682_SSP_AMP(2) |
SOF_RT5682_NUM_HDMIDEV(4)),
},
{ } { }
}; };
...@@ -993,3 +1070,7 @@ MODULE_ALIAS("platform:jsl_rt5682_max98360a"); ...@@ -993,3 +1070,7 @@ MODULE_ALIAS("platform:jsl_rt5682_max98360a");
MODULE_ALIAS("platform:cml_rt1015_rt5682"); MODULE_ALIAS("platform:cml_rt1015_rt5682");
MODULE_ALIAS("platform:tgl_rt1011_rt5682"); MODULE_ALIAS("platform:tgl_rt1011_rt5682");
MODULE_ALIAS("platform:jsl_rt5682_rt1015p"); MODULE_ALIAS("platform:jsl_rt5682_rt1015p");
MODULE_ALIAS("platform:adl_max98373_rt5682");
MODULE_ALIAS("platform:adl_max98357a_rt5682");
MODULE_IMPORT_NS(SND_SOC_INTEL_HDA_DSP_COMMON);
MODULE_IMPORT_NS(SND_SOC_INTEL_SOF_MAXIM_COMMON);
...@@ -147,7 +147,9 @@ static const struct dmi_system_id sof_sdw_quirk_table[] = { ...@@ -147,7 +147,9 @@ static const struct dmi_system_id sof_sdw_quirk_table[] = {
}, },
.driver_data = (void *)(SOF_SDW_TGL_HDMI | .driver_data = (void *)(SOF_SDW_TGL_HDMI |
SOF_SDW_PCH_DMIC | SOF_SDW_PCH_DMIC |
SOF_SDW_FOUR_SPK), SOF_SDW_FOUR_SPK |
SOF_BT_OFFLOAD_SSP(2) |
SOF_SSP_BT_OFFLOAD_PRESENT),
}, },
{ {
.callback = sof_sdw_quirk_cb, .callback = sof_sdw_quirk_cb,
...@@ -196,6 +198,7 @@ static const struct dmi_system_id sof_sdw_quirk_table[] = { ...@@ -196,6 +198,7 @@ static const struct dmi_system_id sof_sdw_quirk_table[] = {
}, },
.driver_data = (void *)(SOF_RT711_JD_SRC_JD1 | .driver_data = (void *)(SOF_RT711_JD_SRC_JD1 |
SOF_SDW_TGL_HDMI | SOF_SDW_TGL_HDMI |
SOF_RT715_DAI_ID_FIX |
SOF_SDW_PCH_DMIC), SOF_SDW_PCH_DMIC),
}, },
{} {}
...@@ -353,6 +356,7 @@ static struct sof_sdw_codec_info codec_info_list[] = { ...@@ -353,6 +356,7 @@ static struct sof_sdw_codec_info codec_info_list[] = {
.part_id = 0x714, .part_id = 0x714,
.version_id = 3, .version_id = 3,
.direction = {false, true}, .direction = {false, true},
.ignore_pch_dmic = true,
.dai_name = "rt715-aif2", .dai_name = "rt715-aif2",
.init = sof_sdw_rt715_sdca_init, .init = sof_sdw_rt715_sdca_init,
}, },
...@@ -360,6 +364,7 @@ static struct sof_sdw_codec_info codec_info_list[] = { ...@@ -360,6 +364,7 @@ static struct sof_sdw_codec_info codec_info_list[] = {
.part_id = 0x715, .part_id = 0x715,
.version_id = 3, .version_id = 3,
.direction = {false, true}, .direction = {false, true},
.ignore_pch_dmic = true,
.dai_name = "rt715-aif2", .dai_name = "rt715-aif2",
.init = sof_sdw_rt715_sdca_init, .init = sof_sdw_rt715_sdca_init,
}, },
...@@ -367,6 +372,7 @@ static struct sof_sdw_codec_info codec_info_list[] = { ...@@ -367,6 +372,7 @@ static struct sof_sdw_codec_info codec_info_list[] = {
.part_id = 0x714, .part_id = 0x714,
.version_id = 2, .version_id = 2,
.direction = {false, true}, .direction = {false, true},
.ignore_pch_dmic = true,
.dai_name = "rt715-aif2", .dai_name = "rt715-aif2",
.init = sof_sdw_rt715_init, .init = sof_sdw_rt715_init,
}, },
...@@ -374,6 +380,7 @@ static struct sof_sdw_codec_info codec_info_list[] = { ...@@ -374,6 +380,7 @@ static struct sof_sdw_codec_info codec_info_list[] = {
.part_id = 0x715, .part_id = 0x715,
.version_id = 2, .version_id = 2,
.direction = {false, true}, .direction = {false, true},
.ignore_pch_dmic = true,
.dai_name = "rt715-aif2", .dai_name = "rt715-aif2",
.init = sof_sdw_rt715_init, .init = sof_sdw_rt715_init,
}, },
...@@ -499,7 +506,6 @@ static void init_dai_link(struct device *dev, struct snd_soc_dai_link *dai_links ...@@ -499,7 +506,6 @@ static void init_dai_link(struct device *dev, struct snd_soc_dai_link *dai_links
dai_links->name = name; dai_links->name = name;
dai_links->platforms = platform_component; dai_links->platforms = platform_component;
dai_links->num_platforms = ARRAY_SIZE(platform_component); dai_links->num_platforms = ARRAY_SIZE(platform_component);
dai_links->nonatomic = true;
dai_links->no_pcm = 1; dai_links->no_pcm = 1;
dai_links->cpus = cpus; dai_links->cpus = cpus;
dai_links->num_cpus = cpus_num; dai_links->num_cpus = cpus_num;
...@@ -729,7 +735,8 @@ static int create_sdw_dailink(struct device *dev, int *be_index, ...@@ -729,7 +735,8 @@ static int create_sdw_dailink(struct device *dev, int *be_index,
int *cpu_id, bool *group_generated, int *cpu_id, bool *group_generated,
struct snd_soc_codec_conf *codec_conf, struct snd_soc_codec_conf *codec_conf,
int codec_count, int codec_count,
int *codec_conf_index) int *codec_conf_index,
bool *ignore_pch_dmic)
{ {
const struct snd_soc_acpi_link_adr *link_next; const struct snd_soc_acpi_link_adr *link_next;
struct snd_soc_dai_link_component *codecs; struct snd_soc_dai_link_component *codecs;
...@@ -782,6 +789,9 @@ static int create_sdw_dailink(struct device *dev, int *be_index, ...@@ -782,6 +789,9 @@ static int create_sdw_dailink(struct device *dev, int *be_index,
if (codec_index < 0) if (codec_index < 0)
return codec_index; return codec_index;
if (codec_info_list[codec_index].ignore_pch_dmic)
*ignore_pch_dmic = true;
cpu_dai_index = *cpu_id; cpu_dai_index = *cpu_id;
for_each_pcm_streams(stream) { for_each_pcm_streams(stream) {
char *name, *cpu_name; char *name, *cpu_name;
...@@ -913,6 +923,7 @@ static int sof_card_dai_links_create(struct device *dev, ...@@ -913,6 +923,7 @@ static int sof_card_dai_links_create(struct device *dev,
const struct snd_soc_acpi_link_adr *adr_link; const struct snd_soc_acpi_link_adr *adr_link;
struct snd_soc_dai_link_component *cpus; struct snd_soc_dai_link_component *cpus;
struct snd_soc_codec_conf *codec_conf; struct snd_soc_codec_conf *codec_conf;
bool ignore_pch_dmic = false;
int codec_conf_count; int codec_conf_count;
int codec_conf_index = 0; int codec_conf_index = 0;
bool group_generated[SDW_MAX_GROUPS]; bool group_generated[SDW_MAX_GROUPS];
...@@ -968,6 +979,9 @@ static int sof_card_dai_links_create(struct device *dev, ...@@ -968,6 +979,9 @@ static int sof_card_dai_links_create(struct device *dev,
dmic_num = (sof_sdw_quirk & SOF_SDW_PCH_DMIC || mach_params->dmic_num) ? 2 : 0; dmic_num = (sof_sdw_quirk & SOF_SDW_PCH_DMIC || mach_params->dmic_num) ? 2 : 0;
comp_num += dmic_num; comp_num += dmic_num;
if (sof_sdw_quirk & SOF_SSP_BT_OFFLOAD_PRESENT)
comp_num++;
dev_dbg(dev, "sdw %d, ssp %d, dmic %d, hdmi %d", sdw_be_num, ssp_num, dev_dbg(dev, "sdw %d, ssp %d, dmic %d, hdmi %d", sdw_be_num, ssp_num,
dmic_num, ctx->idisp_codec ? hdmi_num : 0); dmic_num, ctx->idisp_codec ? hdmi_num : 0);
...@@ -1019,7 +1033,8 @@ static int sof_card_dai_links_create(struct device *dev, ...@@ -1019,7 +1033,8 @@ static int sof_card_dai_links_create(struct device *dev,
sdw_cpu_dai_num, cpus, adr_link, sdw_cpu_dai_num, cpus, adr_link,
&cpu_id, group_generated, &cpu_id, group_generated,
codec_conf, codec_conf_count, codec_conf, codec_conf_count,
&codec_conf_index); &codec_conf_index,
&ignore_pch_dmic);
if (ret < 0) { if (ret < 0) {
dev_err(dev, "failed to create dai link %d", be_id); dev_err(dev, "failed to create dai link %d", be_id);
return -ENOMEM; return -ENOMEM;
...@@ -1087,6 +1102,10 @@ static int sof_card_dai_links_create(struct device *dev, ...@@ -1087,6 +1102,10 @@ static int sof_card_dai_links_create(struct device *dev,
DMIC: DMIC:
/* dmic */ /* dmic */
if (dmic_num > 0) { if (dmic_num > 0) {
if (ignore_pch_dmic) {
dev_warn(dev, "Ignoring PCH DMIC\n");
goto HDMI;
}
cpus[cpu_id].dai_name = "DMIC01 Pin"; cpus[cpu_id].dai_name = "DMIC01 Pin";
init_dai_link(dev, links + link_id, be_id, "dmic01", init_dai_link(dev, links + link_id, be_id, "dmic01",
0, 1, // DMIC only supports capture 0, 1, // DMIC only supports capture
...@@ -1105,6 +1124,7 @@ static int sof_card_dai_links_create(struct device *dev, ...@@ -1105,6 +1124,7 @@ static int sof_card_dai_links_create(struct device *dev,
INC_ID(be_id, cpu_id, link_id); INC_ID(be_id, cpu_id, link_id);
} }
HDMI:
/* HDMI */ /* HDMI */
if (hdmi_num > 0) { if (hdmi_num > 0) {
idisp_components = devm_kcalloc(dev, hdmi_num, idisp_components = devm_kcalloc(dev, hdmi_num,
...@@ -1147,6 +1167,31 @@ static int sof_card_dai_links_create(struct device *dev, ...@@ -1147,6 +1167,31 @@ static int sof_card_dai_links_create(struct device *dev,
INC_ID(be_id, cpu_id, link_id); INC_ID(be_id, cpu_id, link_id);
} }
if (sof_sdw_quirk & SOF_SSP_BT_OFFLOAD_PRESENT) {
int port = (sof_sdw_quirk & SOF_BT_OFFLOAD_SSP_MASK) >>
SOF_BT_OFFLOAD_SSP_SHIFT;
name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-BT", port);
if (!name)
return -ENOMEM;
ssp_components = devm_kzalloc(dev, sizeof(*ssp_components),
GFP_KERNEL);
if (!ssp_components)
return -ENOMEM;
ssp_components->name = "snd-soc-dummy";
ssp_components->dai_name = "snd-soc-dummy-dai";
cpu_name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d Pin", port);
if (!cpu_name)
return -ENOMEM;
cpus[cpu_id].dai_name = cpu_name;
init_dai_link(dev, links + link_id, be_id, name, 1, 1,
cpus + cpu_id, 1, ssp_components, 1, NULL, NULL);
}
card->dai_link = links; card->dai_link = links;
card->num_links = num_links; card->num_links = num_links;
...@@ -1302,3 +1347,5 @@ MODULE_AUTHOR("Rander Wang <rander.wang@linux.intel.com>"); ...@@ -1302,3 +1347,5 @@ MODULE_AUTHOR("Rander Wang <rander.wang@linux.intel.com>");
MODULE_AUTHOR("Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>"); MODULE_AUTHOR("Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>");
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
MODULE_ALIAS("platform:sof_sdw"); MODULE_ALIAS("platform:sof_sdw");
MODULE_IMPORT_NS(SND_SOC_INTEL_HDA_DSP_COMMON);
MODULE_IMPORT_NS(SND_SOC_INTEL_SOF_MAXIM_COMMON);
...@@ -50,12 +50,20 @@ enum { ...@@ -50,12 +50,20 @@ enum {
#define SOF_RT715_DAI_ID_FIX BIT(11) #define SOF_RT715_DAI_ID_FIX BIT(11)
#define SOF_SDW_NO_AGGREGATION BIT(12) #define SOF_SDW_NO_AGGREGATION BIT(12)
/* BT audio offload: reserve 3 bits for future */
#define SOF_BT_OFFLOAD_SSP_SHIFT 13
#define SOF_BT_OFFLOAD_SSP_MASK (GENMASK(15, 13))
#define SOF_BT_OFFLOAD_SSP(quirk) \
(((quirk) << SOF_BT_OFFLOAD_SSP_SHIFT) & SOF_BT_OFFLOAD_SSP_MASK)
#define SOF_SSP_BT_OFFLOAD_PRESENT BIT(16)
struct sof_sdw_codec_info { struct sof_sdw_codec_info {
const int part_id; const int part_id;
const int version_id; const int version_id;
int amp_num; int amp_num;
const u8 acpi_id[ACPI_ID_LEN]; const u8 acpi_id[ACPI_ID_LEN];
const bool direction[2]; // playback & capture support const bool direction[2]; // playback & capture support
const bool ignore_pch_dmic;
const char *dai_name; const char *dai_name;
const struct snd_soc_ops *ops; const struct snd_soc_ops *ops;
......
...@@ -64,7 +64,7 @@ static int max98373_sdw_trigger(struct snd_pcm_substream *substream, int cmd) ...@@ -64,7 +64,7 @@ static int max98373_sdw_trigger(struct snd_pcm_substream *substream, int cmd)
case SNDRV_PCM_TRIGGER_RESUME: case SNDRV_PCM_TRIGGER_RESUME:
case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
/* enable max98373 first */ /* enable max98373 first */
ret = max98373_trigger(substream, cmd); ret = max_98373_trigger(substream, cmd);
if (ret < 0) if (ret < 0)
break; break;
...@@ -77,7 +77,7 @@ static int max98373_sdw_trigger(struct snd_pcm_substream *substream, int cmd) ...@@ -77,7 +77,7 @@ static int max98373_sdw_trigger(struct snd_pcm_substream *substream, int cmd)
if (ret < 0) if (ret < 0)
break; break;
ret = max98373_trigger(substream, cmd); ret = max_98373_trigger(substream, cmd);
break; break;
default: default:
ret = -EINVAL; ret = -EINVAL;
......
...@@ -167,7 +167,6 @@ static struct snd_soc_dai_link dailink[] = { ...@@ -167,7 +167,6 @@ static struct snd_soc_dai_link dailink[] = {
.name = "SSP5-Codec", .name = "SSP5-Codec",
.id = 0, .id = 0,
.no_pcm = 1, .no_pcm = 1,
.nonatomic = true,
.dpcm_playback = 1, .dpcm_playback = 1,
.dpcm_capture = 1, .dpcm_capture = 1,
.ops = &sof_wm8804_ops, .ops = &sof_wm8804_ops,
......
...@@ -232,7 +232,33 @@ static const struct snd_soc_acpi_link_adr adl_rvp[] = { ...@@ -232,7 +232,33 @@ static const struct snd_soc_acpi_link_adr adl_rvp[] = {
{} {}
}; };
static const struct snd_soc_acpi_codecs adl_max98373_amp = {
.num_codecs = 1,
.codecs = {"MX98373"}
};
static const struct snd_soc_acpi_codecs adl_max98357a_amp = {
.num_codecs = 1,
.codecs = {"MX98357A"}
};
struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_machines[] = { struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_machines[] = {
{
.id = "10EC5682",
.drv_name = "adl_max98373_rt5682",
.machine_quirk = snd_soc_acpi_codec_list,
.quirk_data = &adl_max98373_amp,
.sof_fw_filename = "sof-adl.ri",
.sof_tplg_filename = "sof-adl-max98373-rt5682.tplg",
},
{
.id = "10EC5682",
.drv_name = "adl_max98357a_rt5682",
.machine_quirk = snd_soc_acpi_codec_list,
.quirk_data = &adl_max98357a_amp,
.sof_fw_filename = "sof-adl.ri",
.sof_tplg_filename = "sof-adl-max98357a-rt5682.tplg",
},
{}, {},
}; };
EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_adl_machines); EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_adl_machines);
......
...@@ -40,6 +40,16 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_glk_machines[] = { ...@@ -40,6 +40,16 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_glk_machines[] = {
.sof_fw_filename = "sof-glk.ri", .sof_fw_filename = "sof-glk.ri",
.sof_tplg_filename = "sof-glk-rt5682.tplg", .sof_tplg_filename = "sof-glk-rt5682.tplg",
}, },
{
.id = "10134242",
.drv_name = "glk_cs4242_max98357a",
.fw_filename = "intel/dsp_fw_glk.bin",
.machine_quirk = snd_soc_acpi_codec_list,
.quirk_data = &glk_codecs,
.sof_fw_filename = "sof-glk.ri",
.sof_tplg_filename = "sof-glk-cs42l42.tplg",
},
{}, {},
}; };
EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_glk_machines); EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_glk_machines);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment