2021-02-25 18:12:22

by Sameer Pujar

[permalink] [raw]
Subject: [RFC PATCH 0/5] Flexible sysclk/pll configuration

This series attempts to add flexible system clock (sysclk) and pll
configuration for the DAI controller from simple card or audio graph
card.

Sysclk configuration
====================
Motivation:
-----------
The problem this tries to address is, some Codecs may have
multiple clocks and multiple sources for its sysclk. For example
sysclk may depend on MCLK provided by SoC or it may used an
internal pll. The simple card or audio graph card driver is
generic and can be used on multiple platforms. So if a platform
using this driver needs a generic configuration, then the Codec
specific stuff cannot be hardcoded in the driver. Hence it would
be better if the info is driven from DT, especially from a
Codec DAI or endpoint subnode.

Solution:
---------
"system-clock-id" and "system-clock-source" DT properties can be
exposed for a flexible sysclk configuration. These properties
go into a Codec DAI or endpoint subnode.

Please note that other sysclk related properties like
"system-clock-frequency" and "system-clock-direction-out" are
already present.

Currently snd_soc_dai_set_sysclk() does not have an argument
for source. This series adds this additional field and updates
all the required drivers. This is needed because ideally sysclk
"clk_id" and "source" fields are different. Some drivers are
making use of "clk_id" field to program source information.
**May be this needs to be corrected going ahead**


Pll configuration
=================
Motivation:
-----------
Similar to sysclk configuration, pll configuration also needs
little more flexibility. If a Codec has internal pll and it
can be sourced from multiple clocks a specific configuration
may be required for a given platform.

Some of the cases are:
- MCLK (supplied by SoC) --> Codec pll -> Codec sysclk
- SoC I2S bit clock (BCLK) --> Codec pll -> Codec sysclk

Solution:
---------
Approach is similar to what is done for extending sysclk
flexibility. Following DT properties are added to address the
same.

"pll-id"
"pll-source"
"pll-input-reference"
"pll-output-reference"
"pll-input-frequency"
"pll-output-frequency"

All these are optional properties. Simple card or audio graph
card drivers can use above info and call snd_soc_dai_set_pll()
for necessary configuration.

Sameer Pujar (5):
ASoC: soc-component: Fix return value of snd_soc_component_set_pll()
ASoC: soc-dai: Add sysclk source to snd_soc_dai_set_sysclk()
ASoC: audio-graph-card: Add bindings for sysclk and pll
ASoC: simple-card-utils: Parse sysclk id and source
ASoC: simple-card-utils: Support pll configuration

.../bindings/sound/audio-graph-port.yaml | 71 +++++++++
include/sound/simple_card_utils.h | 35 +++++
include/sound/soc-dai.h | 4 +-
sound/soc/amd/acp-da7219-max98357a.c | 2 +-
sound/soc/amd/acp-rt5645.c | 2 +-
sound/soc/amd/acp3x-rt5682-max9836.c | 4 +-
sound/soc/atmel/atmel_wm8904.c | 2 +-
sound/soc/atmel/mchp-i2s-mcc.c | 2 +-
sound/soc/atmel/mikroe-proto.c | 2 +-
sound/soc/atmel/sam9g20_wm8731.c | 2 +-
sound/soc/atmel/sam9x5_wm8731.c | 2 +-
sound/soc/bcm/cygnus-ssp.c | 2 +-
sound/soc/cirrus/edb93xx.c | 2 +-
sound/soc/cirrus/ep93xx-i2s.c | 2 +-
sound/soc/cirrus/snappercl15.c | 4 +-
sound/soc/codecs/88pm860x-codec.c | 2 +-
sound/soc/codecs/ad193x.c | 2 +-
sound/soc/codecs/adau1373.c | 2 +-
sound/soc/codecs/adau17x1.c | 2 +-
sound/soc/codecs/ak4535.c | 2 +-
sound/soc/codecs/ak4613.c | 2 +-
sound/soc/codecs/ak4641.c | 2 +-
sound/soc/codecs/ak4642.c | 2 +-
sound/soc/codecs/ak4671.c | 2 +-
sound/soc/codecs/alc5623.c | 2 +-
sound/soc/codecs/alc5632.c | 2 +-
sound/soc/codecs/arizona.c | 2 +-
sound/soc/codecs/cpcap.c | 4 +-
sound/soc/codecs/cq93vc.c | 2 +-
sound/soc/codecs/cs35l34.c | 2 +-
sound/soc/codecs/cs35l35.c | 2 +-
sound/soc/codecs/cs35l36.c | 2 +-
sound/soc/codecs/cs4265.c | 2 +-
sound/soc/codecs/cs4270.c | 2 +-
sound/soc/codecs/cs4271.c | 2 +-
sound/soc/codecs/cs42l42.c | 2 +-
sound/soc/codecs/cs42l51.c | 2 +-
sound/soc/codecs/cs42l52.c | 2 +-
sound/soc/codecs/cs42l56.c | 2 +-
sound/soc/codecs/cs42l73.c | 2 +-
sound/soc/codecs/cs42xx8.c | 2 +-
sound/soc/codecs/cs43130.c | 2 +-
sound/soc/codecs/cs53l30.c | 2 +-
sound/soc/codecs/cx2072x.c | 2 +-
sound/soc/codecs/da7210.c | 2 +-
sound/soc/codecs/da7218.c | 2 +-
sound/soc/codecs/da7219.c | 2 +-
sound/soc/codecs/da732x.c | 2 +-
sound/soc/codecs/da9055.c | 2 +-
sound/soc/codecs/es7134.c | 2 +-
sound/soc/codecs/es7241.c | 2 +-
sound/soc/codecs/es8316.c | 2 +-
sound/soc/codecs/es8328.c | 2 +-
sound/soc/codecs/lm49453.c | 2 +-
sound/soc/codecs/madera.c | 3 +-
sound/soc/codecs/max98088.c | 3 +-
sound/soc/codecs/max98090.c | 2 +-
sound/soc/codecs/max98095.c | 2 +-
sound/soc/codecs/max98390.c | 2 +-
sound/soc/codecs/max9850.c | 2 +-
sound/soc/codecs/max9867.c | 2 +-
sound/soc/codecs/max98925.c | 2 +-
sound/soc/codecs/max98927.c | 2 +-
sound/soc/codecs/mc13783.c | 6 +-
sound/soc/codecs/ml26124.c | 2 +-
sound/soc/codecs/nau8810.c | 2 +-
sound/soc/codecs/nau8822.c | 2 +-
sound/soc/codecs/pcm186x.c | 2 +-
sound/soc/codecs/pcm3060.c | 2 +-
sound/soc/codecs/pcm3168a.c | 2 +-
sound/soc/codecs/rt1011.c | 2 +-
sound/soc/codecs/rt1305.c | 2 +-
sound/soc/codecs/rt274.c | 2 +-
sound/soc/codecs/rt286.c | 2 +-
sound/soc/codecs/rt298.c | 2 +-
sound/soc/codecs/rt5514.c | 2 +-
sound/soc/codecs/rt5616.c | 2 +-
sound/soc/codecs/rt5631.c | 2 +-
sound/soc/codecs/rt5640.c | 2 +-
sound/soc/codecs/rt5645.c | 2 +-
sound/soc/codecs/rt5651.c | 2 +-
sound/soc/codecs/rt5660.c | 2 +-
sound/soc/codecs/rt5663.c | 2 +-
sound/soc/codecs/rt5677.c | 2 +-
sound/soc/codecs/sgtl5000.c | 2 +-
sound/soc/codecs/ssm2602.c | 2 +-
sound/soc/codecs/sta32x.c | 2 +-
sound/soc/codecs/sta350.c | 2 +-
sound/soc/codecs/sti-sas.c | 2 +-
sound/soc/codecs/tas2552.c | 2 +-
sound/soc/codecs/tas5086.c | 2 +-
sound/soc/codecs/tlv320aic23.c | 2 +-
sound/soc/codecs/tlv320aic26.c | 2 +-
sound/soc/codecs/tlv320aic31xx.c | 2 +-
sound/soc/codecs/tlv320aic32x4.c | 2 +-
sound/soc/codecs/tlv320aic3x.c | 2 +-
sound/soc/codecs/tlv320dac33.c | 2 +-
sound/soc/codecs/tscs454.c | 2 +-
sound/soc/codecs/twl4030.c | 4 +-
sound/soc/codecs/twl6040.c | 2 +-
sound/soc/codecs/uda1334.c | 2 +-
sound/soc/codecs/uda134x.c | 2 +-
sound/soc/codecs/wm8350.c | 2 +-
sound/soc/codecs/wm8400.c | 2 +-
sound/soc/codecs/wm8523.c | 2 +-
sound/soc/codecs/wm8524.c | 2 +-
sound/soc/codecs/wm8580.c | 2 +-
sound/soc/codecs/wm8711.c | 2 +-
sound/soc/codecs/wm8731.c | 2 +-
sound/soc/codecs/wm8737.c | 2 +-
sound/soc/codecs/wm8741.c | 2 +-
sound/soc/codecs/wm8750.c | 2 +-
sound/soc/codecs/wm8753.c | 2 +-
sound/soc/codecs/wm8770.c | 2 +-
sound/soc/codecs/wm8776.c | 2 +-
sound/soc/codecs/wm8804.c | 2 +-
sound/soc/codecs/wm8903.c | 2 +-
sound/soc/codecs/wm8904.c | 2 +-
sound/soc/codecs/wm8940.c | 2 +-
sound/soc/codecs/wm8955.c | 2 +-
sound/soc/codecs/wm8960.c | 2 +-
sound/soc/codecs/wm8961.c | 2 +-
sound/soc/codecs/wm8962.c | 2 +-
sound/soc/codecs/wm8971.c | 2 +-
sound/soc/codecs/wm8974.c | 2 +-
sound/soc/codecs/wm8978.c | 2 +-
sound/soc/codecs/wm8983.c | 2 +-
sound/soc/codecs/wm8985.c | 2 +-
sound/soc/codecs/wm8988.c | 2 +-
sound/soc/codecs/wm8990.c | 2 +-
sound/soc/codecs/wm8993.c | 2 +-
sound/soc/codecs/wm8994.c | 2 +-
sound/soc/codecs/wm8995.c | 2 +-
sound/soc/codecs/wm8996.c | 2 +-
sound/soc/fsl/eukrea-tlv320.c | 4 +-
sound/soc/fsl/fsl-asoc-card.c | 8 +-
sound/soc/fsl/fsl_esai.c | 2 +-
sound/soc/fsl/fsl_micfil.c | 2 +-
sound/soc/fsl/fsl_sai.c | 8 +-
sound/soc/fsl/imx-audmix.c | 2 +-
sound/soc/fsl/imx-hdmi.c | 2 +-
sound/soc/fsl/imx-sgtl5000.c | 2 +-
sound/soc/fsl/mpc5200_psc_i2s.c | 2 +-
sound/soc/fsl/mpc8610_hpcd.c | 2 +-
sound/soc/fsl/p1022_ds.c | 2 +-
sound/soc/generic/simple-card-utils.c | 173 +++++++++++++++++++--
sound/soc/intel/boards/bdw-rt5650.c | 2 +-
sound/soc/intel/boards/bdw-rt5677.c | 4 +-
sound/soc/intel/boards/broadwell.c | 2 +-
sound/soc/intel/boards/bxt_da7219_max98357a.c | 2 +-
sound/soc/intel/boards/bxt_rt298.c | 2 +-
sound/soc/intel/boards/bytcht_cx2072x.c | 2 +-
sound/soc/intel/boards/bytcht_da7213.c | 2 +-
sound/soc/intel/boards/bytcht_es8316.c | 2 +-
sound/soc/intel/boards/bytcr_rt5640.c | 4 +-
sound/soc/intel/boards/bytcr_rt5651.c | 4 +-
sound/soc/intel/boards/bytcr_wm5102.c | 2 +-
sound/soc/intel/boards/cht_bsw_max98090_ti.c | 2 +-
sound/soc/intel/boards/cht_bsw_nau8824.c | 2 +-
sound/soc/intel/boards/cht_bsw_rt5645.c | 4 +-
sound/soc/intel/boards/cht_bsw_rt5672.c | 4 +-
sound/soc/intel/boards/cml_rt1011_rt5682.c | 2 +-
sound/soc/intel/boards/glk_rt5682_max98357a.c | 2 +-
sound/soc/intel/boards/haswell.c | 2 +-
sound/soc/intel/boards/kbl_da7219_max98357a.c | 2 +-
sound/soc/intel/boards/kbl_da7219_max98927.c | 2 +-
sound/soc/intel/boards/skl_rt286.c | 2 +-
sound/soc/intel/boards/sof_da7219_max98373.c | 2 +-
sound/soc/intel/boards/sof_realtek_common.c | 2 +-
sound/soc/intel/boards/sof_rt5682.c | 4 +-
sound/soc/intel/boards/sof_sdw_rt1308.c | 2 +-
sound/soc/intel/boards/sof_wm8804.c | 2 +-
sound/soc/jz4740/jz4740-i2s.c | 2 +-
sound/soc/kirkwood/armada-370-db.c | 2 +-
sound/soc/mediatek/mt2701/mt2701-afe-pcm.c | 2 +-
sound/soc/mediatek/mt2701/mt2701-cs42448.c | 4 +-
sound/soc/mediatek/mt2701/mt2701-wm8960.c | 4 +-
sound/soc/mediatek/mt8173/mt8173-max98090.c | 2 +-
sound/soc/mediatek/mt8173/mt8173-rt5650-rt5514.c | 2 +-
sound/soc/mediatek/mt8173/mt8173-rt5650-rt5676.c | 2 +-
sound/soc/mediatek/mt8173/mt8173-rt5650.c | 2 +-
sound/soc/mediatek/mt8183/mt8183-da7219-max98357.c | 8 +-
sound/soc/mediatek/mt8183/mt8183-dai-i2s.c | 2 +-
sound/soc/mediatek/mt8183/mt8183-dai-tdm.c | 2 +-
.../mt8183/mt8183-mt6358-ts3a227-max98357.c | 6 +-
sound/soc/mediatek/mt8192/mt8192-dai-i2s.c | 2 +-
sound/soc/mediatek/mt8192/mt8192-dai-tdm.c | 2 +-
.../mediatek/mt8192/mt8192-mt6359-rt1015-rt5682.c | 8 +-
sound/soc/meson/aiu-encoder-i2s.c | 2 +-
sound/soc/meson/axg-tdm-interface.c | 2 +-
sound/soc/meson/meson-card-utils.c | 4 +-
sound/soc/mxs/mxs-saif.c | 2 +-
sound/soc/mxs/mxs-sgtl5000.c | 4 +-
sound/soc/pxa/brownstone.c | 4 +-
sound/soc/pxa/corgi.c | 4 +-
sound/soc/pxa/hx4700.c | 4 +-
sound/soc/pxa/imote2.c | 4 +-
sound/soc/pxa/magician.c | 4 +-
sound/soc/pxa/mmp-sspa.c | 2 +-
sound/soc/pxa/poodle.c | 4 +-
sound/soc/pxa/pxa-ssp.c | 2 +-
sound/soc/pxa/pxa2xx-i2s.c | 2 +-
sound/soc/pxa/spitz.c | 4 +-
sound/soc/pxa/z2.c | 4 +-
sound/soc/pxa/zylonite.c | 2 +-
sound/soc/qcom/apq8096.c | 2 +-
sound/soc/qcom/lpass-cpu.c | 2 +-
sound/soc/qcom/qdsp6/q6afe-dai.c | 2 +-
sound/soc/qcom/sc7180.c | 6 +-
sound/soc/qcom/sdm845.c | 22 +--
sound/soc/qcom/sm8250.c | 2 +-
sound/soc/qcom/storm.c | 2 +-
sound/soc/rockchip/rk3288_hdmi_analog.c | 4 +-
sound/soc/rockchip/rk3399_gru_sound.c | 14 +-
sound/soc/rockchip/rockchip_i2s.c | 2 +-
sound/soc/rockchip/rockchip_max98090.c | 4 +-
sound/soc/rockchip/rockchip_rt5645.c | 4 +-
sound/soc/samsung/aries_wm8994.c | 6 +-
sound/soc/samsung/arndale.c | 8 +-
sound/soc/samsung/bells.c | 6 +-
sound/soc/samsung/h1940_uda1380.c | 2 +-
sound/soc/samsung/i2s.c | 6 +-
sound/soc/samsung/jive_wm8750.c | 2 +-
sound/soc/samsung/littlemill.c | 14 +-
sound/soc/samsung/midas_wm1811.c | 10 +-
sound/soc/samsung/neo1973_wm8753.c | 4 +-
sound/soc/samsung/odroid.c | 2 +-
sound/soc/samsung/pcm.c | 2 +-
sound/soc/samsung/rx1950_uda1380.c | 2 +-
sound/soc/samsung/s3c24xx-i2s.c | 2 +-
sound/soc/samsung/s3c24xx_simtec.c | 4 +-
sound/soc/samsung/s3c24xx_uda134x.c | 4 +-
sound/soc/samsung/smartq_wm8987.c | 6 +-
sound/soc/samsung/smdk_spdif.c | 2 +-
sound/soc/samsung/smdk_wm8580.c | 2 +-
sound/soc/samsung/smdk_wm8994.c | 2 +-
sound/soc/samsung/smdk_wm8994pcm.c | 4 +-
sound/soc/samsung/snow.c | 2 +-
sound/soc/samsung/spdif.c | 2 +-
sound/soc/samsung/speyside.c | 8 +-
sound/soc/samsung/tm2_wm5110.c | 6 +-
sound/soc/samsung/tobermory.c | 6 +-
sound/soc/sh/migor.c | 4 +-
sound/soc/sh/siu_dai.c | 2 +-
sound/soc/sh/ssi.c | 2 +-
sound/soc/soc-component.c | 2 +-
sound/soc/soc-dai.c | 9 +-
sound/soc/sti/uniperif_player.c | 2 +-
sound/soc/stm/stm32_adfsdm.c | 2 +-
sound/soc/stm/stm32_i2s.c | 2 +-
sound/soc/stm/stm32_sai_sub.c | 2 +-
sound/soc/sunxi/sun4i-i2s.c | 2 +-
sound/soc/tegra/tegra_alc5632.c | 2 +-
sound/soc/tegra/tegra_max98090.c | 2 +-
sound/soc/tegra/tegra_rt5640.c | 2 +-
sound/soc/tegra/tegra_rt5677.c | 2 +-
sound/soc/tegra/tegra_sgtl5000.c | 2 +-
sound/soc/tegra/tegra_wm8753.c | 2 +-
sound/soc/tegra/tegra_wm8903.c | 2 +-
sound/soc/tegra/trimslice.c | 2 +-
sound/soc/ti/davinci-evm.c | 4 +-
sound/soc/ti/davinci-mcasp.c | 2 +-
sound/soc/ti/j721e-evm.c | 8 +-
sound/soc/ti/n810.c | 2 +-
sound/soc/ti/omap-abe-twl6040.c | 6 +-
sound/soc/ti/omap-dmic.c | 2 +-
sound/soc/ti/omap-mcbsp.c | 2 +-
sound/soc/ti/omap3pandora.c | 4 +-
sound/soc/ti/rx51.c | 2 +-
sound/soc/uniphier/aio-cpu.c | 4 +-
sound/soc/ux500/ux500_msp_dai.c | 2 +-
271 files changed, 639 insertions(+), 389 deletions(-)

--
2.7.4


2021-02-25 18:13:49

by Sameer Pujar

[permalink] [raw]
Subject: [RFC PATCH 5/5] ASoC: simple-card-utils: Support pll configuration

Some CPU/Codec DAI controllers may have an internal pll which can be
used to source its clocking requirements. The ASoC core provides a DAI
or component callback snd_soc_dai_set_pll() to configure this. But
currently simple-card or audio-graph card drivers are not using this.

To configure pll on DAI controller side, following optional DT properties
can be used. These can be specified in CPU/Codec DAI or endpoint subnode.

- pll-id : DAI specific pll id.

- pll-source : DAI specific pll source. CPU/Codec DAI can
specify the source that is used for pll
reference.

- pll-input-reference : Depending on the given value, input frequency
can be calculated at runtime. For example if
I2S bit clock is used as reference, rate depends
on the actual PCM parameters (rate, channels and
bits) during an audio session. If a fixed rate is
used, then "pll-input-frequency" can be used
instead.

- pll-output-reference : Depending on the given value, output frequency
can be calculated at runtime. If output clock is
used for MCLK purpose, then it may depend on
"mclk-fs" scale factor. In such cases it needs to
be calculated at runtime. If a fixed output
frequency is needed, then "pll-output-frequency"
can be used instead.

- pll-input-frequency : Specify fixed input frequency in Hz. This is
checked only when "pll-input-reference" is not
specified.

- pll-output-frequency : Specify fixed output frequency in Hz. This is
checked only when "pll-output-reference" is not
specified.

Usage examples with RT5658 Codec:

1. Use MCLK for Codec sysclk

codec-subnode {
mclk-fs = <256>;
system-clock-source = <RT5659_SCLK_S_MCLK>;
};

In above case, the sysclk source is set to MCLK and the sysclk rate
is set to 256 * fs, where fs is sampling rate of the stream.

2. Use Codec internal pll to derive Codec sysclk. The pll can use
SoC I2S bit clock (BCLK) as reference.

codec-subnode {
mclk-fs = <256>;

system-clock-source = <RT5659_SCLK_S_PLL1>;

pll-source = <RT5659_PLL1_S_BCLK1>;

/*
* SoC I2S BCLK as reference. Based on this pll input rate
* (sample rate * channels * bits) is calculated at runtime.
*/
pll-input-reference = <2>;

/*
* pll will generate output rate based on MCLK, which is
* calculated at runtime as (mclk_fs * sample rate).
*/
pll-output-reference = <1>; /* MCLK as output rate */
};

Cc: Kuninori Morimoto <[email protected]>
Signed-off-by: Sameer Pujar <[email protected]>
---
include/sound/simple_card_utils.h | 33 ++++++++++
sound/soc/generic/simple-card-utils.c | 114 ++++++++++++++++++++++++++++++++++
2 files changed, 147 insertions(+)

diff --git a/include/sound/simple_card_utils.h b/include/sound/simple_card_utils.h
index e026bf2..0f937eb 100644
--- a/include/sound/simple_card_utils.h
+++ b/include/sound/simple_card_utils.h
@@ -16,11 +16,44 @@
#define asoc_simple_init_mic(card, sjack, prefix) \
asoc_simple_init_jack(card, sjack, 0, prefix, NULL)

+/*
+ * External audio Codecs for their system clock (sysclk) may use one
+ * of the following:
+ *
+ * - MCLK provided by SoC (already "system-clock-frequency" or
+ * "mclk-fs" bindings exist)
+ *
+ * - Codec internal PLL which can take reference from SoC audio
+ * interface bit clock (BCLK) and generate required sysclk for
+ * the Codec.
+ *
+ * - Codec internal PLL taking reference from onboard crystal and
+ * generate required sysclk for the Codec.
+ *
+ * BCLK depends on PCM parameters (rate, channels and bits) and has
+ * to be calculated at runtime. So is MCLK, sometimes it depends on
+ * sample rate and a scaling factor. So whenever PLL is used for
+ * sysclk, input and output references/rates need to be provided.
+ *
+ * Following macros can be used to setup input/output frequency
+ * requirements for the PLL.
+ */
+
+#define SND_SOC_DAI_PLL_REF_FIXED 0
+#define SND_SOC_DAI_PLL_REF_MCLK (1 << 0)
+#define SND_SOC_DAI_PLL_REF_BCLK (1 << 1)
+
struct asoc_simple_dai {
const char *name;
unsigned int sysclk;
int sysclk_id;
int sysclk_source;
+ unsigned int pll_id;
+ unsigned int pll_source;
+ unsigned int pll_in_freq;
+ unsigned int pll_out_freq;
+ unsigned int pll_in_ref;
+ unsigned int pll_out_ref;
int clk_direction;
int slots;
int slot_width;
diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simple-card-utils.c
index bbbf891..6bfde08 100644
--- a/sound/soc/generic/simple-card-utils.c
+++ b/sound/soc/generic/simple-card-utils.c
@@ -12,6 +12,7 @@
#include <linux/of_gpio.h>
#include <linux/of_graph.h>
#include <sound/jack.h>
+#include <sound/pcm_params.h>
#include <sound/simple_card_utils.h>

void asoc_simple_convert_fixup(struct asoc_simple_data *data,
@@ -190,6 +191,30 @@ int asoc_simple_parse_clk(struct device *dev,

of_property_read_u32(node, "system-clock-source", &simple_dai->sysclk_source);

+ of_property_read_u32(node, "pll-id", &simple_dai->pll_id);
+
+ of_property_read_u32(node, "pll-source", &simple_dai->pll_source);
+
+ if (of_property_read_u32(node, "pll-input-reference",
+ &simple_dai->pll_in_ref)) {
+ /*
+ * Look for "pll-input-frequency" if no explicit reference
+ * is provided.
+ */
+ of_property_read_u32(node, "pll-input-frequency",
+ &simple_dai->pll_in_freq);
+ }
+
+ if (of_property_read_u32(node, "pll-output-reference",
+ &simple_dai->pll_out_ref)) {
+ /*
+ * Look for "pll-output-frequency" if no explicit reference
+ * is provided.
+ */
+ of_property_read_u32(node, "pll-output-frequency",
+ &simple_dai->pll_out_freq);
+ }
+
return 0;
}
EXPORT_SYMBOL_GPL(asoc_simple_parse_clk);
@@ -217,6 +242,82 @@ static int asoc_simple_set_sysclk(struct snd_soc_dai *dai,
return 0;
}

+static int asoc_simple_enable_pll(struct snd_soc_dai *dai,
+ struct asoc_simple_dai *simple_dai,
+ struct snd_pcm_hw_params *params,
+ unsigned int mclk_fs)
+{
+ int ret;
+
+ if (!simple_dai)
+ return 0;
+
+ switch (simple_dai->pll_in_ref) {
+ case SND_SOC_DAI_PLL_REF_FIXED:
+ break;
+ case SND_SOC_DAI_PLL_REF_MCLK:
+ simple_dai->pll_in_freq = params_rate(params) * mclk_fs;
+ break;
+ case SND_SOC_DAI_PLL_REF_BCLK:
+ simple_dai->pll_in_freq = params_rate(params) *
+ params_channels(params) *
+ params_width(params);
+ break;
+ default:
+ dev_err(dai->dev, "pll input reference is invalid!\n");
+ return -EINVAL;
+ }
+
+ switch (simple_dai->pll_out_ref) {
+ case SND_SOC_DAI_PLL_REF_FIXED:
+ break;
+ case SND_SOC_DAI_PLL_REF_MCLK:
+ simple_dai->pll_out_freq = params_rate(params) * mclk_fs;
+ break;
+ case SND_SOC_DAI_PLL_REF_BCLK:
+ simple_dai->pll_out_freq = params_rate(params) *
+ params_channels(params) *
+ params_width(params);
+ break;
+ default:
+ dev_err(dai->dev, "pll output reference is invalid!\n");
+ return -EINVAL;
+ }
+
+ if (!simple_dai->pll_in_freq && !simple_dai->pll_out_freq) {
+ /* There is nothing to be configured */
+ return 0;
+ } else if ((!simple_dai->pll_in_freq && simple_dai->pll_out_freq) ||
+ (simple_dai->pll_in_freq && !simple_dai->pll_out_freq)) {
+ dev_err(dai->dev, "Invalid pll input/output rates!\n");
+ return -EINVAL;
+ }
+
+ dev_dbg(dai->dev,
+ "pll config: id = %d, source = %d, in_freq = %u, out_freq = %u\n",
+ simple_dai->pll_id, simple_dai->pll_source,
+ simple_dai->pll_in_freq, simple_dai->pll_out_freq);
+
+ ret = snd_soc_dai_set_pll(dai, simple_dai->pll_id,
+ simple_dai->pll_source,
+ simple_dai->pll_in_freq,
+ simple_dai->pll_out_freq);
+
+ if (ret && ret != -ENOTSUPP)
+ return ret;
+
+ return 0;
+}
+
+static int asoc_simple_disable_pll(struct snd_soc_dai *dai,
+ struct asoc_simple_dai *simple_dai)
+{
+ if (!simple_dai)
+ return 0;
+
+ return snd_soc_dai_set_pll(dai, simple_dai->pll_id, 0, 0, 0);
+}
+
int asoc_simple_startup(struct snd_pcm_substream *substream)
{
struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
@@ -252,6 +353,9 @@ void asoc_simple_shutdown(struct snd_pcm_substream *substream)
SND_SOC_CLOCK_OUT);
}

+ asoc_simple_disable_pll(codec_dai, dai_props->codec_dai);
+ asoc_simple_disable_pll(cpu_dai, dai_props->cpu_dai);
+
asoc_simple_clk_disable(dai_props->cpu_dai);

asoc_simple_clk_disable(dai_props->codec_dai);
@@ -310,6 +414,16 @@ int asoc_simple_hw_params(struct snd_pcm_substream *substream,
return ret;
}

+ ret = asoc_simple_enable_pll(codec_dai, dai_props->codec_dai, params,
+ mclk_fs);
+ if (ret < 0)
+ return ret;
+
+ ret = asoc_simple_enable_pll(cpu_dai, dai_props->cpu_dai, params,
+ mclk_fs);
+ if (ret < 0)
+ return ret;
+
return 0;
}
EXPORT_SYMBOL_GPL(asoc_simple_hw_params);
--
2.7.4

2021-02-25 18:17:38

by Sameer Pujar

[permalink] [raw]
Subject: [RFC PATCH 2/5] ASoC: soc-dai: Add sysclk source to snd_soc_dai_set_sysclk()

The snd_soc_dai_set_sysclk() does not take any argument for system clock
(sysclk) source. It has "clk_id" argument which some drivers use for
describing sysclk source and others use it to identify a specific clock.
Hence there seems to be an inconsistency in the way "clk_id" is used.
Few such examples below:
- sound/soc/atmel/sam9g20_wm8731.c (clk_id used as sysclk source)
- sound/soc/atmel/sam9x5_wm8731.c (clk_id used as sysclk source)
- sound/soc/intel/boards/bytcr_wm5102.c (clk_id used to identify specific
clock)

Moreover snd_soc_component_set_sysclk() has both "clk_id" and "source"
argument. This is invoked by snd_soc_dai_set_sysclk() which hard codes
the "source" field for the component to 0. There is no way to propagate
sysclk source info to the component from snd_soc_dai_set_sysclk().

To allow selection of a particular source for sysclk, when a device has
multiple sources for it, and to address above, "source" argument is added
to snd_soc_dai_set_sysclk(). This is reflected across all the drivers
where this callback is used. These drivers continue to use the way they
have been using "clk_id". Though ideally we should have a consistent usage
for it and this is not in the scope of current patch to fix that.

Signed-off-by: Sameer Pujar <[email protected]>
---
include/sound/soc-dai.h | 4 ++--
sound/soc/amd/acp-da7219-max98357a.c | 2 +-
sound/soc/amd/acp-rt5645.c | 2 +-
sound/soc/amd/acp3x-rt5682-max9836.c | 4 ++--
sound/soc/atmel/atmel_wm8904.c | 2 +-
sound/soc/atmel/mchp-i2s-mcc.c | 2 +-
sound/soc/atmel/mikroe-proto.c | 2 +-
sound/soc/atmel/sam9g20_wm8731.c | 2 +-
sound/soc/atmel/sam9x5_wm8731.c | 2 +-
sound/soc/bcm/cygnus-ssp.c | 2 +-
sound/soc/cirrus/edb93xx.c | 2 +-
sound/soc/cirrus/ep93xx-i2s.c | 2 +-
sound/soc/cirrus/snappercl15.c | 4 ++--
sound/soc/codecs/88pm860x-codec.c | 2 +-
sound/soc/codecs/ad193x.c | 2 +-
sound/soc/codecs/adau1373.c | 2 +-
sound/soc/codecs/adau17x1.c | 2 +-
sound/soc/codecs/ak4535.c | 2 +-
sound/soc/codecs/ak4613.c | 2 +-
sound/soc/codecs/ak4641.c | 2 +-
sound/soc/codecs/ak4642.c | 2 +-
sound/soc/codecs/ak4671.c | 2 +-
sound/soc/codecs/alc5623.c | 2 +-
sound/soc/codecs/alc5632.c | 2 +-
sound/soc/codecs/arizona.c | 2 +-
sound/soc/codecs/cpcap.c | 4 ++--
sound/soc/codecs/cq93vc.c | 2 +-
sound/soc/codecs/cs35l34.c | 2 +-
sound/soc/codecs/cs35l35.c | 2 +-
sound/soc/codecs/cs35l36.c | 2 +-
sound/soc/codecs/cs4265.c | 2 +-
sound/soc/codecs/cs4270.c | 2 +-
sound/soc/codecs/cs4271.c | 2 +-
sound/soc/codecs/cs42l42.c | 2 +-
sound/soc/codecs/cs42l51.c | 2 +-
sound/soc/codecs/cs42l52.c | 2 +-
sound/soc/codecs/cs42l56.c | 2 +-
sound/soc/codecs/cs42l73.c | 2 +-
sound/soc/codecs/cs42xx8.c | 2 +-
sound/soc/codecs/cs43130.c | 2 +-
sound/soc/codecs/cs53l30.c | 2 +-
sound/soc/codecs/cx2072x.c | 2 +-
sound/soc/codecs/da7210.c | 2 +-
sound/soc/codecs/da7218.c | 2 +-
sound/soc/codecs/da7219.c | 2 +-
sound/soc/codecs/da732x.c | 2 +-
sound/soc/codecs/da9055.c | 2 +-
sound/soc/codecs/es7134.c | 2 +-
sound/soc/codecs/es7241.c | 2 +-
sound/soc/codecs/es8316.c | 2 +-
sound/soc/codecs/es8328.c | 2 +-
sound/soc/codecs/lm49453.c | 2 +-
sound/soc/codecs/madera.c | 3 ++-
sound/soc/codecs/max98088.c | 3 ++-
sound/soc/codecs/max98090.c | 2 +-
sound/soc/codecs/max98095.c | 2 +-
sound/soc/codecs/max98390.c | 2 +-
sound/soc/codecs/max9850.c | 2 +-
sound/soc/codecs/max9867.c | 2 +-
sound/soc/codecs/max98925.c | 2 +-
sound/soc/codecs/max98927.c | 2 +-
sound/soc/codecs/mc13783.c | 6 +++---
sound/soc/codecs/ml26124.c | 2 +-
sound/soc/codecs/nau8810.c | 2 +-
sound/soc/codecs/nau8822.c | 2 +-
sound/soc/codecs/pcm186x.c | 2 +-
sound/soc/codecs/pcm3060.c | 2 +-
sound/soc/codecs/pcm3168a.c | 2 +-
sound/soc/codecs/rt1011.c | 2 +-
sound/soc/codecs/rt1305.c | 2 +-
sound/soc/codecs/rt274.c | 2 +-
sound/soc/codecs/rt286.c | 2 +-
sound/soc/codecs/rt298.c | 2 +-
sound/soc/codecs/rt5514.c | 2 +-
sound/soc/codecs/rt5616.c | 2 +-
sound/soc/codecs/rt5631.c | 2 +-
sound/soc/codecs/rt5640.c | 2 +-
sound/soc/codecs/rt5645.c | 2 +-
sound/soc/codecs/rt5651.c | 2 +-
sound/soc/codecs/rt5660.c | 2 +-
sound/soc/codecs/rt5663.c | 2 +-
sound/soc/codecs/rt5677.c | 2 +-
sound/soc/codecs/sgtl5000.c | 2 +-
sound/soc/codecs/ssm2602.c | 2 +-
sound/soc/codecs/sta32x.c | 2 +-
sound/soc/codecs/sta350.c | 2 +-
sound/soc/codecs/sti-sas.c | 2 +-
sound/soc/codecs/tas2552.c | 2 +-
sound/soc/codecs/tas5086.c | 2 +-
sound/soc/codecs/tlv320aic23.c | 2 +-
sound/soc/codecs/tlv320aic26.c | 2 +-
sound/soc/codecs/tlv320aic31xx.c | 2 +-
sound/soc/codecs/tlv320aic32x4.c | 2 +-
sound/soc/codecs/tlv320aic3x.c | 2 +-
sound/soc/codecs/tlv320dac33.c | 2 +-
sound/soc/codecs/tscs454.c | 2 +-
sound/soc/codecs/twl4030.c | 4 ++--
sound/soc/codecs/twl6040.c | 2 +-
sound/soc/codecs/uda1334.c | 2 +-
sound/soc/codecs/uda134x.c | 2 +-
sound/soc/codecs/wm8350.c | 2 +-
sound/soc/codecs/wm8400.c | 2 +-
sound/soc/codecs/wm8523.c | 2 +-
sound/soc/codecs/wm8524.c | 2 +-
sound/soc/codecs/wm8580.c | 2 +-
sound/soc/codecs/wm8711.c | 2 +-
sound/soc/codecs/wm8731.c | 2 +-
sound/soc/codecs/wm8737.c | 2 +-
sound/soc/codecs/wm8741.c | 2 +-
sound/soc/codecs/wm8750.c | 2 +-
sound/soc/codecs/wm8753.c | 2 +-
sound/soc/codecs/wm8770.c | 2 +-
sound/soc/codecs/wm8776.c | 2 +-
sound/soc/codecs/wm8804.c | 2 +-
sound/soc/codecs/wm8903.c | 2 +-
sound/soc/codecs/wm8904.c | 2 +-
sound/soc/codecs/wm8940.c | 2 +-
sound/soc/codecs/wm8955.c | 2 +-
sound/soc/codecs/wm8960.c | 2 +-
sound/soc/codecs/wm8961.c | 2 +-
sound/soc/codecs/wm8962.c | 2 +-
sound/soc/codecs/wm8971.c | 2 +-
sound/soc/codecs/wm8974.c | 2 +-
sound/soc/codecs/wm8978.c | 2 +-
sound/soc/codecs/wm8983.c | 2 +-
sound/soc/codecs/wm8985.c | 2 +-
sound/soc/codecs/wm8988.c | 2 +-
sound/soc/codecs/wm8990.c | 2 +-
sound/soc/codecs/wm8993.c | 2 +-
sound/soc/codecs/wm8994.c | 2 +-
sound/soc/codecs/wm8995.c | 2 +-
sound/soc/codecs/wm8996.c | 2 +-
sound/soc/fsl/eukrea-tlv320.c | 4 ++--
sound/soc/fsl/fsl-asoc-card.c | 8 ++++----
sound/soc/fsl/fsl_esai.c | 2 +-
sound/soc/fsl/fsl_micfil.c | 2 +-
sound/soc/fsl/fsl_sai.c | 8 ++++----
sound/soc/fsl/imx-audmix.c | 2 +-
sound/soc/fsl/imx-hdmi.c | 2 +-
sound/soc/fsl/imx-sgtl5000.c | 2 +-
sound/soc/fsl/mpc5200_psc_i2s.c | 2 +-
sound/soc/fsl/mpc8610_hpcd.c | 2 +-
sound/soc/fsl/p1022_ds.c | 2 +-
sound/soc/generic/simple-card-utils.c | 10 +++++-----
sound/soc/intel/boards/bdw-rt5650.c | 2 +-
sound/soc/intel/boards/bdw-rt5677.c | 4 ++--
sound/soc/intel/boards/broadwell.c | 2 +-
sound/soc/intel/boards/bxt_da7219_max98357a.c | 2 +-
sound/soc/intel/boards/bxt_rt298.c | 2 +-
sound/soc/intel/boards/bytcht_cx2072x.c | 2 +-
sound/soc/intel/boards/bytcht_da7213.c | 2 +-
sound/soc/intel/boards/bytcht_es8316.c | 2 +-
sound/soc/intel/boards/bytcr_rt5640.c | 4 ++--
sound/soc/intel/boards/bytcr_rt5651.c | 4 ++--
sound/soc/intel/boards/bytcr_wm5102.c | 2 +-
sound/soc/intel/boards/cht_bsw_max98090_ti.c | 2 +-
sound/soc/intel/boards/cht_bsw_nau8824.c | 2 +-
sound/soc/intel/boards/cht_bsw_rt5645.c | 4 ++--
sound/soc/intel/boards/cht_bsw_rt5672.c | 4 ++--
sound/soc/intel/boards/cml_rt1011_rt5682.c | 2 +-
sound/soc/intel/boards/glk_rt5682_max98357a.c | 2 +-
sound/soc/intel/boards/haswell.c | 2 +-
sound/soc/intel/boards/kbl_da7219_max98357a.c | 2 +-
sound/soc/intel/boards/kbl_da7219_max98927.c | 2 +-
sound/soc/intel/boards/skl_rt286.c | 2 +-
sound/soc/intel/boards/sof_da7219_max98373.c | 2 +-
sound/soc/intel/boards/sof_realtek_common.c | 2 +-
sound/soc/intel/boards/sof_rt5682.c | 4 ++--
sound/soc/intel/boards/sof_sdw_rt1308.c | 2 +-
sound/soc/intel/boards/sof_wm8804.c | 2 +-
sound/soc/jz4740/jz4740-i2s.c | 2 +-
sound/soc/kirkwood/armada-370-db.c | 2 +-
sound/soc/mediatek/mt2701/mt2701-afe-pcm.c | 2 +-
sound/soc/mediatek/mt2701/mt2701-cs42448.c | 4 ++--
sound/soc/mediatek/mt2701/mt2701-wm8960.c | 4 ++--
sound/soc/mediatek/mt8173/mt8173-max98090.c | 2 +-
sound/soc/mediatek/mt8173/mt8173-rt5650-rt5514.c | 2 +-
sound/soc/mediatek/mt8173/mt8173-rt5650-rt5676.c | 2 +-
sound/soc/mediatek/mt8173/mt8173-rt5650.c | 2 +-
sound/soc/mediatek/mt8183/mt8183-da7219-max98357.c | 8 ++++----
sound/soc/mediatek/mt8183/mt8183-dai-i2s.c | 2 +-
sound/soc/mediatek/mt8183/mt8183-dai-tdm.c | 2 +-
.../mt8183/mt8183-mt6358-ts3a227-max98357.c | 6 +++---
sound/soc/mediatek/mt8192/mt8192-dai-i2s.c | 2 +-
sound/soc/mediatek/mt8192/mt8192-dai-tdm.c | 2 +-
.../mediatek/mt8192/mt8192-mt6359-rt1015-rt5682.c | 8 ++++----
sound/soc/meson/aiu-encoder-i2s.c | 2 +-
sound/soc/meson/axg-tdm-interface.c | 2 +-
sound/soc/meson/meson-card-utils.c | 4 ++--
sound/soc/mxs/mxs-saif.c | 2 +-
sound/soc/mxs/mxs-sgtl5000.c | 4 ++--
sound/soc/pxa/brownstone.c | 4 ++--
sound/soc/pxa/corgi.c | 4 ++--
sound/soc/pxa/hx4700.c | 4 ++--
sound/soc/pxa/imote2.c | 4 ++--
sound/soc/pxa/magician.c | 4 ++--
sound/soc/pxa/mmp-sspa.c | 2 +-
sound/soc/pxa/poodle.c | 4 ++--
sound/soc/pxa/pxa-ssp.c | 2 +-
sound/soc/pxa/pxa2xx-i2s.c | 2 +-
sound/soc/pxa/spitz.c | 4 ++--
sound/soc/pxa/z2.c | 4 ++--
sound/soc/pxa/zylonite.c | 2 +-
sound/soc/qcom/apq8096.c | 2 +-
sound/soc/qcom/lpass-cpu.c | 2 +-
sound/soc/qcom/qdsp6/q6afe-dai.c | 2 +-
sound/soc/qcom/sc7180.c | 6 +++---
sound/soc/qcom/sdm845.c | 22 +++++++++++-----------
sound/soc/qcom/sm8250.c | 2 +-
sound/soc/qcom/storm.c | 2 +-
sound/soc/rockchip/rk3288_hdmi_analog.c | 4 ++--
sound/soc/rockchip/rk3399_gru_sound.c | 14 +++++++-------
sound/soc/rockchip/rockchip_i2s.c | 2 +-
sound/soc/rockchip/rockchip_max98090.c | 4 ++--
sound/soc/rockchip/rockchip_rt5645.c | 4 ++--
sound/soc/samsung/aries_wm8994.c | 6 +++---
sound/soc/samsung/arndale.c | 8 ++++----
sound/soc/samsung/bells.c | 6 +++---
sound/soc/samsung/h1940_uda1380.c | 2 +-
sound/soc/samsung/i2s.c | 6 +++---
sound/soc/samsung/jive_wm8750.c | 2 +-
sound/soc/samsung/littlemill.c | 14 +++++++-------
sound/soc/samsung/midas_wm1811.c | 10 +++++-----
sound/soc/samsung/neo1973_wm8753.c | 4 ++--
sound/soc/samsung/odroid.c | 2 +-
sound/soc/samsung/pcm.c | 2 +-
sound/soc/samsung/rx1950_uda1380.c | 2 +-
sound/soc/samsung/s3c24xx-i2s.c | 2 +-
sound/soc/samsung/s3c24xx_simtec.c | 4 ++--
sound/soc/samsung/s3c24xx_uda134x.c | 4 ++--
sound/soc/samsung/smartq_wm8987.c | 6 +++---
sound/soc/samsung/smdk_spdif.c | 2 +-
sound/soc/samsung/smdk_wm8580.c | 2 +-
sound/soc/samsung/smdk_wm8994.c | 2 +-
sound/soc/samsung/smdk_wm8994pcm.c | 4 ++--
sound/soc/samsung/snow.c | 2 +-
sound/soc/samsung/spdif.c | 2 +-
sound/soc/samsung/speyside.c | 8 ++++----
sound/soc/samsung/tm2_wm5110.c | 6 +++---
sound/soc/samsung/tobermory.c | 6 +++---
sound/soc/sh/migor.c | 4 ++--
sound/soc/sh/siu_dai.c | 2 +-
sound/soc/sh/ssi.c | 2 +-
sound/soc/soc-dai.c | 9 +++++----
sound/soc/sti/uniperif_player.c | 2 +-
sound/soc/stm/stm32_adfsdm.c | 2 +-
sound/soc/stm/stm32_i2s.c | 2 +-
sound/soc/stm/stm32_sai_sub.c | 2 +-
sound/soc/sunxi/sun4i-i2s.c | 2 +-
sound/soc/tegra/tegra_alc5632.c | 2 +-
sound/soc/tegra/tegra_max98090.c | 2 +-
sound/soc/tegra/tegra_rt5640.c | 2 +-
sound/soc/tegra/tegra_rt5677.c | 2 +-
sound/soc/tegra/tegra_sgtl5000.c | 2 +-
sound/soc/tegra/tegra_wm8753.c | 2 +-
sound/soc/tegra/tegra_wm8903.c | 2 +-
sound/soc/tegra/trimslice.c | 2 +-
sound/soc/ti/davinci-evm.c | 4 ++--
sound/soc/ti/davinci-mcasp.c | 2 +-
sound/soc/ti/j721e-evm.c | 8 ++++----
sound/soc/ti/n810.c | 2 +-
sound/soc/ti/omap-abe-twl6040.c | 6 +++---
sound/soc/ti/omap-dmic.c | 2 +-
sound/soc/ti/omap-mcbsp.c | 2 +-
sound/soc/ti/omap3pandora.c | 4 ++--
sound/soc/ti/rx51.c | 2 +-
sound/soc/uniphier/aio-cpu.c | 4 ++--
sound/soc/ux500/ux500_msp_dai.c | 2 +-
268 files changed, 380 insertions(+), 377 deletions(-)

diff --git a/include/sound/soc-dai.h b/include/sound/soc-dai.h
index 1358a0c..d87de60 100644
--- a/include/sound/soc-dai.h
+++ b/include/sound/soc-dai.h
@@ -119,7 +119,7 @@ struct snd_soc_dai;
struct snd_ac97_bus_ops;

/* Digital Audio Interface clocking API.*/
-int snd_soc_dai_set_sysclk(struct snd_soc_dai *dai, int clk_id,
+int snd_soc_dai_set_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir);

int snd_soc_dai_set_clkdiv(struct snd_soc_dai *dai,
@@ -226,7 +226,7 @@ struct snd_soc_dai_ops {
* Called by soc_card drivers, normally in their hw_params.
*/
int (*set_sysclk)(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir);
+ int clk_id, int source, unsigned int freq, int dir);
int (*set_pll)(struct snd_soc_dai *dai, int pll_id, int source,
unsigned int freq_in, unsigned int freq_out);
int (*set_clkdiv)(struct snd_soc_dai *dai, int div_id, int div);
diff --git a/sound/soc/amd/acp-da7219-max98357a.c b/sound/soc/amd/acp-da7219-max98357a.c
index 849288d..89f921d 100644
--- a/sound/soc/amd/acp-da7219-max98357a.c
+++ b/sound/soc/amd/acp-da7219-max98357a.c
@@ -59,7 +59,7 @@ static int cz_da7219_init(struct snd_soc_pcm_runtime *rtd)

dev_info(rtd->dev, "codec dai name = %s\n", codec_dai->name);

- ret = snd_soc_dai_set_sysclk(codec_dai, DA7219_CLKSRC_MCLK,
+ ret = snd_soc_dai_set_sysclk(codec_dai, DA7219_CLKSRC_MCLK, 0,
CZ_PLAT_CLK, SND_SOC_CLOCK_IN);
if (ret < 0) {
dev_err(rtd->dev, "can't set codec sysclk: %d\n", ret);
diff --git a/sound/soc/amd/acp-rt5645.c b/sound/soc/amd/acp-rt5645.c
index d6ba946..0558807 100644
--- a/sound/soc/amd/acp-rt5645.c
+++ b/sound/soc/amd/acp-rt5645.c
@@ -57,7 +57,7 @@ static int cz_aif1_hw_params(struct snd_pcm_substream *substream,
return ret;
}

- ret = snd_soc_dai_set_sysclk(codec_dai, RT5645_SCLK_S_PLL1,
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT5645_SCLK_S_PLL1, 0,
params_rate(params) * 512, SND_SOC_CLOCK_OUT);
if (ret < 0) {
dev_err(rtd->dev, "can't set codec sysclk: %d\n", ret);
diff --git a/sound/soc/amd/acp3x-rt5682-max9836.c b/sound/soc/amd/acp3x-rt5682-max9836.c
index cea320a..ae555d4 100644
--- a/sound/soc/amd/acp3x-rt5682-max9836.c
+++ b/sound/soc/amd/acp3x-rt5682-max9836.c
@@ -67,7 +67,7 @@ static int acp3x_5682_init(struct snd_soc_pcm_runtime *rtd)
}

/* Set codec sysclk */
- ret = snd_soc_dai_set_sysclk(codec_dai, RT5682_SCLK_S_PLL2,
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT5682_SCLK_S_PLL2, 0,
RT5682_PLL_FREQ, SND_SOC_CLOCK_IN);
if (ret < 0) {
dev_err(rtd->dev,
@@ -145,7 +145,7 @@ static int acp3x_1015_hw_params(struct snd_pcm_substream *substream,
64 * srate, 256 * srate);
if (ret < 0)
return ret;
- ret = snd_soc_dai_set_sysclk(codec_dai, RT1015_SCLK_S_PLL,
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT1015_SCLK_S_PLL, 0,
256 * srate, SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;
diff --git a/sound/soc/atmel/atmel_wm8904.c b/sound/soc/atmel/atmel_wm8904.c
index 9e23758..438e55e 100644
--- a/sound/soc/atmel/atmel_wm8904.c
+++ b/sound/soc/atmel/atmel_wm8904.c
@@ -42,7 +42,7 @@ static int atmel_asoc_wm8904_hw_params(struct snd_pcm_substream *substream,
* so calling set_sysclk won't care freq parameter
* then we pass 0
*/
- ret = snd_soc_dai_set_sysclk(codec_dai, WM8904_CLK_FLL,
+ ret = snd_soc_dai_set_sysclk(codec_dai, WM8904_CLK_FLL, 0,
0, SND_SOC_CLOCK_IN);
if (ret < 0) {
pr_err("%s -failed to set wm8904 SYSCLK\n", __func__);
diff --git a/sound/soc/atmel/mchp-i2s-mcc.c b/sound/soc/atmel/mchp-i2s-mcc.c
index 6d5ae18..481ca8e 100644
--- a/sound/soc/atmel/mchp-i2s-mcc.c
+++ b/sound/soc/atmel/mchp-i2s-mcc.c
@@ -289,7 +289,7 @@ static irqreturn_t mchp_i2s_mcc_interrupt(int irq, void *dev_id)
}

static int mchp_i2s_mcc_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct mchp_i2s_mcc_dev *dev = snd_soc_dai_get_drvdata(dai);

diff --git a/sound/soc/atmel/mikroe-proto.c b/sound/soc/atmel/mikroe-proto.c
index f9a85fd..a648e55 100644
--- a/sound/soc/atmel/mikroe-proto.c
+++ b/sound/soc/atmel/mikroe-proto.c
@@ -24,7 +24,7 @@ static int snd_proto_init(struct snd_soc_pcm_runtime *rtd)
struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);

/* Set proto sysclk */
- int ret = snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK_XTAL,
+ int ret = snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK_XTAL, 0,
XTAL_RATE, SND_SOC_CLOCK_IN);
if (ret < 0) {
dev_err(card->dev, "Failed to set WM8731 SYSCLK: %d\n",
diff --git a/sound/soc/atmel/sam9g20_wm8731.c b/sound/soc/atmel/sam9g20_wm8731.c
index ed1f69b..dee3ddb 100644
--- a/sound/soc/atmel/sam9g20_wm8731.c
+++ b/sound/soc/atmel/sam9g20_wm8731.c
@@ -102,7 +102,7 @@ static int at91sam9g20ek_wm8731_init(struct snd_soc_pcm_runtime *rtd)

dev_dbg(dev, "%s called\n", __func__);

- ret = snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK_MCLK,
+ ret = snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK_MCLK, 0,
MCLK_RATE, SND_SOC_CLOCK_IN);
if (ret < 0) {
dev_err(dev, "Failed to set WM8731 SYSCLK: %d\n", ret);
diff --git a/sound/soc/atmel/sam9x5_wm8731.c b/sound/soc/atmel/sam9x5_wm8731.c
index 9fbc3c1..1b540b7 100644
--- a/sound/soc/atmel/sam9x5_wm8731.c
+++ b/sound/soc/atmel/sam9x5_wm8731.c
@@ -47,7 +47,7 @@ static int sam9x5_wm8731_init(struct snd_soc_pcm_runtime *rtd)
dev_dbg(dev, "%s called\n", __func__);

/* set the codec system clock for DAC and ADC */
- ret = snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK_XTAL,
+ ret = snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK_XTAL, 0,
MCLK_RATE, SND_SOC_CLOCK_IN);
if (ret < 0) {
dev_err(dev, "Failed to set WM8731 SYSCLK: %d\n", ret);
diff --git a/sound/soc/bcm/cygnus-ssp.c b/sound/soc/bcm/cygnus-ssp.c
index 6e634b4..08eec08 100644
--- a/sound/soc/bcm/cygnus-ssp.c
+++ b/sound/soc/bcm/cygnus-ssp.c
@@ -713,7 +713,7 @@ static int cygnus_ssp_hw_params(struct snd_pcm_substream *substream,
* This function sets the mclk frequency for pll clock
*/
static int cygnus_ssp_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
int sel;
u32 value;
diff --git a/sound/soc/cirrus/edb93xx.c b/sound/soc/cirrus/edb93xx.c
index 7b6cdc9..21ab6ff 100644
--- a/sound/soc/cirrus/edb93xx.c
+++ b/sound/soc/cirrus/edb93xx.c
@@ -38,7 +38,7 @@ static int edb93xx_hw_params(struct snd_pcm_substream *substream,
else
mclk_rate = rate * 64 * 2;

- err = snd_soc_dai_set_sysclk(codec_dai, 0, mclk_rate,
+ err = snd_soc_dai_set_sysclk(codec_dai, 0, 0, mclk_rate,
SND_SOC_CLOCK_IN);
if (err)
return err;
diff --git a/sound/soc/cirrus/ep93xx-i2s.c b/sound/soc/cirrus/ep93xx-i2s.c
index 0d26550..8973a7f 100644
--- a/sound/soc/cirrus/ep93xx-i2s.c
+++ b/sound/soc/cirrus/ep93xx-i2s.c
@@ -352,7 +352,7 @@ static int ep93xx_i2s_hw_params(struct snd_pcm_substream *substream,
return 0;
}

-static int ep93xx_i2s_set_sysclk(struct snd_soc_dai *cpu_dai, int clk_id,
+static int ep93xx_i2s_set_sysclk(struct snd_soc_dai *cpu_dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct ep93xx_i2s_info *info = snd_soc_dai_get_drvdata(cpu_dai);
diff --git a/sound/soc/cirrus/snappercl15.c b/sound/soc/cirrus/snappercl15.c
index c4b1129..b1a39bc 100644
--- a/sound/soc/cirrus/snappercl15.c
+++ b/sound/soc/cirrus/snappercl15.c
@@ -27,12 +27,12 @@ static int snappercl15_hw_params(struct snd_pcm_substream *substream,
struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0);
int err;

- err = snd_soc_dai_set_sysclk(codec_dai, 0, CODEC_CLOCK,
+ err = snd_soc_dai_set_sysclk(codec_dai, 0, 0, CODEC_CLOCK,
SND_SOC_CLOCK_IN);
if (err)
return err;

- err = snd_soc_dai_set_sysclk(cpu_dai, 0, CODEC_CLOCK,
+ err = snd_soc_dai_set_sysclk(cpu_dai, 0, 0, CODEC_CLOCK,
SND_SOC_CLOCK_OUT);
if (err)
return err;
diff --git a/sound/soc/codecs/88pm860x-codec.c b/sound/soc/codecs/88pm860x-codec.c
index cac7e55..464d0c3 100644
--- a/sound/soc/codecs/88pm860x-codec.c
+++ b/sound/soc/codecs/88pm860x-codec.c
@@ -999,7 +999,7 @@ static int pm860x_pcm_set_dai_fmt(struct snd_soc_dai *codec_dai,
}

static int pm860x_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct pm860x_priv *pm860x = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/ad193x.c b/sound/soc/codecs/ad193x.c
index f37ab7ed..3e16f0a 100644
--- a/sound/soc/codecs/ad193x.c
+++ b/sound/soc/codecs/ad193x.c
@@ -279,7 +279,7 @@ static int ad193x_set_dai_fmt(struct snd_soc_dai *codec_dai,
}

static int ad193x_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
diff --git a/sound/soc/codecs/adau1373.c b/sound/soc/codecs/adau1373.c
index 9887aa6..c176bc1 100644
--- a/sound/soc/codecs/adau1373.c
+++ b/sound/soc/codecs/adau1373.c
@@ -1155,7 +1155,7 @@ static int adau1373_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
}

static int adau1373_set_dai_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct adau1373 *adau1373 = snd_soc_component_get_drvdata(dai->component);
struct adau1373_dai *adau1373_dai = &adau1373->dais[dai->id];
diff --git a/sound/soc/codecs/adau17x1.c b/sound/soc/codecs/adau17x1.c
index 546ee81..2707321 100644
--- a/sound/soc/codecs/adau17x1.c
+++ b/sound/soc/codecs/adau17x1.c
@@ -371,7 +371,7 @@ static int adau17x1_set_dai_pll(struct snd_soc_dai *dai, int pll_id,
}

static int adau17x1_set_dai_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(dai->component);
struct adau *adau = snd_soc_component_get_drvdata(dai->component);
diff --git a/sound/soc/codecs/ak4535.c b/sound/soc/codecs/ak4535.c
index 91e7a57..5916dcb 100644
--- a/sound/soc/codecs/ak4535.c
+++ b/sound/soc/codecs/ak4535.c
@@ -246,7 +246,7 @@ static const struct snd_soc_dapm_route ak4535_audio_map[] = {
};

static int ak4535_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct ak4535_priv *ak4535 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/ak4613.c b/sound/soc/codecs/ak4613.c
index fe208cf..663ea5d 100644
--- a/sound/soc/codecs/ak4613.c
+++ b/sound/soc/codecs/ak4613.c
@@ -312,7 +312,7 @@ static int ak4613_dai_startup(struct snd_pcm_substream *substream,
}

static int ak4613_dai_set_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct ak4613_priv *priv = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/ak4641.c b/sound/soc/codecs/ak4641.c
index 04aef0e..a6ff2a5 100644
--- a/sound/soc/codecs/ak4641.c
+++ b/sound/soc/codecs/ak4641.c
@@ -302,7 +302,7 @@ static const struct snd_soc_dapm_route ak4641_audio_map[] = {
};

static int ak4641_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct ak4641_priv *ak4641 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c
index c49c58e..7858456 100644
--- a/sound/soc/codecs/ak4642.c
+++ b/sound/soc/codecs/ak4642.c
@@ -333,7 +333,7 @@ static void ak4642_dai_shutdown(struct snd_pcm_substream *substream,
}

static int ak4642_dai_set_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct ak4642_priv *priv = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/ak4671.c b/sound/soc/codecs/ak4671.c
index eb43523..d355ca7 100644
--- a/sound/soc/codecs/ak4671.c
+++ b/sound/soc/codecs/ak4671.c
@@ -465,7 +465,7 @@ static int ak4671_hw_params(struct snd_pcm_substream *substream,
return 0;
}

-static int ak4671_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int ak4671_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
diff --git a/sound/soc/codecs/alc5623.c b/sound/soc/codecs/alc5623.c
index 54f4898..63ea777 100644
--- a/sound/soc/codecs/alc5623.c
+++ b/sound/soc/codecs/alc5623.c
@@ -615,7 +615,7 @@ static int get_coeff(struct snd_soc_component *component, int rate)
* Clock after PLL and dividers
*/
static int alc5623_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct alc5623_priv *alc5623 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/alc5632.c b/sound/soc/codecs/alc5632.c
index 7981388..9273f0b 100644
--- a/sound/soc/codecs/alc5632.c
+++ b/sound/soc/codecs/alc5632.c
@@ -788,7 +788,7 @@ static int get_coeff(struct snd_soc_component *component, int rate)
* Clock after PLL and dividers
*/
static int alc5632_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct alc5632_priv *alc5632 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/arizona.c b/sound/soc/codecs/arizona.c
index e32871b..e6b1885 100644
--- a/sound/soc/codecs/arizona.c
+++ b/sound/soc/codecs/arizona.c
@@ -1908,7 +1908,7 @@ static const char *arizona_dai_clk_str(int clk_id)
}

static int arizona_dai_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
diff --git a/sound/soc/codecs/cpcap.c b/sound/soc/codecs/cpcap.c
index 05bbacd..7577298 100644
--- a/sound/soc/codecs/cpcap.c
+++ b/sound/soc/codecs/cpcap.c
@@ -1132,7 +1132,7 @@ static int cpcap_hifi_hw_params(struct snd_pcm_substream *substream,
return cpcap_set_samprate(cpcap, CPCAP_DAI_HIFI, rate);
}

-static int cpcap_hifi_set_dai_sysclk(struct snd_soc_dai *codec_dai, int clk_id,
+static int cpcap_hifi_set_dai_sysclk(struct snd_soc_dai *codec_dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
@@ -1290,7 +1290,7 @@ static int cpcap_voice_hw_params(struct snd_pcm_substream *substream,
return 0;
}

-static int cpcap_voice_set_dai_sysclk(struct snd_soc_dai *codec_dai, int clk_id,
+static int cpcap_voice_set_dai_sysclk(struct snd_soc_dai *codec_dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
diff --git a/sound/soc/codecs/cq93vc.c b/sound/soc/codecs/cq93vc.c
index 0aae579..1375cd6 100644
--- a/sound/soc/codecs/cq93vc.c
+++ b/sound/soc/codecs/cq93vc.c
@@ -47,7 +47,7 @@ static int cq93vc_mute(struct snd_soc_dai *dai, int mute, int direction)
}

static int cq93vc_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
switch (freq) {
case 22579200:
diff --git a/sound/soc/codecs/cs35l34.c b/sound/soc/codecs/cs35l34.c
index 110ee2d..c7f0559 100644
--- a/sound/soc/codecs/cs35l34.c
+++ b/sound/soc/codecs/cs35l34.c
@@ -598,7 +598,7 @@ static int cs35l34_set_tristate(struct snd_soc_dai *dai, int tristate)
}

static int cs35l34_dai_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct cs35l34_private *cs35l34 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/cs35l35.c b/sound/soc/codecs/cs35l35.c
index 55d529a..d4bf159 100644
--- a/sound/soc/codecs/cs35l35.c
+++ b/sound/soc/codecs/cs35l35.c
@@ -649,7 +649,7 @@ static int cs35l35_pdm_startup(struct snd_pcm_substream *substream,
}

static int cs35l35_dai_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/cs35l36.c b/sound/soc/codecs/cs35l36.c
index 4451ca9..3ab86f8 100644
--- a/sound/soc/codecs/cs35l36.c
+++ b/sound/soc/codecs/cs35l36.c
@@ -905,7 +905,7 @@ static int cs35l36_pcm_hw_params(struct snd_pcm_substream *substream,
return 0;
}

-static int cs35l36_dai_set_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int cs35l36_dai_set_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
diff --git a/sound/soc/codecs/cs4265.c b/sound/soc/codecs/cs4265.c
index d76be44f..1d4d872 100644
--- a/sound/soc/codecs/cs4265.c
+++ b/sound/soc/codecs/cs4265.c
@@ -316,7 +316,7 @@ static int cs4265_get_clk_index(int mclk, int rate)
return -EINVAL;
}

-static int cs4265_set_sysclk(struct snd_soc_dai *codec_dai, int clk_id,
+static int cs4265_set_sysclk(struct snd_soc_dai *codec_dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
diff --git a/sound/soc/codecs/cs4270.c b/sound/soc/codecs/cs4270.c
index ddd95c8..1686fad 100644
--- a/sound/soc/codecs/cs4270.c
+++ b/sound/soc/codecs/cs4270.c
@@ -255,7 +255,7 @@ static bool cs4270_reg_is_volatile(struct device *dev, unsigned int reg)
* that from a machine's driver 'hw_param' hook.
*/
static int cs4270_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct cs4270_private *cs4270 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/cs4271.c b/sound/soc/codecs/cs4271.c
index 7663f89..fe8b1f7 100644
--- a/sound/soc/codecs/cs4271.c
+++ b/sound/soc/codecs/cs4271.c
@@ -195,7 +195,7 @@ static const struct snd_soc_dapm_route cs4271_dapm_routes[] = {
* ratios listed in cs4271_mclk_fs_ratios table
*/
static int cs4271_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct cs4271_private *cs4271 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/cs42l42.c b/sound/soc/codecs/cs42l42.c
index 210fcbe..87d17b6 100644
--- a/sound/soc/codecs/cs42l42.c
+++ b/sound/soc/codecs/cs42l42.c
@@ -839,7 +839,7 @@ static int cs42l42_pcm_hw_params(struct snd_pcm_substream *substream,
}

static int cs42l42_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct cs42l42_private *cs42l42 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/cs42l51.c b/sound/soc/codecs/cs42l51.c
index c61b17d..e715fa3 100644
--- a/sound/soc/codecs/cs42l51.c
+++ b/sound/soc/codecs/cs42l51.c
@@ -384,7 +384,7 @@ static struct cs42l51_ratios master_ratios[] = {
};

static int cs42l51_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct cs42l51_private *cs42l51 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/cs42l52.c b/sound/soc/codecs/cs42l52.c
index 796b894..85f191f 100644
--- a/sound/soc/codecs/cs42l52.c
+++ b/sound/soc/codecs/cs42l52.c
@@ -710,7 +710,7 @@ static int cs42l52_get_clk(int mclk, int rate)
}

static int cs42l52_set_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct cs42l52_private *cs42l52 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/cs42l56.c b/sound/soc/codecs/cs42l56.c
index c44a5cd..711fc3c 100644
--- a/sound/soc/codecs/cs42l56.c
+++ b/sound/soc/codecs/cs42l56.c
@@ -712,7 +712,7 @@ static int cs42l56_get_mclk_ratio(int mclk, int rate)
}

static int cs42l56_set_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct cs42l56_private *cs42l56 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/cs42l73.c b/sound/soc/codecs/cs42l73.c
index c3f974e..32a4c97 100644
--- a/sound/soc/codecs/cs42l73.c
+++ b/sound/soc/codecs/cs42l73.c
@@ -905,7 +905,7 @@ static int cs42l73_set_mclk(struct snd_soc_dai *dai, unsigned int freq)
}

static int cs42l73_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct cs42l73_private *priv = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/cs42xx8.c b/sound/soc/codecs/cs42xx8.c
index 5d6ef66..298dd7a 100644
--- a/sound/soc/codecs/cs42xx8.c
+++ b/sound/soc/codecs/cs42xx8.c
@@ -201,7 +201,7 @@ static const struct cs42xx8_ratios cs42xx8_ratios[] = {
};

static int cs42xx8_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct cs42xx8_priv *cs42xx8 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/cs43130.c b/sound/soc/codecs/cs43130.c
index 80bc7c1..7e36348 100644
--- a/sound/soc/codecs/cs43130.c
+++ b/sound/soc/codecs/cs43130.c
@@ -1534,7 +1534,7 @@ static int cs43130_dsd_set_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
}

static int cs43130_set_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct cs43130_private *cs43130 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/cs53l30.c b/sound/soc/codecs/cs53l30.c
index 3d67cbf..6ab57bb 100644
--- a/sound/soc/codecs/cs53l30.c
+++ b/sound/soc/codecs/cs53l30.c
@@ -543,7 +543,7 @@ static int cs53l30_get_mclk_coeff(int mclk_rate, int srate)
}

static int cs53l30_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct cs53l30_private *priv = snd_soc_component_get_drvdata(dai->component);
int mclkx_coeff;
diff --git a/sound/soc/codecs/cx2072x.c b/sound/soc/codecs/cx2072x.c
index 8ab2281..2fe5774 100644
--- a/sound/soc/codecs/cx2072x.c
+++ b/sound/soc/codecs/cx2072x.c
@@ -989,7 +989,7 @@ static int cx2072x_set_dai_bclk_ratio(struct snd_soc_dai *dai,
return 0;
}

-static int cx2072x_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int cx2072x_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct snd_soc_component *codec = dai->component;
diff --git a/sound/soc/codecs/da7210.c b/sound/soc/codecs/da7210.c
index 8af344b..fe70f9c 100644
--- a/sound/soc/codecs/da7210.c
+++ b/sound/soc/codecs/da7210.c
@@ -940,7 +940,7 @@ static int da7210_mute(struct snd_soc_dai *dai, int mute, int direction)
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)

static int da7210_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct da7210_priv *da7210 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/da7218.c b/sound/soc/codecs/da7218.c
index ea426d9..e9ee244 100644
--- a/sound/soc/codecs/da7218.c
+++ b/sound/soc/codecs/da7218.c
@@ -1807,7 +1807,7 @@ static const struct snd_soc_dapm_route da7218_audio_map[] = {
*/

static int da7218_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct da7218_priv *da7218 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/da7219.c b/sound/soc/codecs/da7219.c
index 13009d0..ade2e10 100644
--- a/sound/soc/codecs/da7219.c
+++ b/sound/soc/codecs/da7219.c
@@ -1155,7 +1155,7 @@ static const struct snd_soc_dapm_route da7219_audio_map[] = {
*/

static int da7219_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct da7219_priv *da7219 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/da732x.c b/sound/soc/codecs/da732x.c
index d43ee71..b7052c7 100644
--- a/sound/soc/codecs/da732x.c
+++ b/sound/soc/codecs/da732x.c
@@ -1177,7 +1177,7 @@ static int da732x_set_dai_pll(struct snd_soc_component *component, int pll_id,
return 0;
}

-static int da732x_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int da732x_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
diff --git a/sound/soc/codecs/da9055.c b/sound/soc/codecs/da9055.c
index a9676b2..d508049 100644
--- a/sound/soc/codecs/da9055.c
+++ b/sound/soc/codecs/da9055.c
@@ -1234,7 +1234,7 @@ static int da9055_mute(struct snd_soc_dai *dai, int mute, int direction)
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)

static int da9055_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct da9055_priv *da9055 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/es7134.c b/sound/soc/codecs/es7134.c
index e2b7987..93df610 100644
--- a/sound/soc/codecs/es7134.c
+++ b/sound/soc/codecs/es7134.c
@@ -75,7 +75,7 @@ static int es7134_hw_params(struct snd_pcm_substream *substream,
return es7134_check_mclk(dai, priv, params_rate(params));
}

-static int es7134_set_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int es7134_set_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct es7134_data *priv = snd_soc_dai_get_drvdata(dai);
diff --git a/sound/soc/codecs/es7241.c b/sound/soc/codecs/es7241.c
index 2344a0b..a447b8c 100644
--- a/sound/soc/codecs/es7241.c
+++ b/sound/soc/codecs/es7241.c
@@ -109,7 +109,7 @@ static int es7241_hw_params(struct snd_pcm_substream *substream,
return -EINVAL;
}

-static int es7241_set_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int es7241_set_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct es7241_data *priv = snd_soc_dai_get_drvdata(dai);
diff --git a/sound/soc/codecs/es8316.c b/sound/soc/codecs/es8316.c
index d632055..0ed6392 100644
--- a/sound/soc/codecs/es8316.c
+++ b/sound/soc/codecs/es8316.c
@@ -361,7 +361,7 @@ static const struct snd_soc_dapm_route es8316_dapm_routes[] = {
};

static int es8316_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct es8316_priv *es8316 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/es8328.c b/sound/soc/codecs/es8328.c
index 9632afc..1aa89fb 100644
--- a/sound/soc/codecs/es8328.c
+++ b/sound/soc/codecs/es8328.c
@@ -549,7 +549,7 @@ static int es8328_hw_params(struct snd_pcm_substream *substream,
}

static int es8328_set_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct es8328_priv *es8328 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/lm49453.c b/sound/soc/codecs/lm49453.c
index eb3dd0b..5c1dbd3 100644
--- a/sound/soc/codecs/lm49453.c
+++ b/sound/soc/codecs/lm49453.c
@@ -1191,7 +1191,7 @@ static int lm49453_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
return 0;
}

-static int lm49453_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int lm49453_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
diff --git a/sound/soc/codecs/madera.c b/sound/soc/codecs/madera.c
index f4ed7e0..65fbf0b 100644
--- a/sound/soc/codecs/madera.c
+++ b/sound/soc/codecs/madera.c
@@ -3231,7 +3231,8 @@ static int madera_is_syncclk(int clk_id)
}

static int madera_dai_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq,
+ int dir)
{
struct snd_soc_component *component = dai->component;
struct snd_soc_dapm_context *dapm =
diff --git a/sound/soc/codecs/max98088.c b/sound/soc/codecs/max98088.c
index 4be24e7..db609c7 100644
--- a/sound/soc/codecs/max98088.c
+++ b/sound/soc/codecs/max98088.c
@@ -1093,7 +1093,8 @@ static int max98088_dai2_hw_params(struct snd_pcm_substream *substream,
}

static int max98088_dai_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq,
+ int dir)
{
struct snd_soc_component *component = dai->component;
struct max98088_priv *max98088 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/max98090.c b/sound/soc/codecs/max98090.c
index 06276ff..7e01316 100644
--- a/sound/soc/codecs/max98090.c
+++ b/sound/soc/codecs/max98090.c
@@ -1976,7 +1976,7 @@ static int max98090_dai_hw_params(struct snd_pcm_substream *substream,
* PLL / Sysclk
*/
static int max98090_dai_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/max98095.c b/sound/soc/codecs/max98095.c
index 736cd70..9da5ea3 100644
--- a/sound/soc/codecs/max98095.c
+++ b/sound/soc/codecs/max98095.c
@@ -1119,7 +1119,7 @@ static int max98095_dai3_hw_params(struct snd_pcm_substream *substream,
}

static int max98095_dai_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct max98095_priv *max98095 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/max98390.c b/sound/soc/codecs/max98390.c
index bb736c4..05a2f33 100644
--- a/sound/soc/codecs/max98390.c
+++ b/sound/soc/codecs/max98390.c
@@ -455,7 +455,7 @@ static int max98390_dai_tdm_slot(struct snd_soc_dai *dai,
}

static int max98390_dai_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct max98390_priv *max98390 =
diff --git a/sound/soc/codecs/max9850.c b/sound/soc/codecs/max9850.c
index dec5189..64a220b 100644
--- a/sound/soc/codecs/max9850.c
+++ b/sound/soc/codecs/max9850.c
@@ -149,7 +149,7 @@ static int max9850_hw_params(struct snd_pcm_substream *substream,
}

static int max9850_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct max9850_priv *max9850 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/max9867.c b/sound/soc/codecs/max9867.c
index 09b2d73..62ebb76 100644
--- a/sound/soc/codecs/max9867.c
+++ b/sound/soc/codecs/max9867.c
@@ -396,7 +396,7 @@ static int max9867_mute(struct snd_soc_dai *dai, int mute, int direction)
}

static int max9867_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct max9867_priv *max9867 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/max98925.c b/sound/soc/codecs/max98925.c
index ddaccc2..d390e52 100644
--- a/sound/soc/codecs/max98925.c
+++ b/sound/soc/codecs/max98925.c
@@ -458,7 +458,7 @@ static int max98925_dai_hw_params(struct snd_pcm_substream *substream,
}

static int max98925_dai_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct max98925_priv *max98925 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/max98927.c b/sound/soc/codecs/max98927.c
index 8b206ee..385bfc4 100644
--- a/sound/soc/codecs/max98927.c
+++ b/sound/soc/codecs/max98927.c
@@ -477,7 +477,7 @@ static int max98927_dai_tdm_slot(struct snd_soc_dai *dai,
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)

static int max98927_dai_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct max98927_priv *max98927 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/mc13783.c b/sound/soc/codecs/mc13783.c
index a210725..f49aaf8 100644
--- a/sound/soc/codecs/mc13783.c
+++ b/sound/soc/codecs/mc13783.c
@@ -268,19 +268,19 @@ static int mc13783_set_sysclk(struct snd_soc_dai *dai,
}

static int mc13783_set_sysclk_dac(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
return mc13783_set_sysclk(dai, clk_id, freq, dir, MC13783_AUDIO_DAC);
}

static int mc13783_set_sysclk_codec(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
return mc13783_set_sysclk(dai, clk_id, freq, dir, MC13783_AUDIO_CODEC);
}

static int mc13783_set_sysclk_sync(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
int ret;

diff --git a/sound/soc/codecs/ml26124.c b/sound/soc/codecs/ml26124.c
index 4d7c0be..654486b 100644
--- a/sound/soc/codecs/ml26124.c
+++ b/sound/soc/codecs/ml26124.c
@@ -435,7 +435,7 @@ static int ml26124_set_dai_fmt(struct snd_soc_dai *codec_dai,
}

static int ml26124_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct ml26124_priv *priv = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/nau8810.c b/sound/soc/codecs/nau8810.c
index 13676b5..44de91d 100644
--- a/sound/soc/codecs/nau8810.c
+++ b/sound/soc/codecs/nau8810.c
@@ -510,7 +510,7 @@ static const struct snd_soc_dapm_route nau8810_dapm_routes[] = {
};

static int nau8810_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct nau8810 *nau8810 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/nau8822.c b/sound/soc/codecs/nau8822.c
index 5812339..a349676 100644
--- a/sound/soc/codecs/nau8822.c
+++ b/sound/soc/codecs/nau8822.c
@@ -609,7 +609,7 @@ static const struct snd_soc_dapm_route nau8822_dapm_routes[] = {
{"Right DAC", NULL, "Digital Loopback"},
};

-static int nau8822_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int nau8822_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
diff --git a/sound/soc/codecs/pcm186x.c b/sound/soc/codecs/pcm186x.c
index b8845f4..90760bc 100644
--- a/sound/soc/codecs/pcm186x.c
+++ b/sound/soc/codecs/pcm186x.c
@@ -461,7 +461,7 @@ static int pcm186x_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
return 0;
}

-static int pcm186x_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int pcm186x_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
diff --git a/sound/soc/codecs/pcm3060.c b/sound/soc/codecs/pcm3060.c
index b235806..8b8deda 100644
--- a/sound/soc/codecs/pcm3060.c
+++ b/sound/soc/codecs/pcm3060.c
@@ -13,7 +13,7 @@

/* dai */

-static int pcm3060_set_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int pcm3060_set_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct snd_soc_component *comp = dai->component;
diff --git a/sound/soc/codecs/pcm3168a.c b/sound/soc/codecs/pcm3168a.c
index 821e739..52e5880 100644
--- a/sound/soc/codecs/pcm3168a.c
+++ b/sound/soc/codecs/pcm3168a.c
@@ -301,7 +301,7 @@ static int pcm3168a_mute(struct snd_soc_dai *dai, int mute, int direction)
}

static int pcm3168a_set_dai_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct pcm3168a_priv *pcm3168a = snd_soc_component_get_drvdata(dai->component);
int ret;
diff --git a/sound/soc/codecs/rt1011.c b/sound/soc/codecs/rt1011.c
index 098ecf1..aa3c918 100644
--- a/sound/soc/codecs/rt1011.c
+++ b/sound/soc/codecs/rt1011.c
@@ -1537,7 +1537,7 @@ static int rt1011_hw_params(struct snd_pcm_substream *substream,
dev_warn(component->dev, "Force using PLL ");
snd_soc_dai_set_pll(dai, 0, RT1011_PLL1_S_BCLK,
rt1011->lrck * 64, rt1011->lrck * 256);
- snd_soc_dai_set_sysclk(dai, RT1011_FS_SYS_PRE_S_PLL1,
+ snd_soc_dai_set_sysclk(dai, RT1011_FS_SYS_PRE_S_PLL1, 0,
rt1011->lrck * 256, SND_SOC_CLOCK_IN);
pre_div = 0;
}
diff --git a/sound/soc/codecs/rt1305.c b/sound/soc/codecs/rt1305.c
index 4e9dfd2..4a80aad 100644
--- a/sound/soc/codecs/rt1305.c
+++ b/sound/soc/codecs/rt1305.c
@@ -636,7 +636,7 @@ static int rt1305_hw_params(struct snd_pcm_substream *substream,
dev_warn(component->dev, "Force using PLL ");
snd_soc_dai_set_pll(dai, 0, RT1305_PLL1_S_BCLK,
rt1305->lrck * 64, rt1305->lrck * 256);
- snd_soc_dai_set_sysclk(dai, RT1305_FS_SYS_PRE_S_PLL1,
+ snd_soc_dai_set_sysclk(dai, RT1305_FS_SYS_PRE_S_PLL1, 0,
rt1305->lrck * 256, SND_SOC_CLOCK_IN);
pre_div = 0;
}
diff --git a/sound/soc/codecs/rt274.c b/sound/soc/codecs/rt274.c
index 0d3773c..41a0cc8 100644
--- a/sound/soc/codecs/rt274.c
+++ b/sound/soc/codecs/rt274.c
@@ -801,7 +801,7 @@ static int rt274_set_dai_pll(struct snd_soc_dai *dai, int pll_id, int source,
}

static int rt274_set_dai_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct rt274_priv *rt274 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/rt286.c b/sound/soc/codecs/rt286.c
index 8abe232..71f2828 100644
--- a/sound/soc/codecs/rt286.c
+++ b/sound/soc/codecs/rt286.c
@@ -798,7 +798,7 @@ static int rt286_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
}

static int rt286_set_dai_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct rt286_priv *rt286 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/rt298.c b/sound/soc/codecs/rt298.c
index 32cc9b6..a4c906f 100644
--- a/sound/soc/codecs/rt298.c
+++ b/sound/soc/codecs/rt298.c
@@ -867,7 +867,7 @@ static int rt298_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
}

static int rt298_set_dai_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct rt298_priv *rt298 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/rt5514.c b/sound/soc/codecs/rt5514.c
index 7081142..2186d25 100644
--- a/sound/soc/codecs/rt5514.c
+++ b/sound/soc/codecs/rt5514.c
@@ -860,7 +860,7 @@ static int rt5514_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
}

static int rt5514_set_dai_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct rt5514_priv *rt5514 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/rt5616.c b/sound/soc/codecs/rt5616.c
index fd0d3a0..8c5e015 100644
--- a/sound/soc/codecs/rt5616.c
+++ b/sound/soc/codecs/rt5616.c
@@ -1060,7 +1060,7 @@ static int rt5616_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
}

static int rt5616_set_dai_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct rt5616_priv *rt5616 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/rt5631.c b/sound/soc/codecs/rt5631.c
index 653da3e..3f9c7c8 100644
--- a/sound/soc/codecs/rt5631.c
+++ b/sound/soc/codecs/rt5631.c
@@ -1454,7 +1454,7 @@ static int rt5631_hifi_codec_set_dai_fmt(struct snd_soc_dai *codec_dai,
}

static int rt5631_hifi_codec_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct rt5631_priv *rt5631 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/rt5640.c b/sound/soc/codecs/rt5640.c
index 1414ad1..1791e1f 100644
--- a/sound/soc/codecs/rt5640.c
+++ b/sound/soc/codecs/rt5640.c
@@ -1831,7 +1831,7 @@ static int rt5640_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
}

static int rt5640_set_dai_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/rt5645.c b/sound/soc/codecs/rt5645.c
index 63a7e05..6bd9d9f 100644
--- a/sound/soc/codecs/rt5645.c
+++ b/sound/soc/codecs/rt5645.c
@@ -2862,7 +2862,7 @@ static int rt5645_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
}

static int rt5645_set_dai_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct rt5645_priv *rt5645 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/rt5651.c b/sound/soc/codecs/rt5651.c
index d198e19..0f1f00d 100644
--- a/sound/soc/codecs/rt5651.c
+++ b/sound/soc/codecs/rt5651.c
@@ -1408,7 +1408,7 @@ static int rt5651_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
}

static int rt5651_set_dai_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct rt5651_priv *rt5651 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/rt5660.c b/sound/soc/codecs/rt5660.c
index 0edf09d..ed8ebd6 100644
--- a/sound/soc/codecs/rt5660.c
+++ b/sound/soc/codecs/rt5660.c
@@ -968,7 +968,7 @@ static int rt5660_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
}

static int rt5660_set_dai_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct rt5660_priv *rt5660 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/rt5663.c b/sound/soc/codecs/rt5663.c
index 619fb9a..d344d8e 100644
--- a/sound/soc/codecs/rt5663.c
+++ b/sound/soc/codecs/rt5663.c
@@ -2854,7 +2854,7 @@ static int rt5663_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
return 0;
}

-static int rt5663_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int rt5663_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
diff --git a/sound/soc/codecs/rt5677.c b/sound/soc/codecs/rt5677.c
index 9e449d3..e90b463 100644
--- a/sound/soc/codecs/rt5677.c
+++ b/sound/soc/codecs/rt5677.c
@@ -4446,7 +4446,7 @@ static int rt5677_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
}

static int rt5677_set_dai_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c
index 73551e3..248f177 100644
--- a/sound/soc/codecs/sgtl5000.c
+++ b/sound/soc/codecs/sgtl5000.c
@@ -860,7 +860,7 @@ static int sgtl5000_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)

/* set codec sysclk */
static int sgtl5000_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct sgtl5000_priv *sgtl5000 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/ssm2602.c b/sound/soc/codecs/ssm2602.c
index 7964e92..9c87bb4 100644
--- a/sound/soc/codecs/ssm2602.c
+++ b/sound/soc/codecs/ssm2602.c
@@ -353,7 +353,7 @@ static int ssm2602_mute(struct snd_soc_dai *dai, int mute, int direction)
}

static int ssm2602_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct ssm2602_priv *ssm2602 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/sta32x.c b/sound/soc/codecs/sta32x.c
index 86528b9..b26642d 100644
--- a/sound/soc/codecs/sta32x.c
+++ b/sound/soc/codecs/sta32x.c
@@ -578,7 +578,7 @@ static int mcs_ratio_table[3][7] = {
* that from a machine's driver 'hw_param' hook.
*/
static int sta32x_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct sta32x_priv *sta32x = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/sta350.c b/sound/soc/codecs/sta350.c
index 75d3b06..b4a4fe4 100644
--- a/sound/soc/codecs/sta350.c
+++ b/sound/soc/codecs/sta350.c
@@ -607,7 +607,7 @@ static int mcs_ratio_table[3][6] = {
* time for ALSA.
*/
static int sta350_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct sta350_priv *sta350 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/sti-sas.c b/sound/soc/codecs/sti-sas.c
index ec9933b..34b1a68 100644
--- a/sound/soc/codecs/sti-sas.c
+++ b/sound/soc/codecs/sti-sas.c
@@ -257,7 +257,7 @@ static bool sti_sas_volatile_register(struct device *dev, unsigned int reg)
* sti_sas_set_sysclk:
* get MCLK input frequency to check that MCLK-FS ratio is coherent
*/
-static int sti_sas_set_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int sti_sas_set_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
diff --git a/sound/soc/codecs/tas2552.c b/sound/soc/codecs/tas2552.c
index bd00c35..42761c0 100644
--- a/sound/soc/codecs/tas2552.c
+++ b/sound/soc/codecs/tas2552.c
@@ -390,7 +390,7 @@ static int tas2552_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
return 0;
}

-static int tas2552_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int tas2552_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
diff --git a/sound/soc/codecs/tas5086.c b/sound/soc/codecs/tas5086.c
index 7831c96..99e2f29 100644
--- a/sound/soc/codecs/tas5086.c
+++ b/sound/soc/codecs/tas5086.c
@@ -294,7 +294,7 @@ static int tas5086_put_deemph(struct snd_kcontrol *kcontrol,


static int tas5086_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct tas5086_private *priv = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/tlv320aic23.c b/sound/soc/codecs/tlv320aic23.c
index 2400093..7196152 100644
--- a/sound/soc/codecs/tlv320aic23.c
+++ b/sound/soc/codecs/tlv320aic23.c
@@ -469,7 +469,7 @@ static int tlv320aic23_set_dai_fmt(struct snd_soc_dai *codec_dai,
}

static int tlv320aic23_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct aic23 *aic23 = snd_soc_dai_get_drvdata(codec_dai);
aic23->mclk = freq;
diff --git a/sound/soc/codecs/tlv320aic26.c b/sound/soc/codecs/tlv320aic26.c
index c7baef8..d56170e 100644
--- a/sound/soc/codecs/tlv320aic26.c
+++ b/sound/soc/codecs/tlv320aic26.c
@@ -153,7 +153,7 @@ static int aic26_mute(struct snd_soc_dai *dai, int mute, int direction)
}

static int aic26_set_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct aic26 *aic26 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/tlv320aic31xx.c b/sound/soc/codecs/tlv320aic31xx.c
index 51870d5..945901f 100644
--- a/sound/soc/codecs/tlv320aic31xx.c
+++ b/sound/soc/codecs/tlv320aic31xx.c
@@ -1121,7 +1121,7 @@ static int aic31xx_set_dai_fmt(struct snd_soc_dai *codec_dai,
}

static int aic31xx_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct aic31xx_priv *aic31xx = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/tlv320aic32x4.c b/sound/soc/codecs/tlv320aic32x4.c
index f04f88c..41764e2 100644
--- a/sound/soc/codecs/tlv320aic32x4.c
+++ b/sound/soc/codecs/tlv320aic32x4.c
@@ -589,7 +589,7 @@ const struct regmap_config aic32x4_regmap_config = {
EXPORT_SYMBOL(aic32x4_regmap_config);

static int aic32x4_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct clk *mclk;
diff --git a/sound/soc/codecs/tlv320aic3x.c b/sound/soc/codecs/tlv320aic3x.c
index db14441..9dbce5d 100644
--- a/sound/soc/codecs/tlv320aic3x.c
+++ b/sound/soc/codecs/tlv320aic3x.c
@@ -1234,7 +1234,7 @@ static int aic3x_mute(struct snd_soc_dai *dai, int mute, int direction)
}

static int aic3x_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct aic3x_priv *aic3x = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/tlv320dac33.c b/sound/soc/codecs/tlv320dac33.c
index d905e03..412f7e3 100644
--- a/sound/soc/codecs/tlv320dac33.c
+++ b/sound/soc/codecs/tlv320dac33.c
@@ -1279,7 +1279,7 @@ static snd_pcm_sframes_t dac33_dai_delay(
}

static int dac33_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/tscs454.c b/sound/soc/codecs/tscs454.c
index 1bafc9d..5338901 100644
--- a/sound/soc/codecs/tscs454.c
+++ b/sound/soc/codecs/tscs454.c
@@ -2626,7 +2626,7 @@ static struct snd_soc_dapm_route const tscs454_intercon[] = {

/* This is used when BCLK is sourcing the PLLs */
static int tscs454_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct tscs454 *tscs454 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/twl4030.c b/sound/soc/codecs/twl4030.c
index e059711..3f1edd9 100644
--- a/sound/soc/codecs/twl4030.c
+++ b/sound/soc/codecs/twl4030.c
@@ -1804,7 +1804,7 @@ static int twl4030_hw_params(struct snd_pcm_substream *substream,
return 0;
}

-static int twl4030_set_dai_sysclk(struct snd_soc_dai *codec_dai, int clk_id,
+static int twl4030_set_dai_sysclk(struct snd_soc_dai *codec_dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
@@ -2007,7 +2007,7 @@ static int twl4030_voice_hw_params(struct snd_pcm_substream *substream,
}

static int twl4030_voice_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct twl4030_priv *twl4030 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/twl6040.c b/sound/soc/codecs/twl6040.c
index b372033..e30b4f6 100644
--- a/sound/soc/codecs/twl6040.c
+++ b/sound/soc/codecs/twl6040.c
@@ -930,7 +930,7 @@ static int twl6040_prepare(struct snd_pcm_substream *substream,
}

static int twl6040_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct twl6040_data *priv = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/uda1334.c b/sound/soc/codecs/uda1334.c
index 21ab8c5..89e4b4e 100644
--- a/sound/soc/codecs/uda1334.c
+++ b/sound/soc/codecs/uda1334.c
@@ -122,7 +122,7 @@ static void uda1334_shutdown(struct snd_pcm_substream *substream,
}

static int uda1334_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct uda1334_priv *uda1334 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/uda134x.c b/sound/soc/codecs/uda134x.c
index bf9182c..58b9eeb 100644
--- a/sound/soc/codecs/uda134x.c
+++ b/sound/soc/codecs/uda134x.c
@@ -243,7 +243,7 @@ static int uda134x_hw_params(struct snd_pcm_substream *substream,
}

static int uda134x_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct uda134x_priv *uda134x = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/wm8350.c b/sound/soc/codecs/wm8350.c
index 15d42ce..5a8bd9a 100644
--- a/sound/soc/codecs/wm8350.c
+++ b/sound/soc/codecs/wm8350.c
@@ -749,7 +749,7 @@ static const struct snd_soc_dapm_route wm8350_dapm_routes[] = {
};

static int wm8350_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct wm8350_data *wm8350_data = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/wm8400.c b/sound/soc/codecs/wm8400.c
index bf5e77c..2cffd51 100644
--- a/sound/soc/codecs/wm8400.c
+++ b/sound/soc/codecs/wm8400.c
@@ -830,7 +830,7 @@ static const struct snd_soc_dapm_route wm8400_dapm_routes[] = {
* Clock after FLL and dividers
*/
static int wm8400_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct wm8400_priv *wm8400 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/wm8523.c b/sound/soc/codecs/wm8523.c
index c8b50aa..d6a2b90 100644
--- a/sound/soc/codecs/wm8523.c
+++ b/sound/soc/codecs/wm8523.c
@@ -206,7 +206,7 @@ static int wm8523_hw_params(struct snd_pcm_substream *substream,
}

static int wm8523_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct wm8523_priv *wm8523 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/wm8524.c b/sound/soc/codecs/wm8524.c
index 4e9ab54..3ccd660 100644
--- a/sound/soc/codecs/wm8524.c
+++ b/sound/soc/codecs/wm8524.c
@@ -90,7 +90,7 @@ static void wm8524_shutdown(struct snd_pcm_substream *substream,
}

static int wm8524_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct wm8524_priv *wm8524 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/wm8580.c b/sound/soc/codecs/wm8580.c
index 85ad2f0..c399c62 100644
--- a/sound/soc/codecs/wm8580.c
+++ b/sound/soc/codecs/wm8580.c
@@ -747,7 +747,7 @@ static int wm8580_set_dai_clkdiv(struct snd_soc_dai *codec_dai,
return 0;
}

-static int wm8580_set_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int wm8580_set_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
diff --git a/sound/soc/codecs/wm8711.c b/sound/soc/codecs/wm8711.c
index bc4d161..2c9549c 100644
--- a/sound/soc/codecs/wm8711.c
+++ b/sound/soc/codecs/wm8711.c
@@ -218,7 +218,7 @@ static int wm8711_mute(struct snd_soc_dai *dai, int mute, int direction)
}

static int wm8711_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct wm8711_priv *wm8711 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/wm8731.c b/sound/soc/codecs/wm8731.c
index dcee7b2..d603342 100644
--- a/sound/soc/codecs/wm8731.c
+++ b/sound/soc/codecs/wm8731.c
@@ -379,7 +379,7 @@ static int wm8731_mute(struct snd_soc_dai *dai, int mute, int direction)
}

static int wm8731_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
diff --git a/sound/soc/codecs/wm8737.c b/sound/soc/codecs/wm8737.c
index 7a3f9fb..10016ac 100644
--- a/sound/soc/codecs/wm8737.c
+++ b/sound/soc/codecs/wm8737.c
@@ -377,7 +377,7 @@ static int wm8737_hw_params(struct snd_pcm_substream *substream,
}

static int wm8737_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct wm8737_priv *wm8737 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/wm8741.c b/sound/soc/codecs/wm8741.c
index 0e39943..9644b36 100644
--- a/sound/soc/codecs/wm8741.c
+++ b/sound/soc/codecs/wm8741.c
@@ -256,7 +256,7 @@ static int wm8741_hw_params(struct snd_pcm_substream *substream,
}

static int wm8741_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct wm8741_priv *wm8741 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/wm8750.c b/sound/soc/codecs/wm8750.c
index 9491817..1fa459b 100644
--- a/sound/soc/codecs/wm8750.c
+++ b/sound/soc/codecs/wm8750.c
@@ -497,7 +497,7 @@ static inline int get_coeff(int mclk, int rate)
}

static int wm8750_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct wm8750_priv *wm8750 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/wm8753.c b/sound/soc/codecs/wm8753.c
index deaa54b..fb4ff9b 100644
--- a/sound/soc/codecs/wm8753.c
+++ b/sound/soc/codecs/wm8753.c
@@ -859,7 +859,7 @@ static int get_coeff(int mclk, int rate)
* Clock after PLL and dividers
*/
static int wm8753_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct wm8753_priv *wm8753 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/wm8770.c b/sound/soc/codecs/wm8770.c
index 5f39406..00640e9 100644
--- a/sound/soc/codecs/wm8770.c
+++ b/sound/soc/codecs/wm8770.c
@@ -482,7 +482,7 @@ static int wm8770_mute(struct snd_soc_dai *dai, int mute, int direction)
}

static int wm8770_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component;
struct wm8770_priv *wm8770;
diff --git a/sound/soc/codecs/wm8776.c b/sound/soc/codecs/wm8776.c
index 554acf5..7df958b 100644
--- a/sound/soc/codecs/wm8776.c
+++ b/sound/soc/codecs/wm8776.c
@@ -317,7 +317,7 @@ static int wm8776_mute(struct snd_soc_dai *dai, int mute, int direction)
}

static int wm8776_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct wm8776_priv *wm8776 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/wm8804.c b/sound/soc/codecs/wm8804.c
index 21bf0cf..c153fc7 100644
--- a/sound/soc/codecs/wm8804.c
+++ b/sound/soc/codecs/wm8804.c
@@ -446,7 +446,7 @@ static int wm8804_set_pll(struct snd_soc_dai *dai, int pll_id,
}

static int wm8804_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component;

diff --git a/sound/soc/codecs/wm8903.c b/sound/soc/codecs/wm8903.c
index 026603a..e99808e 100644
--- a/sound/soc/codecs/wm8903.c
+++ b/sound/soc/codecs/wm8903.c
@@ -1210,7 +1210,7 @@ static int wm8903_set_bias_level(struct snd_soc_component *component,
}

static int wm8903_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct wm8903_priv *wm8903 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/wm8904.c b/sound/soc/codecs/wm8904.c
index a02a77f..c42e502 100644
--- a/sound/soc/codecs/wm8904.c
+++ b/sound/soc/codecs/wm8904.c
@@ -1796,7 +1796,7 @@ static int wm8904_set_fll(struct snd_soc_dai *dai, int fll_id, int source,
return 0;
}

-static int wm8904_set_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int wm8904_set_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
diff --git a/sound/soc/codecs/wm8940.c b/sound/soc/codecs/wm8940.c
index 440d048..7722c89e 100644
--- a/sound/soc/codecs/wm8940.c
+++ b/sound/soc/codecs/wm8940.c
@@ -612,7 +612,7 @@ static int wm8940_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id,
}

static int wm8940_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct wm8940_priv *wm8940 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/wm8955.c b/sound/soc/codecs/wm8955.c
index 513df47..6c33993 100644
--- a/sound/soc/codecs/wm8955.c
+++ b/sound/soc/codecs/wm8955.c
@@ -635,7 +635,7 @@ static int wm8955_hw_params(struct snd_pcm_substream *substream,
}


-static int wm8955_set_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int wm8955_set_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c
index df35151..6c3a8c2 100644
--- a/sound/soc/codecs/wm8960.c
+++ b/sound/soc/codecs/wm8960.c
@@ -1279,7 +1279,7 @@ static int wm8960_set_bias_level(struct snd_soc_component *component,
return wm8960->set_bias_level(component, level);
}

-static int wm8960_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int wm8960_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
diff --git a/sound/soc/codecs/wm8961.c b/sound/soc/codecs/wm8961.c
index ef80d9f..2de1151 100644
--- a/sound/soc/codecs/wm8961.c
+++ b/sound/soc/codecs/wm8961.c
@@ -589,7 +589,7 @@ static int wm8961_hw_params(struct snd_pcm_substream *substream,
return 0;
}

-static int wm8961_set_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int wm8961_set_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq,
int dir)
{
diff --git a/sound/soc/codecs/wm8962.c b/sound/soc/codecs/wm8962.c
index ce4666a..d9da8b6 100644
--- a/sound/soc/codecs/wm8962.c
+++ b/sound/soc/codecs/wm8962.c
@@ -2610,7 +2610,7 @@ static int wm8962_hw_params(struct snd_pcm_substream *substream,
return 0;
}

-static int wm8962_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int wm8962_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
diff --git a/sound/soc/codecs/wm8971.c b/sound/soc/codecs/wm8971.c
index 21ae55c..a7938f0 100644
--- a/sound/soc/codecs/wm8971.c
+++ b/sound/soc/codecs/wm8971.c
@@ -427,7 +427,7 @@ static int get_coeff(int mclk, int rate)
}

static int wm8971_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct wm8971_priv *wm8971 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/wm8974.c b/sound/soc/codecs/wm8974.c
index fdc68ab..6ffa244 100644
--- a/sound/soc/codecs/wm8974.c
+++ b/sound/soc/codecs/wm8974.c
@@ -431,7 +431,7 @@ static int wm8974_update_clocks(struct snd_soc_dai *dai)
return 0;
}

-static int wm8974_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int wm8974_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
diff --git a/sound/soc/codecs/wm8978.c b/sound/soc/codecs/wm8978.c
index 4b5ecd1..51444e9 100644
--- a/sound/soc/codecs/wm8978.c
+++ b/sound/soc/codecs/wm8978.c
@@ -604,7 +604,7 @@ static int wm8978_set_dai_clkdiv(struct snd_soc_dai *codec_dai,
/*
* @freq: when .set_pll() us not used, freq is codec MCLK input frequency
*/
-static int wm8978_set_dai_sysclk(struct snd_soc_dai *codec_dai, int clk_id,
+static int wm8978_set_dai_sysclk(struct snd_soc_dai *codec_dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
diff --git a/sound/soc/codecs/wm8983.c b/sound/soc/codecs/wm8983.c
index d8ed22a..bdb5ea5 100644
--- a/sound/soc/codecs/wm8983.c
+++ b/sound/soc/codecs/wm8983.c
@@ -821,7 +821,7 @@ static int wm8983_set_pll(struct snd_soc_dai *dai, int pll_id,
}

static int wm8983_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct wm8983_priv *wm8983 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/wm8985.c b/sound/soc/codecs/wm8985.c
index a7e0110..61aa0d2 100644
--- a/sound/soc/codecs/wm8985.c
+++ b/sound/soc/codecs/wm8985.c
@@ -916,7 +916,7 @@ static int wm8985_set_pll(struct snd_soc_dai *dai, int pll_id,
}

static int wm8985_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component;
struct wm8985_priv *wm8985;
diff --git a/sound/soc/codecs/wm8988.c b/sound/soc/codecs/wm8988.c
index 1d2f881..ce1ae27 100644
--- a/sound/soc/codecs/wm8988.c
+++ b/sound/soc/codecs/wm8988.c
@@ -550,7 +550,7 @@ static const struct snd_pcm_hw_constraint_list constraints_12 = {
* Note that this should be called from init rather than from hw_params.
*/
static int wm8988_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct wm8988_priv *wm8988 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/wm8990.c b/sound/soc/codecs/wm8990.c
index 9389407..b723d69 100644
--- a/sound/soc/codecs/wm8990.c
+++ b/sound/soc/codecs/wm8990.c
@@ -874,7 +874,7 @@ static int wm8990_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id,
* Clock after PLL and dividers
*/
static int wm8990_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct wm8990_priv *wm8990 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/wm8993.c b/sound/soc/codecs/wm8993.c
index c4f4169..64cfc91 100644
--- a/sound/soc/codecs/wm8993.c
+++ b/sound/soc/codecs/wm8993.c
@@ -1065,7 +1065,7 @@ static int wm8993_set_bias_level(struct snd_soc_component *component,
}

static int wm8993_set_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = codec_dai->component;
struct wm8993_priv *wm8993 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c
index f117ec0c..4d2651b 100644
--- a/sound/soc/codecs/wm8994.c
+++ b/sound/soc/codecs/wm8994.c
@@ -2502,7 +2502,7 @@ static int wm8994_set_mclk_rate(struct wm8994_priv *wm8994, unsigned int id,
}

static int wm8994_set_dai_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/codecs/wm8995.c b/sound/soc/codecs/wm8995.c
index b896d9c..459eafc 100644
--- a/sound/soc/codecs/wm8995.c
+++ b/sound/soc/codecs/wm8995.c
@@ -1903,7 +1903,7 @@ static int wm8995_set_fll(struct snd_soc_dai *dai, int id,
}

static int wm8995_set_dai_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component;
struct wm8995_priv *wm8995;
diff --git a/sound/soc/codecs/wm8996.c b/sound/soc/codecs/wm8996.c
index d303ef7..89f18e1 100644
--- a/sound/soc/codecs/wm8996.c
+++ b/sound/soc/codecs/wm8996.c
@@ -1808,7 +1808,7 @@ static int wm8996_hw_params(struct snd_pcm_substream *substream,
}

static int wm8996_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct wm8996_priv *wm8996 = snd_soc_component_get_drvdata(component);
diff --git a/sound/soc/fsl/eukrea-tlv320.c b/sound/soc/fsl/eukrea-tlv320.c
index e13271e..6ea0d86 100644
--- a/sound/soc/fsl/eukrea-tlv320.c
+++ b/sound/soc/fsl/eukrea-tlv320.c
@@ -35,7 +35,7 @@ static int eukrea_tlv320_hw_params(struct snd_pcm_substream *substream,
struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0);
int ret;

- ret = snd_soc_dai_set_sysclk(codec_dai, 0,
+ ret = snd_soc_dai_set_sysclk(codec_dai, 0, 0,
CODEC_CLOCK, SND_SOC_CLOCK_OUT);
if (ret) {
dev_err(cpu_dai->dev,
@@ -45,7 +45,7 @@ static int eukrea_tlv320_hw_params(struct snd_pcm_substream *substream,

snd_soc_dai_set_tdm_slot(cpu_dai, 0x3, 0x3, 2, 0);

- ret = snd_soc_dai_set_sysclk(cpu_dai, IMX_SSP_SYS_CLK, 0,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, IMX_SSP_SYS_CLK, 0, 0,
SND_SOC_CLOCK_IN);
/* fsl_ssi lacks the set_sysclk ops */
if (ret && ret != -EINVAL) {
diff --git a/sound/soc/fsl/fsl-asoc-card.c b/sound/soc/fsl/fsl-asoc-card.c
index f62f81c..267fc7f 100644
--- a/sound/soc/fsl/fsl-asoc-card.c
+++ b/sound/soc/fsl/fsl-asoc-card.c
@@ -175,7 +175,7 @@ static int fsl_asoc_card_hw_params(struct snd_pcm_substream *substream,

/* Specific configurations of DAIs starts from here */
ret = snd_soc_dai_set_sysclk(asoc_rtd_to_cpu(rtd, 0), cpu_priv->sysclk_id[tx],
- cpu_priv->sysclk_freq[tx],
+ 0, cpu_priv->sysclk_freq[tx],
cpu_priv->sysclk_dir[tx]);
if (ret && ret != -ENOTSUPP) {
dev_err(dev, "failed to set sysclk for cpu dai\n");
@@ -208,7 +208,7 @@ static int fsl_asoc_card_hw_params(struct snd_pcm_substream *substream,
}

ret = snd_soc_dai_set_sysclk(asoc_rtd_to_codec(rtd, 0),
- codec_priv->fll_id,
+ codec_priv->fll_id, 0,
pll_out, SND_SOC_CLOCK_IN);

if (ret && ret != -ENOTSUPP) {
@@ -237,7 +237,7 @@ static int fsl_asoc_card_hw_free(struct snd_pcm_substream *substream)
if (!priv->streams && codec_priv->pll_id && codec_priv->fll_id) {
/* Force freq to be 0 to avoid error message in codec */
ret = snd_soc_dai_set_sysclk(asoc_rtd_to_codec(rtd, 0),
- codec_priv->mclk_id,
+ codec_priv->mclk_id, 0,
0,
SND_SOC_CLOCK_IN);
if (ret) {
@@ -515,7 +515,7 @@ static int fsl_asoc_card_late_probe(struct snd_soc_card *card)
return 0;
}

- ret = snd_soc_dai_set_sysclk(codec_dai, codec_priv->mclk_id,
+ ret = snd_soc_dai_set_sysclk(codec_dai, codec_priv->mclk_id, 0,
codec_priv->mclk_freq, SND_SOC_CLOCK_IN);
if (ret && ret != -ENOTSUPP) {
dev_err(dev, "failed to set sysclk in %s\n", __func__);
diff --git a/sound/soc/fsl/fsl_esai.c b/sound/soc/fsl/fsl_esai.c
index 08056fa..714d201 100644
--- a/sound/soc/fsl/fsl_esai.c
+++ b/sound/soc/fsl/fsl_esai.c
@@ -256,7 +256,7 @@ static int fsl_esai_divisor_cal(struct snd_soc_dai *dai, bool tx, u32 ratio,
*
* Note: If the direction is input, we do not care about clk_id.
*/
-static int fsl_esai_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int fsl_esai_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct fsl_esai *esai_priv = snd_soc_dai_get_drvdata(dai);
diff --git a/sound/soc/fsl/fsl_micfil.c b/sound/soc/fsl/fsl_micfil.c
index 5935af2..d1f232d 100644
--- a/sound/soc/fsl/fsl_micfil.c
+++ b/sound/soc/fsl/fsl_micfil.c
@@ -362,7 +362,7 @@ static int fsl_micfil_hw_params(struct snd_pcm_substream *substream,
return 0;
}

-static int fsl_micfil_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int fsl_micfil_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct fsl_micfil *micfil = snd_soc_dai_get_drvdata(dai);
diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c
index 5e65b45..4044bd2 100644
--- a/sound/soc/fsl/fsl_sai.c
+++ b/sound/soc/fsl/fsl_sai.c
@@ -166,7 +166,7 @@ static int fsl_sai_set_dai_bclk_ratio(struct snd_soc_dai *dai,
}

static int fsl_sai_set_dai_sysclk_tr(struct snd_soc_dai *cpu_dai,
- int clk_id, unsigned int freq, int fsl_dir)
+ int clk_id, int source, unsigned int freq, int fsl_dir)
{
struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai);
unsigned int ofs = sai->soc_data->reg_offset;
@@ -197,21 +197,21 @@ static int fsl_sai_set_dai_sysclk_tr(struct snd_soc_dai *cpu_dai,
}

static int fsl_sai_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
int ret;

if (dir == SND_SOC_CLOCK_IN)
return 0;

- ret = fsl_sai_set_dai_sysclk_tr(cpu_dai, clk_id, freq,
+ ret = fsl_sai_set_dai_sysclk_tr(cpu_dai, clk_id, 0, freq,
FSL_FMT_TRANSMITTER);
if (ret) {
dev_err(cpu_dai->dev, "Cannot set tx sysclk: %d\n", ret);
return ret;
}

- ret = fsl_sai_set_dai_sysclk_tr(cpu_dai, clk_id, freq,
+ ret = fsl_sai_set_dai_sysclk_tr(cpu_dai, clk_id, 0, freq,
FSL_FMT_RECEIVER);
if (ret)
dev_err(cpu_dai->dev, "Cannot set rx sysclk: %d\n", ret);
diff --git a/sound/soc/fsl/imx-audmix.c b/sound/soc/fsl/imx-audmix.c
index cbdc0a2..ffda572 100644
--- a/sound/soc/fsl/imx-audmix.c
+++ b/sound/soc/fsl/imx-audmix.c
@@ -91,7 +91,7 @@ static int imx_audmix_fe_hw_params(struct snd_pcm_substream *substream,
return ret;
}

- ret = snd_soc_dai_set_sysclk(asoc_rtd_to_cpu(rtd, 0), FSL_SAI_CLK_MAST1, 0, dir);
+ ret = snd_soc_dai_set_sysclk(asoc_rtd_to_cpu(rtd, 0), FSL_SAI_CLK_MAST1, 0, 0, dir);
if (ret) {
dev_err(dev, "failed to set cpu sysclk: %d\n", ret);
return ret;
diff --git a/sound/soc/fsl/imx-hdmi.c b/sound/soc/fsl/imx-hdmi.c
index dbbb761..f0412cd 100644
--- a/sound/soc/fsl/imx-hdmi.c
+++ b/sound/soc/fsl/imx-hdmi.c
@@ -46,7 +46,7 @@ static int imx_hdmi_hw_params(struct snd_pcm_substream *substream,
int ret;

/* MCLK always is (256 or 192) * rate. */
- ret = snd_soc_dai_set_sysclk(cpu_dai, data->cpu_priv.sysclk_id[tx],
+ ret = snd_soc_dai_set_sysclk(cpu_dai, data->cpu_priv.sysclk_id[tx], 0,
8 * slot_width * params_rate(params),
tx ? SND_SOC_CLOCK_OUT : SND_SOC_CLOCK_IN);
if (ret && ret != -ENOTSUPP) {
diff --git a/sound/soc/fsl/imx-sgtl5000.c b/sound/soc/fsl/imx-sgtl5000.c
index f45cb4b..11227f1 100644
--- a/sound/soc/fsl/imx-sgtl5000.c
+++ b/sound/soc/fsl/imx-sgtl5000.c
@@ -31,7 +31,7 @@ static int imx_sgtl5000_dai_init(struct snd_soc_pcm_runtime *rtd)
int ret;

ret = snd_soc_dai_set_sysclk(asoc_rtd_to_codec(rtd, 0), SGTL5000_SYSCLK,
- data->clk_frequency, SND_SOC_CLOCK_IN);
+ 0, data->clk_frequency, SND_SOC_CLOCK_IN);
if (ret) {
dev_err(dev, "could not set codec driver clock params\n");
return ret;
diff --git a/sound/soc/fsl/mpc5200_psc_i2s.c b/sound/soc/fsl/mpc5200_psc_i2s.c
index 3149d59..5aacbb1 100644
--- a/sound/soc/fsl/mpc5200_psc_i2s.c
+++ b/sound/soc/fsl/mpc5200_psc_i2s.c
@@ -85,7 +85,7 @@ static int psc_i2s_hw_params(struct snd_pcm_substream *substream,
* @dir: SND_SOC_CLOCK_IN (clock slave) or SND_SOC_CLOCK_OUT (clock master)
*/
static int psc_i2s_set_sysclk(struct snd_soc_dai *cpu_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(cpu_dai);
dev_dbg(psc_dma->dev, "psc_i2s_set_sysclk(cpu_dai=%p, dir=%i)\n",
diff --git a/sound/soc/fsl/mpc8610_hpcd.c b/sound/soc/fsl/mpc8610_hpcd.c
index eccc833..12e5c67 100644
--- a/sound/soc/fsl/mpc8610_hpcd.c
+++ b/sound/soc/fsl/mpc8610_hpcd.c
@@ -115,7 +115,7 @@ static int mpc8610_hpcd_startup(struct snd_pcm_substream *substream)
* Tell the codec driver what the MCLK frequency is, and whether it's
* a slave or master.
*/
- ret = snd_soc_dai_set_sysclk(asoc_rtd_to_codec(rtd, 0), 0,
+ ret = snd_soc_dai_set_sysclk(asoc_rtd_to_codec(rtd, 0), 0, 0,
machine_data->clk_frequency,
machine_data->codec_clk_direction);
if (ret < 0) {
diff --git a/sound/soc/fsl/p1022_ds.c b/sound/soc/fsl/p1022_ds.c
index ac68d22..485fb4e 100644
--- a/sound/soc/fsl/p1022_ds.c
+++ b/sound/soc/fsl/p1022_ds.c
@@ -138,7 +138,7 @@ static int p1022_ds_startup(struct snd_pcm_substream *substream)
* Tell the codec driver what the MCLK frequency is, and whether it's
* a slave or master.
*/
- ret = snd_soc_dai_set_sysclk(asoc_rtd_to_codec(rtd, 0), 0, mdata->clk_frequency,
+ ret = snd_soc_dai_set_sysclk(asoc_rtd_to_codec(rtd, 0), 0, 0, mdata->clk_frequency,
mdata->codec_clk_direction);
if (ret < 0) {
dev_err(dev, "could not set codec driver clock params\n");
diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simple-card-utils.c
index ab31045..f1012e9 100644
--- a/sound/soc/generic/simple-card-utils.c
+++ b/sound/soc/generic/simple-card-utils.c
@@ -219,8 +219,8 @@ void asoc_simple_shutdown(struct snd_pcm_substream *substream)
simple_priv_to_props(priv, rtd->num);

if (dai_props->mclk_fs) {
- snd_soc_dai_set_sysclk(codec_dai, 0, 0, SND_SOC_CLOCK_IN);
- snd_soc_dai_set_sysclk(cpu_dai, 0, 0, SND_SOC_CLOCK_OUT);
+ snd_soc_dai_set_sysclk(codec_dai, 0, 0, 0, SND_SOC_CLOCK_IN);
+ snd_soc_dai_set_sysclk(cpu_dai, 0, 0, 0, SND_SOC_CLOCK_OUT);
}

asoc_simple_clk_disable(dai_props->cpu_dai);
@@ -270,12 +270,12 @@ int asoc_simple_hw_params(struct snd_pcm_substream *substream,
if (ret < 0)
return ret;

- ret = snd_soc_dai_set_sysclk(codec_dai, 0, mclk,
+ ret = snd_soc_dai_set_sysclk(codec_dai, 0, 0, mclk,
SND_SOC_CLOCK_IN);
if (ret && ret != -ENOTSUPP)
goto err;

- ret = snd_soc_dai_set_sysclk(cpu_dai, 0, mclk,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, 0, 0, mclk,
SND_SOC_CLOCK_OUT);
if (ret && ret != -ENOTSUPP)
goto err;
@@ -307,7 +307,7 @@ static int asoc_simple_init_dai(struct snd_soc_dai *dai,
return 0;

if (simple_dai->sysclk) {
- ret = snd_soc_dai_set_sysclk(dai, 0, simple_dai->sysclk,
+ ret = snd_soc_dai_set_sysclk(dai, 0, 0, simple_dai->sysclk,
simple_dai->clk_direction);
if (ret && ret != -ENOTSUPP) {
dev_err(dai->dev, "simple-card: set_sysclk error\n");
diff --git a/sound/soc/intel/boards/bdw-rt5650.c b/sound/soc/intel/boards/bdw-rt5650.c
index c5122d3..e1fd9de 100644
--- a/sound/soc/intel/boards/bdw-rt5650.c
+++ b/sound/soc/intel/boards/bdw-rt5650.c
@@ -121,7 +121,7 @@ static int bdw_rt5650_hw_params(struct snd_pcm_substream *substream,
* 24.576MHz to satisfy the requirement of rl6231_get_clk_info.
* ASRC is enabled on AD and DA filters to ensure good audio quality.
*/
- ret = snd_soc_dai_set_sysclk(codec_dai, RT5645_SCLK_S_PLL1, 24576000,
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT5645_SCLK_S_PLL1, 0, 24576000,
SND_SOC_CLOCK_IN);
if (ret < 0) {
dev_err(rtd->dev, "can't set codec sysclk configuration\n");
diff --git a/sound/soc/intel/boards/bdw-rt5677.c b/sound/soc/intel/boards/bdw-rt5677.c
index 021bc59..413ba20 100644
--- a/sound/soc/intel/boards/bdw-rt5677.c
+++ b/sound/soc/intel/boards/bdw-rt5677.c
@@ -157,7 +157,7 @@ static int bdw_rt5677_hw_params(struct snd_pcm_substream *substream,
struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
int ret;

- ret = snd_soc_dai_set_sysclk(codec_dai, RT5677_SCLK_S_MCLK, 24576000,
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT5677_SCLK_S_MCLK, 0, 24576000,
SND_SOC_CLOCK_IN);
if (ret < 0) {
dev_err(rtd->dev, "can't set codec sysclk configuration\n");
@@ -174,7 +174,7 @@ static int bdw_rt5677_dsp_hw_params(struct snd_pcm_substream *substream,
struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
int ret;

- ret = snd_soc_dai_set_sysclk(codec_dai, RT5677_SCLK_S_PLL1, 24576000,
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT5677_SCLK_S_PLL1, 0, 24576000,
SND_SOC_CLOCK_IN);
if (ret < 0) {
dev_err(rtd->dev, "can't set codec sysclk configuration\n");
diff --git a/sound/soc/intel/boards/broadwell.c b/sound/soc/intel/boards/broadwell.c
index 3c3aff9..d423ddd 100644
--- a/sound/soc/intel/boards/broadwell.c
+++ b/sound/soc/intel/boards/broadwell.c
@@ -104,7 +104,7 @@ static int broadwell_rt286_hw_params(struct snd_pcm_substream *substream,
struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
int ret;

- ret = snd_soc_dai_set_sysclk(codec_dai, RT286_SCLK_S_PLL, 24000000,
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT286_SCLK_S_PLL, 0, 24000000,
SND_SOC_CLOCK_IN);

if (ret < 0) {
diff --git a/sound/soc/intel/boards/bxt_da7219_max98357a.c b/sound/soc/intel/boards/bxt_da7219_max98357a.c
index 0c0a7178..811b343 100644
--- a/sound/soc/intel/boards/bxt_da7219_max98357a.c
+++ b/sound/soc/intel/boards/bxt_da7219_max98357a.c
@@ -219,7 +219,7 @@ static int broxton_da7219_codec_init(struct snd_soc_pcm_runtime *rtd)
else
clk_freq = 19200000;

- ret = snd_soc_dai_set_sysclk(codec_dai, DA7219_CLKSRC_MCLK, clk_freq,
+ ret = snd_soc_dai_set_sysclk(codec_dai, DA7219_CLKSRC_MCLK, 0, clk_freq,
SND_SOC_CLOCK_IN);

if (ret) {
diff --git a/sound/soc/intel/boards/bxt_rt298.c b/sound/soc/intel/boards/bxt_rt298.c
index 0f3157d..b1bc5b9 100644
--- a/sound/soc/intel/boards/bxt_rt298.c
+++ b/sound/soc/intel/boards/bxt_rt298.c
@@ -228,7 +228,7 @@ static int broxton_rt298_hw_params(struct snd_pcm_substream *substream,
struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
int ret;

- ret = snd_soc_dai_set_sysclk(codec_dai, RT298_SCLK_S_PLL,
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT298_SCLK_S_PLL, 0,
19200000, SND_SOC_CLOCK_IN);
if (ret < 0) {
dev_err(rtd->dev, "can't set codec sysclk configuration\n");
diff --git a/sound/soc/intel/boards/bytcht_cx2072x.c b/sound/soc/intel/boards/bytcht_cx2072x.c
index 2bfe3e4..3732180 100644
--- a/sound/soc/intel/boards/bytcht_cx2072x.c
+++ b/sound/soc/intel/boards/bytcht_cx2072x.c
@@ -81,7 +81,7 @@ static int byt_cht_cx2072x_init(struct snd_soc_pcm_runtime *rtd)

/* set the default PLL rate, the clock is handled by the codec driver */
ret = snd_soc_dai_set_sysclk(asoc_rtd_to_codec(rtd, 0), CX2072X_MCLK_EXTERNAL_PLL,
- 19200000, SND_SOC_CLOCK_IN);
+ 0, 19200000, SND_SOC_CLOCK_IN);
if (ret) {
dev_err(rtd->dev, "Could not set sysclk\n");
return ret;
diff --git a/sound/soc/intel/boards/bytcht_da7213.c b/sound/soc/intel/boards/bytcht_da7213.c
index cfeba27..d22a3a0 100644
--- a/sound/soc/intel/boards/bytcht_da7213.c
+++ b/sound/soc/intel/boards/bytcht_da7213.c
@@ -109,7 +109,7 @@ static int aif1_hw_params(struct snd_pcm_substream *substream,
struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
int ret;

- ret = snd_soc_dai_set_sysclk(codec_dai, DA7213_CLKSRC_MCLK,
+ ret = snd_soc_dai_set_sysclk(codec_dai, DA7213_CLKSRC_MCLK, 0,
19200000, SND_SOC_CLOCK_IN);
if (ret < 0)
dev_err(codec_dai->dev, "can't set codec sysclk configuration\n");
diff --git a/sound/soc/intel/boards/bytcht_es8316.c b/sound/soc/intel/boards/bytcht_es8316.c
index 06df2d4..cfc22bd 100644
--- a/sound/soc/intel/boards/bytcht_es8316.c
+++ b/sound/soc/intel/boards/bytcht_es8316.c
@@ -211,7 +211,7 @@ static int byt_cht_es8316_init(struct snd_soc_pcm_runtime *runtime)
if (ret)
dev_err(card->dev, "unable to enable MCLK\n");

- ret = snd_soc_dai_set_sysclk(asoc_rtd_to_codec(runtime, 0), 0, 19200000,
+ ret = snd_soc_dai_set_sysclk(asoc_rtd_to_codec(runtime, 0), 0, 0, 19200000,
SND_SOC_CLOCK_IN);
if (ret < 0) {
dev_err(card->dev, "can't set codec clock %d\n", ret);
diff --git a/sound/soc/intel/boards/bytcr_rt5640.c b/sound/soc/intel/boards/bytcr_rt5640.c
index 782f2b4..19987c3 100644
--- a/sound/soc/intel/boards/bytcr_rt5640.c
+++ b/sound/soc/intel/boards/bytcr_rt5640.c
@@ -211,7 +211,7 @@ static int byt_rt5640_prepare_and_enable_pll1(struct snd_soc_dai *codec_dai,
return ret;
}

- ret = snd_soc_dai_set_sysclk(codec_dai, RT5640_SCLK_S_PLL1,
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT5640_SCLK_S_PLL1, 0,
rate * 512, SND_SOC_CLOCK_IN);
if (ret < 0) {
dev_err(codec_dai->component->dev, "can't set clock %d\n", ret);
@@ -259,7 +259,7 @@ static int platform_clock_control(struct snd_soc_dapm_widget *w,
* turning off the platform clock. Codec needs clock
* for Jack detection and button press
*/
- ret = snd_soc_dai_set_sysclk(codec_dai, RT5640_SCLK_S_RCCLK,
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT5640_SCLK_S_RCCLK, 0,
48000 * 512,
SND_SOC_CLOCK_IN);
if (!ret) {
diff --git a/sound/soc/intel/boards/bytcr_rt5651.c b/sound/soc/intel/boards/bytcr_rt5651.c
index 148b7b1..912eb87 100644
--- a/sound/soc/intel/boards/bytcr_rt5651.c
+++ b/sound/soc/intel/boards/bytcr_rt5651.c
@@ -158,7 +158,7 @@ static int byt_rt5651_prepare_and_enable_pll1(struct snd_soc_dai *codec_dai,
return ret;
}

- ret = snd_soc_dai_set_sysclk(codec_dai, RT5651_SCLK_S_PLL1,
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT5651_SCLK_S_PLL1, 0,
rate * 512, SND_SOC_CLOCK_IN);
if (ret < 0) {
dev_err(codec_dai->component->dev, "can't set clock %d\n", ret);
@@ -202,7 +202,7 @@ static int platform_clock_control(struct snd_soc_dapm_widget *w,
* turning off the platform clock. Codec needs clock
* for Jack detection and button press
*/
- ret = snd_soc_dai_set_sysclk(codec_dai, RT5651_SCLK_S_RCCLK,
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT5651_SCLK_S_RCCLK, 0,
48000 * 512,
SND_SOC_CLOCK_IN);
if (!ret)
diff --git a/sound/soc/intel/boards/bytcr_wm5102.c b/sound/soc/intel/boards/bytcr_wm5102.c
index f38850e..321addd 100644
--- a/sound/soc/intel/boards/bytcr_wm5102.c
+++ b/sound/soc/intel/boards/bytcr_wm5102.c
@@ -75,7 +75,7 @@ static int byt_wm5102_prepare_and_enable_pll1(struct snd_soc_dai *codec_dai, int
return ret;
}

- ret = snd_soc_dai_set_sysclk(codec_dai, ARIZONA_CLK_SYSCLK,
+ ret = snd_soc_dai_set_sysclk(codec_dai, ARIZONA_CLK_SYSCLK, 0,
rate * 512, SND_SOC_CLOCK_IN);
if (ret) {
dev_err(codec_component->dev, "Error setting clock: %d\n", ret);
diff --git a/sound/soc/intel/boards/cht_bsw_max98090_ti.c b/sound/soc/intel/boards/cht_bsw_max98090_ti.c
index 1318823..5ff928d 100644
--- a/sound/soc/intel/boards/cht_bsw_max98090_ti.c
+++ b/sound/soc/intel/boards/cht_bsw_max98090_ti.c
@@ -116,7 +116,7 @@ static int cht_aif1_hw_params(struct snd_pcm_substream *substream,
struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
int ret;

- ret = snd_soc_dai_set_sysclk(codec_dai, M98090_REG_SYSTEM_CLOCK,
+ ret = snd_soc_dai_set_sysclk(codec_dai, M98090_REG_SYSTEM_CLOCK, 0,
CHT_PLAT_CLK_3_HZ, SND_SOC_CLOCK_IN);
if (ret < 0) {
dev_err(rtd->dev, "can't set codec sysclk: %d\n", ret);
diff --git a/sound/soc/intel/boards/cht_bsw_nau8824.c b/sound/soc/intel/boards/cht_bsw_nau8824.c
index da5a5cb..2ea4d2f 100644
--- a/sound/soc/intel/boards/cht_bsw_nau8824.c
+++ b/sound/soc/intel/boards/cht_bsw_nau8824.c
@@ -76,7 +76,7 @@ static int cht_aif1_hw_params(struct snd_pcm_substream *substream,
struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
int ret;

- ret = snd_soc_dai_set_sysclk(codec_dai, NAU8824_CLK_FLL_FS, 0,
+ ret = snd_soc_dai_set_sysclk(codec_dai, NAU8824_CLK_FLL_FS, 0, 0,
SND_SOC_CLOCK_IN);
if (ret < 0) {
dev_err(codec_dai->dev, "can't set FS clock %d\n", ret);
diff --git a/sound/soc/intel/boards/cht_bsw_rt5645.c b/sound/soc/intel/boards/cht_bsw_rt5645.c
index 6fea554..b4970df 100644
--- a/sound/soc/intel/boards/cht_bsw_rt5645.c
+++ b/sound/soc/intel/boards/cht_bsw_rt5645.c
@@ -95,7 +95,7 @@ static int platform_clock_control(struct snd_soc_dapm_widget *w,
* runtime suspended. Codec needs clock for jack detection and button
* press. MCLK is turned off with clock framework or ACPI.
*/
- ret = snd_soc_dai_set_sysclk(codec_dai, RT5645_SCLK_S_RCCLK,
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT5645_SCLK_S_RCCLK, 0,
48000 * 512, SND_SOC_CLOCK_IN);
if (ret < 0) {
dev_err(card->dev, "can't set codec sysclk: %d\n", ret);
@@ -219,7 +219,7 @@ static int cht_aif1_hw_params(struct snd_pcm_substream *substream,
return ret;
}

- ret = snd_soc_dai_set_sysclk(codec_dai, RT5645_SCLK_S_PLL1,
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT5645_SCLK_S_PLL1, 0,
params_rate(params) * 512, SND_SOC_CLOCK_IN);
if (ret < 0) {
dev_err(rtd->dev, "can't set codec sysclk: %d\n", ret);
diff --git a/sound/soc/intel/boards/cht_bsw_rt5672.c b/sound/soc/intel/boards/cht_bsw_rt5672.c
index 10c88ef..bcafa7b 100644
--- a/sound/soc/intel/boards/cht_bsw_rt5672.c
+++ b/sound/soc/intel/boards/cht_bsw_rt5672.c
@@ -79,7 +79,7 @@ static int platform_clock_control(struct snd_soc_dapm_widget *w,
}

/* set codec sysclk source to PLL */
- ret = snd_soc_dai_set_sysclk(codec_dai, RT5670_SCLK_S_PLL1,
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT5670_SCLK_S_PLL1, 0,
48000 * 512, SND_SOC_CLOCK_IN);
if (ret < 0) {
dev_err(card->dev, "can't set codec sysclk: %d\n", ret);
@@ -156,7 +156,7 @@ static int cht_aif1_hw_params(struct snd_pcm_substream *substream,
}

/* set codec sysclk source to PLL */
- ret = snd_soc_dai_set_sysclk(codec_dai, RT5670_SCLK_S_PLL1,
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT5670_SCLK_S_PLL1, 0,
params_rate(params) * 512,
SND_SOC_CLOCK_IN);
if (ret < 0) {
diff --git a/sound/soc/intel/boards/cml_rt1011_rt5682.c b/sound/soc/intel/boards/cml_rt1011_rt5682.c
index 14813be..0578259 100644
--- a/sound/soc/intel/boards/cml_rt1011_rt5682.c
+++ b/sound/soc/intel/boards/cml_rt1011_rt5682.c
@@ -213,7 +213,7 @@ static int cml_rt5682_hw_params(struct snd_pcm_substream *substream,
dev_warn(rtd->dev, "snd_soc_dai_set_pll err = %d\n", ret);

/* Configure sysclk for codec */
- ret = snd_soc_dai_set_sysclk(codec_dai, RT5682_SCLK_S_PLL1,
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT5682_SCLK_S_PLL1, 0,
pll_out, SND_SOC_CLOCK_IN);
if (ret < 0)
dev_warn(rtd->dev, "snd_soc_dai_set_sysclk err = %d\n", ret);
diff --git a/sound/soc/intel/boards/glk_rt5682_max98357a.c b/sound/soc/intel/boards/glk_rt5682_max98357a.c
index 62cca51..ca0a93e 100644
--- a/sound/soc/intel/boards/glk_rt5682_max98357a.c
+++ b/sound/soc/intel/boards/glk_rt5682_max98357a.c
@@ -149,7 +149,7 @@ static int geminilake_rt5682_codec_init(struct snd_soc_pcm_runtime *rtd)
}

/* Configure sysclk for codec */
- ret = snd_soc_dai_set_sysclk(codec_dai, RT5682_SCLK_S_PLL1,
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT5682_SCLK_S_PLL1, 0,
RT5682_PLL_FREQ, SND_SOC_CLOCK_IN);
if (ret < 0)
dev_err(rtd->dev, "snd_soc_dai_set_sysclk err = %d\n", ret);
diff --git a/sound/soc/intel/boards/haswell.c b/sound/soc/intel/boards/haswell.c
index c763bfe..5699b35 100644
--- a/sound/soc/intel/boards/haswell.c
+++ b/sound/soc/intel/boards/haswell.c
@@ -56,7 +56,7 @@ static int haswell_rt5640_hw_params(struct snd_pcm_substream *substream,
struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
int ret;

- ret = snd_soc_dai_set_sysclk(codec_dai, RT5640_SCLK_S_MCLK, 12288000,
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT5640_SCLK_S_MCLK, 0, 12288000,
SND_SOC_CLOCK_IN);

if (ret < 0) {
diff --git a/sound/soc/intel/boards/kbl_da7219_max98357a.c b/sound/soc/intel/boards/kbl_da7219_max98357a.c
index dc3d897..b403b0c 100644
--- a/sound/soc/intel/boards/kbl_da7219_max98357a.c
+++ b/sound/soc/intel/boards/kbl_da7219_max98357a.c
@@ -165,7 +165,7 @@ static int kabylake_da7219_codec_init(struct snd_soc_pcm_runtime *rtd)
int ret;

/* Configure sysclk for codec */
- ret = snd_soc_dai_set_sysclk(codec_dai, DA7219_CLKSRC_MCLK, 24576000,
+ ret = snd_soc_dai_set_sysclk(codec_dai, DA7219_CLKSRC_MCLK, 0, 24576000,
SND_SOC_CLOCK_IN);
if (ret) {
dev_err(rtd->dev, "can't set codec sysclk configuration\n");
diff --git a/sound/soc/intel/boards/kbl_da7219_max98927.c b/sound/soc/intel/boards/kbl_da7219_max98927.c
index cc9a2509..07a4425 100644
--- a/sound/soc/intel/boards/kbl_da7219_max98927.c
+++ b/sound/soc/intel/boards/kbl_da7219_max98927.c
@@ -76,7 +76,7 @@ static int platform_clock_control(struct snd_soc_dapm_widget *w,
}

/* Configure sysclk for codec */
- ret = snd_soc_dai_set_sysclk(codec_dai, DA7219_CLKSRC_MCLK, 24576000,
+ ret = snd_soc_dai_set_sysclk(codec_dai, DA7219_CLKSRC_MCLK, 0, 24576000,
SND_SOC_CLOCK_IN);
if (ret) {
dev_err(card->dev, "can't set codec sysclk configuration\n");
diff --git a/sound/soc/intel/boards/skl_rt286.c b/sound/soc/intel/boards/skl_rt286.c
index 5a0c64a..4dbf179 100644
--- a/sound/soc/intel/boards/skl_rt286.c
+++ b/sound/soc/intel/boards/skl_rt286.c
@@ -232,7 +232,7 @@ static int skylake_rt286_hw_params(struct snd_pcm_substream *substream,
struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
int ret;

- ret = snd_soc_dai_set_sysclk(codec_dai, RT286_SCLK_S_PLL, 24000000,
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT286_SCLK_S_PLL, 0, 24000000,
SND_SOC_CLOCK_IN);
if (ret < 0)
dev_err(rtd->dev, "set codec sysclk failed: %d\n", ret);
diff --git a/sound/soc/intel/boards/sof_da7219_max98373.c b/sound/soc/intel/boards/sof_da7219_max98373.c
index f3cb077..58b81e0 100644
--- a/sound/soc/intel/boards/sof_da7219_max98373.c
+++ b/sound/soc/intel/boards/sof_da7219_max98373.c
@@ -145,7 +145,7 @@ static int da7219_codec_init(struct snd_soc_pcm_runtime *rtd)
int ret;

/* Configure sysclk for codec */
- ret = snd_soc_dai_set_sysclk(codec_dai, DA7219_CLKSRC_MCLK, 24000000,
+ ret = snd_soc_dai_set_sysclk(codec_dai, DA7219_CLKSRC_MCLK, 0, 24000000,
SND_SOC_CLOCK_IN);
if (ret) {
dev_err(rtd->dev, "can't set codec sysclk configuration\n");
diff --git a/sound/soc/intel/boards/sof_realtek_common.c b/sound/soc/intel/boards/sof_realtek_common.c
index f3cf73c..b4451e3 100644
--- a/sound/soc/intel/boards/sof_realtek_common.c
+++ b/sound/soc/intel/boards/sof_realtek_common.c
@@ -80,7 +80,7 @@ static int rt1011_hw_params(struct snd_pcm_substream *substream,
return ret;
}

- ret = snd_soc_dai_set_sysclk(codec_dai, RT1011_FS_SYS_PRE_S_PLL1,
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT1011_FS_SYS_PRE_S_PLL1, 0,
256 * srate, SND_SOC_CLOCK_IN);
if (ret < 0) {
dev_err(codec_dai->dev, "fail to set sysclk, ret %d\n",
diff --git a/sound/soc/intel/boards/sof_rt5682.c b/sound/soc/intel/boards/sof_rt5682.c
index 55505e2..0104913 100644
--- a/sound/soc/intel/boards/sof_rt5682.c
+++ b/sound/soc/intel/boards/sof_rt5682.c
@@ -283,7 +283,7 @@ static int sof_rt5682_hw_params(struct snd_pcm_substream *substream,
dev_err(rtd->dev, "snd_soc_dai_set_pll err = %d\n", ret);

/* Configure sysclk for codec */
- ret = snd_soc_dai_set_sysclk(codec_dai, RT5682_SCLK_S_PLL1,
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT5682_SCLK_S_PLL1, 0,
pll_out, SND_SOC_CLOCK_IN);
if (ret < 0)
dev_err(rtd->dev, "snd_soc_dai_set_sysclk err = %d\n", ret);
@@ -331,7 +331,7 @@ static int sof_rt1015_hw_params(struct snd_pcm_substream *substream,
return ret;
}
/* Configure sysclk for codec */
- ret = snd_soc_dai_set_sysclk(codec_dai, RT1015_SCLK_S_PLL,
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT1015_SCLK_S_PLL, 0,
params_rate(params) * 256,
SND_SOC_CLOCK_IN);
if (ret < 0) {
diff --git a/sound/soc/intel/boards/sof_sdw_rt1308.c b/sound/soc/intel/boards/sof_sdw_rt1308.c
index 0d476f6..dafce85 100644
--- a/sound/soc/intel/boards/sof_sdw_rt1308.c
+++ b/sound/soc/intel/boards/sof_sdw_rt1308.c
@@ -112,7 +112,7 @@ static int rt1308_i2s_hw_params(struct snd_pcm_substream *substream,
}

/* Set rt1308 sysclk */
- err = snd_soc_dai_set_sysclk(codec_dai, RT1308_FS_SYS_S_PLL, pll_out,
+ err = snd_soc_dai_set_sysclk(codec_dai, RT1308_FS_SYS_S_PLL, 0, pll_out,
SND_SOC_CLOCK_IN);
if (err < 0) {
dev_err(card->dev, "Failed to set RT1308 SYSCLK: %d\n", err);
diff --git a/sound/soc/intel/boards/sof_wm8804.c b/sound/soc/intel/boards/sof_wm8804.c
index a46ba13..5eb5d65 100644
--- a/sound/soc/intel/boards/sof_wm8804.c
+++ b/sound/soc/intel/boards/sof_wm8804.c
@@ -126,7 +126,7 @@ static int sof_wm8804_hw_params(struct snd_pcm_substream *substream,
snd_soc_dai_set_clkdiv(codec_dai, WM8804_MCLK_DIV, mclk_div);
snd_soc_dai_set_pll(codec_dai, 0, 0, sysclk, mclk_freq);

- ret = snd_soc_dai_set_sysclk(codec_dai, WM8804_TX_CLKSRC_PLL,
+ ret = snd_soc_dai_set_sysclk(codec_dai, WM8804_TX_CLKSRC_PLL, 0,
sysclk, SND_SOC_CLOCK_OUT);
if (ret < 0) {
dev_err(rtd->card->dev,
diff --git a/sound/soc/jz4740/jz4740-i2s.c b/sound/soc/jz4740/jz4740-i2s.c
index 52ba0e3..1f6e670 100644
--- a/sound/soc/jz4740/jz4740-i2s.c
+++ b/sound/soc/jz4740/jz4740-i2s.c
@@ -299,7 +299,7 @@ static int jz4740_i2s_hw_params(struct snd_pcm_substream *substream,
return 0;
}

-static int jz4740_i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int jz4740_i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai);
diff --git a/sound/soc/kirkwood/armada-370-db.c b/sound/soc/kirkwood/armada-370-db.c
index 8132642..0ee891b 100644
--- a/sound/soc/kirkwood/armada-370-db.c
+++ b/sound/soc/kirkwood/armada-370-db.c
@@ -35,7 +35,7 @@ static int a370db_hw_params(struct snd_pcm_substream *substream,
break;
}

- return snd_soc_dai_set_sysclk(codec_dai, 0, freq, SND_SOC_CLOCK_IN);
+ return snd_soc_dai_set_sysclk(codec_dai, 0, 0, freq, SND_SOC_CLOCK_IN);
}

static const struct snd_soc_ops a370db_ops = {
diff --git a/sound/soc/mediatek/mt2701/mt2701-afe-pcm.c b/sound/soc/mediatek/mt2701/mt2701-afe-pcm.c
index d5cffe7..86df7d1 100644
--- a/sound/soc/mediatek/mt2701/mt2701-afe-pcm.c
+++ b/sound/soc/mediatek/mt2701/mt2701-afe-pcm.c
@@ -262,7 +262,7 @@ static int mt2701_afe_i2s_prepare(struct snd_pcm_substream *substream,
return 0;
}

-static int mt2701_afe_i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int mt2701_afe_i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
diff --git a/sound/soc/mediatek/mt2701/mt2701-cs42448.c b/sound/soc/mediatek/mt2701/mt2701-cs42448.c
index 44a8d5c..b2d9dd4 100644
--- a/sound/soc/mediatek/mt2701/mt2701-cs42448.c
+++ b/sound/soc/mediatek/mt2701/mt2701-cs42448.c
@@ -138,10 +138,10 @@ static int mt2701_cs42448_be_ops_hw_params(struct snd_pcm_substream *substream,
mclk_rate = rate * div_bck_over_lrck * div_mclk_over_bck;

/* mt2701 mclk */
- snd_soc_dai_set_sysclk(cpu_dai, 0, mclk_rate, SND_SOC_CLOCK_OUT);
+ snd_soc_dai_set_sysclk(cpu_dai, 0, 0, mclk_rate, SND_SOC_CLOCK_OUT);

/* codec mclk */
- snd_soc_dai_set_sysclk(codec_dai, 0, mclk_rate, SND_SOC_CLOCK_IN);
+ snd_soc_dai_set_sysclk(codec_dai, 0, 0, mclk_rate, SND_SOC_CLOCK_IN);

return 0;
}
diff --git a/sound/soc/mediatek/mt2701/mt2701-wm8960.c b/sound/soc/mediatek/mt2701/mt2701-wm8960.c
index 414e422..86cf29df 100644
--- a/sound/soc/mediatek/mt2701/mt2701-wm8960.c
+++ b/sound/soc/mediatek/mt2701/mt2701-wm8960.c
@@ -34,8 +34,8 @@ static int mt2701_wm8960_be_ops_hw_params(struct snd_pcm_substream *substream,

mclk_rate = rate * div_bck_over_lrck * div_mclk_over_bck;

- snd_soc_dai_set_sysclk(cpu_dai, 0, mclk_rate, SND_SOC_CLOCK_OUT);
- snd_soc_dai_set_sysclk(codec_dai, 0, mclk_rate, SND_SOC_CLOCK_IN);
+ snd_soc_dai_set_sysclk(cpu_dai, 0, 0, mclk_rate, SND_SOC_CLOCK_OUT);
+ snd_soc_dai_set_sysclk(codec_dai, 0, 0, mclk_rate, SND_SOC_CLOCK_IN);

return 0;
}
diff --git a/sound/soc/mediatek/mt8173/mt8173-max98090.c b/sound/soc/mediatek/mt8173/mt8173-max98090.c
index fc94314..bb4c7ec 100644
--- a/sound/soc/mediatek/mt8173/mt8173-max98090.c
+++ b/sound/soc/mediatek/mt8173/mt8173-max98090.c
@@ -55,7 +55,7 @@ static int mt8173_max98090_hw_params(struct snd_pcm_substream *substream,
struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);

- return snd_soc_dai_set_sysclk(codec_dai, 0, params_rate(params) * 256,
+ return snd_soc_dai_set_sysclk(codec_dai, 0, 0, params_rate(params) * 256,
SND_SOC_CLOCK_IN);
}

diff --git a/sound/soc/mediatek/mt8173/mt8173-rt5650-rt5514.c b/sound/soc/mediatek/mt8173/mt8173-rt5650-rt5514.c
index 0f28dc2..66626aa 100644
--- a/sound/soc/mediatek/mt8173/mt8173-rt5650-rt5514.c
+++ b/sound/soc/mediatek/mt8173/mt8173-rt5650-rt5514.c
@@ -55,7 +55,7 @@ static int mt8173_rt5650_rt5514_hw_params(struct snd_pcm_substream *substream,
return ret;

/* sysclk from pll */
- ret = snd_soc_dai_set_sysclk(codec_dai, 1,
+ ret = snd_soc_dai_set_sysclk(codec_dai, 1, 0,
params_rate(params) * 512,
SND_SOC_CLOCK_IN);
if (ret)
diff --git a/sound/soc/mediatek/mt8173/mt8173-rt5650-rt5676.c b/sound/soc/mediatek/mt8173/mt8173-rt5650-rt5676.c
index 077c6ee..3b3a73b 100644
--- a/sound/soc/mediatek/mt8173/mt8173-rt5650-rt5676.c
+++ b/sound/soc/mediatek/mt8173/mt8173-rt5650-rt5676.c
@@ -59,7 +59,7 @@ static int mt8173_rt5650_rt5676_hw_params(struct snd_pcm_substream *substream,
return ret;

/* sysclk from pll */
- ret = snd_soc_dai_set_sysclk(codec_dai, 1,
+ ret = snd_soc_dai_set_sysclk(codec_dai, 1, 0,
params_rate(params) * 512,
SND_SOC_CLOCK_IN);
if (ret)
diff --git a/sound/soc/mediatek/mt8173/mt8173-rt5650.c b/sound/soc/mediatek/mt8173/mt8173-rt5650.c
index c28ebf8..ea5b1fc 100644
--- a/sound/soc/mediatek/mt8173/mt8173-rt5650.c
+++ b/sound/soc/mediatek/mt8173/mt8173-rt5650.c
@@ -85,7 +85,7 @@ static int mt8173_rt5650_hw_params(struct snd_pcm_substream *substream,
return ret;

/* sysclk from pll */
- ret = snd_soc_dai_set_sysclk(codec_dai, 1,
+ ret = snd_soc_dai_set_sysclk(codec_dai, 1, 0,
params_rate(params) * 512,
SND_SOC_CLOCK_IN);
if (ret)
diff --git a/sound/soc/mediatek/mt8183/mt8183-da7219-max98357.c b/sound/soc/mediatek/mt8183/mt8183-da7219-max98357.c
index a4d26a6..b06f68d 100644
--- a/sound/soc/mediatek/mt8183/mt8183-da7219-max98357.c
+++ b/sound/soc/mediatek/mt8183/mt8183-da7219-max98357.c
@@ -38,7 +38,7 @@ static int mt8183_mt6358_i2s_hw_params(struct snd_pcm_substream *substream,
unsigned int mclk_fs = rate * mclk_fs_ratio;

return snd_soc_dai_set_sysclk(asoc_rtd_to_cpu(rtd, 0),
- 0, mclk_fs, SND_SOC_CLOCK_OUT);
+ 0, 0, mclk_fs, SND_SOC_CLOCK_OUT);
}

static const struct snd_soc_ops mt8183_mt6358_i2s_ops = {
@@ -56,7 +56,7 @@ static int mt8183_da7219_i2s_hw_params(struct snd_pcm_substream *substream,
unsigned int freq;
int ret = 0, j;

- ret = snd_soc_dai_set_sysclk(asoc_rtd_to_cpu(rtd, 0), 0,
+ ret = snd_soc_dai_set_sysclk(asoc_rtd_to_cpu(rtd, 0), 0, 0,
mclk_fs, SND_SOC_CLOCK_OUT);
if (ret < 0)
dev_err(rtd->dev, "failed to set cpu dai sysclk\n");
@@ -64,7 +64,7 @@ static int mt8183_da7219_i2s_hw_params(struct snd_pcm_substream *substream,
for_each_rtd_codec_dais(rtd, j, codec_dai) {
if (!strcmp(codec_dai->component->name, DA7219_DEV_NAME)) {
ret = snd_soc_dai_set_sysclk(codec_dai,
- DA7219_CLKSRC_MCLK,
+ DA7219_CLKSRC_MCLK, 0,
mclk_fs,
SND_SOC_CLOCK_IN);
if (ret < 0)
@@ -134,7 +134,7 @@ mt8183_da7219_rt1015_i2s_hw_params(struct snd_pcm_substream *substream,
}

ret = snd_soc_dai_set_sysclk(codec_dai,
- RT1015_SCLK_S_PLL,
+ RT1015_SCLK_S_PLL, 0,
rate * 256,
SND_SOC_CLOCK_IN);
if (ret) {
diff --git a/sound/soc/mediatek/mt8183/mt8183-dai-i2s.c b/sound/soc/mediatek/mt8183/mt8183-dai-i2s.c
index 138591d..f678f46 100644
--- a/sound/soc/mediatek/mt8183/mt8183-dai-i2s.c
+++ b/sound/soc/mediatek/mt8183/mt8183-dai-i2s.c
@@ -793,7 +793,7 @@ static int mtk_dai_i2s_hw_params(struct snd_pcm_substream *substream,
}

static int mtk_dai_i2s_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct mtk_base_afe *afe = dev_get_drvdata(dai->dev);
struct mt8183_afe_private *afe_priv = afe->platform_priv;
diff --git a/sound/soc/mediatek/mt8183/mt8183-dai-tdm.c b/sound/soc/mediatek/mt8183/mt8183-dai-tdm.c
index 0d69cf4..34d5708 100644
--- a/sound/soc/mediatek/mt8183/mt8183-dai-tdm.c
+++ b/sound/soc/mediatek/mt8183/mt8183-dai-tdm.c
@@ -613,7 +613,7 @@ static int mtk_dai_tdm_trigger(struct snd_pcm_substream *substream,
}

static int mtk_dai_tdm_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct mtk_base_afe *afe = dev_get_drvdata(dai->dev);
struct mt8183_afe_private *afe_priv = afe->platform_priv;
diff --git a/sound/soc/mediatek/mt8183/mt8183-mt6358-ts3a227-max98357.c b/sound/soc/mediatek/mt8183/mt8183-mt6358-ts3a227-max98357.c
index 271413e..4f6ee03 100644
--- a/sound/soc/mediatek/mt8183/mt8183-mt6358-ts3a227-max98357.c
+++ b/sound/soc/mediatek/mt8183/mt8183-mt6358-ts3a227-max98357.c
@@ -48,7 +48,7 @@ static int mt8183_mt6358_i2s_hw_params(struct snd_pcm_substream *substream,
unsigned int mclk_fs = rate * mclk_fs_ratio;

return snd_soc_dai_set_sysclk(asoc_rtd_to_cpu(rtd, 0),
- 0, mclk_fs, SND_SOC_CLOCK_OUT);
+ 0, 0, mclk_fs, SND_SOC_CLOCK_OUT);
}

static const struct snd_soc_ops mt8183_mt6358_i2s_ops = {
@@ -75,7 +75,7 @@ mt8183_mt6358_rt1015_i2s_hw_params(struct snd_pcm_substream *substream,
return ret;
}

- ret = snd_soc_dai_set_sysclk(codec_dai, RT1015_SCLK_S_PLL,
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT1015_SCLK_S_PLL, 0,
rate * 256, SND_SOC_CLOCK_IN);
if (ret < 0) {
dev_err(card->dev, "failed to set sysclk\n");
@@ -84,7 +84,7 @@ mt8183_mt6358_rt1015_i2s_hw_params(struct snd_pcm_substream *substream,
}

return snd_soc_dai_set_sysclk(asoc_rtd_to_cpu(rtd, 0),
- 0, mclk_fs, SND_SOC_CLOCK_OUT);
+ 0, 0, mclk_fs, SND_SOC_CLOCK_OUT);
}

static const struct snd_soc_ops mt8183_mt6358_rt1015_i2s_ops = {
diff --git a/sound/soc/mediatek/mt8192/mt8192-dai-i2s.c b/sound/soc/mediatek/mt8192/mt8192-dai-i2s.c
index 5b29340..301084bc 100644
--- a/sound/soc/mediatek/mt8192/mt8192-dai-i2s.c
+++ b/sound/soc/mediatek/mt8192/mt8192-dai-i2s.c
@@ -1772,7 +1772,7 @@ static int mtk_dai_i2s_hw_params(struct snd_pcm_substream *substream,
}

static int mtk_dai_i2s_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct mtk_base_afe *afe = dev_get_drvdata(dai->dev);
struct mt8192_afe_private *afe_priv = afe->platform_priv;
diff --git a/sound/soc/mediatek/mt8192/mt8192-dai-tdm.c b/sound/soc/mediatek/mt8192/mt8192-dai-tdm.c
index f5de1d7..48f8429 100644
--- a/sound/soc/mediatek/mt8192/mt8192-dai-tdm.c
+++ b/sound/soc/mediatek/mt8192/mt8192-dai-tdm.c
@@ -626,7 +626,7 @@ static int mtk_dai_tdm_hw_params(struct snd_pcm_substream *substream,
}

static int mtk_dai_tdm_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct mtk_base_afe *afe = dev_get_drvdata(dai->dev);
struct mt8192_afe_private *afe_priv = afe->platform_priv;
diff --git a/sound/soc/mediatek/mt8192/mt8192-mt6359-rt1015-rt5682.c b/sound/soc/mediatek/mt8192/mt8192-mt6359-rt1015-rt5682.c
index a606133..1e927b1 100644
--- a/sound/soc/mediatek/mt8192/mt8192-mt6359-rt1015-rt5682.c
+++ b/sound/soc/mediatek/mt8192/mt8192-mt6359-rt1015-rt5682.c
@@ -59,7 +59,7 @@ static int mt8192_rt1015_i2s_hw_params(struct snd_pcm_substream *substream,
}

ret = snd_soc_dai_set_sysclk(codec_dai,
- RT1015_SCLK_S_PLL,
+ RT1015_SCLK_S_PLL, 0,
params_rate(params) * 256,
SND_SOC_CLOCK_IN);
if (ret) {
@@ -68,7 +68,7 @@ static int mt8192_rt1015_i2s_hw_params(struct snd_pcm_substream *substream,
}
}

- return snd_soc_dai_set_sysclk(cpu_dai, 0, mclk_fs, SND_SOC_CLOCK_OUT);
+ return snd_soc_dai_set_sysclk(cpu_dai, 0, 0, mclk_fs, SND_SOC_CLOCK_OUT);
}

static int mt8192_rt5682_i2s_hw_params(struct snd_pcm_substream *substream,
@@ -106,7 +106,7 @@ static int mt8192_rt5682_i2s_hw_params(struct snd_pcm_substream *substream,
}

ret = snd_soc_dai_set_sysclk(codec_dai,
- RT5682_SCLK_S_PLL1,
+ RT5682_SCLK_S_PLL1, 0,
params_rate(params) * 512,
SND_SOC_CLOCK_IN);
if (ret) {
@@ -114,7 +114,7 @@ static int mt8192_rt5682_i2s_hw_params(struct snd_pcm_substream *substream,
return ret;
}

- return snd_soc_dai_set_sysclk(cpu_dai, 0, mclk_fs, SND_SOC_CLOCK_OUT);
+ return snd_soc_dai_set_sysclk(cpu_dai, 0, 0, mclk_fs, SND_SOC_CLOCK_OUT);
}

static const struct snd_soc_ops mt8192_rt1015_i2s_ops = {
diff --git a/sound/soc/meson/aiu-encoder-i2s.c b/sound/soc/meson/aiu-encoder-i2s.c
index 9322245..c36556d 100644
--- a/sound/soc/meson/aiu-encoder-i2s.c
+++ b/sound/soc/meson/aiu-encoder-i2s.c
@@ -296,7 +296,7 @@ static int aiu_encoder_i2s_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
return 0;
}

-static int aiu_encoder_i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int aiu_encoder_i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct aiu *aiu = snd_soc_component_get_drvdata(dai->component);
diff --git a/sound/soc/meson/axg-tdm-interface.c b/sound/soc/meson/axg-tdm-interface.c
index 87cac44..e107bb3 100644
--- a/sound/soc/meson/axg-tdm-interface.c
+++ b/sound/soc/meson/axg-tdm-interface.c
@@ -96,7 +96,7 @@ int axg_tdm_set_tdm_slots(struct snd_soc_dai *dai, u32 *tx_mask,
}
EXPORT_SYMBOL_GPL(axg_tdm_set_tdm_slots);

-static int axg_tdm_iface_set_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int axg_tdm_iface_set_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct axg_tdm_iface *iface = snd_soc_dai_get_drvdata(dai);
diff --git a/sound/soc/meson/meson-card-utils.c b/sound/soc/meson/meson-card-utils.c
index 300ac8b..d796b38 100644
--- a/sound/soc/meson/meson-card-utils.c
+++ b/sound/soc/meson/meson-card-utils.c
@@ -24,13 +24,13 @@ int meson_card_i2s_set_sysclk(struct snd_pcm_substream *substream,
mclk = params_rate(params) * mclk_fs;

for_each_rtd_codec_dais(rtd, i, codec_dai) {
- ret = snd_soc_dai_set_sysclk(codec_dai, 0, mclk,
+ ret = snd_soc_dai_set_sysclk(codec_dai, 0, 0, mclk,
SND_SOC_CLOCK_IN);
if (ret && ret != -ENOTSUPP)
return ret;
}

- ret = snd_soc_dai_set_sysclk(asoc_rtd_to_cpu(rtd, 0), 0, mclk,
+ ret = snd_soc_dai_set_sysclk(asoc_rtd_to_cpu(rtd, 0), 0, 0, mclk,
SND_SOC_CLOCK_OUT);
if (ret && ret != -ENOTSUPP)
return ret;
diff --git a/sound/soc/mxs/mxs-saif.c b/sound/soc/mxs/mxs-saif.c
index 07f8cf9..12a383d 100644
--- a/sound/soc/mxs/mxs-saif.c
+++ b/sound/soc/mxs/mxs-saif.c
@@ -46,7 +46,7 @@ static struct mxs_saif *mxs_saif[2];
*/

static int mxs_saif_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct mxs_saif *saif = snd_soc_dai_get_drvdata(cpu_dai);

diff --git a/sound/soc/mxs/mxs-sgtl5000.c b/sound/soc/mxs/mxs-sgtl5000.c
index a6407f4..cfd3611 100644
--- a/sound/soc/mxs/mxs-sgtl5000.c
+++ b/sound/soc/mxs/mxs-sgtl5000.c
@@ -37,7 +37,7 @@ static int mxs_sgtl5000_hw_params(struct snd_pcm_substream *substream,
}

/* Set SGTL5000's SYSCLK (provided by SAIF MCLK) */
- ret = snd_soc_dai_set_sysclk(codec_dai, SGTL5000_SYSCLK, mclk, 0);
+ ret = snd_soc_dai_set_sysclk(codec_dai, SGTL5000_SYSCLK, 0, mclk, 0);
if (ret) {
dev_err(codec_dai->dev, "Failed to set sysclk to %u.%03uMHz\n",
mclk / 1000000, mclk / 1000 % 1000);
@@ -45,7 +45,7 @@ static int mxs_sgtl5000_hw_params(struct snd_pcm_substream *substream,
}

/* The SAIF MCLK should be the same as SGTL5000_SYSCLK */
- ret = snd_soc_dai_set_sysclk(cpu_dai, MXS_SAIF_MCLK, mclk, 0);
+ ret = snd_soc_dai_set_sysclk(cpu_dai, MXS_SAIF_MCLK, 0, mclk, 0);
if (ret) {
dev_err(cpu_dai->dev, "Failed to set sysclk to %u.%03uMHz\n",
mclk / 1000000, mclk / 1000 % 1000);
diff --git a/sound/soc/pxa/brownstone.c b/sound/soc/pxa/brownstone.c
index f310a8e..8fcf8ae 100644
--- a/sound/soc/pxa/brownstone.c
+++ b/sound/soc/pxa/brownstone.c
@@ -58,12 +58,12 @@ static int brownstone_wm8994_hw_params(struct snd_pcm_substream *substream,
sspa_mclk = params_rate(params) * 64;
}

- snd_soc_dai_set_sysclk(cpu_dai, MMP_SSPA_CLK_AUDIO, freq_out, 0);
+ snd_soc_dai_set_sysclk(cpu_dai, MMP_SSPA_CLK_AUDIO, 0, freq_out, 0);
snd_soc_dai_set_pll(cpu_dai, MMP_SYSCLK, 0, freq_out, sysclk);
snd_soc_dai_set_pll(cpu_dai, MMP_SSPA_CLK, 0, freq_out, sspa_mclk);

/* set wm8994 sysclk */
- snd_soc_dai_set_sysclk(codec_dai, WM8994_SYSCLK_MCLK1, sysclk, 0);
+ snd_soc_dai_set_sysclk(codec_dai, WM8994_SYSCLK_MCLK1, 0, sysclk, 0);

return 0;
}
diff --git a/sound/soc/pxa/corgi.c b/sound/soc/pxa/corgi.c
index 8ee2dea..6511740 100644
--- a/sound/soc/pxa/corgi.c
+++ b/sound/soc/pxa/corgi.c
@@ -136,13 +136,13 @@ static int corgi_hw_params(struct snd_pcm_substream *substream,
}

/* set the codec system clock for DAC and ADC */
- ret = snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK_XTAL, clk,
+ ret = snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK_XTAL, 0, clk,
SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;

/* set the I2S system clock as input (unused) */
- ret = snd_soc_dai_set_sysclk(cpu_dai, PXA2XX_I2S_SYSCLK, 0,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, PXA2XX_I2S_SYSCLK, 0, 0,
SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;
diff --git a/sound/soc/pxa/hx4700.c b/sound/soc/pxa/hx4700.c
index 7334fac..ff7fd21 100644
--- a/sound/soc/pxa/hx4700.c
+++ b/sound/soc/pxa/hx4700.c
@@ -59,14 +59,14 @@ static int hx4700_hw_params(struct snd_pcm_substream *substream,
int ret = 0;

/* set the I2S system clock as output */
- ret = snd_soc_dai_set_sysclk(cpu_dai, PXA2XX_I2S_SYSCLK, 0,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, PXA2XX_I2S_SYSCLK, 0, 0,
SND_SOC_CLOCK_OUT);
if (ret < 0)
return ret;

/* inform codec driver about clock freq *
* (PXA I2S always uses divider 256) */
- ret = snd_soc_dai_set_sysclk(codec_dai, 0, 256 * params_rate(params),
+ ret = snd_soc_dai_set_sysclk(codec_dai, 0, 0, 256 * params_rate(params),
SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;
diff --git a/sound/soc/pxa/imote2.c b/sound/soc/pxa/imote2.c
index a575676..330a99c 100644
--- a/sound/soc/pxa/imote2.c
+++ b/sound/soc/pxa/imote2.c
@@ -31,13 +31,13 @@ static int imote2_asoc_hw_params(struct snd_pcm_substream *substream,
break;
}

- ret = snd_soc_dai_set_sysclk(codec_dai, 0, clk,
+ ret = snd_soc_dai_set_sysclk(codec_dai, 0, 0, clk,
SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;

/* set the I2S system clock as input (unused) */
- ret = snd_soc_dai_set_sysclk(cpu_dai, PXA2XX_I2S_SYSCLK, clk,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, PXA2XX_I2S_SYSCLK, 0, clk,
SND_SOC_CLOCK_OUT);

return ret;
diff --git a/sound/soc/pxa/magician.c b/sound/soc/pxa/magician.c
index a5f326c..0e9fae1 100644
--- a/sound/soc/pxa/magician.c
+++ b/sound/soc/pxa/magician.c
@@ -106,7 +106,7 @@ static int magician_playback_hw_params(struct snd_pcm_substream *substream,
return ret;

/* set audio clock as clock source */
- ret = snd_soc_dai_set_sysclk(cpu_dai, PXA_SSP_CLK_AUDIO, 0,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, PXA_SSP_CLK_AUDIO, 0, 0,
SND_SOC_CLOCK_OUT);
if (ret < 0)
return ret;
@@ -140,7 +140,7 @@ static int magician_capture_hw_params(struct snd_pcm_substream *substream,
return ret;

/* set the I2S system clock as output */
- ret = snd_soc_dai_set_sysclk(cpu_dai, PXA2XX_I2S_SYSCLK, 0,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, PXA2XX_I2S_SYSCLK, 0, 0,
SND_SOC_CLOCK_OUT);
if (ret < 0)
return ret;
diff --git a/sound/soc/pxa/mmp-sspa.c b/sound/soc/pxa/mmp-sspa.c
index 4803972..37b48cd 100644
--- a/sound/soc/pxa/mmp-sspa.c
+++ b/sound/soc/pxa/mmp-sspa.c
@@ -104,7 +104,7 @@ static void mmp_sspa_shutdown(struct snd_pcm_substream *substream,
* Set the SSP ports SYSCLK.
*/
static int mmp_sspa_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct sspa_priv *sspa = snd_soc_dai_get_drvdata(cpu_dai);
struct device *dev = cpu_dai->component->dev;
diff --git a/sound/soc/pxa/poodle.c b/sound/soc/pxa/poodle.c
index 323ba3e..8572340 100644
--- a/sound/soc/pxa/poodle.c
+++ b/sound/soc/pxa/poodle.c
@@ -110,13 +110,13 @@ static int poodle_hw_params(struct snd_pcm_substream *substream,
}

/* set the codec system clock for DAC and ADC */
- ret = snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK_XTAL, clk,
+ ret = snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK_XTAL, 0, clk,
SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;

/* set the I2S system clock as input (unused) */
- ret = snd_soc_dai_set_sysclk(cpu_dai, PXA2XX_I2S_SYSCLK, 0,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, PXA2XX_I2S_SYSCLK, 0, 0,
SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;
diff --git a/sound/soc/pxa/pxa-ssp.c b/sound/soc/pxa/pxa-ssp.c
index b941adc..0102dc2 100644
--- a/sound/soc/pxa/pxa-ssp.c
+++ b/sound/soc/pxa/pxa-ssp.c
@@ -198,7 +198,7 @@ static void pxa_ssp_set_scr(struct ssp_device *ssp, u32 div)
* Set the SSP ports SYSCLK.
*/
static int pxa_ssp_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct ssp_priv *priv = snd_soc_dai_get_drvdata(cpu_dai);
struct ssp_device *ssp = priv->ssp;
diff --git a/sound/soc/pxa/pxa2xx-i2s.c b/sound/soc/pxa/pxa2xx-i2s.c
index bcde4a9..eeabdd7 100644
--- a/sound/soc/pxa/pxa2xx-i2s.c
+++ b/sound/soc/pxa/pxa2xx-i2s.c
@@ -145,7 +145,7 @@ static int pxa2xx_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai,
}

static int pxa2xx_i2s_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
if (clk_id != PXA2XX_I2S_SYSCLK)
return -ENODEV;
diff --git a/sound/soc/pxa/spitz.c b/sound/soc/pxa/spitz.c
index 7c1384a86..9fcdaf0 100644
--- a/sound/soc/pxa/spitz.c
+++ b/sound/soc/pxa/spitz.c
@@ -137,13 +137,13 @@ static int spitz_hw_params(struct snd_pcm_substream *substream,
}

/* set the codec system clock for DAC and ADC */
- ret = snd_soc_dai_set_sysclk(codec_dai, WM8750_SYSCLK, clk,
+ ret = snd_soc_dai_set_sysclk(codec_dai, WM8750_SYSCLK, 0, clk,
SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;

/* set the I2S system clock as input (unused) */
- ret = snd_soc_dai_set_sysclk(cpu_dai, PXA2XX_I2S_SYSCLK, 0,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, PXA2XX_I2S_SYSCLK, 0, 0,
SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;
diff --git a/sound/soc/pxa/z2.c b/sound/soc/pxa/z2.c
index edf2b9e..49f1313 100644
--- a/sound/soc/pxa/z2.c
+++ b/sound/soc/pxa/z2.c
@@ -54,13 +54,13 @@ static int z2_hw_params(struct snd_pcm_substream *substream,
}

/* set the codec system clock for DAC and ADC */
- ret = snd_soc_dai_set_sysclk(codec_dai, WM8750_SYSCLK, clk,
+ ret = snd_soc_dai_set_sysclk(codec_dai, WM8750_SYSCLK, 0, clk,
SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;

/* set the I2S system clock as input (unused) */
- ret = snd_soc_dai_set_sysclk(cpu_dai, PXA2XX_I2S_SYSCLK, 0,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, PXA2XX_I2S_SYSCLK, 0, 0,
SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;
diff --git a/sound/soc/pxa/zylonite.c b/sound/soc/pxa/zylonite.c
index bb89a53..b2e5ac0 100644
--- a/sound/soc/pxa/zylonite.c
+++ b/sound/soc/pxa/zylonite.c
@@ -102,7 +102,7 @@ static int zylonite_voice_hw_params(struct snd_pcm_substream *substream,
return -EINVAL;
}

- ret = snd_soc_dai_set_sysclk(cpu_dai, PXA_SSP_CLK_AUDIO, 0, 1);
+ ret = snd_soc_dai_set_sysclk(cpu_dai, PXA_SSP_CLK_AUDIO, 0, 0, 1);
if (ret < 0)
return ret;

diff --git a/sound/soc/qcom/apq8096.c b/sound/soc/qcom/apq8096.c
index 1a69bae..3db7734 100644
--- a/sound/soc/qcom/apq8096.c
+++ b/sound/soc/qcom/apq8096.c
@@ -83,7 +83,7 @@ static int apq8096_init(struct snd_soc_pcm_runtime *rtd)
snd_soc_dai_set_channel_map(codec_dai, ARRAY_SIZE(tx_ch),
tx_ch, ARRAY_SIZE(rx_ch), rx_ch);

- snd_soc_dai_set_sysclk(codec_dai, 0, WCD9335_DEFAULT_MCLK_RATE,
+ snd_soc_dai_set_sysclk(codec_dai, 0, 0, WCD9335_DEFAULT_MCLK_RATE,
SNDRV_PCM_STREAM_PLAYBACK);

return 0;
diff --git a/sound/soc/qcom/lpass-cpu.c b/sound/soc/qcom/lpass-cpu.c
index c642e5f..15d5dc8 100644
--- a/sound/soc/qcom/lpass-cpu.c
+++ b/sound/soc/qcom/lpass-cpu.c
@@ -55,7 +55,7 @@ static int lpass_cpu_init_i2sctl_bitfields(struct device *dev,
return 0;
}

-static int lpass_cpu_daiops_set_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int lpass_cpu_daiops_set_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct lpass_data *drvdata = snd_soc_dai_get_drvdata(dai);
diff --git a/sound/soc/qcom/qdsp6/q6afe-dai.c b/sound/soc/qcom/qdsp6/q6afe-dai.c
index 4e1f101..dcd541d 100644
--- a/sound/soc/qcom/qdsp6/q6afe-dai.c
+++ b/sound/soc/qcom/qdsp6/q6afe-dai.c
@@ -544,7 +544,7 @@ static int q6slim_set_channel_map(struct snd_soc_dai *dai,
}

static int q6afe_mi2s_set_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct q6afe_dai_data *dai_data = dev_get_drvdata(dai->dev);
struct q6afe_port *port = dai_data->port[dai->id];
diff --git a/sound/soc/qcom/sc7180.c b/sound/soc/qcom/sc7180.c
index 768566b..586606d 100644
--- a/sound/soc/qcom/sc7180.c
+++ b/sound/soc/qcom/sc7180.c
@@ -134,7 +134,7 @@ static int sc7180_snd_startup(struct snd_pcm_substream *substream)
case MI2S_PRIMARY:
if (++data->pri_mi2s_clk_count == 1) {
snd_soc_dai_set_sysclk(cpu_dai,
- LPASS_MCLK0,
+ LPASS_MCLK0, 0,
DEFAULT_MCLK_RATE,
SNDRV_PCM_STREAM_PLAYBACK);
}
@@ -153,7 +153,7 @@ static int sc7180_snd_startup(struct snd_pcm_substream *substream)
}

/* Configure sysclk for codec */
- ret = snd_soc_dai_set_sysclk(codec_dai, RT5682_SCLK_S_PLL1,
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT5682_SCLK_S_PLL1, 0,
RT5682_PLL1_FREQ,
SND_SOC_CLOCK_IN);
if (ret)
@@ -205,7 +205,7 @@ static void sc7180_snd_shutdown(struct snd_pcm_substream *substream)
case MI2S_PRIMARY:
if (--data->pri_mi2s_clk_count == 0) {
snd_soc_dai_set_sysclk(cpu_dai,
- LPASS_MCLK0,
+ LPASS_MCLK0, 0,
0,
SNDRV_PCM_STREAM_PLAYBACK);
}
diff --git a/sound/soc/qcom/sdm845.c b/sound/soc/qcom/sdm845.c
index 6c2760e..988e41c 100644
--- a/sound/soc/qcom/sdm845.c
+++ b/sound/soc/qcom/sdm845.c
@@ -188,7 +188,7 @@ static int sdm845_snd_hw_params(struct snd_pcm_substream *substream,
RT5663_DA_STEREO_FILTER | RT5663_AD_STEREO_FILTER,
RT5663_CLK_SEL_I2S1_ASRC);
ret = snd_soc_dai_set_sysclk(
- codec_dai, RT5663_SCLK_S_MCLK, DEFAULT_MCLK_RATE,
+ codec_dai, RT5663_SCLK_S_MCLK, 0, DEFAULT_MCLK_RATE,
SND_SOC_CLOCK_IN);
if (ret < 0)
dev_err(rtd->dev,
@@ -285,7 +285,7 @@ static int sdm845_dai_init(struct snd_soc_pcm_runtime *rtd)
if (rval != 0 && rval != -ENOTSUPP)
return rval;

- snd_soc_dai_set_sysclk(codec_dai, 0,
+ snd_soc_dai_set_sysclk(codec_dai, 0, 0,
WCD934X_DEFAULT_MCLK_RATE,
SNDRV_PCM_STREAM_PLAYBACK);
}
@@ -316,10 +316,10 @@ static int sdm845_snd_startup(struct snd_pcm_substream *substream)
codec_dai_fmt |= SND_SOC_DAIFMT_NB_NF;
if (++(data->pri_mi2s_clk_count) == 1) {
snd_soc_dai_set_sysclk(cpu_dai,
- Q6AFE_LPASS_CLK_ID_MCLK_1,
+ Q6AFE_LPASS_CLK_ID_MCLK_1, 0,
DEFAULT_MCLK_RATE, SNDRV_PCM_STREAM_PLAYBACK);
snd_soc_dai_set_sysclk(cpu_dai,
- Q6AFE_LPASS_CLK_ID_PRI_MI2S_IBIT,
+ Q6AFE_LPASS_CLK_ID_PRI_MI2S_IBIT, 0,
MI2S_BCLK_RATE, SNDRV_PCM_STREAM_PLAYBACK);
}
snd_soc_dai_set_fmt(cpu_dai, fmt);
@@ -330,7 +330,7 @@ static int sdm845_snd_startup(struct snd_pcm_substream *substream)
codec_dai_fmt |= SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_I2S;
if (++(data->sec_mi2s_clk_count) == 1) {
snd_soc_dai_set_sysclk(cpu_dai,
- Q6AFE_LPASS_CLK_ID_SEC_MI2S_IBIT,
+ Q6AFE_LPASS_CLK_ID_SEC_MI2S_IBIT, 0,
MI2S_BCLK_RATE, SNDRV_PCM_STREAM_CAPTURE);
}
snd_soc_dai_set_fmt(cpu_dai, fmt);
@@ -338,7 +338,7 @@ static int sdm845_snd_startup(struct snd_pcm_substream *substream)
break;
case QUATERNARY_MI2S_RX:
snd_soc_dai_set_sysclk(cpu_dai,
- Q6AFE_LPASS_CLK_ID_QUAD_MI2S_IBIT,
+ Q6AFE_LPASS_CLK_ID_QUAD_MI2S_IBIT, 0,
MI2S_BCLK_RATE, SNDRV_PCM_STREAM_PLAYBACK);
snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_CBS_CFS);

@@ -349,7 +349,7 @@ static int sdm845_snd_startup(struct snd_pcm_substream *substream)
case QUATERNARY_TDM_TX_0:
if (++(data->quat_tdm_clk_count) == 1) {
snd_soc_dai_set_sysclk(cpu_dai,
- Q6AFE_LPASS_CLK_ID_QUAD_TDM_IBIT,
+ Q6AFE_LPASS_CLK_ID_QUAD_TDM_IBIT, 0,
TDM_BCLK_RATE, SNDRV_PCM_STREAM_PLAYBACK);
}

@@ -402,10 +402,10 @@ static void sdm845_snd_shutdown(struct snd_pcm_substream *substream)
case PRIMARY_MI2S_TX:
if (--(data->pri_mi2s_clk_count) == 0) {
snd_soc_dai_set_sysclk(cpu_dai,
- Q6AFE_LPASS_CLK_ID_MCLK_1,
+ Q6AFE_LPASS_CLK_ID_MCLK_1, 0,
0, SNDRV_PCM_STREAM_PLAYBACK);
snd_soc_dai_set_sysclk(cpu_dai,
- Q6AFE_LPASS_CLK_ID_PRI_MI2S_IBIT,
+ Q6AFE_LPASS_CLK_ID_PRI_MI2S_IBIT, 0,
0, SNDRV_PCM_STREAM_PLAYBACK);
}
break;
@@ -413,7 +413,7 @@ static void sdm845_snd_shutdown(struct snd_pcm_substream *substream)
case SECONDARY_MI2S_TX:
if (--(data->sec_mi2s_clk_count) == 0) {
snd_soc_dai_set_sysclk(cpu_dai,
- Q6AFE_LPASS_CLK_ID_SEC_MI2S_IBIT,
+ Q6AFE_LPASS_CLK_ID_SEC_MI2S_IBIT, 0,
0, SNDRV_PCM_STREAM_CAPTURE);
}
break;
@@ -422,7 +422,7 @@ static void sdm845_snd_shutdown(struct snd_pcm_substream *substream)
case QUATERNARY_TDM_TX_0:
if (--(data->quat_tdm_clk_count) == 0) {
snd_soc_dai_set_sysclk(cpu_dai,
- Q6AFE_LPASS_CLK_ID_QUAD_TDM_IBIT,
+ Q6AFE_LPASS_CLK_ID_QUAD_TDM_IBIT, 0,
0, SNDRV_PCM_STREAM_PLAYBACK);
}
break;
diff --git a/sound/soc/qcom/sm8250.c b/sound/soc/qcom/sm8250.c
index fe8fd73..1dab92e 100644
--- a/sound/soc/qcom/sm8250.c
+++ b/sound/soc/qcom/sm8250.c
@@ -46,7 +46,7 @@ static int sm8250_snd_startup(struct snd_pcm_substream *substream)
case TERTIARY_MI2S_RX:
codec_dai_fmt |= SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_I2S;
snd_soc_dai_set_sysclk(cpu_dai,
- Q6AFE_LPASS_CLK_ID_TER_MI2S_IBIT,
+ Q6AFE_LPASS_CLK_ID_TER_MI2S_IBIT, 0,
MI2S_BCLK_RATE, SNDRV_PCM_STREAM_PLAYBACK);
snd_soc_dai_set_fmt(cpu_dai, fmt);
snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
diff --git a/sound/soc/qcom/storm.c b/sound/soc/qcom/storm.c
index 80c9cf2..2102889 100644
--- a/sound/soc/qcom/storm.c
+++ b/sound/soc/qcom/storm.c
@@ -39,7 +39,7 @@ static int storm_ops_hw_params(struct snd_pcm_substream *substream,
*/
sysclk_freq = rate * bitwidth * 2 * STORM_SYSCLK_MULT;

- ret = snd_soc_dai_set_sysclk(asoc_rtd_to_cpu(soc_runtime, 0), 0, sysclk_freq, 0);
+ ret = snd_soc_dai_set_sysclk(asoc_rtd_to_cpu(soc_runtime, 0), 0, 0, sysclk_freq, 0);
if (ret) {
dev_err(card->dev, "error setting sysclk to %u: %d\n",
sysclk_freq, ret);
diff --git a/sound/soc/rockchip/rk3288_hdmi_analog.c b/sound/soc/rockchip/rk3288_hdmi_analog.c
index 33a0077..a05da08 100644
--- a/sound/soc/rockchip/rk3288_hdmi_analog.c
+++ b/sound/soc/rockchip/rk3288_hdmi_analog.c
@@ -94,7 +94,7 @@ static int rk_hw_params(struct snd_pcm_substream *substream,
return -EINVAL;
}

- ret = snd_soc_dai_set_sysclk(cpu_dai, 0, mclk,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, 0, 0, mclk,
SND_SOC_CLOCK_OUT);

if (ret && ret != -ENOTSUPP) {
@@ -102,7 +102,7 @@ static int rk_hw_params(struct snd_pcm_substream *substream,
return ret;
}

- ret = snd_soc_dai_set_sysclk(codec_dai, 0, mclk,
+ ret = snd_soc_dai_set_sysclk(codec_dai, 0, 0, mclk,
SND_SOC_CLOCK_IN);
if (ret && ret != -ENOTSUPP) {
dev_err(codec_dai->dev, "Can't set codec clock %d\n", ret);
diff --git a/sound/soc/rockchip/rk3399_gru_sound.c b/sound/soc/rockchip/rk3399_gru_sound.c
index e2d52d8..6bd9d58 100644
--- a/sound/soc/rockchip/rk3399_gru_sound.c
+++ b/sound/soc/rockchip/rk3399_gru_sound.c
@@ -70,7 +70,7 @@ static int rockchip_sound_max98357a_hw_params(struct snd_pcm_substream *substrea

mclk = params_rate(params) * SOUND_FS;

- ret = snd_soc_dai_set_sysclk(asoc_rtd_to_cpu(rtd, 0), 0, mclk, 0);
+ ret = snd_soc_dai_set_sysclk(asoc_rtd_to_cpu(rtd, 0), 0, 0, mclk, 0);
if (ret) {
dev_err(rtd->card->dev, "%s() error setting sysclk to %u: %d\n",
__func__, mclk, ret);
@@ -91,14 +91,14 @@ static int rockchip_sound_rt5514_hw_params(struct snd_pcm_substream *substream,

mclk = params_rate(params) * SOUND_FS;

- ret = snd_soc_dai_set_sysclk(cpu_dai, 0, mclk,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, 0, 0, mclk,
SND_SOC_CLOCK_OUT);
if (ret < 0) {
dev_err(rtd->card->dev, "Can't set cpu clock out %d\n", ret);
return ret;
}

- ret = snd_soc_dai_set_sysclk(codec_dai, RT5514_SCLK_S_MCLK,
+ ret = snd_soc_dai_set_sysclk(codec_dai, RT5514_SCLK_S_MCLK, 0,
mclk, SND_SOC_CLOCK_IN);
if (ret) {
dev_err(rtd->card->dev, "%s() error setting sysclk to %u: %d\n",
@@ -141,14 +141,14 @@ static int rockchip_sound_da7219_hw_params(struct snd_pcm_substream *substream,
return -EINVAL;
}

- ret = snd_soc_dai_set_sysclk(cpu_dai, 0, mclk,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, 0, 0, mclk,
SND_SOC_CLOCK_OUT);
if (ret < 0) {
dev_err(codec_dai->dev, "Can't set cpu clock out %d\n", ret);
return ret;
}

- ret = snd_soc_dai_set_sysclk(codec_dai, 0, mclk,
+ ret = snd_soc_dai_set_sysclk(codec_dai, 0, 0, mclk,
SND_SOC_CLOCK_IN);
if (ret < 0) {
dev_err(codec_dai->dev, "Can't set codec clock in %d\n", ret);
@@ -171,7 +171,7 @@ static int rockchip_sound_da7219_init(struct snd_soc_pcm_runtime *rtd)
int ret;

/* We need default MCLK and PLL settings for the accessory detection */
- ret = snd_soc_dai_set_sysclk(codec_dai, 0, 12288000,
+ ret = snd_soc_dai_set_sysclk(codec_dai, 0, 0, 12288000,
SND_SOC_CLOCK_IN);
if (ret < 0) {
dev_err(codec_dai->dev, "Init can't set codec clock in %d\n", ret);
@@ -221,7 +221,7 @@ static int rockchip_sound_dmic_hw_params(struct snd_pcm_substream *substream,

mclk = params_rate(params) * SOUND_FS;

- ret = snd_soc_dai_set_sysclk(asoc_rtd_to_cpu(rtd, 0), 0, mclk, 0);
+ ret = snd_soc_dai_set_sysclk(asoc_rtd_to_cpu(rtd, 0), 0, 0, mclk, 0);
if (ret) {
dev_err(rtd->card->dev, "%s() error setting sysclk to %u: %d\n",
__func__, mclk, ret);
diff --git a/sound/soc/rockchip/rockchip_i2s.c b/sound/soc/rockchip/rockchip_i2s.c
index 0740764..0f1b124 100644
--- a/sound/soc/rockchip/rockchip_i2s.c
+++ b/sound/soc/rockchip/rockchip_i2s.c
@@ -413,7 +413,7 @@ static int rockchip_i2s_trigger(struct snd_pcm_substream *substream,
return ret;
}

-static int rockchip_i2s_set_sysclk(struct snd_soc_dai *cpu_dai, int clk_id,
+static int rockchip_i2s_set_sysclk(struct snd_soc_dai *cpu_dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct rk_i2s_dev *i2s = to_info(cpu_dai);
diff --git a/sound/soc/rockchip/rockchip_max98090.c b/sound/soc/rockchip/rockchip_max98090.c
index c8f1a28..15c2c9c 100644
--- a/sound/soc/rockchip/rockchip_max98090.c
+++ b/sound/soc/rockchip/rockchip_max98090.c
@@ -169,14 +169,14 @@ static int rk_aif1_hw_params(struct snd_pcm_substream *substream,
return -EINVAL;
}

- ret = snd_soc_dai_set_sysclk(cpu_dai, 0, mclk,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, 0, 0, mclk,
SND_SOC_CLOCK_OUT);
if (ret) {
dev_err(cpu_dai->dev, "Can't set cpu dai clock %d\n", ret);
return ret;
}

- ret = snd_soc_dai_set_sysclk(codec_dai, 0, mclk,
+ ret = snd_soc_dai_set_sysclk(codec_dai, 0, 0, mclk,
SND_SOC_CLOCK_IN);

/* HDMI codec dai does not need to set sysclk. */
diff --git a/sound/soc/rockchip/rockchip_rt5645.c b/sound/soc/rockchip/rockchip_rt5645.c
index 16ca2ad9..3e267c1 100644
--- a/sound/soc/rockchip/rockchip_rt5645.c
+++ b/sound/soc/rockchip/rockchip_rt5645.c
@@ -80,14 +80,14 @@ static int rk_aif1_hw_params(struct snd_pcm_substream *substream,
return -EINVAL;
}

- ret = snd_soc_dai_set_sysclk(cpu_dai, 0, mclk,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, 0, 0, mclk,
SND_SOC_CLOCK_OUT);
if (ret < 0) {
dev_err(codec_dai->dev, "Can't set codec clock %d\n", ret);
return ret;
}

- ret = snd_soc_dai_set_sysclk(codec_dai, 0, mclk,
+ ret = snd_soc_dai_set_sysclk(codec_dai, 0, 0, mclk,
SND_SOC_CLOCK_IN);
if (ret < 0) {
dev_err(codec_dai->dev, "Can't set codec clock %d\n", ret);
diff --git a/sound/soc/samsung/aries_wm8994.c b/sound/soc/samsung/aries_wm8994.c
index 0ac5956..650a629 100644
--- a/sound/soc/samsung/aries_wm8994.c
+++ b/sound/soc/samsung/aries_wm8994.c
@@ -278,7 +278,7 @@ static int aries_hw_params(struct snd_pcm_substream *substream,
if (ret < 0)
return ret;

- ret = snd_soc_dai_set_sysclk(codec_dai, WM8994_SYSCLK_FLL1,
+ ret = snd_soc_dai_set_sysclk(codec_dai, WM8994_SYSCLK_FLL1, 0,
pll_out, SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;
@@ -293,7 +293,7 @@ static int aries_hw_free(struct snd_pcm_substream *substream)
int ret;

/* Switch sysclk to MCLK1 */
- ret = snd_soc_dai_set_sysclk(codec_dai, WM8994_SYSCLK_MCLK1,
+ ret = snd_soc_dai_set_sysclk(codec_dai, WM8994_SYSCLK_MCLK1, 0,
ARIES_MCLK1_FREQ, SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;
@@ -330,7 +330,7 @@ static int aries_baseband_init(struct snd_soc_pcm_runtime *rtd)
return ret;

/* Set the codec system clock */
- ret = snd_soc_dai_set_sysclk(codec_dai, WM8994_SYSCLK_FLL2,
+ ret = snd_soc_dai_set_sysclk(codec_dai, WM8994_SYSCLK_FLL2, 0,
pll_out, SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;
diff --git a/sound/soc/samsung/arndale.c b/sound/soc/samsung/arndale.c
index 2858737..6824430 100644
--- a/sound/soc/samsung/arndale.c
+++ b/sound/soc/samsung/arndale.c
@@ -30,18 +30,18 @@ static int arndale_rt5631_hw_params(struct snd_pcm_substream *substream,

rclk = params_rate(params) * rfs;

- ret = snd_soc_dai_set_sysclk(cpu_dai, SAMSUNG_I2S_CDCLK,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, SAMSUNG_I2S_CDCLK, 0,
0, SND_SOC_CLOCK_OUT);
if (ret < 0)
return ret;

- ret = snd_soc_dai_set_sysclk(cpu_dai, SAMSUNG_I2S_RCLKSRC_0,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, SAMSUNG_I2S_RCLKSRC_0, 0,
0, SND_SOC_CLOCK_OUT);

if (ret < 0)
return ret;

- ret = snd_soc_dai_set_sysclk(codec_dai, 0, rclk, SND_SOC_CLOCK_OUT);
+ ret = snd_soc_dai_set_sysclk(codec_dai, 0, 0, rclk, SND_SOC_CLOCK_OUT);
if (ret < 0)
return ret;

@@ -76,7 +76,7 @@ static int arndale_wm1811_hw_params(struct snd_pcm_substream *substream,
* The CODEC uses clk API and the value will be rounded hence the MCLK1
* clock's frequency will still be exact multiple of the sample rate.
*/
- return snd_soc_dai_set_sysclk(codec_dai, WM8994_SYSCLK_MCLK1,
+ return snd_soc_dai_set_sysclk(codec_dai, WM8994_SYSCLK_MCLK1, 0,
rclk + 1, SND_SOC_CLOCK_IN);
}

diff --git a/sound/soc/samsung/bells.c b/sound/soc/samsung/bells.c
index 8b83f39..962d780 100644
--- a/sound/soc/samsung/bells.c
+++ b/sound/soc/samsung/bells.c
@@ -173,7 +173,7 @@ static int bells_late_probe(struct snd_soc_card *card)
return ret;
}

- ret = snd_soc_dai_set_sysclk(aif1_dai, ARIZONA_CLK_SYSCLK, 0, 0);
+ ret = snd_soc_dai_set_sysclk(aif1_dai, ARIZONA_CLK_SYSCLK, 0, 0, 0);
if (ret != 0)
dev_err(aif1_dai->dev, "Failed to set AIF1 clock: %d\n", ret);

@@ -197,7 +197,7 @@ static int bells_late_probe(struct snd_soc_card *card)
rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[DAI_CODEC_CP]);
aif2_dai = asoc_rtd_to_cpu(rtd, 0);

- ret = snd_soc_dai_set_sysclk(aif2_dai, ARIZONA_CLK_ASYNCCLK, 0, 0);
+ ret = snd_soc_dai_set_sysclk(aif2_dai, ARIZONA_CLK_ASYNCCLK, 0, 0, 0);
if (ret != 0) {
dev_err(aif2_dai->dev, "Failed to set AIF2 clock: %d\n", ret);
return ret;
@@ -210,7 +210,7 @@ static int bells_late_probe(struct snd_soc_card *card)
aif3_dai = asoc_rtd_to_cpu(rtd, 0);
wm9081_dai = asoc_rtd_to_codec(rtd, 0);

- ret = snd_soc_dai_set_sysclk(aif3_dai, ARIZONA_CLK_SYSCLK, 0, 0);
+ ret = snd_soc_dai_set_sysclk(aif3_dai, ARIZONA_CLK_SYSCLK, 0, 0, 0);
if (ret != 0) {
dev_err(aif1_dai->dev, "Failed to set AIF1 clock: %d\n", ret);
return ret;
diff --git a/sound/soc/samsung/h1940_uda1380.c b/sound/soc/samsung/h1940_uda1380.c
index 8aa78ff..9ff9302 100644
--- a/sound/soc/samsung/h1940_uda1380.c
+++ b/sound/soc/samsung/h1940_uda1380.c
@@ -86,7 +86,7 @@ static int h1940_hw_params(struct snd_pcm_substream *substream,
}

/* select clock source */
- ret = snd_soc_dai_set_sysclk(cpu_dai, S3C24XX_CLKSRC_PCLK, rate,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, S3C24XX_CLKSRC_PCLK, 0, rate,
SND_SOC_CLOCK_OUT);
if (ret < 0)
return ret;
diff --git a/sound/soc/samsung/i2s.c b/sound/soc/samsung/i2s.c
index b043183..3cbaf26 100644
--- a/sound/soc/samsung/i2s.c
+++ b/sound/soc/samsung/i2s.c
@@ -494,7 +494,7 @@ static inline void i2s_fifo(struct i2s_dai *i2s, u32 flush)
writel(readl(fic) & ~flush, fic);
}

-static int i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id, unsigned int rfs,
+static int i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id, int source, unsigned int rfs,
int dir)
{
struct samsung_i2s_priv *priv = snd_soc_dai_get_drvdata(dai);
@@ -682,7 +682,7 @@ static int i2s_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
* clock configuration assigned in DT is not overwritten.
*/
if (priv->rclk_srcrate == 0 && priv->clk_data.clks == NULL)
- i2s_set_sysclk(dai, SAMSUNG_I2S_RCLKSRC_0,
+ i2s_set_sysclk(dai, SAMSUNG_I2S_RCLKSRC_0, 0,
0, SND_SOC_CLOCK_IN);
break;
default:
@@ -1076,7 +1076,7 @@ static int samsung_i2s_dai_probe(struct snd_soc_dai *dai)

/* Gate CDCLK by default */
if (!is_opened(other))
- i2s_set_sysclk(dai, SAMSUNG_I2S_CDCLK,
+ i2s_set_sysclk(dai, SAMSUNG_I2S_CDCLK, 0,
0, SND_SOC_CLOCK_IN);
pm_runtime_put(dai->dev);

diff --git a/sound/soc/samsung/jive_wm8750.c b/sound/soc/samsung/jive_wm8750.c
index 40a85f5..67681c2 100644
--- a/sound/soc/samsung/jive_wm8750.c
+++ b/sound/soc/samsung/jive_wm8750.c
@@ -57,7 +57,7 @@ static int jive_hw_params(struct snd_pcm_substream *substream,
s3c_i2sv2_get_clock(cpu_dai));

/* set the codec system clock for DAC and ADC */
- ret = snd_soc_dai_set_sysclk(codec_dai, WM8750_SYSCLK, clk,
+ ret = snd_soc_dai_set_sysclk(codec_dai, WM8750_SYSCLK, 0, clk,
SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;
diff --git a/sound/soc/samsung/littlemill.c b/sound/soc/samsung/littlemill.c
index a1ff140..74770f7 100644
--- a/sound/soc/samsung/littlemill.c
+++ b/sound/soc/samsung/littlemill.c
@@ -44,7 +44,7 @@ static int littlemill_set_bias_level(struct snd_soc_card *card,
}

ret = snd_soc_dai_set_sysclk(aif1_dai,
- WM8994_SYSCLK_FLL1,
+ WM8994_SYSCLK_FLL1, 0,
sample_rate * 512,
SND_SOC_CLOCK_IN);
if (ret < 0) {
@@ -77,7 +77,7 @@ static int littlemill_set_bias_level_post(struct snd_soc_card *card,

switch (level) {
case SND_SOC_BIAS_STANDBY:
- ret = snd_soc_dai_set_sysclk(aif1_dai, WM8994_SYSCLK_MCLK2,
+ ret = snd_soc_dai_set_sysclk(aif1_dai, WM8994_SYSCLK_MCLK2, 0,
32768, SND_SOC_CLOCK_IN);
if (ret < 0) {
pr_err("Failed to switch away from FLL1: %d\n", ret);
@@ -119,7 +119,7 @@ static int littlemill_hw_params(struct snd_pcm_substream *substream,
}

ret = snd_soc_dai_set_sysclk(codec_dai,
- WM8994_SYSCLK_FLL1,
+ WM8994_SYSCLK_FLL1, 0,
sample_rate * 512,
SND_SOC_CLOCK_IN);
if (ret < 0) {
@@ -193,7 +193,7 @@ static int bbclk_ev(struct snd_soc_dapm_widget *w,
return ret;
}

- ret = snd_soc_dai_set_sysclk(aif2_dai, WM8994_SYSCLK_FLL2,
+ ret = snd_soc_dai_set_sysclk(aif2_dai, WM8994_SYSCLK_FLL2, 0,
8000 * 256,
SND_SOC_CLOCK_IN);
if (ret < 0) {
@@ -202,7 +202,7 @@ static int bbclk_ev(struct snd_soc_dapm_widget *w,
}
break;
case SND_SOC_DAPM_POST_PMD:
- ret = snd_soc_dai_set_sysclk(aif2_dai, WM8994_SYSCLK_MCLK2,
+ ret = snd_soc_dai_set_sysclk(aif2_dai, WM8994_SYSCLK_MCLK2, 0,
32768, SND_SOC_CLOCK_IN);
if (ret < 0) {
pr_err("Failed to switch away from FLL2: %d\n", ret);
@@ -270,12 +270,12 @@ static int littlemill_late_probe(struct snd_soc_card *card)
rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[1]);
aif2_dai = asoc_rtd_to_cpu(rtd, 0);

- ret = snd_soc_dai_set_sysclk(aif1_dai, WM8994_SYSCLK_MCLK2,
+ ret = snd_soc_dai_set_sysclk(aif1_dai, WM8994_SYSCLK_MCLK2, 0,
32768, SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;

- ret = snd_soc_dai_set_sysclk(aif2_dai, WM8994_SYSCLK_MCLK2,
+ ret = snd_soc_dai_set_sysclk(aif2_dai, WM8994_SYSCLK_MCLK2, 0,
32768, SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;
diff --git a/sound/soc/samsung/midas_wm1811.c b/sound/soc/samsung/midas_wm1811.c
index 1f9a553..41f05e8 100644
--- a/sound/soc/samsung/midas_wm1811.c
+++ b/sound/soc/samsung/midas_wm1811.c
@@ -56,7 +56,7 @@ static int midas_start_fll1(struct snd_soc_pcm_runtime *rtd, unsigned int rate)

if (rate != priv->fll1_rate && priv->fll1_rate) {
/* while reconfiguring, switch to MCLK2 for SYSCLK */
- ret = snd_soc_dai_set_sysclk(aif1_dai, WM8994_SYSCLK_MCLK2,
+ ret = snd_soc_dai_set_sysclk(aif1_dai, WM8994_SYSCLK_MCLK2, 0,
MCLK2_RATE, SND_SOC_CLOCK_IN);
if (ret < 0) {
dev_err(card->dev, "Unable to switch to MCLK2: %d\n", ret);
@@ -72,14 +72,14 @@ static int midas_start_fll1(struct snd_soc_pcm_runtime *rtd, unsigned int rate)
}
priv->fll1_rate = rate;

- ret = snd_soc_dai_set_sysclk(aif1_dai, WM8994_SYSCLK_FLL1,
+ ret = snd_soc_dai_set_sysclk(aif1_dai, WM8994_SYSCLK_FLL1, 0,
priv->fll1_rate, SND_SOC_CLOCK_IN);
if (ret < 0) {
dev_err(card->dev, "Failed to set SYSCLK source: %d\n", ret);
return ret;
}

- ret = snd_soc_dai_set_sysclk(cpu_dai, SAMSUNG_I2S_OPCLK, 0,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, SAMSUNG_I2S_OPCLK, 0, 0,
SAMSUNG_I2S_OPCLK_PCLK);
if (ret < 0) {
dev_err(card->dev, "Failed to set OPCLK source: %d\n", ret);
@@ -96,7 +96,7 @@ static int midas_stop_fll1(struct snd_soc_pcm_runtime *rtd)
struct snd_soc_dai *aif1_dai = asoc_rtd_to_codec(rtd, 0);
int ret;

- ret = snd_soc_dai_set_sysclk(aif1_dai, WM8994_SYSCLK_MCLK2,
+ ret = snd_soc_dai_set_sysclk(aif1_dai, WM8994_SYSCLK_MCLK2, 0,
MCLK2_RATE, SND_SOC_CLOCK_IN);
if (ret < 0) {
dev_err(card->dev, "Unable to switch to MCLK2: %d\n", ret);
@@ -297,7 +297,7 @@ static int midas_late_probe(struct snd_soc_card *card)
int ret;

/* Use MCLK2 as SYSCLK for boot */
- ret = snd_soc_dai_set_sysclk(aif1_dai, WM8994_SYSCLK_MCLK2, MCLK2_RATE,
+ ret = snd_soc_dai_set_sysclk(aif1_dai, WM8994_SYSCLK_MCLK2, 0, MCLK2_RATE,
SND_SOC_CLOCK_IN);
if (ret < 0) {
dev_err(aif1_dai->dev, "Failed to switch to MCLK2: %d\n", ret);
diff --git a/sound/soc/samsung/neo1973_wm8753.c b/sound/soc/samsung/neo1973_wm8753.c
index 9266070..69fa81f 100644
--- a/sound/soc/samsung/neo1973_wm8753.c
+++ b/sound/soc/samsung/neo1973_wm8753.c
@@ -63,7 +63,7 @@ static int neo1973_hifi_hw_params(struct snd_pcm_substream *substream,
}

/* set the codec system clock for DAC and ADC */
- ret = snd_soc_dai_set_sysclk(codec_dai, WM8753_MCLK, pll_out,
+ ret = snd_soc_dai_set_sysclk(codec_dai, WM8753_MCLK, 0, pll_out,
SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;
@@ -130,7 +130,7 @@ static int neo1973_voice_hw_params(struct snd_pcm_substream *substream,
pcmdiv = WM8753_PCM_DIV_6; /* 2.048 MHz */

/* set the codec system clock for DAC and ADC */
- ret = snd_soc_dai_set_sysclk(codec_dai, WM8753_PCMCLK, 12288000,
+ ret = snd_soc_dai_set_sysclk(codec_dai, WM8753_PCMCLK, 0, 12288000,
SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;
diff --git a/sound/soc/samsung/odroid.c b/sound/soc/samsung/odroid.c
index ca643a4..223ee40 100644
--- a/sound/soc/samsung/odroid.c
+++ b/sound/soc/samsung/odroid.c
@@ -100,7 +100,7 @@ static int odroid_card_be_hw_params(struct snd_pcm_substream *substream,
if (rtd->num_codecs > 1) {
struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 1);

- ret = snd_soc_dai_set_sysclk(codec_dai, 0, rclk_freq,
+ ret = snd_soc_dai_set_sysclk(codec_dai, 0, 0, rclk_freq,
SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;
diff --git a/sound/soc/samsung/pcm.c b/sound/soc/samsung/pcm.c
index bfd76e9..3c949de 100644
--- a/sound/soc/samsung/pcm.c
+++ b/sound/soc/samsung/pcm.c
@@ -404,7 +404,7 @@ static int s3c_pcm_set_clkdiv(struct snd_soc_dai *cpu_dai,
}

static int s3c_pcm_set_sysclk(struct snd_soc_dai *cpu_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct s3c_pcm_info *pcm = snd_soc_dai_get_drvdata(cpu_dai);
void __iomem *regs = pcm->regs;
diff --git a/sound/soc/samsung/rx1950_uda1380.c b/sound/soc/samsung/rx1950_uda1380.c
index 400a7f7..1f61f38 100644
--- a/sound/soc/samsung/rx1950_uda1380.c
+++ b/sound/soc/samsung/rx1950_uda1380.c
@@ -173,7 +173,7 @@ static int rx1950_hw_params(struct snd_pcm_substream *substream,
}

/* select clock source */
- ret = snd_soc_dai_set_sysclk(cpu_dai, clk_source, rate,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, clk_source, 0, rate,
SND_SOC_CLOCK_OUT);
if (ret < 0)
return ret;
diff --git a/sound/soc/samsung/s3c24xx-i2s.c b/sound/soc/samsung/s3c24xx-i2s.c
index 50c0800..6c8fadd 100644
--- a/sound/soc/samsung/s3c24xx-i2s.c
+++ b/sound/soc/samsung/s3c24xx-i2s.c
@@ -271,7 +271,7 @@ static int s3c24xx_i2s_trigger(struct snd_pcm_substream *substream, int cmd,
* Set S3C24xx Clock source
*/
static int s3c24xx_i2s_set_sysclk(struct snd_soc_dai *cpu_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
u32 iismod = readl(s3c24xx_i2s.regs + S3C2410_IISMOD);

diff --git a/sound/soc/samsung/s3c24xx_simtec.c b/sound/soc/samsung/s3c24xx_simtec.c
index 3cddd11..fc22263 100644
--- a/sound/soc/samsung/s3c24xx_simtec.c
+++ b/sound/soc/samsung/s3c24xx_simtec.c
@@ -164,7 +164,7 @@ static int simtec_hw_params(struct snd_pcm_substream *substream,
struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0);
int ret;

- ret = snd_soc_dai_set_sysclk(codec_dai, 0,
+ ret = snd_soc_dai_set_sysclk(codec_dai, 0, 0,
CODEC_CLOCK, SND_SOC_CLOCK_IN);
if (ret) {
pr_err( "%s: failed setting codec sysclk\n", __func__);
@@ -172,7 +172,7 @@ static int simtec_hw_params(struct snd_pcm_substream *substream,
}

if (pdata->use_mpllin) {
- ret = snd_soc_dai_set_sysclk(cpu_dai, S3C24XX_CLKSRC_MPLL,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, S3C24XX_CLKSRC_MPLL, 0,
0, SND_SOC_CLOCK_OUT);

if (ret) {
diff --git a/sound/soc/samsung/s3c24xx_uda134x.c b/sound/soc/samsung/s3c24xx_uda134x.c
index 6272070..39b14fc 100644
--- a/sound/soc/samsung/s3c24xx_uda134x.c
+++ b/sound/soc/samsung/s3c24xx_uda134x.c
@@ -167,7 +167,7 @@ static int s3c24xx_uda134x_hw_params(struct snd_pcm_substream *substream,
return -EINVAL;
}

- ret = snd_soc_dai_set_sysclk(cpu_dai, clk_source , clk,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, clk_source, 0, clk,
SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;
@@ -187,7 +187,7 @@ static int s3c24xx_uda134x_hw_params(struct snd_pcm_substream *substream,
return ret;

/* set the codec system clock for DAC and ADC */
- ret = snd_soc_dai_set_sysclk(codec_dai, 0, clk,
+ ret = snd_soc_dai_set_sysclk(codec_dai, 0, 0, clk,
SND_SOC_CLOCK_OUT);
if (ret < 0)
return ret;
diff --git a/sound/soc/samsung/smartq_wm8987.c b/sound/soc/samsung/smartq_wm8987.c
index c95629b..b12e9d2 100644
--- a/sound/soc/samsung/smartq_wm8987.c
+++ b/sound/soc/samsung/smartq_wm8987.c
@@ -47,19 +47,19 @@ static int smartq_hifi_hw_params(struct snd_pcm_substream *substream,
}

/* Use PCLK for I2S signal generation */
- ret = snd_soc_dai_set_sysclk(cpu_dai, SAMSUNG_I2S_RCLKSRC_0,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, SAMSUNG_I2S_RCLKSRC_0, 0,
0, SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;

/* Gate the RCLK output on PAD */
- ret = snd_soc_dai_set_sysclk(cpu_dai, SAMSUNG_I2S_CDCLK,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, SAMSUNG_I2S_CDCLK, 0,
0, SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;

/* set the codec system clock for DAC and ADC */
- ret = snd_soc_dai_set_sysclk(codec_dai, WM8750_SYSCLK, clk,
+ ret = snd_soc_dai_set_sysclk(codec_dai, WM8750_SYSCLK, 0, clk,
SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;
diff --git a/sound/soc/samsung/smdk_spdif.c b/sound/soc/samsung/smdk_spdif.c
index 6f3eeb7..7f79db5 100644
--- a/sound/soc/samsung/smdk_spdif.c
+++ b/sound/soc/samsung/smdk_spdif.c
@@ -130,7 +130,7 @@ static int smdk_hw_params(struct snd_pcm_substream *substream,
return ret;

/* Set S/PDIF uses internal source clock */
- ret = snd_soc_dai_set_sysclk(cpu_dai, SND_SOC_SPDIF_INT_MCLK,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, SND_SOC_SPDIF_INT_MCLK, 0,
rclk_rate, SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;
diff --git a/sound/soc/samsung/smdk_wm8580.c b/sound/soc/samsung/smdk_wm8580.c
index ed753a2..881f243 100644
--- a/sound/soc/samsung/smdk_wm8580.c
+++ b/sound/soc/samsung/smdk_wm8580.c
@@ -75,7 +75,7 @@ static int smdk_hw_params(struct snd_pcm_substream *substream,
if (ret < 0)
return ret;

- ret = snd_soc_dai_set_sysclk(codec_dai, WM8580_CLKSRC_PLLA,
+ ret = snd_soc_dai_set_sysclk(codec_dai, WM8580_CLKSRC_PLLA, 0,
pll_out, SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;
diff --git a/sound/soc/samsung/smdk_wm8994.c b/sound/soc/samsung/smdk_wm8994.c
index 681b244..b24d10d 100644
--- a/sound/soc/samsung/smdk_wm8994.c
+++ b/sound/soc/samsung/smdk_wm8994.c
@@ -62,7 +62,7 @@ static int smdk_hw_params(struct snd_pcm_substream *substream,
if (ret < 0)
return ret;

- ret = snd_soc_dai_set_sysclk(codec_dai, WM8994_SYSCLK_FLL1,
+ ret = snd_soc_dai_set_sysclk(codec_dai, WM8994_SYSCLK_FLL1, 0,
pll_out, SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;
diff --git a/sound/soc/samsung/smdk_wm8994pcm.c b/sound/soc/samsung/smdk_wm8994pcm.c
index a016405..a1b692c 100644
--- a/sound/soc/samsung/smdk_wm8994pcm.c
+++ b/sound/soc/samsung/smdk_wm8994pcm.c
@@ -61,7 +61,7 @@ static int smdk_wm8994_pcm_hw_params(struct snd_pcm_substream *substream,

mclk_freq = params_rate(params) * rfs;

- ret = snd_soc_dai_set_sysclk(codec_dai, WM8994_SYSCLK_FLL1,
+ ret = snd_soc_dai_set_sysclk(codec_dai, WM8994_SYSCLK_FLL1, 0,
mclk_freq, SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;
@@ -72,7 +72,7 @@ static int smdk_wm8994_pcm_hw_params(struct snd_pcm_substream *substream,
return ret;

/* Set PCM source clock on CPU */
- ret = snd_soc_dai_set_sysclk(cpu_dai, S3C_PCM_CLKSRC_MUX,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, S3C_PCM_CLKSRC_MUX, 0,
mclk_freq, SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;
diff --git a/sound/soc/samsung/snow.c b/sound/soc/samsung/snow.c
index 989af62..321963c 100644
--- a/sound/soc/samsung/snow.c
+++ b/sound/soc/samsung/snow.c
@@ -115,7 +115,7 @@ static int snow_late_probe(struct snd_soc_card *card)
codec_dai = asoc_rtd_to_codec(rtd, 0);

/* Set the MCLK rate for the codec */
- return snd_soc_dai_set_sysclk(codec_dai, 0,
+ return snd_soc_dai_set_sysclk(codec_dai, 0, 0,
FIN_PLL_RATE, SND_SOC_CLOCK_IN);
}

diff --git a/sound/soc/samsung/spdif.c b/sound/soc/samsung/spdif.c
index 226c359..c062deb 100644
--- a/sound/soc/samsung/spdif.c
+++ b/sound/soc/samsung/spdif.c
@@ -117,7 +117,7 @@ static void spdif_snd_txctrl(struct samsung_spdif_info *spdif, int on)
}

static int spdif_set_sysclk(struct snd_soc_dai *cpu_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct samsung_spdif_info *spdif = to_info(cpu_dai);
u32 clkcon;
diff --git a/sound/soc/samsung/speyside.c b/sound/soc/samsung/speyside.c
index f5f6ba0..acd7682 100644
--- a/sound/soc/samsung/speyside.c
+++ b/sound/soc/samsung/speyside.c
@@ -32,7 +32,7 @@ static int speyside_set_bias_level(struct snd_soc_card *card,

switch (level) {
case SND_SOC_BIAS_STANDBY:
- ret = snd_soc_dai_set_sysclk(codec_dai, WM8996_SYSCLK_MCLK2,
+ ret = snd_soc_dai_set_sysclk(codec_dai, WM8996_SYSCLK_MCLK2, 0,
32768, SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;
@@ -78,7 +78,7 @@ static int speyside_set_bias_level_post(struct snd_soc_card *card,
}

ret = snd_soc_dai_set_sysclk(codec_dai,
- WM8996_SYSCLK_FLL,
+ WM8996_SYSCLK_FLL, 0,
MCLK_AUDIO_RATE,
SND_SOC_CLOCK_IN);
if (ret < 0)
@@ -134,7 +134,7 @@ static int speyside_wm0010_init(struct snd_soc_pcm_runtime *rtd)
struct snd_soc_dai *dai = asoc_rtd_to_codec(rtd, 0);
int ret;

- ret = snd_soc_dai_set_sysclk(dai, 0, MCLK_AUDIO_RATE, 0);
+ ret = snd_soc_dai_set_sysclk(dai, 0, 0, MCLK_AUDIO_RATE, 0);
if (ret < 0)
return ret;

@@ -147,7 +147,7 @@ static int speyside_wm8996_init(struct snd_soc_pcm_runtime *rtd)
struct snd_soc_component *component = dai->component;
int ret;

- ret = snd_soc_dai_set_sysclk(dai, WM8996_SYSCLK_MCLK2, 32768, 0);
+ ret = snd_soc_dai_set_sysclk(dai, WM8996_SYSCLK_MCLK2, 0, 32768, 0);
if (ret < 0)
return ret;

diff --git a/sound/soc/samsung/tm2_wm5110.c b/sound/soc/samsung/tm2_wm5110.c
index 9300fef..c30e6b5 100644
--- a/sound/soc/samsung/tm2_wm5110.c
+++ b/sound/soc/samsung/tm2_wm5110.c
@@ -242,7 +242,7 @@ static int tm2_hdmi_hw_params(struct snd_pcm_substream *substream,
return -EINVAL;
}

- ret = snd_soc_dai_set_sysclk(cpu_dai, SAMSUNG_I2S_OPCLK,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, SAMSUNG_I2S_OPCLK, 0,
0, SAMSUNG_I2S_OPCLK_PCLK);
if (ret < 0)
return ret;
@@ -318,7 +318,7 @@ static int tm2_late_probe(struct snd_soc_card *card)
aif1_dai = asoc_rtd_to_codec(rtd, 0);
priv->component = asoc_rtd_to_codec(rtd, 0)->component;

- ret = snd_soc_dai_set_sysclk(aif1_dai, ARIZONA_CLK_SYSCLK, 0, 0);
+ ret = snd_soc_dai_set_sysclk(aif1_dai, ARIZONA_CLK_SYSCLK, 0, 0, 0);
if (ret < 0) {
dev_err(aif1_dai->dev, "Failed to set SYSCLK: %d\n", ret);
return ret;
@@ -327,7 +327,7 @@ static int tm2_late_probe(struct snd_soc_card *card)
rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[TM2_DAI_AIF2]);
aif2_dai = asoc_rtd_to_codec(rtd, 0);

- ret = snd_soc_dai_set_sysclk(aif2_dai, ARIZONA_CLK_ASYNCCLK, 0, 0);
+ ret = snd_soc_dai_set_sysclk(aif2_dai, ARIZONA_CLK_ASYNCCLK, 0, 0, 0);
if (ret < 0) {
dev_err(aif2_dai->dev, "Failed to set ASYNCCLK: %d\n", ret);
return ret;
diff --git a/sound/soc/samsung/tobermory.c b/sound/soc/samsung/tobermory.c
index c962d2c..ec525dc 100644
--- a/sound/soc/samsung/tobermory.c
+++ b/sound/soc/samsung/tobermory.c
@@ -38,7 +38,7 @@ static int tobermory_set_bias_level(struct snd_soc_card *card,
pr_err("Failed to start FLL: %d\n", ret);

ret = snd_soc_dai_set_sysclk(codec_dai,
- WM8962_SYSCLK_FLL,
+ WM8962_SYSCLK_FLL, 0,
sample_rate * 512,
SND_SOC_CLOCK_IN);
if (ret < 0) {
@@ -73,7 +73,7 @@ static int tobermory_set_bias_level_post(struct snd_soc_card *card,

switch (level) {
case SND_SOC_BIAS_STANDBY:
- ret = snd_soc_dai_set_sysclk(codec_dai, WM8962_SYSCLK_MCLK,
+ ret = snd_soc_dai_set_sysclk(codec_dai, WM8962_SYSCLK_MCLK, 0,
32768, SND_SOC_CLOCK_IN);
if (ret < 0) {
pr_err("Failed to switch away from FLL: %d\n", ret);
@@ -184,7 +184,7 @@ static int tobermory_late_probe(struct snd_soc_card *card)
component = asoc_rtd_to_codec(rtd, 0)->component;
codec_dai = asoc_rtd_to_codec(rtd, 0);

- ret = snd_soc_dai_set_sysclk(codec_dai, WM8962_SYSCLK_MCLK,
+ ret = snd_soc_dai_set_sysclk(codec_dai, WM8962_SYSCLK_MCLK, 0,
32768, SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;
diff --git a/sound/soc/sh/migor.c b/sound/soc/sh/migor.c
index 7082c12..a6ab0ab 100644
--- a/sound/soc/sh/migor.c
+++ b/sound/soc/sh/migor.c
@@ -50,7 +50,7 @@ static int migor_hw_params(struct snd_pcm_substream *substream,
int ret;
unsigned int rate = params_rate(params);

- ret = snd_soc_dai_set_sysclk(codec_dai, WM8978_PLL, 13000000,
+ ret = snd_soc_dai_set_sysclk(codec_dai, WM8978_PLL, 0, 13000000,
SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;
@@ -67,7 +67,7 @@ static int migor_hw_params(struct snd_pcm_substream *substream,
clk_set_rate(&siumckb_clk, codec_freq);
dev_dbg(codec_dai->dev, "%s: configure %luHz\n", __func__, codec_freq);

- ret = snd_soc_dai_set_sysclk(asoc_rtd_to_cpu(rtd, 0), SIU_CLKB_EXT,
+ ret = snd_soc_dai_set_sysclk(asoc_rtd_to_cpu(rtd, 0), SIU_CLKB_EXT, 0,
codec_freq / 2, SND_SOC_CLOCK_IN);

if (!ret)
diff --git a/sound/soc/sh/siu_dai.c b/sound/soc/sh/siu_dai.c
index f2a386f..1fd9a59 100644
--- a/sound/soc/sh/siu_dai.c
+++ b/sound/soc/sh/siu_dai.c
@@ -622,7 +622,7 @@ static int siu_dai_set_fmt(struct snd_soc_dai *dai,
return 0;
}

-static int siu_dai_set_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int siu_dai_set_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct clk *siu_clk, *parent_clk;
diff --git a/sound/soc/sh/ssi.c b/sound/soc/sh/ssi.c
index 15b01bc..42faf1f 100644
--- a/sound/soc/sh/ssi.c
+++ b/sound/soc/sh/ssi.c
@@ -205,7 +205,7 @@ static int ssi_hw_params(struct snd_pcm_substream *substream,
return 0;
}

-static int ssi_set_sysclk(struct snd_soc_dai *cpu_dai, int clk_id,
+static int ssi_set_sysclk(struct snd_soc_dai *cpu_dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct ssi_priv *ssi = &ssi_cpu_data[cpu_dai->id];
diff --git a/sound/soc/soc-dai.c b/sound/soc/soc-dai.c
index cd3bb9a..609ff1f 100644
--- a/sound/soc/soc-dai.c
+++ b/sound/soc/soc-dai.c
@@ -49,17 +49,18 @@ static inline int _soc_dai_ret(struct snd_soc_dai *dai,
*
* Configures the DAI master (MCLK) or system (SYSCLK) clocking.
*/
-int snd_soc_dai_set_sysclk(struct snd_soc_dai *dai, int clk_id,
+int snd_soc_dai_set_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
int ret;

if (dai->driver->ops &&
dai->driver->ops->set_sysclk)
- ret = dai->driver->ops->set_sysclk(dai, clk_id, freq, dir);
+ ret = dai->driver->ops->set_sysclk(dai, clk_id, source, freq,
+ dir);
else
- ret = snd_soc_component_set_sysclk(dai->component, clk_id, 0,
- freq, dir);
+ ret = snd_soc_component_set_sysclk(dai->component, clk_id,
+ source, freq, dir);

return soc_dai_ret(dai, ret);
}
diff --git a/sound/soc/sti/uniperif_player.c b/sound/soc/sti/uniperif_player.c
index 2ed92c9..af04a8e 100644
--- a/sound/soc/sti/uniperif_player.c
+++ b/sound/soc/sti/uniperif_player.c
@@ -721,7 +721,7 @@ static int uni_player_startup(struct snd_pcm_substream *substream,
-1);
}

-static int uni_player_set_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int uni_player_set_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct sti_uniperiph_data *priv = snd_soc_dai_get_drvdata(dai);
diff --git a/sound/soc/stm/stm32_adfsdm.c b/sound/soc/stm/stm32_adfsdm.c
index 47fae8d..fdedf99 100644
--- a/sound/soc/stm/stm32_adfsdm.c
+++ b/sound/soc/stm/stm32_adfsdm.c
@@ -106,7 +106,7 @@ static int stm32_adfsdm_dai_prepare(struct snd_pcm_substream *substream,
return ret;
}

-static int stm32_adfsdm_set_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int stm32_adfsdm_set_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct stm32_adfsdm_priv *priv = snd_soc_dai_get_drvdata(dai);
diff --git a/sound/soc/stm/stm32_i2s.c b/sound/soc/stm/stm32_i2s.c
index 7d1672c..87bc0f7 100644
--- a/sound/soc/stm/stm32_i2s.c
+++ b/sound/soc/stm/stm32_i2s.c
@@ -611,7 +611,7 @@ static int stm32_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
}

static int stm32_i2s_set_sysclk(struct snd_soc_dai *cpu_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct stm32_i2s_data *i2s = snd_soc_dai_get_drvdata(cpu_dai);
int ret = 0;
diff --git a/sound/soc/stm/stm32_sai_sub.c b/sound/soc/stm/stm32_sai_sub.c
index 3aa1cf2..13fa2f7 100644
--- a/sound/soc/stm/stm32_sai_sub.c
+++ b/sound/soc/stm/stm32_sai_sub.c
@@ -548,7 +548,7 @@ static irqreturn_t stm32_sai_isr(int irq, void *devid)
}

static int stm32_sai_set_sysclk(struct snd_soc_dai *cpu_dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct stm32_sai_sub_data *sai = snd_soc_dai_get_drvdata(cpu_dai);
int ret;
diff --git a/sound/soc/sunxi/sun4i-i2s.c b/sound/soc/sunxi/sun4i-i2s.c
index 78506c3..4fe9db9 100644
--- a/sound/soc/sunxi/sun4i-i2s.c
+++ b/sound/soc/sunxi/sun4i-i2s.c
@@ -1035,7 +1035,7 @@ static int sun4i_i2s_trigger(struct snd_pcm_substream *substream, int cmd,
return 0;
}

-static int sun4i_i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int sun4i_i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct sun4i_i2s *i2s = snd_soc_dai_get_drvdata(dai);
diff --git a/sound/soc/tegra/tegra_alc5632.c b/sound/soc/tegra/tegra_alc5632.c
index 0a0efd2..f2ff3e3 100644
--- a/sound/soc/tegra/tegra_alc5632.c
+++ b/sound/soc/tegra/tegra_alc5632.c
@@ -52,7 +52,7 @@ static int tegra_alc5632_asoc_hw_params(struct snd_pcm_substream *substream,
return err;
}

- err = snd_soc_dai_set_sysclk(codec_dai, 0, mclk,
+ err = snd_soc_dai_set_sysclk(codec_dai, 0, 0, mclk,
SND_SOC_CLOCK_IN);
if (err < 0) {
dev_err(card->dev, "codec_dai clock not set\n");
diff --git a/sound/soc/tegra/tegra_max98090.c b/sound/soc/tegra/tegra_max98090.c
index 00c1970..1d0a80c 100644
--- a/sound/soc/tegra/tegra_max98090.c
+++ b/sound/soc/tegra/tegra_max98090.c
@@ -72,7 +72,7 @@ static int tegra_max98090_asoc_hw_params(struct snd_pcm_substream *substream,
return err;
}

- err = snd_soc_dai_set_sysclk(codec_dai, 0, mclk,
+ err = snd_soc_dai_set_sysclk(codec_dai, 0, 0, mclk,
SND_SOC_CLOCK_IN);
if (err < 0) {
dev_err(card->dev, "codec_dai clock not set\n");
diff --git a/sound/soc/tegra/tegra_rt5640.c b/sound/soc/tegra/tegra_rt5640.c
index 9afba37..87c7d24 100644
--- a/sound/soc/tegra/tegra_rt5640.c
+++ b/sound/soc/tegra/tegra_rt5640.c
@@ -55,7 +55,7 @@ static int tegra_rt5640_asoc_hw_params(struct snd_pcm_substream *substream,
return err;
}

- err = snd_soc_dai_set_sysclk(codec_dai, RT5640_SCLK_S_MCLK, mclk,
+ err = snd_soc_dai_set_sysclk(codec_dai, RT5640_SCLK_S_MCLK, 0, mclk,
SND_SOC_CLOCK_IN);
if (err < 0) {
dev_err(card->dev, "codec_dai clock not set\n");
diff --git a/sound/soc/tegra/tegra_rt5677.c b/sound/soc/tegra/tegra_rt5677.c
index d30f8b6..6731fe4 100644
--- a/sound/soc/tegra/tegra_rt5677.c
+++ b/sound/soc/tegra/tegra_rt5677.c
@@ -56,7 +56,7 @@ static int tegra_rt5677_asoc_hw_params(struct snd_pcm_substream *substream,
return err;
}

- err = snd_soc_dai_set_sysclk(codec_dai, RT5677_SCLK_S_MCLK, mclk,
+ err = snd_soc_dai_set_sysclk(codec_dai, RT5677_SCLK_S_MCLK, 0, mclk,
SND_SOC_CLOCK_IN);
if (err < 0) {
dev_err(card->dev, "codec_dai clock not set\n");
diff --git a/sound/soc/tegra/tegra_sgtl5000.c b/sound/soc/tegra/tegra_sgtl5000.c
index 8853321..065a490 100644
--- a/sound/soc/tegra/tegra_sgtl5000.c
+++ b/sound/soc/tegra/tegra_sgtl5000.c
@@ -61,7 +61,7 @@ static int tegra_sgtl5000_hw_params(struct snd_pcm_substream *substream,
return err;
}

- err = snd_soc_dai_set_sysclk(codec_dai, SGTL5000_SYSCLK, mclk,
+ err = snd_soc_dai_set_sysclk(codec_dai, SGTL5000_SYSCLK, 0, mclk,
SND_SOC_CLOCK_IN);
if (err < 0) {
dev_err(card->dev, "codec_dai clock not set\n");
diff --git a/sound/soc/tegra/tegra_wm8753.c b/sound/soc/tegra/tegra_wm8753.c
index efd7938..db374eb 100644
--- a/sound/soc/tegra/tegra_wm8753.c
+++ b/sound/soc/tegra/tegra_wm8753.c
@@ -65,7 +65,7 @@ static int tegra_wm8753_hw_params(struct snd_pcm_substream *substream,
return err;
}

- err = snd_soc_dai_set_sysclk(codec_dai, WM8753_MCLK, mclk,
+ err = snd_soc_dai_set_sysclk(codec_dai, WM8753_MCLK, 0, mclk,
SND_SOC_CLOCK_IN);
if (err < 0) {
dev_err(card->dev, "codec_dai clock not set\n");
diff --git a/sound/soc/tegra/tegra_wm8903.c b/sound/soc/tegra/tegra_wm8903.c
index e4863fa..ba81bdd 100644
--- a/sound/soc/tegra/tegra_wm8903.c
+++ b/sound/soc/tegra/tegra_wm8903.c
@@ -72,7 +72,7 @@ static int tegra_wm8903_hw_params(struct snd_pcm_substream *substream,
return err;
}

- err = snd_soc_dai_set_sysclk(codec_dai, 0, mclk,
+ err = snd_soc_dai_set_sysclk(codec_dai, 0, 0, mclk,
SND_SOC_CLOCK_IN);
if (err < 0) {
dev_err(card->dev, "codec_dai clock not set\n");
diff --git a/sound/soc/tegra/trimslice.c b/sound/soc/tegra/trimslice.c
index 6c1cc3d..4e3c76e 100644
--- a/sound/soc/tegra/trimslice.c
+++ b/sound/soc/tegra/trimslice.c
@@ -50,7 +50,7 @@ static int trimslice_asoc_hw_params(struct snd_pcm_substream *substream,
return err;
}

- err = snd_soc_dai_set_sysclk(codec_dai, 0, mclk,
+ err = snd_soc_dai_set_sysclk(codec_dai, 0, 0, mclk,
SND_SOC_CLOCK_IN);
if (err < 0) {
dev_err(card->dev, "codec_dai clock not set\n");
diff --git a/sound/soc/ti/davinci-evm.c b/sound/soc/ti/davinci-evm.c
index b043a00..9f07441 100644
--- a/sound/soc/ti/davinci-evm.c
+++ b/sound/soc/ti/davinci-evm.c
@@ -61,12 +61,12 @@ static int evm_hw_params(struct snd_pcm_substream *substream,
snd_soc_card_get_drvdata(soc_card))->sysclk;

/* set the codec system clock */
- ret = snd_soc_dai_set_sysclk(codec_dai, 0, sysclk, SND_SOC_CLOCK_OUT);
+ ret = snd_soc_dai_set_sysclk(codec_dai, 0, 0, sysclk, SND_SOC_CLOCK_OUT);
if (ret < 0)
return ret;

/* set the CPU system clock */
- ret = snd_soc_dai_set_sysclk(cpu_dai, 0, sysclk, SND_SOC_CLOCK_OUT);
+ ret = snd_soc_dai_set_sysclk(cpu_dai, 0, 0, sysclk, SND_SOC_CLOCK_OUT);
if (ret < 0 && ret != -ENOTSUPP)
return ret;

diff --git a/sound/soc/ti/davinci-mcasp.c b/sound/soc/ti/davinci-mcasp.c
index b942203..1735e85 100644
--- a/sound/soc/ti/davinci-mcasp.c
+++ b/sound/soc/ti/davinci-mcasp.c
@@ -662,7 +662,7 @@ static int davinci_mcasp_set_clkdiv(struct snd_soc_dai *dai, int div_id,
return __davinci_mcasp_set_clkdiv(mcasp, div_id, div, 1);
}

-static int davinci_mcasp_set_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int davinci_mcasp_set_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
diff --git a/sound/soc/ti/j721e-evm.c b/sound/soc/ti/j721e-evm.c
index a7c0484..26bab67 100644
--- a/sound/soc/ti/j721e-evm.c
+++ b/sound/soc/ti/j721e-evm.c
@@ -339,7 +339,7 @@ static int j721e_audio_hw_params(struct snd_pcm_substream *substream,

sysclk_rate = priv->hsdiv_rates[domain->parent_clk_id];
for_each_rtd_codec_dais(rtd, i, codec_dai) {
- ret = snd_soc_dai_set_sysclk(codec_dai, 0, sysclk_rate,
+ ret = snd_soc_dai_set_sysclk(codec_dai, 0, 0, sysclk_rate,
SND_SOC_CLOCK_IN);
if (ret && ret != -ENOTSUPP) {
dev_err(priv->dev,
@@ -349,7 +349,7 @@ static int j721e_audio_hw_params(struct snd_pcm_substream *substream,
}
}

- ret = snd_soc_dai_set_sysclk(cpu_dai, MCASP_CLK_HCLK_AUXCLK,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, MCASP_CLK_HCLK_AUXCLK, 0,
sysclk_rate, SND_SOC_CLOCK_IN);

if (ret && ret != -ENOTSUPP) {
@@ -406,13 +406,13 @@ static int j721e_audio_init(struct snd_soc_pcm_runtime *rtd)

sysclk_rate = priv->hsdiv_rates[domain->parent_clk_id];
for_each_rtd_codec_dais(rtd, i, codec_dai) {
- ret = snd_soc_dai_set_sysclk(codec_dai, 0, sysclk_rate,
+ ret = snd_soc_dai_set_sysclk(codec_dai, 0, 0, sysclk_rate,
SND_SOC_CLOCK_IN);
if (ret && ret != -ENOTSUPP)
return ret;
}

- ret = snd_soc_dai_set_sysclk(cpu_dai, MCASP_CLK_HCLK_AUXCLK,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, MCASP_CLK_HCLK_AUXCLK, 0,
sysclk_rate, SND_SOC_CLOCK_IN);
if (ret && ret != -ENOTSUPP)
return ret;
diff --git a/sound/soc/ti/n810.c b/sound/soc/ti/n810.c
index ed217b3..65a891d 100644
--- a/sound/soc/ti/n810.c
+++ b/sound/soc/ti/n810.c
@@ -105,7 +105,7 @@ static int n810_hw_params(struct snd_pcm_substream *substream,
int err;

/* Set the codec system clock for DAC and ADC */
- err = snd_soc_dai_set_sysclk(codec_dai, 0, 12000000,
+ err = snd_soc_dai_set_sysclk(codec_dai, 0, 0, 12000000,
SND_SOC_CLOCK_IN);

return err;
diff --git a/sound/soc/ti/omap-abe-twl6040.c b/sound/soc/ti/omap-abe-twl6040.c
index 16ea039..1b87df036 100644
--- a/sound/soc/ti/omap-abe-twl6040.c
+++ b/sound/soc/ti/omap-abe-twl6040.c
@@ -61,7 +61,7 @@ static int omap_abe_hw_params(struct snd_pcm_substream *substream,
return -EINVAL;

/* set the codec mclk */
- ret = snd_soc_dai_set_sysclk(codec_dai, clk_id, freq,
+ ret = snd_soc_dai_set_sysclk(codec_dai, clk_id, 0, freq,
SND_SOC_CLOCK_IN);
if (ret) {
printk(KERN_ERR "can't set codec system clock\n");
@@ -81,13 +81,13 @@ static int omap_abe_dmic_hw_params(struct snd_pcm_substream *substream,
struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0);
int ret = 0;

- ret = snd_soc_dai_set_sysclk(cpu_dai, OMAP_DMIC_SYSCLK_PAD_CLKS,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, OMAP_DMIC_SYSCLK_PAD_CLKS, 0,
19200000, SND_SOC_CLOCK_IN);
if (ret < 0) {
printk(KERN_ERR "can't set DMIC cpu system clock\n");
return ret;
}
- ret = snd_soc_dai_set_sysclk(cpu_dai, OMAP_DMIC_ABE_DMIC_CLK, 2400000,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, OMAP_DMIC_ABE_DMIC_CLK, 0, 2400000,
SND_SOC_CLOCK_OUT);
if (ret < 0) {
printk(KERN_ERR "can't set DMIC output clock\n");
diff --git a/sound/soc/ti/omap-dmic.c b/sound/soc/ti/omap-dmic.c
index a26588e..419b412 100644
--- a/sound/soc/ti/omap-dmic.c
+++ b/sound/soc/ti/omap-dmic.c
@@ -387,7 +387,7 @@ static int omap_dmic_select_outclk(struct omap_dmic *dmic, int clk_id,
return ret;
}

-static int omap_dmic_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int omap_dmic_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct omap_dmic *dmic = snd_soc_dai_get_drvdata(dai);
diff --git a/sound/soc/ti/omap-mcbsp.c b/sound/soc/ti/omap-mcbsp.c
index 6025b30..cbd683d 100644
--- a/sound/soc/ti/omap-mcbsp.c
+++ b/sound/soc/ti/omap-mcbsp.c
@@ -1203,7 +1203,7 @@ static int omap_mcbsp_dai_set_clkdiv(struct snd_soc_dai *cpu_dai,
}

static int omap_mcbsp_dai_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
- int clk_id, unsigned int freq,
+ int clk_id, int source, unsigned int freq,
int dir)
{
struct omap_mcbsp *mcbsp = snd_soc_dai_get_drvdata(cpu_dai);
diff --git a/sound/soc/ti/omap3pandora.c b/sound/soc/ti/omap3pandora.c
index a287e97..95307fd 100644
--- a/sound/soc/ti/omap3pandora.c
+++ b/sound/soc/ti/omap3pandora.c
@@ -37,7 +37,7 @@ static int omap3pandora_hw_params(struct snd_pcm_substream *substream,
int ret;

/* Set the codec system clock for DAC and ADC */
- ret = snd_soc_dai_set_sysclk(codec_dai, 0, 26000000,
+ ret = snd_soc_dai_set_sysclk(codec_dai, 0, 0, 26000000,
SND_SOC_CLOCK_IN);
if (ret < 0) {
pr_err(PREFIX "can't set codec system clock\n");
@@ -45,7 +45,7 @@ static int omap3pandora_hw_params(struct snd_pcm_substream *substream,
}

/* Set McBSP clock to external */
- ret = snd_soc_dai_set_sysclk(cpu_dai, OMAP_MCBSP_SYSCLK_CLKS_EXT,
+ ret = snd_soc_dai_set_sysclk(cpu_dai, OMAP_MCBSP_SYSCLK_CLKS_EXT, 0,
256 * params_rate(params),
SND_SOC_CLOCK_IN);
if (ret < 0) {
diff --git a/sound/soc/ti/rx51.c b/sound/soc/ti/rx51.c
index a2629cc..0080d97 100644
--- a/sound/soc/ti/rx51.c
+++ b/sound/soc/ti/rx51.c
@@ -106,7 +106,7 @@ static int rx51_hw_params(struct snd_pcm_substream *substream,
struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);

/* Set the codec system clock for DAC and ADC */
- return snd_soc_dai_set_sysclk(codec_dai, 0, 19200000,
+ return snd_soc_dai_set_sysclk(codec_dai, 0, 0, 19200000,
SND_SOC_CLOCK_IN);
}

diff --git a/sound/soc/uniphier/aio-cpu.c b/sound/soc/uniphier/aio-cpu.c
index 25c40c2..963e025 100644
--- a/sound/soc/uniphier/aio-cpu.c
+++ b/sound/soc/uniphier/aio-cpu.c
@@ -143,7 +143,7 @@ static int find_divider(struct uniphier_aio *aio, int pll_id, unsigned int freq)
return -ENOTSUPP;
}

-static int uniphier_aio_set_sysclk(struct snd_soc_dai *dai, int clk_id,
+static int uniphier_aio_set_sysclk(struct snd_soc_dai *dai, int clk_id, int source,
unsigned int freq, int dir)
{
struct uniphier_aio *aio = uniphier_priv(dai);
@@ -302,7 +302,7 @@ static int uniphier_aio_hw_params(struct snd_pcm_substream *substream,
params_rate(params));
return -EINVAL;
}
- ret = snd_soc_dai_set_sysclk(dai, AUD_CLK_A,
+ ret = snd_soc_dai_set_sysclk(dai, AUD_CLK_A, 0,
freq, SND_SOC_CLOCK_OUT);
if (ret)
return ret;
diff --git a/sound/soc/ux500/ux500_msp_dai.c b/sound/soc/ux500/ux500_msp_dai.c
index 2105237..03f1e81 100644
--- a/sound/soc/ux500/ux500_msp_dai.c
+++ b/sound/soc/ux500/ux500_msp_dai.c
@@ -619,7 +619,7 @@ static int ux500_msp_dai_set_tdm_slot(struct snd_soc_dai *dai,
}

static int ux500_msp_dai_set_dai_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
+ int clk_id, int source, unsigned int freq, int dir)
{
struct ux500_msp_i2s_drvdata *drvdata = dev_get_drvdata(dai->dev);

--
2.7.4

2021-02-26 05:28:43

by Sameer Pujar

[permalink] [raw]
Subject: Re: [RFC PATCH 0/5] Flexible sysclk/pll configuration



On 2/25/2021 11:35 PM, Sameer Pujar wrote:
> This series attempts to add flexible system clock (sysclk) and pll
> configuration for the DAI controller from simple card or audio graph
> card.
>
> Sysclk configuration
> ====================
> Motivation:
> -----------
> The problem this tries to address is, some Codecs may have
> multiple clocks and multiple sources for its sysclk. For example
> sysclk may depend on MCLK provided by SoC or it may used an
> internal pll. The simple card or audio graph card driver is
> generic and can be used on multiple platforms. So if a platform
> using this driver needs a generic configuration, then the Codec
> specific stuff cannot be hardcoded in the driver. Hence it would
> be better if the info is driven from DT, especially from a
> Codec DAI or endpoint subnode.
>
> Solution:
> ---------
> "system-clock-id" and "system-clock-source" DT properties can be
> exposed for a flexible sysclk configuration. These properties
> go into a Codec DAI or endpoint subnode.
>
> Please note that other sysclk related properties like
> "system-clock-frequency" and "system-clock-direction-out" are
> already present.
>
> Currently snd_soc_dai_set_sysclk() does not have an argument
> for source. This series adds this additional field and updates
> all the required drivers. This is needed because ideally sysclk
> "clk_id" and "source" fields are different. Some drivers are
> making use of "clk_id" field to program source information.
> **May be this needs to be corrected going ahead**
>
>
> Pll configuration
> =================
> Motivation:
> -----------
> Similar to sysclk configuration, pll configuration also needs
> little more flexibility. If a Codec has internal pll and it
> can be sourced from multiple clocks a specific configuration
> may be required for a given platform.
>
> Some of the cases are:
> - MCLK (supplied by SoC) --> Codec pll -> Codec sysclk
> - SoC I2S bit clock (BCLK) --> Codec pll -> Codec sysclk
>
> Solution:
> ---------
> Approach is similar to what is done for extending sysclk
> flexibility. Following DT properties are added to address the
> same.
>
> "pll-id"
> "pll-source"
> "pll-input-reference"
> "pll-output-reference"
> "pll-input-frequency"
> "pll-output-frequency"
>
> All these are optional properties. Simple card or audio graph
> card drivers can use above info and call snd_soc_dai_set_pll()
> for necessary configuration.
>
> Sameer Pujar (5):
> ASoC: soc-component: Fix return value of snd_soc_component_set_pll()
> ASoC: soc-dai: Add sysclk source to snd_soc_dai_set_sysclk()
> ASoC: audio-graph-card: Add bindings for sysclk and pll
> ASoC: simple-card-utils: Parse sysclk id and source
> ASoC: simple-card-utils: Support pll configuration
>
> .../bindings/sound/audio-graph-port.yaml | 71 +++++++++
> include/sound/simple_card_utils.h | 35 +++++
> include/sound/soc-dai.h | 4 +-
> sound/soc/amd/acp-da7219-max98357a.c | 2 +-
> sound/soc/amd/acp-rt5645.c | 2 +-
> sound/soc/amd/acp3x-rt5682-max9836.c | 4 +-
> sound/soc/atmel/atmel_wm8904.c | 2 +-
> sound/soc/atmel/mchp-i2s-mcc.c | 2 +-

[...]

> sound/soc/ti/omap-mcbsp.c | 2 +-
> sound/soc/ti/omap3pandora.c | 4 +-
> sound/soc/ti/rx51.c | 2 +-
> sound/soc/uniphier/aio-cpu.c | 4 +-
> sound/soc/ux500/ux500_msp_dai.c | 2 +-
> 271 files changed, 639 insertions(+), 389 deletions(-)
>

Looks like I missed some files to update which make use of
snd_soc_dai_set_sysclk(). I will try to fix that. Meanwhile please
review if the idea is right here.