[alsa-devel] [PATCH 1/2] ASoC: topology: Rename clock_gated to clock_cont in snd_soc_tplg_hw_config
In kernel `soc-dai.h`, DAI clock gating is defined as following:
~~~~ #define SND_SOC_DAIFMT_CONT (1 << 4) /* continuous clock */ #define SND_SOC_DAIFMT_GATED (0 << 4) /* clock is gated */ ~~~~
Therefore, the corresponding field of struct snd_soc_tplg_hw_config should be inverted compared to the current logic:
clock_count = 1 => SND_SOC_DAIFMT_CONT clock_count = 0 => SND_SOC_DAIFMT_GATED
Signed-off-by: Kirill Marinushkin k.marinushkin@gmail.com Cc: Jaroslav Kysela perex@perex.cz Cc: Takashi Iwai tiwai@suse.com Cc: alsa-devel@alsa-project.org Cc: linux-kernel@vger.kernel.org --- include/uapi/sound/asoc.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/include/uapi/sound/asoc.h b/include/uapi/sound/asoc.h index 69c37ecbff7e..10188850dede 100644 --- a/include/uapi/sound/asoc.h +++ b/include/uapi/sound/asoc.h @@ -312,7 +312,9 @@ struct snd_soc_tplg_hw_config { __le32 size; /* in bytes of this structure */ __le32 id; /* unique ID - - used to match */ __le32 fmt; /* SND_SOC_DAI_FORMAT_ format value */ - __u8 clock_gated; /* 1 if clock can be gated to save power */ + __u8 clock_cont; /* 1 if clock is continuous, and can not be + * gated to save power + */ __u8 invert_bclk; /* 1 for inverted BCLK, 0 for normal */ __u8 invert_fsync; /* 1 for inverted frame clock, 0 for normal */ __u8 bclk_master; /* 1 for master of BCLK, 0 for slave */
Clock gating parameter is a part of `dai_fmt`. It is supported by `alsa-lib` when creating a topology binary file, but ignored by kernel when loading this topology file.
After applying this commit, the clock gating parameter is not ignored any more. The old behaviour is not broken, as by default the parameter value is 0.
For example, the following config, based on alsa-lib/src/conf/topology/broadwell/broadwell.conf, is now supported:
~~~~ SectionHWConfig."CodecHWConfig" { id "1" format "I2S" # physical audio format. bclk "master" # Platform is master of bit clock fsync "master" # platform is master of fsync pm_cont_clock "true" # clock is continuous, and can not be gated }
SectionLink."Codec" {
# used for binding to the physical link id "0"
hw_configs [ "CodecHWConfig" ]
default_hw_conf_id "1" } ~~~~
Signed-off-by: Kirill Marinushkin k.marinushkin@gmail.com Cc: Liam Girdwood lgirdwood@gmail.com Cc: Mark Brown broonie@kernel.org Cc: Jaroslav Kysela perex@perex.cz Cc: Takashi Iwai tiwai@suse.com Cc: alsa-devel@alsa-project.org Cc: linux-kernel@vger.kernel.org --- sound/soc/soc-topology.c | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c index 01a50413c66f..21bd4f96348d 100644 --- a/sound/soc/soc-topology.c +++ b/sound/soc/soc-topology.c @@ -1981,6 +1981,12 @@ static void set_link_hw_format(struct snd_soc_dai_link *link,
link->dai_fmt = hw_config->fmt & SND_SOC_DAIFMT_FORMAT_MASK;
+ /* clock gating */ + if (hw_config->clock_cont) + link->dai_fmt |= SND_SOC_DAIFMT_CONT; + else + link->dai_fmt |= SND_SOC_DAIFMT_GATED; + /* clock signal polarity */ invert_bclk = hw_config->invert_bclk; invert_fsync = hw_config->invert_fsync;
On 02/19/18 07:05, Kirill Marinushkin wrote:
Clock gating parameter is a part of `dai_fmt`. It is supported by `alsa-lib` when creating a topology binary file, but ignored by kernel when loading this topology file.
After applying this commit, the clock gating parameter is not ignored any more. The old behaviour is not broken, as by default the parameter value is 0.
For example, the following config, based on alsa-lib/src/conf/topology/broadwell/broadwell.conf, is now supported:
SectionHWConfig."CodecHWConfig" { id "1" format "I2S" # physical audio format. bclk "master" # Platform is master of bit clock fsync "master" # platform is master of fsync pm_cont_clock "true" # clock is continuous, and can not be gated } SectionLink."Codec" { # used for binding to the physical link id "0" hw_configs [ "CodecHWConfig" ] default_hw_conf_id "1" }
Signed-off-by: Kirill Marinushkin k.marinushkin@gmail.com Cc: Liam Girdwood lgirdwood@gmail.com Cc: Mark Brown broonie@kernel.org Cc: Jaroslav Kysela perex@perex.cz Cc: Takashi Iwai tiwai@suse.com Cc: alsa-devel@alsa-project.org Cc: linux-kernel@vger.kernel.org
sound/soc/soc-topology.c | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c index 01a50413c66f..21bd4f96348d 100644 --- a/sound/soc/soc-topology.c +++ b/sound/soc/soc-topology.c @@ -1981,6 +1981,12 @@ static void set_link_hw_format(struct snd_soc_dai_link *link,
link->dai_fmt = hw_config->fmt & SND_SOC_DAIFMT_FORMAT_MASK;
/* clock gating */
if (hw_config->clock_cont)
link->dai_fmt |= SND_SOC_DAIFMT_CONT;
else
link->dai_fmt |= SND_SOC_DAIFMT_GATED;
- /* clock signal polarity */ invert_bclk = hw_config->invert_bclk; invert_fsync = hw_config->invert_fsync;
This patch is outdated. Patch v2 is sent in a different thread to replace it.
Best Regards, Kirill
Hi,
On Feb 19 2018 15:05, Kirill Marinushkin wrote:
In kernel `soc-dai.h`, DAI clock gating is defined as following:
\#define SND_SOC_DAIFMT_CONT (1 << 4) /* continuous clock */ \#define SND_SOC_DAIFMT_GATED (0 << 4) /* clock is gated */
Therefore, the corresponding field of struct snd_soc_tplg_hw_config should be inverted compared to the current logic:
clock_count = 1 => SND_SOC_DAIFMT_CONT clock_count = 0 => SND_SOC_DAIFMT_GATED
Signed-off-by: Kirill Marinushkin k.marinushkin@gmail.com Cc: Jaroslav Kysela perex@perex.cz Cc: Takashi Iwai tiwai@suse.com Cc: alsa-devel@alsa-project.org Cc: linux-kernel@vger.kernel.org
include/uapi/sound/asoc.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/include/uapi/sound/asoc.h b/include/uapi/sound/asoc.h index 69c37ecbff7e..10188850dede 100644 --- a/include/uapi/sound/asoc.h +++ b/include/uapi/sound/asoc.h @@ -312,7 +312,9 @@ struct snd_soc_tplg_hw_config { __le32 size; /* in bytes of this structure */ __le32 id; /* unique ID - - used to match */ __le32 fmt; /* SND_SOC_DAI_FORMAT_ format value */
- __u8 clock_gated; /* 1 if clock can be gated to save power */
- __u8 clock_cont; /* 1 if clock is continuous, and can not be
* gated to save power
__u8 invert_bclk; /* 1 for inverted BCLK, 0 for normal */ __u8 invert_fsync; /* 1 for inverted frame clock, 0 for normal */ __u8 bclk_master; /* 1 for master of BCLK, 0 for slave */*/
This structure was added at a commit 676c6b5208f7 ('ASoC: topology: ABI - Update physical DAI link configuration for version 5') in a development period for v4.10.
This file is a part of UAPI, thus this structure has already been exposed to application developers. Any change can break userspace applications in a point of backward compatibility for this subsystem.
It's better for you to investigate another solution for your two patches[1][2].
[1] [alsa-devel] [PATCH 1/2] ASoC: topology: Rename clock_gated to clock_cont in snd_soc_tplg_hw_config http://mailman.alsa-project.org/pipermail/alsa-devel/2018-February/132258.ht... [2] [alsa-devel] [PATCH 2/2] ASoC: topology: Add missing clock gating parameter when parsing hw_configs http://mailman.alsa-project.org/pipermail/alsa-devel/2018-February/132259.ht...
Regards
Takashi Sakamoto
On 02/19/18 07:47, Takashi Sakamoto wrote:
Hi,
On Feb 19 2018 15:05, Kirill Marinushkin wrote:
In kernel `soc-dai.h`, DAI clock gating is defined as following:
\#define SND_SOC_DAIFMT_CONT (1 << 4) /* continuous clock */ \#define SND_SOC_DAIFMT_GATED (0 << 4) /* clock is gated */
Therefore, the corresponding field of struct snd_soc_tplg_hw_config should be inverted compared to the current logic:
clock_count = 1 => SND_SOC_DAIFMT_CONT clock_count = 0 => SND_SOC_DAIFMT_GATED
Signed-off-by: Kirill Marinushkin k.marinushkin@gmail.com Cc: Jaroslav Kysela perex@perex.cz Cc: Takashi Iwai tiwai@suse.com Cc: alsa-devel@alsa-project.org Cc: linux-kernel@vger.kernel.org
include/uapi/sound/asoc.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/include/uapi/sound/asoc.h b/include/uapi/sound/asoc.h index 69c37ecbff7e..10188850dede 100644 --- a/include/uapi/sound/asoc.h +++ b/include/uapi/sound/asoc.h @@ -312,7 +312,9 @@ struct snd_soc_tplg_hw_config { __le32 size; /* in bytes of this structure */ __le32 id; /* unique ID - - used to match */ __le32 fmt; /* SND_SOC_DAI_FORMAT_ format value */ - __u8 clock_gated; /* 1 if clock can be gated to save power */ + __u8 clock_cont; /* 1 if clock is continuous, and can not be + * gated to save power + */ __u8 invert_bclk; /* 1 for inverted BCLK, 0 for normal */ __u8 invert_fsync; /* 1 for inverted frame clock, 0 for normal */ __u8 bclk_master; /* 1 for master of BCLK, 0 for slave */
This structure was added at a commit 676c6b5208f7 ('ASoC: topology: ABI - Update physical DAI link configuration for version 5') in a development period for v4.10.
This file is a part of UAPI, thus this structure has already been exposed to application developers. Any change can break userspace applications in a point of backward compatibility for this subsystem.
It's better for you to investigate another solution for your two patches[1][2].
[1] [alsa-devel] [PATCH 1/2] ASoC: topology: Rename clock_gated to clock_cont in snd_soc_tplg_hw_config http://mailman.alsa-project.org/pipermail/alsa-devel/2018-February/132258.ht... [2] [alsa-devel] [PATCH 2/2] ASoC: topology: Add missing clock gating parameter when parsing hw_configs http://mailman.alsa-project.org/pipermail/alsa-devel/2018-February/132259.ht...
Regards
Takashi Sakamoto
Hello Takashi Sakamoto,
I will propose a backwards-compatible solution as a PATCH v2.
Best Regards, Kirill
In kernel `soc-dai.h`, DAI clock gating is defined as following:
~~~~ #define SND_SOC_DAIFMT_CONT (1 << 4) /* continuous clock */ #define SND_SOC_DAIFMT_GATED (0 << 4) /* clock is gated */ ~~~~
The corresponding field of struct snd_soc_tplg_hw_config cannot be used as bool values due to the inverted logic. Therefore this commit adds the defines for this field.
snd_soc_tplg_hw_config.clock_gated = 0 => no effect snd_soc_tplg_hw_config.clock_gated = 1 => SND_SOC_DAIFMT_GATED snd_soc_tplg_hw_config.clock_gated = 2 => SND_SOC_DAIFMT_CONT
Signed-off-by: Kirill Marinushkin k.marinushkin@gmail.com Cc: Takashi Sakamoto o-takashi@sakamocchi.jp Cc: Jaroslav Kysela perex@perex.cz Cc: Takashi Iwai tiwai@suse.com Cc: alsa-devel@alsa-project.org Cc: linux-kernel@vger.kernel.org --- include/uapi/sound/asoc.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/include/uapi/sound/asoc.h b/include/uapi/sound/asoc.h index 69c37ecbff7e..86d0599a6f13 100644 --- a/include/uapi/sound/asoc.h +++ b/include/uapi/sound/asoc.h @@ -139,6 +139,11 @@ #define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_CHANNELS (1 << 1) #define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_SAMPLEBITS (1 << 2)
+/* DAI clock gating */ +#define SND_SOC_TPLG_DAI_CLK_GATE_UNDEFINED 0 +#define SND_SOC_TPLG_DAI_CLK_GATE_GATED 1 +#define SND_SOC_TPLG_DAI_CLK_GATE_CONT 2 + /* DAI physical PCM data formats. * Add new formats to the end of the list. */ @@ -312,7 +317,7 @@ struct snd_soc_tplg_hw_config { __le32 size; /* in bytes of this structure */ __le32 id; /* unique ID - - used to match */ __le32 fmt; /* SND_SOC_DAI_FORMAT_ format value */ - __u8 clock_gated; /* 1 if clock can be gated to save power */ + __u8 clock_gated; /* SND_SOC_TPLG_DAI_CLK_GATE_ value */ __u8 invert_bclk; /* 1 for inverted BCLK, 0 for normal */ __u8 invert_fsync; /* 1 for inverted frame clock, 0 for normal */ __u8 bclk_master; /* 1 for master of BCLK, 0 for slave */
Clock gating parameter is a part of `dai_fmt`. It is supported by `alsa-lib` when creating a topology binary file, but ignored by kernel when loading this topology file.
After applying this commit, the clock gating parameter is not ignored any more. The old behaviour is not broken, as by default the parameter value is 0.
For example, the following config, based on alsa-lib/src/conf/topology/broadwell/broadwell.conf, is now supported:
~~~~ SectionHWConfig."CodecHWConfig" { id "1" format "I2S" # physical audio format. bclk "master" # Platform is master of bit clock fsync "master" # platform is master of fsync pm_gate_clocks "true" # clock can be gated }
SectionLink."Codec" {
# used for binding to the physical link id "0"
hw_configs [ "CodecHWConfig" ]
default_hw_conf_id "1" } ~~~~
Signed-off-by: Kirill Marinushkin k.marinushkin@gmail.com Cc: Takashi Sakamoto o-takashi@sakamocchi.jp Cc: Liam Girdwood lgirdwood@gmail.com Cc: Mark Brown broonie@kernel.org Cc: Jaroslav Kysela perex@perex.cz Cc: Takashi Iwai tiwai@suse.com Cc: alsa-devel@alsa-project.org Cc: linux-kernel@vger.kernel.org --- sound/soc/soc-topology.c | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c index 01a50413c66f..bac70676a6b4 100644 --- a/sound/soc/soc-topology.c +++ b/sound/soc/soc-topology.c @@ -1981,6 +1981,13 @@ static void set_link_hw_format(struct snd_soc_dai_link *link,
link->dai_fmt = hw_config->fmt & SND_SOC_DAIFMT_FORMAT_MASK;
+ /* clock gating */ + if (hw_config->clock_gated == SND_SOC_TPLG_DAI_CLK_GATE_GATED) + link->dai_fmt |= SND_SOC_DAIFMT_GATED; + else if (hw_config->clock_gated == + SND_SOC_TPLG_DAI_CLK_GATE_CONT) + link->dai_fmt |= SND_SOC_DAIFMT_CONT; + /* clock signal polarity */ invert_bclk = hw_config->invert_bclk; invert_fsync = hw_config->invert_fsync;
The patch
ASoC: topology: Add missing clock gating parameter when parsing hw_configs
has been applied to the asoc tree at
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks, Mark
From bdb86c40e8c5d2abe2ec7be964d621c1b7c27081 Mon Sep 17 00:00:00 2001
From: Kirill Marinushkin k.marinushkin@gmail.com Date: Mon, 19 Feb 2018 21:36:35 +0100 Subject: [PATCH] ASoC: topology: Add missing clock gating parameter when parsing hw_configs
Clock gating parameter is a part of `dai_fmt`. It is supported by `alsa-lib` when creating a topology binary file, but ignored by kernel when loading this topology file.
After applying this commit, the clock gating parameter is not ignored any more. The old behaviour is not broken, as by default the parameter value is 0.
For example, the following config, based on alsa-lib/src/conf/topology/broadwell/broadwell.conf, is now supported:
~~~~ SectionHWConfig."CodecHWConfig" { id "1" format "I2S" # physical audio format. bclk "master" # Platform is master of bit clock fsync "master" # platform is master of fsync pm_gate_clocks "true" # clock can be gated }
SectionLink."Codec" {
# used for binding to the physical link id "0"
hw_configs [ "CodecHWConfig" ]
default_hw_conf_id "1" } ~~~~
Signed-off-by: Kirill Marinushkin k.marinushkin@gmail.com Cc: Takashi Sakamoto o-takashi@sakamocchi.jp Cc: Liam Girdwood lgirdwood@gmail.com Cc: Mark Brown broonie@kernel.org Cc: Jaroslav Kysela perex@perex.cz Cc: Takashi Iwai tiwai@suse.com Cc: alsa-devel@alsa-project.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Mark Brown broonie@kernel.org --- sound/soc/soc-topology.c | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c index 01a50413c66f..bac70676a6b4 100644 --- a/sound/soc/soc-topology.c +++ b/sound/soc/soc-topology.c @@ -1981,6 +1981,13 @@ static void set_link_hw_format(struct snd_soc_dai_link *link,
link->dai_fmt = hw_config->fmt & SND_SOC_DAIFMT_FORMAT_MASK;
+ /* clock gating */ + if (hw_config->clock_gated == SND_SOC_TPLG_DAI_CLK_GATE_GATED) + link->dai_fmt |= SND_SOC_DAIFMT_GATED; + else if (hw_config->clock_gated == + SND_SOC_TPLG_DAI_CLK_GATE_CONT) + link->dai_fmt |= SND_SOC_DAIFMT_CONT; + /* clock signal polarity */ invert_bclk = hw_config->invert_bclk; invert_fsync = hw_config->invert_fsync;
On Tue, Feb 20, 2018 at 12:09:18PM +0000, Mark Brown wrote:
The patch
ASoC: topology: Add missing clock gating parameter when parsing hw_configs
has been applied to the asoc tree at
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
This broke the build so I dropped it.
On 02/20/18 14:45, Mark Brown wrote:
On Tue, Feb 20, 2018 at 12:09:18PM +0000, Mark Brown wrote:
The patch
ASoC: topology: Add missing clock gating parameter when parsing hw_configs
has been applied to the asoc tree at
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
This broke the build so I dropped it.
This patch is part 2 of 2. I failed to send both of them as a single patch series. I will resend them properly in a new thread.
Best Regards, Kirill
On 02/19/18 21:36, Kirill Marinushkin wrote:
In kernel `soc-dai.h`, DAI clock gating is defined as following:
\#define SND_SOC_DAIFMT_CONT (1 << 4) /* continuous clock */ \#define SND_SOC_DAIFMT_GATED (0 << 4) /* clock is gated */
The corresponding field of struct snd_soc_tplg_hw_config cannot be used as bool values due to the inverted logic. Therefore this commit adds the defines for this field.
snd_soc_tplg_hw_config.clock_gated = 0 => no effect snd_soc_tplg_hw_config.clock_gated = 1 => SND_SOC_DAIFMT_GATED snd_soc_tplg_hw_config.clock_gated = 2 => SND_SOC_DAIFMT_CONT
Signed-off-by: Kirill Marinushkin k.marinushkin@gmail.com Cc: Takashi Sakamoto o-takashi@sakamocchi.jp Cc: Jaroslav Kysela perex@perex.cz Cc: Takashi Iwai tiwai@suse.com Cc: alsa-devel@alsa-project.org Cc: linux-kernel@vger.kernel.org
include/uapi/sound/asoc.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/include/uapi/sound/asoc.h b/include/uapi/sound/asoc.h index 69c37ecbff7e..86d0599a6f13 100644 --- a/include/uapi/sound/asoc.h +++ b/include/uapi/sound/asoc.h @@ -139,6 +139,11 @@ #define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_CHANNELS (1 << 1) #define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_SAMPLEBITS (1 << 2)
+/* DAI clock gating */ +#define SND_SOC_TPLG_DAI_CLK_GATE_UNDEFINED 0 +#define SND_SOC_TPLG_DAI_CLK_GATE_GATED 1 +#define SND_SOC_TPLG_DAI_CLK_GATE_CONT 2
/* DAI physical PCM data formats.
- Add new formats to the end of the list.
*/ @@ -312,7 +317,7 @@ struct snd_soc_tplg_hw_config { __le32 size; /* in bytes of this structure */ __le32 id; /* unique ID - - used to match */ __le32 fmt; /* SND_SOC_DAI_FORMAT_ format value */
- __u8 clock_gated; /* 1 if clock can be gated to save power */
- __u8 clock_gated; /* SND_SOC_TPLG_DAI_CLK_GATE_ value */ __u8 invert_bclk; /* 1 for inverted BCLK, 0 for normal */ __u8 invert_fsync; /* 1 for inverted frame clock, 0 for normal */ __u8 bclk_master; /* 1 for master of BCLK, 0 for slave */
This patch is part 1 of 2. I failed to send both of them as a single patch series. I will resend them properly in a new thread.
Best Regards, Kirill
participants (3)
-
Kirill Marinushkin
-
Mark Brown
-
Takashi Sakamoto