Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge series "ASoC: use inclusive language for bclk/fsync/topology" from Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>:

The SOF (Sound Open Firmware) tree contains a lot of references in
topology files to 'codec_slave'/'codec_master' terms, which in turn
come from alsa-lib and ALSA/ASoC topology support at the kernel
level. These terms are no longer compatible with the guidelines
adopted by the kernel community [1], standard organizations, and need
to change in backwards-compatible ways.

The main/secondary terms typically suggested in guidelines don't mean
anything for clocks, this patchset suggests instead the use of
'provider' and 'consumer' terms, with the 'codec' prefix kept to make
it clear that the codec is the reference. The CM/CS suffixes are also
replaced by CP/CC.

It can be argued that the change of suffix is invasive, but finding a
replacement that keeps the M and S shortcuts has proven difficult in
quite a few contexts.

The previous definitions are kept for backwards-compatibility so this
change should not have any functional impact. It is suggested that new
contributions only use the new terms but there is no requirement to
transition immediately to the new definitions for existing code. Intel
will however update all its past contributions related to bit
clock/frame sync configurations immediately.

This patchset contains the kernel changes only, the alsa-lib changes
were shared separately.

Feedback welcome
~Pierre

[1] https://lkml.org/lkml/2020/7/4/229

Pierre-Louis Bossart (4):
ASoC: topology: use inclusive language for bclk and fsync
ASoC: SOF: use inclusive language for bclk and fsync
ASoC: Intel: atom: use inclusive language for SSP bclk/fsync
ASoC: Intel: keembay: use inclusive language for bclk and fsync

include/sound/soc-dai.h | 32 +++++++++++++++---------
include/sound/sof/dai.h | 16 ++++++++----
include/uapi/sound/asoc.h | 22 ++++++++++------
sound/soc/intel/atom/sst-atom-controls.c | 12 ++++-----
sound/soc/intel/atom/sst-atom-controls.h | 4 +--
sound/soc/intel/keembay/kmb_platform.c | 22 ++++++++--------
sound/soc/intel/keembay/kmb_platform.h | 8 +++---
sound/soc/soc-topology.c | 24 +++++++++---------
sound/soc/sof/topology.c | 18 ++++++-------
9 files changed, 89 insertions(+), 69 deletions(-)

--
2.25.1

+88 -68
+19 -11
include/sound/soc-dai.h
··· 72 72 #define SND_SOC_DAIFMT_IB_IF (4 << 8) /* invert BCLK + FRM */ 73 73 74 74 /* 75 - * DAI hardware clock masters. 75 + * DAI hardware clock providers/consumers 76 76 * 77 77 * This is wrt the codec, the inverse is true for the interface 78 - * i.e. if the codec is clk and FRM master then the interface is 79 - * clk and frame secondary. 78 + * i.e. if the codec is clk and FRM provider then the interface is 79 + * clk and frame consumer. 80 80 */ 81 - #define SND_SOC_DAIFMT_CBM_CFM (1 << 12) /* codec clk & FRM master */ 82 - #define SND_SOC_DAIFMT_CBS_CFM (2 << 12) /* codec clk secondary & FRM master */ 83 - #define SND_SOC_DAIFMT_CBM_CFS (3 << 12) /* codec clk master & frame secondary */ 84 - #define SND_SOC_DAIFMT_CBS_CFS (4 << 12) /* codec clk & FRM secondary */ 81 + #define SND_SOC_DAIFMT_CBP_CFP (1 << 12) /* codec clk provider & frame provider */ 82 + #define SND_SOC_DAIFMT_CBC_CFP (2 << 12) /* codec clk consumer & frame provider */ 83 + #define SND_SOC_DAIFMT_CBP_CFC (3 << 12) /* codec clk provider & frame consumer */ 84 + #define SND_SOC_DAIFMT_CBC_CFC (4 << 12) /* codec clk consumer & frame follower */ 85 85 86 - #define SND_SOC_DAIFMT_FORMAT_MASK 0x000f 87 - #define SND_SOC_DAIFMT_CLOCK_MASK 0x00f0 88 - #define SND_SOC_DAIFMT_INV_MASK 0x0f00 89 - #define SND_SOC_DAIFMT_MASTER_MASK 0xf000 86 + /* previous definitions kept for backwards-compatibility, do not use in new contributions */ 87 + #define SND_SOC_DAIFMT_CBM_CFM SND_SOC_DAIFMT_CBP_CFP 88 + #define SND_SOC_DAIFMT_CBS_CFM SND_SOC_DAIFMT_CBC_CFP 89 + #define SND_SOC_DAIFMT_CBM_CFS SND_SOC_DAIFMT_CBP_CFC 90 + #define SND_SOC_DAIFMT_CBS_CFS SND_SOC_DAIFMT_CBC_CFC 91 + 92 + #define SND_SOC_DAIFMT_FORMAT_MASK 0x000f 93 + #define SND_SOC_DAIFMT_CLOCK_MASK 0x00f0 94 + #define SND_SOC_DAIFMT_INV_MASK 0x0f00 95 + #define SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK 0xf000 96 + 97 + #define SND_SOC_DAIFMT_MASTER_MASK SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK 90 98 91 99 /* 92 100 * Master Clock Directions
+11 -5
include/sound/sof/dai.h
··· 34 34 #define SOF_DAI_FMT_IB_NF (3 << 8) /**< invert BCLK + nor FRM */ 35 35 #define SOF_DAI_FMT_IB_IF (4 << 8) /**< invert BCLK + FRM */ 36 36 37 - #define SOF_DAI_FMT_CBM_CFM (0 << 12) /**< codec clk & FRM master */ 38 - #define SOF_DAI_FMT_CBS_CFM (2 << 12) /**< codec clk slave & FRM master */ 39 - #define SOF_DAI_FMT_CBM_CFS (3 << 12) /**< codec clk master & frame slave */ 40 - #define SOF_DAI_FMT_CBS_CFS (4 << 12) /**< codec clk & FRM slave */ 37 + #define SOF_DAI_FMT_CBP_CFP (0 << 12) /**< codec bclk provider & frame provider */ 38 + #define SOF_DAI_FMT_CBC_CFP (2 << 12) /**< codec bclk consumer & frame provider */ 39 + #define SOF_DAI_FMT_CBP_CFC (3 << 12) /**< codec bclk provider & frame consumer */ 40 + #define SOF_DAI_FMT_CBC_CFC (4 << 12) /**< codec bclk consumer & frame consumer */ 41 + 42 + /* keep old definitions for backwards compatibility */ 43 + #define SOF_DAI_FMT_CBM_CFM SOF_DAI_FMT_CBP_CFP 44 + #define SOF_DAI_FMT_CBS_CFM SOF_DAI_FMT_CBC_CFP 45 + #define SOF_DAI_FMT_CBM_CFS SOF_DAI_FMT_CBP_CFC 46 + #define SOF_DAI_FMT_CBS_CFS SOF_DAI_FMT_CBC_CFC 41 47 42 48 #define SOF_DAI_FMT_FORMAT_MASK 0x000f 43 49 #define SOF_DAI_FMT_CLOCK_MASK 0x00f0 44 50 #define SOF_DAI_FMT_INV_MASK 0x0f00 45 - #define SOF_DAI_FMT_MASTER_MASK 0xf000 51 + #define SOF_DAI_FMT_CLOCK_PROVIDER_MASK 0xf000 46 52 47 53 /** \brief Types of DAI */ 48 54 enum sof_ipc_dai_type {
+14 -8
include/uapi/sound/asoc.h
··· 170 170 #define SND_SOC_TPLG_LNK_FLGBIT_VOICE_WAKEUP (1 << 3) 171 171 172 172 /* DAI topology BCLK parameter 173 - * For the backwards capability, by default codec is bclk master 173 + * For the backwards capability, by default codec is bclk provider 174 174 */ 175 - #define SND_SOC_TPLG_BCLK_CM 0 /* codec is bclk master */ 176 - #define SND_SOC_TPLG_BCLK_CS 1 /* codec is bclk slave */ 175 + #define SND_SOC_TPLG_BCLK_CP 0 /* codec is bclk provider */ 176 + #define SND_SOC_TPLG_BCLK_CC 1 /* codec is bclk consumer */ 177 + /* keep previous definitions for compatibility */ 178 + #define SND_SOC_TPLG_BCLK_CM SND_SOC_TPLG_BCLK_CP 179 + #define SND_SOC_TPLG_BCLK_CS SND_SOC_TPLG_BCLK_CC 177 180 178 181 /* DAI topology FSYNC parameter 179 - * For the backwards capability, by default codec is fsync master 182 + * For the backwards capability, by default codec is fsync provider 180 183 */ 181 - #define SND_SOC_TPLG_FSYNC_CM 0 /* codec is fsync master */ 182 - #define SND_SOC_TPLG_FSYNC_CS 1 /* codec is fsync slave */ 184 + #define SND_SOC_TPLG_FSYNC_CP 0 /* codec is fsync provider */ 185 + #define SND_SOC_TPLG_FSYNC_CC 1 /* codec is fsync consumer */ 186 + /* keep previous definitions for compatibility */ 187 + #define SND_SOC_TPLG_FSYNC_CM SND_SOC_TPLG_FSYNC_CP 188 + #define SND_SOC_TPLG_FSYNC_CS SND_SOC_TPLG_FSYNC_CC 183 189 184 190 /* 185 191 * Block Header. ··· 342 336 __u8 clock_gated; /* SND_SOC_TPLG_DAI_CLK_GATE_ value */ 343 337 __u8 invert_bclk; /* 1 for inverted BCLK, 0 for normal */ 344 338 __u8 invert_fsync; /* 1 for inverted frame clock, 0 for normal */ 345 - __u8 bclk_master; /* SND_SOC_TPLG_BCLK_ value */ 346 - __u8 fsync_master; /* SND_SOC_TPLG_FSYNC_ value */ 339 + __u8 bclk_provider; /* SND_SOC_TPLG_BCLK_ value */ 340 + __u8 fsync_provider; /* SND_SOC_TPLG_FSYNC_ value */ 347 341 __u8 mclk_direction; /* SND_SOC_TPLG_MCLK_ value */ 348 342 __le16 reserved; /* for 32bit alignment */ 349 343 __le32 mclk_rate; /* MCLK or SYSCLK freqency in Hz */
+6 -6
sound/soc/intel/atom/sst-atom-controls.c
··· 827 827 { 828 828 int format; 829 829 830 - format = (fmt & SND_SOC_DAIFMT_MASTER_MASK); 830 + format = (fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK); 831 831 dev_dbg(dai->dev, "Enter:%s, format=%x\n", __func__, format); 832 832 833 833 switch (format) { 834 - case SND_SOC_DAIFMT_CBS_CFS: 835 - return SSP_MODE_MASTER; 836 - case SND_SOC_DAIFMT_CBM_CFM: 837 - return SSP_MODE_SLAVE; 834 + case SND_SOC_DAIFMT_CBC_CFC: 835 + return SSP_MODE_PROVIDER; 836 + case SND_SOC_DAIFMT_CBP_CFP: 837 + return SSP_MODE_CONSUMER; 838 838 default: 839 839 dev_err(dai->dev, "Invalid ssp protocol: %d\n", format); 840 840 } ··· 905 905 .ssp_id = SSP_CODEC, 906 906 .bits_per_slot = 24, 907 907 .slots = 4, 908 - .ssp_mode = SSP_MODE_MASTER, 908 + .ssp_mode = SSP_MODE_PROVIDER, 909 909 .pcm_mode = SSP_PCM_MODE_NETWORK, 910 910 .duplex = SSP_DUPLEX, 911 911 .ssp_protocol = SSP_MODE_PCM,
+2 -2
sound/soc/intel/atom/sst-atom-controls.h
··· 439 439 } __packed; 440 440 441 441 enum sst_ssp_mode { 442 - SSP_MODE_MASTER = 0, 443 - SSP_MODE_SLAVE = 1, 442 + SSP_MODE_PROVIDER = 0, 443 + SSP_MODE_CONSUMER = 1, 444 444 }; 445 445 446 446 enum sst_ssp_pcm_mode {
+11 -11
sound/soc/intel/keembay/kmb_platform.c
··· 358 358 359 359 kmb_i2s_irq_trigger(kmb_i2s, substream->stream, config->chan_nr, true); 360 360 361 - if (kmb_i2s->master) 361 + if (kmb_i2s->clock_provider) 362 362 writel(1, kmb_i2s->i2s_base + CER); 363 363 else 364 364 writel(0, kmb_i2s->i2s_base + CER); ··· 393 393 struct kmb_i2s_info *kmb_i2s = snd_soc_dai_get_drvdata(cpu_dai); 394 394 int ret; 395 395 396 - switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { 397 - case SND_SOC_DAIFMT_CBM_CFM: 398 - kmb_i2s->master = false; 396 + switch (fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) { 397 + case SND_SOC_DAIFMT_CBP_CFP: 398 + kmb_i2s->clock_provider = false; 399 399 ret = 0; 400 400 break; 401 - case SND_SOC_DAIFMT_CBS_CFS: 402 - writel(MASTER_MODE, kmb_i2s->pss_base + I2S_GEN_CFG_0); 401 + case SND_SOC_DAIFMT_CBC_CFC: 402 + writel(CLOCK_PROVIDER_MODE, kmb_i2s->pss_base + I2S_GEN_CFG_0); 403 403 404 404 ret = clk_prepare_enable(kmb_i2s->clk_i2s); 405 405 if (ret < 0) ··· 410 410 if (ret) 411 411 return ret; 412 412 413 - kmb_i2s->master = true; 413 + kmb_i2s->clock_provider = true; 414 414 break; 415 415 default: 416 416 return -EINVAL; ··· 510 510 * Platform is not capable of providing clocks for 511 511 * multi channel audio 512 512 */ 513 - if (kmb_i2s->master) 513 + if (kmb_i2s->clock_provider) 514 514 return -EINVAL; 515 515 516 516 write_val = ((config->chan_nr / 2) << TDM_CHANNEL_CONFIG_BIT) | ··· 524 524 * Platform is only capable of providing clocks need for 525 525 * 2 channel master mode 526 526 */ 527 - if (!(kmb_i2s->master)) 527 + if (!(kmb_i2s->clock_provider)) 528 528 return -EINVAL; 529 529 530 530 write_val = ((config->chan_nr / 2) << TDM_CHANNEL_CONFIG_BIT) | 531 531 (config->data_width << DATA_WIDTH_CONFIG_BIT) | 532 - MASTER_MODE | I2S_OPERATION; 532 + CLOCK_PROVIDER_MODE | I2S_OPERATION; 533 533 534 534 writel(write_val, kmb_i2s->pss_base + I2S_GEN_CFG_0); 535 535 break; ··· 544 544 545 545 config->sample_rate = params_rate(hw_params); 546 546 547 - if (kmb_i2s->master) { 547 + if (kmb_i2s->clock_provider) { 548 548 /* Only 2 ch supported in Master mode */ 549 549 u32 bitclk = config->sample_rate * config->data_width * 2; 550 550
+4 -4
sound/soc/intel/keembay/kmb_platform.h
··· 58 58 #define PSS_CPR_CLK_CLR 0x000 59 59 #define PSS_CPR_AUX_RST_EN 0x070 60 60 61 - #define MASTER_MODE BIT(13) 61 + #define CLOCK_PROVIDER_MODE BIT(13) 62 62 63 63 /* Interrupt Flag */ 64 64 #define TX_INT_FLAG GENMASK(5, 4) ··· 99 99 100 100 #define DWC_I2S_PLAY BIT(0) 101 101 #define DWC_I2S_RECORD BIT(1) 102 - #define DW_I2S_SLAVE BIT(2) 103 - #define DW_I2S_MASTER BIT(3) 102 + #define DW_I2S_CONSUMER BIT(2) 103 + #define DW_I2S_PROVIDER BIT(3) 104 104 105 105 #define I2S_RXDMA 0x01C0 106 106 #define I2S_TXDMA 0x01C8 ··· 130 130 u32 ccr; 131 131 u32 xfer_resolution; 132 132 u32 fifo_th; 133 - bool master; 133 + bool clock_provider; 134 134 135 135 struct i2s_clk_config_data config; 136 136 int (*i2s_clk_cfg)(struct i2s_clk_config_data *config);
+12 -12
sound/soc/soc-topology.c
··· 2017 2017 struct snd_soc_tplg_link_config *cfg) 2018 2018 { 2019 2019 struct snd_soc_tplg_hw_config *hw_config; 2020 - unsigned char bclk_master, fsync_master; 2020 + unsigned char bclk_provider, fsync_provider; 2021 2021 unsigned char invert_bclk, invert_fsync; 2022 2022 int i; 2023 2023 ··· 2057 2057 link->dai_fmt |= SND_SOC_DAIFMT_IB_IF; 2058 2058 2059 2059 /* clock masters */ 2060 - bclk_master = (hw_config->bclk_master == 2061 - SND_SOC_TPLG_BCLK_CM); 2062 - fsync_master = (hw_config->fsync_master == 2063 - SND_SOC_TPLG_FSYNC_CM); 2064 - if (bclk_master && fsync_master) 2065 - link->dai_fmt |= SND_SOC_DAIFMT_CBM_CFM; 2066 - else if (!bclk_master && fsync_master) 2067 - link->dai_fmt |= SND_SOC_DAIFMT_CBS_CFM; 2068 - else if (bclk_master && !fsync_master) 2069 - link->dai_fmt |= SND_SOC_DAIFMT_CBM_CFS; 2060 + bclk_provider = (hw_config->bclk_provider == 2061 + SND_SOC_TPLG_BCLK_CP); 2062 + fsync_provider = (hw_config->fsync_provider == 2063 + SND_SOC_TPLG_FSYNC_CP); 2064 + if (bclk_provider && fsync_provider) 2065 + link->dai_fmt |= SND_SOC_DAIFMT_CBP_CFP; 2066 + else if (!bclk_provider && fsync_provider) 2067 + link->dai_fmt |= SND_SOC_DAIFMT_CBC_CFP; 2068 + else if (bclk_provider && !fsync_provider) 2069 + link->dai_fmt |= SND_SOC_DAIFMT_CBP_CFC; 2070 2070 else 2071 - link->dai_fmt |= SND_SOC_DAIFMT_CBS_CFS; 2071 + link->dai_fmt |= SND_SOC_DAIFMT_CBC_CFC; 2072 2072 } 2073 2073 } 2074 2074
+9 -9
sound/soc/sof/topology.c
··· 2777 2777 struct sof_ipc_dai_config *config) 2778 2778 { 2779 2779 /* clock directions wrt codec */ 2780 - if (hw_config->bclk_master == SND_SOC_TPLG_BCLK_CM) { 2781 - /* codec is bclk master */ 2782 - if (hw_config->fsync_master == SND_SOC_TPLG_FSYNC_CM) 2783 - config->format |= SOF_DAI_FMT_CBM_CFM; 2780 + if (hw_config->bclk_provider == SND_SOC_TPLG_BCLK_CP) { 2781 + /* codec is bclk provider */ 2782 + if (hw_config->fsync_provider == SND_SOC_TPLG_FSYNC_CP) 2783 + config->format |= SOF_DAI_FMT_CBP_CFP; 2784 2784 else 2785 - config->format |= SOF_DAI_FMT_CBM_CFS; 2785 + config->format |= SOF_DAI_FMT_CBP_CFC; 2786 2786 } else { 2787 - /* codec is bclk slave */ 2788 - if (hw_config->fsync_master == SND_SOC_TPLG_FSYNC_CM) 2789 - config->format |= SOF_DAI_FMT_CBS_CFM; 2787 + /* codec is bclk consumer */ 2788 + if (hw_config->fsync_provider == SND_SOC_TPLG_FSYNC_CP) 2789 + config->format |= SOF_DAI_FMT_CBC_CFP; 2790 2790 else 2791 - config->format |= SOF_DAI_FMT_CBS_CFS; 2791 + config->format |= SOF_DAI_FMT_CBC_CFC; 2792 2792 } 2793 2793 2794 2794 /* inverted clocks ? */