linux/sound/soc
Matthias Reichl 9448572d98
ASoC: bcm2835: Add support for TDM modes
bcm2835 supports arbitrary positioning of channel data within
a frame and thus is capable of supporting TDM modes. Since
the driver is limited to 2-channel operations only TDM setups
with exactly 2 active slots are supported.

Logical TDM slot numbering follows the usual convention:

For I2S-like modes, with a 50% duty-cycle frame clock,
slots 0, 2, ... are transmitted in the first half of a frame,
slots 1, 3, ... are transmitted in the second half.

For DSP modes slot numbering is ascending: 0, 1, 2, 3, ...

Channel position calculation has been refactored to use
TDM info and moved out of hw_params.

set_tdm_slot, set_bclk_ratio and hw_params now check more
strictly if the configuration is valid. Illegal configurations
like odd number of slots in I2S mode, data lengths exceeding
slot width or frame sizes larger than the hardware limit of
1024 are rejected. Also hw_params now properly checks for
errors from clk_set_rate.

Allowed PCM formats are already guarded by stream constraints,
thus the formats check in hw_params has been removed and
data_length is now retrieved via params_width().

Also standard functions like snd_soc_params_to_bclk are now
being used instead of manual calculations to make the code
more readable.

Special care has been taken to ensure that set_bclk_ratio works
as before. The bclk ratio is mapped to a 2-channel TDM config
with a slot width of half the ratio. In order to support odd ratios,
which can't be expressed via a TDM config, the ratio (frame length)
is stored and used by hw_params.

Signed-off-by: Matthias Reichl <hias@horus.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
2017-11-10 21:24:30 +00:00
..
adi
amd scripts/spelling.txt: add "disble(d)" pattern and fix typo instances 2017-03-09 17:01:09 -08:00
atmel The diff is dominated by the Allwinner A10/A20 SoCs getting converted to 2017-09-13 11:04:14 -07:00
au1x Merge remote-tracking branches 'asoc/topic/omap', 'asoc/topic/psc-ac97' and 'asoc/topic/pxa' into asoc-next 2017-09-01 12:12:52 +01:00
bcm ASoC: bcm2835: Add support for TDM modes 2017-11-10 21:24:30 +00:00
blackfin ASoC: blackfin: constify snd_soc_dai_ops structures 2017-08-15 18:10:53 +01:00
cirrus ASoC: cirrus: make snd_soc_ops const 2017-08-17 18:07:47 +01:00
codecs dmi: Mark all struct dmi_system_id instances const 2017-09-14 11:59:30 +02:00
davinci ASoC: davinci-mcasp: check memory allocation failure 2017-08-27 13:30:29 +01:00
dwc ASoC: dwc: Delete an error message for a failed memory allocation in dw_i2s_probe() 2017-08-14 17:28:51 +01:00
fsl Merge remote-tracking branches 'asoc/topic/hisi', 'asoc/topic/img', 'asoc/topic/jack' and 'asoc/topic/jz4740' into asoc-next 2017-09-01 12:12:41 +01:00
generic Merge remote-tracking branches 'asoc/topic/simple', 'asoc/topic/spear', 'asoc/topic/sta32x', 'asoc/topic/stm32' and 'asoc/topic/sunxi' into asoc-next 2017-09-01 12:13:06 +01:00
hisilicon ASoC: hisilicon: constify snd_soc_dai_ops structure 2017-07-17 16:16:58 +01:00
img ASoC: img: explicitly request exclusive reset control 2017-07-19 17:06:54 +01:00
intel Merge remote-tracking branches 'asoc/topic/hisi', 'asoc/topic/img', 'asoc/topic/jack' and 'asoc/topic/jz4740' into asoc-next 2017-09-01 12:12:41 +01:00
jz4740 ASoC: jz4740: Handle return value of clk_prepare_enable. 2017-07-26 13:01:18 +01:00
kirkwood ASoC: kirkwood: make snd_pcm_hardware const 2017-08-17 17:57:09 +01:00
mediatek Merge remote-tracking branches 'asoc/topic/mtk', 'asoc/topic/mxs', 'asoc/topic/nau8825', 'asoc/topic/nuc900' and 'asoc/topic/of-graph' into asoc-next 2017-09-01 12:12:48 +01:00
mxs Merge remote-tracking branches 'asoc/topic/mtk', 'asoc/topic/mxs', 'asoc/topic/nau8825', 'asoc/topic/nuc900' and 'asoc/topic/of-graph' into asoc-next 2017-09-01 12:12:48 +01:00
nuc900 ASoC: nuc900: constify snd_pcm_ops structures 2017-08-14 17:23:23 +01:00
omap sound updates for 4.14-rc1 2017-09-07 12:44:53 -07:00
pxa Merge remote-tracking branches 'asoc/topic/omap', 'asoc/topic/psc-ac97' and 'asoc/topic/pxa' into asoc-next 2017-09-01 12:12:52 +01:00
qcom ASoC: qcom: apq8016-sbc: Add support to Headset JACK 2017-08-21 19:33:03 +01:00
rockchip ASoC: rockchip: constify snd_soc_ops structures 2017-08-30 16:12:53 +01:00
samsung Merge remote-tracking branches 'asoc/topic/rt5665', 'asoc/topic/rt5670', 'asoc/topic/rt5677' and 'asoc/topic/samsung' into asoc-next 2017-09-01 12:13:03 +01:00
sh Merge remote-tracking branches 'asoc/topic/dwc', 'asoc/topic/es8316', 'asoc/topic/fsi', 'asoc/topic/fsl' and 'asoc/topic/hdmi' into asoc-next 2017-09-01 12:12:36 +01:00
sirf ASoC: sirf: Added blank line after declarations 2017-03-07 14:31:51 +01:00
spear ASoC: spear: constify snd_soc_dai_ops structures 2017-08-15 18:11:42 +01:00
sti ASoC: sti: Fix error handling if of_clk_get() fails 2017-04-30 21:30:52 +09:00
stm ASoC: stm32: explicitly request exclusive reset control 2017-07-19 17:07:04 +01:00
sunxi ASoC: sun4i-i2s: Add support for H3 2017-08-21 17:16:14 +01:00
tegra Merge remote-tracking branches 'asoc/topic/tas2552', 'asoc/topic/tas5720', 'asoc/topic/tegra', 'asoc/topic/tlv320aic32x4' and 'asoc/topic/tlv320aic3x' into asoc-next 2017-09-01 12:13:10 +01:00
txx9 ASoC: txx9: constify snd_pcm_ops structures 2017-08-14 17:21:25 +01:00
ux500 Merge remote-tracking branches 'asoc/topic/twl6040', 'asoc/topic/txx9', 'asoc/topic/utils', 'asoc/topic/ux500' and 'asoc/topic/wm8523' into asoc-next 2017-09-01 12:13:15 +01:00
xtensa
zte ASoC: zte: spdif: constify snd_soc_dai_ops structure 2017-07-17 16:18:15 +01:00
Kconfig Merge remote-tracking branches 'asoc/topic/sta529', 'asoc/topic/sti', 'asoc/topic/stm', 'asoc/topic/sunxi' and 'asoc/topic/tas2552' into asoc-next 2017-04-30 22:16:31 +09:00
Makefile Merge remote-tracking branches 'asoc/topic/sta529', 'asoc/topic/sti', 'asoc/topic/stm', 'asoc/topic/sunxi' and 'asoc/topic/tas2552' into asoc-next 2017-04-30 22:16:31 +09:00
soc-ac97.c ASoC: Fixup some small kernel-doc typos 2017-01-12 17:23:01 +00:00
soc-cache.c
soc-compress.c ASoC: compress: Set reasonable compress id string 2017-08-16 15:52:58 +01:00
soc-core.c ASoC: Updates for v4.14 2017-09-04 14:50:49 +02:00
soc-dapm.c ASoC: dapm: fix some pointer error handling 2017-01-20 13:11:02 +00:00
soc-devres.c
soc-generic-dmaengine-pcm.c ASoC: Revert "Drop SND_DMAENGINE_PCM_FLAG_CUSTOM_CHANNEL_NAME flag" 2017-01-23 18:16:33 +00:00
soc-io.c
soc-jack.c Merge remote-tracking branches 'asoc/topic/hisi', 'asoc/topic/img', 'asoc/topic/jack' and 'asoc/topic/jz4740' into asoc-next 2017-09-01 12:12:41 +01:00
soc-ops.c ASoC: Fixup some small kernel-doc typos 2017-01-12 17:23:01 +00:00
soc-pcm.c Merge remote-tracking branch 'asoc/topic/core' into asoc-next 2017-09-01 12:12:18 +01:00
soc-topology.c Merge remote-tracking branches 'asoc/topic/stm32', 'asoc/topic/sunxi', 'asoc/topic/tlv320dac31xx', 'asoc/topic/topology' and 'asoc/topic/wm-adsp' into asoc-next 2017-07-03 16:15:20 +01:00
soc-utils.c ASoC: soc-utils: make snd_soc_platform_driver const 2017-08-14 17:21:41 +01:00