Detailed SoC changes v1.0.24 v1.0.25: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
m (1 revision(s)) |
(No difference)
|
Revision as of 09:14, 25 January 2012
Detailed SoC changelog between 1.0.17 and 1.0.25 releases
alsa-driver
SoC PXA2xx Core
- - ASoC: Fix dependency for SND_SOC_RAUMFELD and SND_PXA2XX_SOC_HX4700
- SND_SOC_RAUMFELD selects SND_SOC_CS4270 which needs CONFIG_I2C,
- and also selects SND_SOC_AK4104 which needs SPI_MASTER.
- Thus make SND_SOC_RAUMFELD depend on I2C && SPI_MASTER.
- Add depend on SPI_MASTER to fix below build error if CONFIG_SPI_MASTER
- is not selected.
- LD .tmp_vmlinux1
- sound/built-in.o: In function `ak4104_spi_write':
- last.c:(.text+0x290cc): undefined reference to `spi_sync'
- sound/built-in.o: In function `ak4104_probe':
- last.c:(.text+0x292a0): undefined reference to `spi_write_then_read'
- sound/built-in.o: In function `ak4104_spi_probe':
- last.c:(.text+0x29398): undefined reference to `spi_setup'
- sound/built-in.o: In function `ak4104_init':
- last.c:(.init.text+0x4ec): undefined reference to `spi_register_driver'
- make: *** [.tmp_vmlinux1] Error 1
- Add depend on I2C to fix below build error if CONFIG_I2C is not selected:
- CC sound/soc/codecs/cs4270.o
- sound/soc/codecs/cs4270.c: In function 'cs4270_i2c_probe':
- sound/soc/codecs/cs4270.c:657: error: implicit declaration of function 'i2c_smbus_read_byte_data'
- sound/soc/codecs/cs4270.c: In function 'cs4270_init':
- sound/soc/codecs/cs4270.c:730: error: implicit declaration of function 'i2c_add_driver'
- sound/soc/codecs/cs4270.c: In function 'cs4270_exit':
- sound/soc/codecs/cs4270.c:736: error: implicit declaration of function 'i2c_del_driver'
- make[3]: *** [sound/soc/codecs/cs4270.o] Error 1
- make[2]: *** [sound/soc/codecs] Error 2
- make[1]: *** [sound/soc] Error 2
- make: *** [sound] Error 2
- SND_PXA2XX_SOC_HX4700 selects SND_SOC_AK4641 which needs CONFIG_I2C.
- Thus make SND_PXA2XX_SOC_HX4700 depend on I2C.
- Add depend on I2C to fix below build error if CONFIG_I2C is not selected:
- CC sound/soc/codecs/ak4641.o
- sound/soc/codecs/ak4641.c: In function 'ak4641_modinit':
- sound/soc/codecs/ak4641.c:646: error: implicit declaration of function 'i2c_add_driver'
- sound/soc/codecs/ak4641.c: In function 'ak4641_exit':
- sound/soc/codecs/ak4641.c:656: error: implicit declaration of function 'i2c_del_driver'
- make[3]: *** [sound/soc/codecs/ak4641.o] Error 1
- make[2]: *** [sound/soc/codecs] Error 2
- make[1]: *** [sound/soc] Error 2
- make: *** [sound] Error 2
- - ASoC: Make SND_SOC_SAARB and SND_SOC_TAVOREVB3 select MFD_88PM860X
- In saarb_pm860x_init() and evb3_pm860x_init(), we call
- pm860x_hs_jack_detect() and pm860x_mic_jack_detect() which in turn
- calls pm860x_set_bits().
- Thus make SND_SOC_SAARB and SND_SOC_TAVOREVB3 select MFD_88PM860X.
- This patch fixes below build error if CONFIG_MFD_88PM860X is not configured.
- LD .tmp_vmlinux1
- sound/built-in.o: In function `pm860x_write_reg_cache':
- last.c:(.text+0x29e9c): undefined reference to `pm860x_reg_write'
- sound/built-in.o: In function `pm860x_set_bias_level':
- last.c:(.text+0x29ecc): undefined reference to `pm860x_set_bits'
- last.c:(.text+0x29f00): undefined reference to `pm860x_reg_write'
- last.c:(.text+0x29f18): undefined reference to `pm860x_reg_write'
- sound/built-in.o: In function `pm860x_read_reg_cache':
- last.c:(.text+0x29f40): undefined reference to `pm860x_reg_read'
- sound/built-in.o: In function `pm860x_probe':
- last.c:(.text+0x2a034): undefined reference to `pm860x_bulk_read'
- sound/built-in.o: In function `pm860x_codec_handler':
- last.c:(.text+0x2a344): undefined reference to `pm860x_reg_read'
- last.c:(.text+0x2a354): undefined reference to `pm860x_reg_read'
- sound/built-in.o: In function `pm860x_mic_jack_detect':
- last.c:(.text+0x2a450): undefined reference to `pm860x_set_bits'
- sound/built-in.o: In function `pm860x_hs_jack_detect':
- last.c:(.text+0x2a4d0): undefined reference to `pm860x_set_bits'
- last.c:(.text+0x2a4f8): undefined reference to `pm860x_set_bits'
- last.c:(.text+0x2a510): undefined reference to `pm860x_set_bits'
- make: *** [.tmp_vmlinux1] Error 1
- - ASoC: pxa2xx-pcm: remove unused variable 'dai'
- Remove unused variable 'dai' to eliminate below warning.
- CC sound/soc/pxa/pxa2xx-pcm.o
- sound/soc/pxa/pxa2xx-pcm.c: In function 'pxa2xx_soc_pcm_new':
- sound/soc/pxa/pxa2xx-pcm.c:91: warning: unused variable 'dai'
- - ASoC: pxa-ssp: Correct check for stream presence
- Don't rely on the codec's channels_min information to decide wheter or
- not allocate a substream's DMA buffer. Rather check if the substream
- itself was allocated previously.
- - ASoC: add iPAQ hx4700 machine driver
- AK4641 connected via I2S and I2C, jack detection via GPIO.
- - ASoC: PXA: Fix oops in __pxa2xx_pcm_prepare
- pxa2xx_pcm_hw_free frees dma channel and sets prtd->dma_ch to -1,
- but does not set prtd->params to NULL, so if pxa2xx_pcm_hw_params will
- be called immediately, it leaves prtd->dma_ch initialized with -1,
- and it results in oops in __pxa2xx_pcm_prepare. This bug is triggered
- via SDL.
- This patch adds check for prtd->dma_ch to __pxa2xx_pcm_prepare and
- cleans prtd->params, so now it works properly.
SoC Audio for Freecale i.MX1x i.MX2x CPUs
- - ASoC: Fix DMA channel leak in imx-pcm-dma-mx2 driver.
- "snd_imx_pcm_hw_params" callback can be called
- several times by the user (i.e. OSS emulation)
- leading to a DMA channel leak.
- - ASoC: imx: Add .owner to struct snd_soc_card
- Add missing .owner of struct snd_soc_card. This prevents the module from being
- removed from underneath its users.
- Reported-by: Lothar Waßmann <LW@KARO-electronics.de>
- - ASoC: Add missed MODULE_LICENSE("GPL") for imx-pcm-fiq
- This driver can be built as module and the file header indicates that
- the driver is published under the GPL.
- Thus add MODULE_LICENSE("GPL") for it.
- - ASoC: Convert imx directory to module_platform_driver
- Factor out some boilerplate code.
- - ASoC: Make SND_SOC_MX27VIS_AIC32X4 depend on I2C
- SND_SOC_MX27VIS_AIC32X4 selects SND_SOC_TLV320AIC32X4,
- but SND_SOC_TLV320AIC32X4 needs CONFIG_I2C.
- So we need to make SND_SOC_MX27VIS_AIC32X4 depend on I2C.
- otherwise I got below build error if CONFIG_I2C is not selected.
- CC sound/soc/codecs/tlv320aic32x4.o
- sound/soc/codecs/tlv320aic32x4.c: In function 'aic32x4_read':
- sound/soc/codecs/tlv320aic32x4.c:323: error: implicit declaration of function 'i2c_smbus_read_byte_data'
- sound/soc/codecs/tlv320aic32x4.c: In function 'aic32x4_probe':
- sound/soc/codecs/tlv320aic32x4.c:641: error: 'i2c_master_send' undeclared (first use in this function)
- sound/soc/codecs/tlv320aic32x4.c:641: error: (Each undeclared identifier is reported only once
- sound/soc/codecs/tlv320aic32x4.c:641: error: for each function it appears in.)
- sound/soc/codecs/tlv320aic32x4.c: In function 'aic32x4_modinit':
- sound/soc/codecs/tlv320aic32x4.c:763: error: implicit declaration of function 'i2c_add_driver'
- sound/soc/codecs/tlv320aic32x4.c: In function 'aic32x4_exit':
- sound/soc/codecs/tlv320aic32x4.c:774: error: implicit declaration of function 'i2c_del_driver'
- make[3]: *** [sound/soc/codecs/tlv320aic32x4.o] Error 1
- make[2]: *** [sound/soc/codecs] Error 2
- make[1]: *** [sound/soc] Error 2
- make: *** [sound] Error 2
- - ASoC: imx: Remove unused variable 'dai'
- - ASoC: imx: Fix build warning of unused 'card' variable
- Fixes the following warning:
- CC sound/soc/imx/imx-pcm-fiq.o
- sound/soc/imx/imx-pcm-fiq.c: In function 'imx_pcm_fiq_new':
- sound/soc/imx/imx-pcm-fiq.c:243: warning: unused variable 'card'
- CC sound/soc/imx/imx-pcm-dma-mx2.o
- - ASoC: Remove unused function declaration in imx-ssi.h
- These functions are removed in commit f0fba2ad
- "ASoC: multi-component - ASoC Multi-Component Support".
- Let's remove the leftover function declaration in header file.
- - ASoC: imx: eukrea_tlv320 needs i2c
- Add a missing dependency that is required for random configurations.
- - ASoC: imx: use more robust checking of available streams
- Replace the channels_min check with a check for the relevant substream
- being present. Suggested here [1] when mxs implemented the
- audio-support.
- [1] http://www.spinics.net/lists/arm-kernel/msg133010.html
- - ASoC: imx-ssi: use dma_writecombine consistently
- If the channel is allocated as writecombine, then mmaping it should also
- use writecombine. Also, add a proper device for the call. Ported from a
- similar fix for mach-mxs.
- - ARM i.MX dma: Fix burstsize settings
- dmaengine expects the maxburst parameter in words, not bytes.
- The imxdma driver and its users do this wrong. Fix this.
- As a side note the imx-pcm-dma-mx2 driver was 'fixed' to work
- with imx-dma. This broke the driver with imx-sdma support which
- correctly takes the maxburst parameter in words. This patch
- puts the sdma based sound back to work.
- - ASoC: imx: add missing module informations
- - add some modules aliases
- - add module license to avoid tainted kernel when loading the imx-pcm-audio
- driver
- - ASoC: imx: Remove unused Kconfig SND_MXC_SOC_SSI entry
- SND_MXC_SOC_SSI looks to be unused, so kill it.
- - ASoC: imx: remove superfluous code in imx-ssi.c
- Checking if IMX_SSI_DMA is set and then set it again is useless.
- - ASoC: imx: fix burstsize for DMA
- SSI counts in words, the DMA engine in bytes. (Wrong) factor got removed
- in bf974a0 (ASoC i.MX: switch to new DMA api).
- - ASoC: imx: set watermarks for mx2-dma
- They got accidently removed by f0fba2a (ASoC: multi-component - ASoC
- Multi-Component Support). Reintroduce them and get rid of the
- superfluous defines because the fiq-driver has its own hardcoded values.
- - ASoC: Add machine driver for Visstrim_M10 board.
- Visstrim_M10 boards have an external tlcv320aic3205 codec
- attached to SSI1. This driver glues together both interfaces.
- External amplifier is not supported in this first version.
- - ASoC: Fix burstsize and DSP_B format problems in imx-ssi.
- When choosing IMX_DMA flag, burtsizes are set to its default
- value (0) which leads to driver malfunction. Change them to 4.
- DSP_B interface needs additional flag to match DSP_B formats
- as described in several codecs as wm8741 and aic3205.
- - ASoC: eukrea-tlv320: add MBIMXSD51 support
- - eukrea-tlv320: fix platform_name
- commit f0fba2ad1b6b53d5360125c41953b7afcd6deff0 included a mistake
- on the name of the platform in the snd_soc_dai_link structure.
SoC Audio for TXx9
- - ASoC: txx9: Add .owner to struct snd_soc_card
- Add missing .owner of struct snd_soc_card. This prevents the module from being
- removed from underneath its users.
- Reported-by: Lothar Waßmann <LW@KARO-electronics.de>
- - ASoC: Convert txx9 directory to module_platform_driver
- Factor out some boilerplate code.
- - ASoC: txx9: Add __exit_p at necessary place
- We have __exit annotation for txx9aclc_generic_remove(),
- thus add __devexit_p to wrap it.
- - ASoC: Fix txx9aclc.c build
- 552d1ef6b5a98d7b95959d5b139071e3c90cebf1 [ASoC: core - Optimise and refactor
- pcm_new() to pass only rtd] breaks compilation of txx9aclc.c:
- CC [M] sound/soc/txx9/txx9aclc.o
- /home/ralf/src/linux/linux-mips/sound/soc/txx9/txx9aclc.c: In function 'txx9aclc_pcm_new':
- /home/ralf/src/linux/linux-mips/sound/soc/txx9/txx9aclc.c:318:3: error: 'card' undeclared (first use in this function)
- /home/ralf/src/linux/linux-mips/sound/soc/txx9/txx9aclc.c:318:3: note: each undeclared identifier is reported only once for each function it appears in
- make[5]: *** [sound/soc/txx9/txx9aclc.o] Error 1
- Fixed by providing a definition for card.
SoC Audio for the Atmel AT32/AT91 System-on-Chip
- - ASoC: Fix recursive dependency due to select ATMEL_SSC in SND_ATMEL_SOC_SSC
- commit 739be96 "ASoC: Fix build dependency for SND_ATMEL_SOC_SSC"
- introduces below build warnings:
- drivers/misc/Kconfig:212:error: recursive dependency detected!
- drivers/misc/Kconfig:212: symbol ATMEL_SSC is selected by SND_ATMEL_SOC_SSC
- sound/soc/atmel/Kconfig:9: symbol SND_ATMEL_SOC_SSC is selected by SND_AT91_SOC_SAM9G20_WM8731
- sound/soc/atmel/Kconfig:18: symbol SND_AT91_SOC_SAM9G20_WM8731 depends on ATMEL_SSC
- SND_ATMEL_SOC_SSC needs ATMEL_SSC to pass compilation.
- This patch remove the "select ATMEL_SSC" from SND_ATMEL_SOC_SSC to avoid above
- warnings. And then ensures all the machine drivers that select SND_ATMEL_SOC_SSC
- need to depend on ATMEL_SSC.
- Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
- - ASoC: check for substream not channels_min in pcm engines
- This is a follow up on 53dea36c70c1857 which fixes the other affected
- pcm engines.
- Description from 53dea36c70c1857:
- Don't rely on the codec's channels_min information to decide wheter or
- not allocate a substream's DMA buffer. Rather check if the substream
- itself was allocated previously.
- Without this patch I was seeing null-pointer dereferenc in atmel-pcm.
- - ASoC: Fix build dependency for SND_ATMEL_SOC_SSC
- Make SND_ATMEL_SOC_SSC select ATMEL_SSC to fix below build errors:
- LD .tmp_vmlinux1
- sound/built-in.o: In function `atmel_ssc_remove':
- sound/soc/atmel/atmel_ssc_dai.c:713: undefined reference to `ssc_free'
- sound/built-in.o: In function `atmel_ssc_probe':
- sound/soc/atmel/atmel_ssc_dai.c:700: undefined reference to `ssc_request'
- sound/built-in.o: In function `atmel_ssc_set_audio':
- sound/soc/atmel/atmel_ssc_dai.c:845: undefined reference to `ssc_request'
- sound/soc/atmel/atmel_ssc_dai.c:851: undefined reference to `ssc_free'
- make: *** [.tmp_vmlinux1] Error 1
- - ASoC: atmel: Add .owner to struct snd_soc_card
- Missed .owner of struct snd_soc_card will prevent the module from being
- removed from underneath its users.
- Reported-by: Lothar Waßmann <LW@KARO-electronics.de>
- - ASoC: Convert atmel directory to module_platform_driver
- Factor out some boilerplate code.
- - ASoC: Constify snd_soc_dai_ops structs
- Commit 1ee46ebd("ASoC: Make the DAI ops constant in the DAI structure")
- introduced the possibility to have constant DAI ops structures, yet this is
- barley used in both existing drivers and also new drivers being submitted,
- although none of them modifies its DAI ops structure. The later is not
- surprising since existing drivers are often used as templates for new drivers.
- So this patch just constifies all existing snd_soc_dai_ops structs to eliminate
- the issue altogether.
- The patch was generated with the following coccinelle semantic patch:
- // <smpl>
- @@
- identifier ops;
- @@
- -struct snd_soc_dai_ops ops =
- +const struct snd_soc_dai_ops ops =
- { ... };
- // </smpl>
- - ASoC: drop support for PlayPaq with WM8510
- SoC Audio support for PlayPaq with WM8510 got added in commit 9aaca9683b
- ("[ALSA] Revised AT32 ASoC Patch"). That support depends on
- BOARD_PLAYPAQ. That Kconfig symbol didn't exist when that support got
- added in v2.6.27. It still doesn't. It has never been possible to even
- build this driver. Drop it.
- - ASoC: Remove redundant snd_soc_dapm_sync() calls from machine drivers
- The core will sync DAPM as part of the card initialization, there is no
- need for machine drivers to do so during their setup.
- OMAP drivers are omitted as I know Peter already has patches for them.
- - ASoC: playpaq_wm8510: Return proper error if clk_get fails
- Return proper error instead of 0 if clk_get fails.
- - sound: sound/atmel_ssc_dai: add a missing space to an error message
- - ASoC: core - Optimise and refactor pcm_new() to pass only rtd
- Currently pcm_new() passes in 3 arguments :- card, pcm and DAI.
- Refactor this to only pass in 1 argument (i.e. the rtd) since struct rtd contains
- card, pcm and DAI along with other members too that are useful too.
- - ASoC: Add context parameter to card DAPM callbacks
- The card callback will get called for each DAPM context in the card so it
- can be useful for it to know which device is currently undergoing a
- transition.
- - ASoC: atmel_ssc: Don't try to free ssc if request failed
- We should only call ssc_free() when ssc_request() succeeds or bad
- things will happen.
- - ASoC: atmel_ssc_dai: fix ssc error path
- We do not have to free a resource that is not allocated yet.
- - ASoC: trivial: typo in atmel_pcm_dma_params strucutre comment
- - ASoC: trivial: typo in debug comment
- - ASoC: sam9g20_wm8731: use the proper SYSCKL value
- at91sam9g20 is providing master clock to wm8731: not using a crystal but an
- external MCLK. We can avoid conflict and save power using WM8731_SYSCLK_MCLK as
- we do not need oscillator to be powered.
- - ASoC: Remove -codec from WM8731 driver name
SoC Audio for the Samsung chips
- - ASoC: Fix idma build after update for channel count check
- - ASoC: Add trivial pm_runtime usage to Samsung DAI drivers
- Currently this won't actually do anything but using this will help the
- core SoC code track when the system is idle.
- - ASoC: samsung: Add .owner to struct snd_soc_card
- Missed .owner of struct snd_soc_card will prevent the module from being
- removed from underneath its users.
- Reported-by: Lothar Waßmann <LW@KARO-electronics.de>
- - ASoC: Remove export of s3c_pcm_dai
- We don't need to export s3c_pcm_dai after multi-component patch.
- Thus remove export of s3c_pcm_dai and make it static.
- - ASoC: Complete initialisation before registering Samsung PCM DAI
- Otherwise there's a race where the DAI might get used without everything
- having been set up.
- - ASoC: Staticise asoc_idma_platform
- - ASoC: Raise Speyside audio system clock rate to 512fs
- To support advanced system functionality for additional components; the
- actively used clocks will remain the same for current components. Also
- factor the rate out to a single #define while we're at it.
- - ASoC: Fix a typo in s3c24xx_simtec_tlv320aic23 driver
- Fix a typo introduced by commit e00c3f55
- "ASoC: Convert Samsung directory to module_platform_driver".
- This fixes the build error:
- CC sound/soc/samsung/s3c24xx_simtec_tlv320aic23.o
- sound/soc/samsung/s3c24xx_simtec_tlv320aic23.c: In function 'simtec_audio_tlv320aic32_driver_init':
- sound/soc/samsung/s3c24xx_simtec_tlv320aic23.c:105: error: 'simtec_audio_tlv320aic32_driver' undeclared (first use in this function)
- sound/soc/samsung/s3c24xx_simtec_tlv320aic23.c:105: error: (Each undeclared identifier is reported only once
- sound/soc/samsung/s3c24xx_simtec_tlv320aic23.c:105: error: for each function it appears in.)
- sound/soc/samsung/s3c24xx_simtec_tlv320aic23.c: In function 'simtec_audio_tlv320aic32_driver_exit':
- sound/soc/samsung/s3c24xx_simtec_tlv320aic23.c:105: error: 'simtec_audio_tlv320aic32_driver' undeclared (first use in this function)
- make[3]: *** [sound/soc/samsung/s3c24xx_simtec_tlv320aic23.o] Error 1
- make[2]: *** [sound/soc/samsung] Error 2
- make[1]: *** [sound/soc] Error 2
- make: *** [sound] Error 2
- I think we had better naming it with *driver, thus I change
- it to simtec_audio_tlv320aic23_driver.
- - ASoC: Convert Samsung I2S driver to devm_kzalloc()
- - ASoC: Make SND_SOC_LITTLEMILL select MFD_WM8994
- SND_SOC_LITTLEMILL selects SND_SOC_WM8994, but SND_SOC_WM8994 needs MFD_WM8994.
- Thus we need to select MFD_WM8994 to fix below build error:
- LD .tmp_vmlinux1
- sound/built-in.o: In function `wm8994_write':
- sound/soc/codecs/wm8994.c:201: undefined reference to `wm8994_reg_write'
- sound/built-in.o: In function `wm8994_read':
- sound/soc/codecs/wm8994.c:222: undefined reference to `wm8994_reg_read'
- sound/built-in.o: In function `wm8994_resume':
- sound/soc/codecs/wm8994.c:2847: undefined reference to `wm8994_reg_read'
- sound/built-in.o: In function `wm8994_codec_probe':
- sound/soc/codecs/wm8994.c:3501: undefined reference to `wm8994_reg_read'
- sound/soc/codecs/wm8994.c:3660: undefined reference to `wm8994_reg_read'
- sound/soc/codecs/wm8994.c:3672: undefined reference to `wm8994_reg_read'
- sound/built-in.o: In function `wm8958_dsp2_fw':
- sound/soc/codecs/wm8958-dsp2.c:154: undefined reference to `wm8994_bulk_write'
- make: *** [.tmp_vmlinux1] Error 1
- - ASoC: Map microphones on Littlemill
- Littlemill has one analogue microphone on the board (connected to IN1LN)
- and an array of four DMICs connected to both DMICDAT lines. The biases
- can be selected by jumpers but pick the default jumper fit.
- - ASoC: Add WM8958 based headset detection on Littlemill
- The board supports CODECs that won't work with this but the CODEC driver
- will check to see if it's running on the right chip for us.
- - ASoC: Rename Speyside WM8962 to Tobermory
- All the other machine drivers for non-default configurations are named
- after the relevant audio module so do so for Tobermory also.
- - ASoC: Fix __iomem annotation for IDMA registers
- We always store the register address as __iomem but pass it around as a
- plain void * which upsets sparse.
- - ASoC: Convert smdk_wm8994pcm to use module_platform_driver()
- Use the module_platform_driver() macro which makes
- the code smaller and a bit simpler.
- - ASoC: Add basic 1277-EV1 Littlemill audio driver
- The Littlemill audio card supports a number of pluggable miniboards,
- normally for the WM8994 family of devices. As all these devices look
- mostly the same from an external configuration point of view and are
- runtime enumerable we can write a standard machine driver which will
- work out of the box with any of them. Start doing that with the bare
- bones of a driver, only supporting AIF1.
- Future patches will flesh this out to be more fully featured.
- - ASoC: Convert Samsung directory to module_platform_driver
- Saves some boilerplate code.
- - ASoC: Add fully_routed flag to Speyside machines
- - ASoC: Add Lowland machine driver
- The Lowland platform is based on the Cragganmore system like Speyside but
- uses the WM5100 audio CODEC.
- - ASoC: Include linux/module.h for smdk2443_wm9710
- Include linux/module.h to fix below build error:
- CC sound/soc/samsung/smdk2443_wm9710.o
- sound/soc/samsung/smdk2443_wm9710.c:64: error: expected declaration specifiers or '...' before string constant
- sound/soc/samsung/smdk2443_wm9710.c:64: warning: data definition has no type or storage class
- sound/soc/samsung/smdk2443_wm9710.c:64: warning: type defaults to 'int' in declaration of 'MODULE_AUTHOR'
- sound/soc/samsung/smdk2443_wm9710.c:64: warning: function declaration isn't a prototype
- sound/soc/samsung/smdk2443_wm9710.c:65: error: expected declaration specifiers or '...' before string constant
- sound/soc/samsung/smdk2443_wm9710.c:65: warning: data definition has no type or storage class
- sound/soc/samsung/smdk2443_wm9710.c:65: warning: type defaults to 'int' in declaration of 'MODULE_DESCRIPTION'
- sound/soc/samsung/smdk2443_wm9710.c:65: warning: function declaration isn't a prototype
- sound/soc/samsung/smdk2443_wm9710.c:66: error: expected declaration specifiers or '...' before string constant
- sound/soc/samsung/smdk2443_wm9710.c:66: warning: data definition has no type or storage class
- sound/soc/samsung/smdk2443_wm9710.c:66: warning: type defaults to 'int' in declaration of 'MODULE_LICENSE'
- sound/soc/samsung/smdk2443_wm9710.c:66: warning: function declaration isn't a prototype
- make[3]: *** [sound/soc/samsung/smdk2443_wm9710.o] Error 1
- make[2]: *** [sound/soc/samsung] Error 2
- make[1]: *** [sound/soc] Error 2
- make: *** [sound] Error 2
- - ASoC: Fix a typo in jive_wm8750
- Fix a typo in jive_wm8750 that introduces below build error.
- Also removes an unused err variable.
- CC sound/soc/samsung/jive_wm8750.o
- sound/soc/samsung/jive_wm8750.c: In function 'jive_wm8750_init':
- sound/soc/samsung/jive_wm8750.c:104: warning: unused variable 'err'
- sound/soc/samsung/jive_wm8750.c: At top level:
- sound/soc/samsung/jive_wm8750.c:134: error: unknown field 'dapm_widgtets' specified in initializer
- sound/soc/samsung/jive_wm8750.c:134: warning: initialization from incompatible pointer type
- make[3]: *** [sound/soc/samsung/jive_wm8750.o] Error 1
- make[2]: *** [sound/soc/samsung] Error 2
- make[1]: *** [sound/soc] Error 2
- make: *** [sound] Error 2
- - ASoC: Correct name of Speyside Main Speaker widget
- - ASoC: SAMSUNG: Fix build error
- This patch adds <linux/modules.h> to fix following build errors.
- sound/soc/codecs/wm8994.c: In function 'wm8994_readable':
- sound/soc/codecs/wm8994.c:58: warning: unused variable 'wm8994'
- sound/soc/samsung/smdk_wm8994.c:176: error: expected declaration specifiers or '...' before string constant
- sound/soc/samsung/smdk_wm8994.c:176: warning: data definition has no type or storage class
- sound/soc/samsung/smdk_wm8994.c:176: warning: type defaults to 'int' in declaration of 'MODULE_DESCRIPTION'
- sound/soc/samsung/smdk_wm8994.c:176: warning: function declaration isn't a prototype
- sound/soc/samsung/smdk_wm8994.c:177: error: expected declaration specifiers or '...' before string constant
- - ASoC: Flush Samsung DMA on free
- Ever since it was written the Samsung DMA driver has had a TODO in the
- hw_free() function wondering if we need to flush the DMA buffers. Up until
- now the answer has been no but with the recent improvements Boojin has
- done to the DMA infrastructure for the Samsung port the answer has changed
- to yes for at least S3C6410 systems.
- If we don't then when we next prepare() the channel the API will get
- confused trying to run callbacks on the transfers hanging around from the
- previous time the stream was open and oops.
- - ASoC: Samsung: Update DMA interface
- This patch adds to support the DMA PL330 driver that uses
- DMA generic API. Samsung sound driver uses DMA generic API
- if architecture supports it. Otherwise, use samsung specific
- S3C-PL330 API driver to transfer PCM data.
- [kgene.kim@samsung.com: removed useless variable]
- - ASoC: Convert Goni to data based DAPM init
- - ASoC: Convert Jive to table based init
- - ASoC: Convert SMDK WM8580 to table based DAPM init
- - ASoC: Convert SmartQ to table based init
- - ASoC: Convert RX1950 to table based init
- - ASoC: Convert H1940 to table based init
- - ASoC: Convert Simtec machines to table based DAPM init
- - ASoC: samsung: s3c-i2s-v2.c needs module.h
- Include <linux/module.h> to fix below build error:
- CC sound/soc/samsung/s3c-i2s-v2.o
- sound/soc/samsung/s3c-i2s-v2.c:573: warning: data definition has no type or storage class
- sound/soc/samsung/s3c-i2s-v2.c:573: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
- sound/soc/samsung/s3c-i2s-v2.c:573: warning: parameter names (without types) in function declaration
- sound/soc/samsung/s3c-i2s-v2.c:638: warning: data definition has no type or storage class
- sound/soc/samsung/s3c-i2s-v2.c:638: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
- sound/soc/samsung/s3c-i2s-v2.c:638: warning: parameter names (without types) in function declaration
- sound/soc/samsung/s3c-i2s-v2.c:677: warning: data definition has no type or storage class
- sound/soc/samsung/s3c-i2s-v2.c:677: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
- sound/soc/samsung/s3c-i2s-v2.c:677: warning: parameter names (without types) in function declaration
- sound/soc/samsung/s3c-i2s-v2.c: In function 's3c_i2sv2_register_dai':
- sound/soc/samsung/s3c-i2s-v2.c:736: warning: initialization discards qualifiers from pointer target type
- sound/soc/samsung/s3c-i2s-v2.c: At top level:
- sound/soc/samsung/s3c-i2s-v2.c:754: warning: data definition has no type or storage class
- sound/soc/samsung/s3c-i2s-v2.c:754: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
- sound/soc/samsung/s3c-i2s-v2.c:754: warning: parameter names (without types) in function declaration
- sound/soc/samsung/s3c-i2s-v2.c:756: error: expected declaration specifiers or '...' before string constant
- sound/soc/samsung/s3c-i2s-v2.c:756: warning: data definition has no type or storage class
- sound/soc/samsung/s3c-i2s-v2.c:756: warning: type defaults to 'int' in declaration of 'MODULE_LICENSE'
- sound/soc/samsung/s3c-i2s-v2.c:756: warning: function declaration isn't a prototype
- make[3]: *** [sound/soc/samsung/s3c-i2s-v2.o] Error 1
- make[2]: *** [sound/soc/samsung] Error 2
- make[1]: *** [sound/soc] Error 2
- make: *** [sound] Error 2
- - ASoC: samsung: WM8994 depends on MFD_WM8994
- Any driver that selects SND_SOC_WM8994 should also make sure that
- MFD_WM8994 is set, since the codec relies on the mfd code:
- sound/built-in.o: In function `wm8994_read':
- last.c:(.text+0x20160): undefined reference to `wm8994_reg_read'
- sound/built-in.o: In function `wm8994_write':
- last.c:(.text+0x20e68): undefined reference to `wm8994_reg_write'
- This solves the problem by selecting the MFD driver directly
- and adding extra 'depends on' statements to make sure that we
- respect the dependencies of that driver.
- - ASoC: Staticise simtec_audio_resume()
- It is exported via resume callback of struct dev_pm_ops rather than referenced
- directly and so should be staticised.
- - ASoC: Staticise samsung_spdif_dai
- - ASoC: samsung: Add __devexit_p at necessary places
- According to the comments in include/linux/init.h:
- "Pointers to __devexit functions must use __devexit_p(function_name), the
- wrapper will insert either the function_name or NULL, depending on the confi
- options."
- - ASoC: Use dai_fmt in speyside_wm8962
- - ASoC: Add DMIC control to Speyside WM8962 board
- - ASoC: Add support for on-board analogue microphones on Speyside WM8962
- - ASoC: Convert WM8962 MICBIAS to a supply widget
- A supply widget is generally clearer than a MICBIAS widget and a mic bias
- is just a type of supply so use a supply widget for the MICBIAS. This also
- avoids confusion with the routing when connected to multiple inputs.
- - ASoC: Support a wider range of sample rates on Speyside WM8962
- As we've only got one audio interface and it is symmetric we can just set
- SYSCLK based on the sample rate requested by the application layer. Provide
- a default so bypass paths work before audio playback.
- - ASoC: Add line loads to the list of supported detections for Speyside
- - ASoC: samsung: Fix checking return value of clk_get
- clk_get() returns a pointer to the struct clk or an ERR_PTR().
- This patch also use PTR_ERR() for return value.
- - ASoC: SAMSUNG: Add Kconfig to support SMDK4212
- This patch adds Kconfig to support SMDK4212.
- SMDK4212 is based on samsung exynos4212 SoC.
- And WM8994 is used for audio codec.
- - ASoC: Add Springbank I/O card to Speyside Kconfig
- - ASoC: Ensure we only run Speyside WM8962 bias level callbacks once
- We get called once per DAPM context but only need to run once. When DAPM
- was serialized this was a series of noops but now it can run in parallel
- we need to take proper care.
- - ASoC: Run Speyside WM8962 at 512fs
- Ensure we have access to all the advanced DSP functinality offered by the
- WM8962 by running the system clock at 512fs.
- - ASoC: rx1950: Fix compilation error due to missing header
- Add linux/types.h to fix this compilation error:
- In file included from arch/arm/mach-s3c2410/include/mach/gpio-fns.h:27:0,
- from arch/arm/mach-s3c2410/include/mach/gpio.h:27,
- from /home/anarsoul/work/pda-linux/linux-next/arch/arm/include/asm/gpio.h:5,
- from include/linux/gpio.h:18,
- from sound/soc/samsung/rx1950_uda1380.c:20:
- arch/arm/plat-samsung/include/plat/gpio-cfg.h:29:34: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘s3c_gpio_pull_t’
- arch/arm/plat-samsung/include/plat/gpio-cfg.h:30:34: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘s5p_gpio_drvstr_t’
- arch/arm/plat-samsung/include/plat/gpio-cfg.h:57:2: error: expected specifier-qualifier-list before ‘s3c_gpio_pull_t’
- arch/arm/plat-samsung/include/plat/gpio-cfg.h:148:47: error: expected declaration specifiers or ‘...’ before ‘s3c_gpio_pull_t’
- arch/arm/plat-samsung/include/plat/gpio-cfg.h:156:24: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘s3c_gpio_getpull’
- arch/arm/plat-samsung/include/plat/gpio-cfg.h:175:24: error: expected declaration specifiers or ‘...’ before ‘s3c_gpio_pull_t’
- arch/arm/plat-samsung/include/plat/gpio-cfg.h: In function ‘s3c_gpio_cfgrange_nopull’:
- arch/arm/plat-samsung/include/plat/gpio-cfg.h:180:47: error: ‘s3c_gpio_pull_t’ undeclared (first use in this function)
- arch/arm/plat-samsung/include/plat/gpio-cfg.h:180:47: note: each undeclared identifier is reported only once for each function it appears in
- arch/arm/plat-samsung/include/plat/gpio-cfg.h:180:47: error: expected ‘)’ before numeric constant
- arch/arm/plat-samsung/include/plat/gpio-cfg.h:180:47: error: too many arguments to function ‘s3c_gpio_cfgall_range’
- arch/arm/plat-samsung/include/plat/gpio-cfg.h:174:12: note: declared here
- arch/arm/plat-samsung/include/plat/gpio-cfg.h: At top level:
- arch/arm/plat-samsung/include/plat/gpio-cfg.h:199:26: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘s5p_gpio_get_drvstr’
- arch/arm/plat-samsung/include/plat/gpio-cfg.h:210:50: error: expected declaration specifiers or ‘...’ before ‘s5p_gpio_drvstr_t’
- - ASoC: h1940: Fix compilation error due to missing header
- Add linux/types.h to fix this compilation error:
- In file included from arch/arm/mach-s3c2410/include/mach/gpio-fns.h:27:0,
- from arch/arm/mach-s3c2410/include/mach/gpio.h:27,
- from /home/anarsoul/work/pda-linux/linux-next/arch/arm/include/asm/gpio.h:5,
- from include/linux/gpio.h:18,
- from sound/soc/samsung/rx1950_uda1380.c:20:
- arch/arm/plat-samsung/include/plat/gpio-cfg.h:29:34: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘s3c_gpio_pull_t’
- arch/arm/plat-samsung/include/plat/gpio-cfg.h:30:34: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘s5p_gpio_drvstr_t’
- arch/arm/plat-samsung/include/plat/gpio-cfg.h:57:2: error: expected specifier-qualifier-list before ‘s3c_gpio_pull_t’
- arch/arm/plat-samsung/include/plat/gpio-cfg.h:148:47: error: expected declaration specifiers or ‘...’ before ‘s3c_gpio_pull_t’
- arch/arm/plat-samsung/include/plat/gpio-cfg.h:156:24: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘s3c_gpio_getpull’
- arch/arm/plat-samsung/include/plat/gpio-cfg.h:175:24: error: expected declaration specifiers or ‘...’ before ‘s3c_gpio_pull_t’
- arch/arm/plat-samsung/include/plat/gpio-cfg.h: In function ‘s3c_gpio_cfgrange_nopull’:
- arch/arm/plat-samsung/include/plat/gpio-cfg.h:180:47: error: ‘s3c_gpio_pull_t’ undeclared (first use in this function)
- arch/arm/plat-samsung/include/plat/gpio-cfg.h:180:47: note: each undeclared identifier is reported only once for each function it appears in
- arch/arm/plat-samsung/include/plat/gpio-cfg.h:180:47: error: expected ‘)’ before numeric constant
- arch/arm/plat-samsung/include/plat/gpio-cfg.h:180:47: error: too many arguments to function ‘s3c_gpio_cfgall_range’
- arch/arm/plat-samsung/include/plat/gpio-cfg.h:174:12: note: declared here
- arch/arm/plat-samsung/include/plat/gpio-cfg.h: At top level:
- arch/arm/plat-samsung/include/plat/gpio-cfg.h:199:26: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘s5p_gpio_get_drvstr’
- arch/arm/plat-samsung/include/plat/gpio-cfg.h:210:50: error: expected declaration specifiers or ‘...’ before ‘s5p_gpio_drvstr_t’
- - ASoC: Allow userspace control of Speyside headphone output
- In order to facilitate the widest range of use cases (especially things
- like speakerphone) allow the headphone output to be enabled and disabled
- by the application layer.
- - ASoC: Update SMDKs for WM8580 -codec removal
- - ASoC: SAMSUNG: Add I2S0 internal dma driver
- I2S in Exynos4 and S5PC110(S5PV210) has a internal dma.
- It can be used low power audio mode and 2nd channel transfer.
- This patch can support idma.
- [Reapplied after dependencies propagated through in 3.1-rc1. --broonie]
- - ASoC: Fix warning in Speyside WM8962
- - ASoC: Fix binding of WM8750 on Jive
- The I2C address is misformatted and would never match.
- - ASoC: Revert "ASoC: SAMSUNG: Add I2S0 internal dma driver"
- This reverts commit d7c3e9525ac8e898f1156a1f3a7c5038f6560186 as it does
- not currently build due to missing dependencies in the Samsung tree.
- - ASoC: SAMSUNG: Add I2S0 internal dma driver
- I2S in Exynos4 and S5PC110(S5PV210) has a internal dma.
- It can be used low power audio mode and 2nd channel transfer.
- This patch can support idma.
- - ASoC: SAMSUNG: Modify I2S driver to support idma
- Previously, I2S driver only can support system dma.
- In this patch, i2s driver can support internal dma too.
- IDMA h/w configuration is initialized on idma.c
- - ASoC: Improve error reporting in Speyside WM8962 driver
- - ASoC: SAMSUNG: Add idma related register definition
- This patch add idma related register definitions to support idma.
- - ASoC: SAMSUNG: 24-bit audio playback on Exynos4210
- Using 256fs or 512fs will result in distortion of 24-bit
- audio samples. This is because the lrclk generated is not
- proper. Using 384 fs generates proper output.
- - ASoC: SAMSUNG: Move I2S common register definition
- I2S registers can be used for control idma.
- Previously, register is defined in i2s.c.
- For sharing the registers, It is moved to i2s-regs.h
- - ASoC: SAMSUNG: Add WM8994 PCM Machine driver
- This patch add WM8994 PCM machine driver to support PCM audio
- on SMDKV310, SMDKC210 boards.
- Playback and Capture supports 8kHz sampling rates.
- and It is tested on SMDKV310, SMDKC210.
- - ASoC: SMDKV310: Enable SPDIF device
- - ASoC: Fix mismerge of Speyside set_bias_level_post()
- - ASoC: Support Speyside build variants with WM8962 fitted
- - ASoC: Manage Speyside system clocking only in bias management
- Now that the CODEC driver supports it defer configuration of the system
- clock until bias management which is a much more idiomatic place to do
- system power control and makes things a lot more happy when we're using
- both interfaces.
- - ASoC: Update speyside audio driver for hardware revision 2
- Revision 2 of the Speyside platform supplies a 32kHz clock on MCLK2 rather
- than MCLK1.
- - ASoC: SAMSUNG: Fix the incorrect referencing of I2SCON register
- If DMA active status should be checked, I2SCON register should be referenced.
- In this patch, Fix the incorrect referencing of I2SCON register.
- Reported-by : Lakkyung Jung <lakkyung.jung@samsung.com>
- - ASoC: Don't specify the DMA driver for Speyside baseband link
- - ASoC: Mark Speyside widgets as ignoring suspend
- Allow audio paths through the Speyside system to be kept active while the
- system is suspended (for example, when on a voice call) by marking all the
- external widgets and the DAI link to the WM1250-EV1 baseband module as
- ignoring suspend.
- - ASoC: Add stub baseband link on Speyside
- Demonstrate the connection of a baseband to the system. We add a DAI for
- the link to the baseband. This will become visible to the application
- layer - audio should be started from the application layer using an
- application such as this:
- http://opensource.wolfsonmicro.com/~gg/bluetooth-pcm/bluetooth_pcm.c
- which starts up audio as for CPU based playback and record up to the point
- where data is streamed.
- Due to non-availability of baseband simulation hardware we reuse the
- configuration for the CPU link with the CODEC acting as clock master,
- allowing signals to be observed with a scope. A more standard system
- would have separate configuration for the baseband with its own ops
- structure and operations. Normally the baseband would be clock master
- as the baseband audio will be synchronised to the external telephony
- network.
- - ASoC: Add pin switches for fixed analogue inputs and outputs on Speyside
- Pin switches enable direct control of the DAPM state from userspace,
- enabling simple enabling and disabling of the path. This is especially
- useful for outputs such as the speaker which are composed of several
- physical devices as it allows them to be controlled as a group.
- - ASoC: Add Speyside headset jack detection support
- Speyside makes use of support the WM8915 has for detecting the polarity
- of the microphone and ground connections on headsets, using a GPIO to
- control the polarity of the ground connection and switching between the
- two microphone bias supplies available on the device in order to do so.
- As a result of this the detection support is more involved than for most
- other CODECs, using a callback to configure the current polarity of the
- jack and translate this into the board-specific connections required for
- the current scenario.
- On Android some additional work is required to hook this up to the
- application layer as the Android HeadsetObserver monitors a custom
- drivers/switch API rather than the standard Linux APIs. This can be
- done by either updating HeadsetObserver or modifying the ALSA core to
- report via drivers/switch as well.
- - ASoC: Support the sub speaker driver on Speyside
- Speyside includes a WM9081 configured as an external speaker driver taking
- an analogue input from HPOUT2 on the WM8915 on the system. Add support for
- this to the driver, using a prefix of "Sub" for the WM9081 controls to
- ensure we avoid collisions with controls on the WM8915.
- - ASoC: Optimise clock management for WM8915 Speyside
- Dynamically enable and disable the FLL on the WM8915, configuring the
- system clock to 256fs for 48kHz when the device is active but reverting
- to using the input 32.768kHz clock directly at other times to support
- features such as jack detection with minimal power consumption.
- - ASoC: Add basic widgets for WM8915 Speyside
- Provide widgets for the basic widgets connected directly to the WM8915
- on Speyside - the headphones, speaker, digital and analogue microphones.
- For the outputs this is just documentation, for the inputs this ensures
- that the relevant microphone biases are enabled when they are in use.
- - ASoC: Remove to support sound for S5P6442
- According to removing ARCH_S5P6442, we don't need to support
- sound for S5P6442.
- - ASoC: Don't specify the DMA driver for Goni baseband link
- - ASoC: Don't specify the DMA driver for OpenMoko baseband link
- - ASoC: Fix CODEC DAI names for Goni
- Immediately after sending the last fix I realised that the CODEC DAI names
- also don't correspond to the WM8994 driver. Update the DAI names to match.
- - ASoC: Fix CODEC name in Goni
- This was typoed at some point in the multi-component merge, though the
- driver was added along with that.
- - ASoC: Initial audio support for Speyside on Cragganmore 6410
- This is minimal code required to get audio out of the Speyside audio
- subsystem on the Wolfson Cragganmore 6410 reference platform. It sets
- up the link between the CPU and AIF1 of the WM8915 on the system,
- enabling audio playback via the headphone and speaker outputs of the
- device (which require no further configuration except runtime). It
- allows verification of basic functionality of the system.
- - ASoC: SAMSUNG: Add WM8580 PCM Machine driver
- This patch add WM8580 PCM machine driver to support PCM audio
- on SMDKC110, SMDKV210, SMDK6450, SMDK6440 boards.
- Playback and Capture supports 8kHz sampling rates.
- and It is tested on SMDKC110, SMDKV210, SMDK6450
- - ASoC: SAMSUNG: Fix the inverted clocks handling for pcm driver
- Fix the inverted clocks handling for pcm cpu driver.
- By using SND_SOC_DAIFMT_NB_NF, Audio noise can be generated on SMDK.
- - ASoC: mini2440: Fix uda134x codec problem.
- ASoC audio for mini2440 platform in current kenrel doesn't work.
- First problem is samsung_asoc_dma device is missing in initialization.
- Next problem is with codec. Codec is initialized but never probed
- because no platform_device exist for codec driver. It leads to errors
- during codec binding to asoc dai. Next problem was platform data which
- was passed from board to asoc main driver but not passed to codec when
- called codec_soc_probe().
- Following patch should fix issues. But not sure if in correct way.
- Please review.
- - ASoC: Change dependency of ARCH_EXYNOS4
- This patch changes dependency of ARCH_EXYNOS4 from ARCH_S5PV310
- according to the change of ARCH name, EXYNOS4.
- - ASoC: Samsung: Merge neo1937_wm8753 and neo1973_gta02_wm8753 sound board driver
- The neo1973(GTA01) and neo1973_gta02(GTA02) have a very similar audio hardware
- setup. They both use the same codec with the same routing to the gsm modem and
- bluetooth chip. But they do use different AMPs though and there are some minor
- differences in the speaker setup.
- As a result most of the code of those two drivers is identical.
- So from a maintenance point of view it makes sense to merge them into a single
- driver. It also reduces the size of kernel images supporting both the GTA01 and
- GTA02.
- As a side-effect of this merge the GTA01 for example gains support for routing
- audio to and from the bluetooth DAI.
- - ASoC: neo1973_wm8753: Remove scenario management code.
- It has been proven to be inflexible to do scenario management in kernel space.
- Since actual neo1973 board support has not been merged in mainline and this
- patch has been in the neo1973 tree for some time now it should be safe to remove
- this functionality without breaking existing userspace.
- - ASoC: remove one to many l's in the word
- The patch below removes an extra "l" in the word.
- - ASoC: neo1973_wm8753 audio support does not require scoop
- This driver does not use any of the functionality provided by the scoop
- hardware. Remove the unneeded header.
SoC Blackfin
- - Add missing soc/* stub files
- - ASoC: check for substream not channels_min in pcm engines
- This is a follow up on 53dea36c70c1857 which fixes the other affected
- pcm engines.
- Description from 53dea36c70c1857:
- Don't rely on the codec's channels_min information to decide wheter or
- not allocate a substream's DMA buffer. Rather check if the substream
- itself was allocated previously.
- Without this patch I was seeing null-pointer dereferenc in atmel-pcm.
- - ASoC: blackfin: Add .owner to struct snd_soc_card
- Missed .owner of struct snd_soc_card will prevent the module from being
- removed from underneath its users.
- Reported-by: Lothar Waßmann <LW@KARO-electronics.de>
- - ASoC: Convert blackfin directory to module_platform_driver
- Factor out some boilerplate code.
- - blackfin: add module.h to files implicitly expecting to use it.
- Its presence was implicit everywhere, but we are aiming to fix that,
- so call out the users explicitly.
- - ASoC: Staticise bf5xx_pcm_i2s_new()
- It is not used outside this driver so no need to make the symbol global.
- - ASoC: Staticise bf5xx_pcm_ac97_new()
- It is not used outside this driver so no need to make the symbol global.
- - ASoC: bf5xx-ad73311: Fix prototype for bf5xx_probe
- Fix below build warning:
- sound/soc/blackfin/bf5xx-ad73311.c: warning: initialization from incompatible pointer type
- - ASoC: Blackfin: bf5xx-ad193x: Fix codec device name
- Fix the codec_name field of the dai_link to match the actual device name
- of the codec. Otherwise the card won't be instantiated.
- - ASoC: Blackfin: ADAU1373 eval board support
- Add a machine driver to support the EVAL-ADAU1373 board connected to a
- Analog Devices BF5XX evaluation board.
- - ASoC: ad193x: fix system clock
- system clock is 24.576MHz instead of 12.288MHz
- - ASoC: Blackfin: Add machine driver for EVAL-ADAV80X boards
- Add a machine driver to support the EVAL-ADAV801 and EVAL-ADAV803 boards
- connected to a Analog Devices BF5XX evaluation board.
- - ASoC: Blackfin: allow SPI for SSM2602 parts
- This board has hardware switches for selecting SPI or I2C, so don't
- require I2C for this driver.
- - ASoC: Blackfin: Add bf5xx-adau1701 machine driver
- Add a machine driver to support the ADAU1701 SigmaDSP processors on
- Analog Devices BF5XX evaluation boards.
- - ASoC: Clean up some coding style nits in the bf5xx-i2s-pcm driver
- - ASoC: Fix Blackfin I2S _pointer() implementation return in bounds values
- The Blackfin DMA controller can report one frame beyond the end of the
- buffer in the wraparound case but ALSA requires that the pointer always
- be in the buffer. Do the wraparound to handle this. A similar bug is
- likely to apply to the other Blackfin PCM drivers but the code is less
- obvious to inspection and I don't have a user to test.
- Reported-by: Kieran O'Leary <Kieran.O'Leary@wolfsonmicro.com>
- - ASoC: Blackfin: bf5xx-ad1836: Fix codec device name
- Fix the codec_name field of the dai_link to match the actual device name
- of the codec. Otherwise the card won't be instantiated.
- - ASoC: Blackfin: push down SPORT settings from global variables
- Now that we have multi-component support, take the time to unify the
- SPORT implementations a bit and make the setup dynamic. This kills
- off the global sport_handle which was shared across all the Blackfin
- machine drivers. The pin management aspect is off loaded to platform
- resources, and now multiple SPORTs can be instantiated simultaneously.
- - ASoC: Blackfin: standardize machine driver names
- Some machine drivers were using "bf5xx-", others were using "bf5xx_",
- while others were using "bfin-". Further, some were using the same
- name in the transport layer which makes it hard to use different codecs
- at the same time. So standardize all of them to "bfin-" and make sure
- they are name spaced according to their driver name.
- - ASoC: Blackfin: drop "-codec" from codec names
- The recent multi-component patch incorrectly added "-codec" suffixes to
- parts which are not MFD. Drop the suffix from the machine drivers too.
- - ASoC: Blackfin: add ad193x sysclk configuration
- - ASoC: Blackfin I2S: add 8-bit sample support
SoC Codec 88PM860x
- - Add missing soc/* stub files
- - ASoC: Convert 88pm860x-codec to devm_kzalloc()
- - ASoC: Convert 88pm860x-codec to table based DAPM and control init
- - ASoC: Convert CODEC drivers to module_platform_driver
- Factors out a bit of boilerplate.
- - ASoC: Include delay.h in 88pm860x
- Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
- - ASoC: 88pm860x-codec - reset the codec correctly
- Reset the codec according to the Audio power-up delay errata for the 88PM8607.
- - ASoC: 88pm860x-codec - Allow independent use of both I2S playback and capture
- Introduce a I2S CLK supply so playback and capture can operate independently.
- - ASoC: s/w->kcontrols/w->kcontrol_news/g
- A future change will modify struct snd_soc_dapm_widget to store the
- actual kcontrol pointers for each kcontrol_new in a field named
- kcontrols. Rename the existing kcontrols field to enable this.
SoC Codec AC97
- - ASoC: Drop unused state parameter from CODEC suspend callback
- The existence of this parameter is purely historical. None of the CODEC drivers
- uses it and we always pass in the same value anyway, so it should be safe to
- remove it.
- - ASoC: Convert CODEC drivers to module_platform_driver
- Factors out a bit of boilerplate.
SoC Codec AD1836
- - ASoC: Convert ad1836 to devm_kzalloc()
- - ASoC: Drop unused state parameter from CODEC suspend callback
- The existence of this parameter is purely historical. None of the CODEC drivers
- uses it and we always pass in the same value anyway, so it should be safe to
- remove it.
- - ASoC: Fix wrong define for AD1836_ADC_WORD_OFFSET
- According to the datasheet:
- The BIT[5:4] of ADC Control Register 2 is to control the word width.
- 00 = 25 Bits
- 01 = 20 Bits
- 10 = 16 Bits
- 11 = Invalid
- Thus, the AD1836_ADC_WORD_OFFSET should be defined as 4.
- - ASoC: AD1836: rename suspend/resume funcs
- Use less specific names for suspend/resume to match the probe/remove funcs
- where these are now used.
- - ASoC: AD1836: fix codec name
- The codec name should not have a "-codec" suffix since this is not part of
- a MFD. This was incorrectly changed during the multi-component updated.
- - ASoC: AD1836: fix intermixed tab/space indentation
- - ASoC: AD1836: drop unnecessary spi register check
- The only thing the init func does is register a spi driver, so if that
- fails, we return the value back up to the caller who will display an
- error message for us. So drop the redundant checking/message.
- - ASoC: AD1836: clean up comment headers
- - ASoC: AD1836: Fix build error
- Commit f97d0c6d5f94 ("ASoC: AD1836: Add input gain control for ADC2") contained
- a typo in the register name, causing a build error. This patch fixes it.
- - ASoC: AD1836: Add input gain control for ADC2
- The AD1836 has a PGA for its second ADC. This patch adds a control for
- adjusting the the gain of the PGA.
- - ASoC: AD1836: Remove unused fields from private struct
- The control_type field is never used, so it can be removed. The
- control_data field is used to initialize the codec's control_data field,
- but since this is also done by the snd-soc-cache core, the redundant
- assignment can be removed and the field can be dropped.
- - ASoC: AD1836: Add AD1835/AD1837/AD1838/AD1839 support
- The AD183X codec devices are mostly register compatible and can easily be
- supported by the same driver. The main difference between those devices
- is the number of DACs and ADCs.
- This patch adjusts the driver to allocate the controls, DAPM widgets and
- routes for the DACs and ADCs dynamically based on the chip type.
- The AD1836 is a bit special in that it supports different modes for its second
- ADC, so it needs some special handling. Right now the driver hardcodes the mode
- to the differential PGA mode.
- - ASoC: AD1836: Use snd_soc_update_bits for read-modify-write
- Use snd_soc_update_bits for read-modify-write register access instead of
- open-coding it using snd_soc_read and snd_soc_write.
- - ASoC: AD1836: Add ADC/DAC controls helper macros
- The different ADC and DAC controls follow the same scheme, so add some helper
- macros for declaring them.
- This should make the code a bit more readable and also decreases the code size
- a bit.
- - ASoC: AD1836: Fix setting the PCM format
SoC Codec AD1938
- - Add missing soc/* stub files
SoC Codec AD193X
- - ASoC: Convert ad193x to devm_kzalloc()
- - ASoC: ad193x: Convert to direct regmap API usage
- - ASoC: ad193x: Use snd_soc_update_bits where appropriate
- We can reduce the code size here a bit by using snd_soc_update_bits instead of
- open-coding the read-modify-write cycle. The conversion done in this patch is
- not completely straightforward and some minor code restructuring has been
- incorporated to further reduce the code size.
- - ASoC: ad193x: Add sysclk DAPM supply
- Add a DAPM supply widget for the internal sysclk, so it can be disabled
- automatically when not needed.
- - ASoC: ad193x: Remove non-functional DAPM route controls
- DAPM route controls only take effect on paths where the sink is a mixer or a
- mux, furthermore the control must be a control assigned to the mixer or mux.
- - ASoC: ad193x: Make enum items const char * const
- - ASoC: ad193x: Provide dB ranges for the volume controls
- - ASoC: ad193x: Use table based DAPM and controls setup
- - ASoC: ad193x: Use snd_soc_update_bits for read-modify-write
- Use snd_soc_update_bits for read-modify-write register access instead of
- open-coding it using snd_soc_read and snd_soc_write
- - ASoC: ad193x: Fix define of AD193X_PLL_INPUT_MASK
- Current code defines AD193X_PLL_INPUT_MASK as (~0x6) which is quite
- different from other MASK defines.
- To make it consistent with other mask defines, define AD193X_PLL_INPUT_MASK
- as 0x6 and change the code accordingly.
- I think this change improves the readability.
- - ASoC: ad193x: Setup regmap read and write flag masks for SPI
- Currently register read-back for the ad193x is broken, because it expects bit 0
- of the upper byte to be set to indicate a read operation, while the regmap
- default for SPI is to use bit 7.
- This patch also addresses another oddity of the device. There are SPI and I2C
- versions of this codec. In both cases the registers are 8-bit wide and numbered
- from 0x0 to 0x10, but in the SPI case there is also a so called
- 'global address' which is prefixed in-front of the register address. The global
- address mimics I2C behaviour and includes a static device address the and the
- read/write flag. This basically extends the register address to an 16-bit value
- numbered from 0x800 to 0x810. These are the register numbers which are
- currently used by the driver. This works, because I2C will ignore the upper
- 8 bits of the register, but it is still a bit confusing, as there are no such
- register numbers in the I2C case.
- The approach taken by this patch is to number the registers from 0x00 to 0x10
- and encode the global address for SPI mode into the read and write flag masks.
- - ASoC: ad193x: remove cache support
- asoc cache layer can't support this kind of spi registers well.
- remove cache support and read/write registers directly
- - ASoC: ad193x: fix dac word len setting
- dac word len value should left shift before setting
- - ASoC: ad193x: fix registers definition
- fix dac word len mask and adc tdm fmt shift value
- - ASoC: ad193x: fix codec name
- The codec name should not have a "-codec" suffix since this is not part of
- a MFD. This was incorrectly changed during the multi-component updated.
- - ASoC: ad193x: tweak style to match other codecs
- Rename the snd_soc_control_type field from "bus_type" to "control_type",
- and drop the now unused "control_data" field.
SoC Codec AD1980
- - ASoC: Convert CODEC drivers to module_platform_driver
- Factors out a bit of boilerplate.
- - ASoC: Drop exporting ad1980_dai
- ad1980_dai is not used outside this driver,
- thus drop exporting it.
- - ASoC: ad1980: Return proper error if vendor id mismatch
- Return -ENODEV instead of 0 if vendor id mismatch.
- - ASoC: ad1980: fix codec name
- The codec name should not have a "-codec" suffix since this is not part of
- a MFD. This was incorrectly changed during the multi-component updated.
SoC Codec AD73311
- - ASoC: Convert CODEC drivers to module_platform_driver
- Factors out a bit of boilerplate.
- - ASoC: ad73311: fix codec name
- The codec name should not have a "-codec" suffix since this is not part of
- a MFD. This was incorrectly changed during the multi-component updated.
SoC Codec ADAU1373
- - ASoC: Convert adau1373 to devm_kzalloc()
- - ASoC: Drop unused state parameter from CODEC suspend callback
- The existence of this parameter is purely historical. None of the CODEC drivers
- uses it and we always pass in the same value anyway, so it should be safe to
- remove it.
- - ASoC: Cleanup duplicated const
- Commit 85e7652("ASoC: Constify snd_soc_dai_ops structs") accidentally
- introduced a few duplicated consts. This patch cleans it up.
- - ASoC: adau1373: fix DB_RANGE size
- Give the correct number of entries to TLV_DB_RANGE_HEAD to prevent
- reading more data than actually is in the array.
- - ASoC: Fix setting adau1373_dai->master for SND_SOC_DAIFMT_CBS_CFS
- In the case of SND_SOC_DAIFMT_CBS_CFS, adau1373_dai->master should be false.
- - ASoC: Add ADAU1373 codec support
- This patch adds support for the Analog Devices ADAU1373 audio codec.
SoC Codec ADAU1701
- - ASoC: Convert adau1701 to devm_kzalloc()
- - ASoC: Move SigmaDSP firmware loader to ASoC
- It has been pointed out previously, that the firmware subsystem is not the right
- place for the SigmaDSP firmware loader. Furthermore the SigmaDSP is currently
- only used in audio products and we are aiming for better integration into the
- ASoC framework in the future, with support for ALSA controls for firmware
- parameters and support dynamic power management as well. So the natural choice
- for the SigmaDSP firmware loader is the ASoC subsystem.
- - ASoC: Cleanup duplicated const
- Commit 85e7652("ASoC: Constify snd_soc_dai_ops structs") accidentally
- introduced a few duplicated consts. This patch cleans it up.
- - ASoC: adau1701: Fix prototype for adau1701_set_sysclk
- - ASoC: adau1701: Initialize codec->control_data before using it
- Currently codec->control_data is not initialized before calling
- process_sigma_firmware(codec->control_data, ADAU1701_FIRMWARE).
- - ASoC: adau1701: signedness bug in adau1701_write()
- "ret" is supposed to be signed here. The current code will only
- return -EIO on error, instead of a more appropriate error code such
- as -EAGAIN etc.
- - ASoC: Add ADAU1701 codec driver
- This patch adds support for the Analog Devices ADAU1701 SigmaDSP.
SoC Codec ADAV80x
- - ASoC: Allow source specification for CODEC level sysclk
- Similarly to PLLs/FLLs some modern CODECs provide selectable system clock
- sources. When the clock is the clock for a DAI we do not usually need to
- identify which clock is being configured so can use clk_id for the source
- clock but with CODEC wide system clocks we will need to specify both the
- clock being configured and the source.
- Add a source argument to the CODEC driver set_sysclk() operation to
- reflect this. As this operation is not as widely used as the DAI
- set_sysclk() operation the change is not very invasive. We probably
- ought to go and make the same alternation for DAIs at some point.
- - ASoC: Report an error for unknown adav80x formats
- Not only fixes error handling but also some uninitialized variable
- warnings.
- - ASoC: Add ADAV80x codec driver
- This patch adds support for the Analog Devices ADAV801 and ADAV803 audio codec.
SoC Codec AK4104
- - ASoC: Convert ak4104 to devm_kzalloc()
- - ASoC: Fix reg_word_size for ak4104
- According to the register map in datasheet, the registers are 8 bit.
- - ASoC: Remove module probe announcements from CODEC drivers
SoC Codec AK4535
- - ASoC: Convert ak4535 to devm_kzalloc()
- - ASoC: Remove unneeded platform_device.h inclusions from CODECs
- They've not been needed for a long time if they were ever required.
- - ASoC: ak4535: fixup cache register table
- ak4535_reg should be 8bit, but cache table is defined as 16bit.
- - ASoC: ak4535: convert to soc-cache
- - ASoC: Use data based init for ak4535 DAPM
SoC Codec AK4641
- - ASoC: Fix return value of ak4641_pcm_set_dai_fmt()
- We can't just pass back the return value of snd_soc_update_bits() as it
- will be 1 if a bit changed rather than zero.
- - ASoC: Convert ak4641 to devm_kzalloc()
- - ASoC: Remove unneeded platform_device.h inclusions from CODECs
- They've not been needed for a long time if they were ever required.
- - ASoC: ak4641: Use SND_SOC_DAPM_DAC for Voice Playback stream widget
- - ASoC: ak4641: Remove unused codec field from struct ak4641_priv
- - ASoC: Staticize ak4641_dai
- - ASoC: Asahi Kasei AK4641 codec driver
- A driver for the AK4641 codec used in iPAQ hx4700 and Glofiish M800
- among others.
SoC Codec AK4642
- - ASoC: Convert ak4642 to devm_kzalloc()
- - ASoC: Remove unneeded platform_device.h inclusions from CODECs
- They've not been needed for a long time if they were ever required.
- - ASoC: Remove driver versioning from ak4642
- It's never been updated so it can't be that useful and it makes the
- driver needlessly chatty.
- - ASoC: ak4642: add ak4648 support
- - ASoC: ak4642: add Line out support
- - ASoC: ak4642: add headphone mute switch control
- - ASoC: ak4642: add DAPM support for HeadPhone Output
- - ASoC: ak4642: add ak4642_set_bias_level()
- - ASoC: ak4642: ak4642 was tested
- ak4642 was tested by ms7724se board
- - ASoC: ak4642: fixup cache register table
- ak4642 register was 8bit, but cache table was defined as 16bit.
- ak4642 doesn't work correctry without this patch.
- - ASoC: ak4642: convert to soc-cache
- - ASoC: ak4642: fixup snd_soc_update_bits mask for PW_MGMT2
- mask didn't cover update-data
- - ASoC: ak4642: add SND_SOC_DAIFMT_FORMAT support
- This patch support LEFT_J / I2S only for now
SoC Codec AK4671
- - ASoC: Convert ak4671 to devm_kzalloc()
- - ASoC: ak4671: Use snd_soc_update_bits for read-modify-write
- Use snd_soc_update_bits for read-modify-write register access instead of
- open-coding it using snd_soc_read and snd_soc_write
- - ASoC: Remove unneeded hw_write initialisation in ak4671
- It is not required now.
- - ASoC: Remove unused "control_data" field of struct ak4671_priv
- The control_data field is used to initialize the codec's control_data field,
- but since this is also done by the snd-soc-cache core, the redundant
- assignment can be removed and the field can be dropped.
- - ASoC: Use data based init for ak4671 DAPM
SoC Codec CQ0093 Voice
- - mfd: Use mfd cell platform_data for davinci cells platform bits
- With the addition of a platform device mfd_cell pointer, MFD drivers
- can go back to passing platform back to their sub drivers.
- This allows for an mfd_cell->mfd_data removal and thus keep the
- sub drivers MFD agnostic. This is mostly needed for non MFD aware
- sub drivers.
- - asoc: davinci_voicecodec: use mfd_data instead of driver_data
- Use mfd_data for passing information from mfd drivers to soc
- clients. The mfd_cell's driver_data field is being phased out.
- Clients that were using driver_data now access .mfd_data
- via mfd_get_data().
- - ASoC: DaVinci: fix kernel panic due to uninitialized platform_data
- This patch fixes the Kernel panic issue on accessing davinci_vc in
- cq93vc_probe function. struct davinci_vc is part of platform device's
- private driver data(codec->dev->p->driver_data) and this is populated
- by DaVinci Voice Codec MFD driver.
SoC Codec CS4270
- - ASoC: Convert cs4270 to devm_kzalloc()
- - ASoC: cs4720: use snd_soc_cache_sync()
- Replace the manual register restore mechanism in cs4270.c and call the
- generic snd_soc_cache_sync() handler instead.
- This factors code out in favour of core facilities and also fixes a
- bus confusion that is most probably caused by intermixing i2c-regmap
- functions and i2c_smbus_* accessors.
- Reported-and-tested-by: Sven Neumann <s.neumann@raumfeld.com>
- - ASoC: Return early with -EINVAL if invalid dai format is detected
- - ASoC: Remove unused "control_data" field of struct cs4270_private
- The control_data field is used to initialize the codec's control_data field,
- but since this is also done by the snd-soc-cache core, the redundant
- assignment can be removed and the field can be dropped.
- - ASoC: Fix comment in cs4270 codec driver
- The comment does not reflect reality anymore since the multi-component
- monster patch landed. Things are matched by names now, and not by
- exporting and referencing a struct. Fix it to avoid confusion.
- - ASoC: Constify i2c_device_id table
- - ASoC: Remove module probe announcements from CODEC drivers
SoC Codec CS42L51
- - ASoC: Convert cs42l51 to devm_kzalloc()
- - ASoC: Convert cs42l51 to table based DAPM and control init
- - ASoC: cs42l51: Fix off-by-one for reg_cache_size
- Just checking the code in cs42l51_fill_cache():
- The cache pointer points to codec->reg_cache + 1.
- I think it is because CS42L51_FIRSTREG is 0x01,
- so codec->reg_cache[0] is not used here.
- Then we read CS42L51_NUMREGS bytes to cache.
- So we need reg_cache_size to be CS42L51_NUMREGS + 1.
- - ASoC: Avoid a redundant read in cs42l51_pdn_event
- snd_soc_update_bits already does read-modify-write,
- no need to read the register before calling snd_soc_update_bits.
- - ASoC: Return early with -EINVAL if invalid dai format is detected
- - ASoC: Remove unused "control_data" field of struct cs42l51_private
- The control_data field is used to initialize the codec's control_data field,
- but since this is also done by the snd-soc-cache core, the redundant
- assignment can be removed and the field can be dropped.
SoC Codec CS42L73
- - ASoC: cs42l73: Fix clear wrong bits in cs42l73_set_dai_fmt
- What we want is to clear BIT[5:4](PCM_MODE_MASK) and BIT[3](PCM_BIT_ORDER) bits,
- but current code clears BIT[2:0].
- - ASoC: Convert CS42L73 to devm_kzalloc()
- - ASoC: Staticise and constify cs42l73_reg_defaults
- It's not exported and doesn't need to change.
- - ASoC: cs42l73: Make inv and format to be unsigned int
- Fix below smatch warning:
- sound/soc/codecs/cs42l73.c +1030 cs42l73_set_dai_fmt(53) error: inv is never equal to 1024 (wrong type 0 - 255).
- sound/soc/codecs/cs42l73.c +1032 cs42l73_set_dai_fmt(55) error: inv is never equal to 768 (wrong type 0 - 255).
- sound/soc/codecs/cs42l73.c +1036 cs42l73_set_dai_fmt(59) error: inv is never equal to 1024 (wrong type 0 - 255).
- Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
- - ASoC: cs42l73: Unify the way to define bits of register
- Current code defines some bits with left shift to the proper bit defined in
- datasheet, but some don't.
- Unify the definition with proper left shift and adjust the code accordingly.
- - ASoC: Remove redundant regcache_sync call in cs42l73_resume
- It's done in cs42l73_set_bias_level when the dapm.bias_level is switching
- from SND_SOC_BIAS_OFF to SND_SOC_BIAS_STANDBY.
- - ASoC: cs42l73: Show correct revision id
- - ASoC: cs42l73: Return proper error code if device id mismatch
- Return -ENODEV instead of 0 if device id mismatch.
- - ASoC: Add support for CS42L73 codec
- This patch adds support for the Cirrus Logic CS42L73 low power stereo
- codec.
SoC Codec CX20442
- - ASoC: cx20442: add bias control over a platform provided regulator
- Now that a regulator device for controlling the codec chip reset state
- over a platform agnostic regulator API is available on the only board
- using this driver so far, extend the driver with a bias control function
- which will request virtual power to the codec chip from that virtual
- regulator, and will supersede the present implementation existing at the
- sound card level.
- Thanks to the regulator sharing mechanism, both the old (the sound card)
- and the new (the codec) implementations should coexist smoothly until
- the sound card file is updated. For this to work as expected, update the
- sound card .set_bias_level callback to not touch codec->dapm.bias_level.
- While extending the cx20442 structure, drop unused control_type member.
- Created against linxu-3.2-rc6, tested on top of patch 1/4 "ARM: OMAP1:
- ams-delta: set up a regulator over the modem reset GPIO pin".
- - Revert "ASoC: Update cx20442 for TTY API change"
- This reverts commit ed0bd2333cffc3d856db9beb829543c1dfc00982.
- Since we reverted the TTY API change, we should revert the ASoC update
- to it too.
- - ASoC: Update cx20442 for TTY API change
- receive_buf() was recently changed to return the number of bytes
- received but the cx20442 driver wasn't updated to match the new API.
- I don't have any hardware but since we don't actually appears to be
- listening to the data at all just report that we accepted all the data
- that was offered to us.
- - ASoC: Use data based init for cx20442 DAPM
- - ASoC: CX20442: fix wrong reg_cache_default content
- Content of the CX20442's snd_soc_codec_driver.reg_cache_default pointed
- area, introduced with my recent NULL pointer dereferece fix (commit
- f019ee5feb344ff0b22b58df4568676295aae14f), occured wrong after further
- testing, more thorough than just booting successfully. There are two
- problems with it:
- 1) It should read
- (1 << CX20442_TELOUT) | (1 << CX20442_MIC),
- not
- CX20442_TELOUT | CX20442_MIC.
- 2) While correctly matching actual codec hardware state on boot when
- fixed per 1), a few more code modifications would still be required
- to reflect that state not only into register cache, but also force
- them into DAPM pins state, otherwise an inconsitency occures which
- may prevent further codec state changes from being applied correctly.
- As a result, the phone stops ringing after reboot, until someone
- picks up the handset for the first time.
- Revert that reg_cache_default content to a working, previous de facto
- default value of 0, in hope this change can still be accepted as an rc
- cycle fix.
- Created and tested against linux-2.6.38-rc4
- - ASoC: CX20442: fix NULL pointer dereference
- The CX20442 codec driver never provided the snd_soc_codec_driver's
- .reg_cache_default member. With the latest ASoC framework changes, it
- seems to be referred unconditionally, resulting in a NULL pointer
- dereference if missing. Provide it.
- Created and tested on Amstrad Delta against linux-2.6.38-rc2
SoC Codec Cirrus Logic CS4271
- - ASoC: cs4271: Fix wrong mask parameter in some snd_soc_update_bits calls
- - ASoC: Remove unused "control_data" field of struct cs4271_private
- The control_data field is used to initialize the codec's control_data field,
- but since this is also done by the snd-soc-cache core, the redundant
- assignment can be removed and the field can be dropped.
- - ASoC: Manage mode and rate bits correctly for CS4271 CODEC.
- Manage mode and rate bits correctly, according to datasheet in CS4271 CODEC.
- This is done to make capture work properly.
- - ASoC: Extend range of supported sample rates for CS4271 CODEC.
- Extend range of supported sample rates for CS4271 CODEC.
- - ASoC: Constify i2c_device_id table
- - ASoC: CS4271: Move Chip Select control out of the CODEC code.
- Move Chip Select control out of the CODEC code for CS4271.
- Reviewed-by: H Hartley Sweeten <hsweeten@visionengravers.com>
- - ASoC: Staticise non-exported symbols in cs4271
- - ASoC: cs4271.c: improve error handling
- CS4271 CODEC driver adapted to recently introduced error handling in
- snd_soc_update_bits().
- Added snd_soc_cache_sync() error handling.
- - ASoC: CS4271 codec support
- Added support for CS4271 codec to ASoC.
SoC Codec DA7210
- - ASoC: da7210: Add support for line input and mic
- DA7210 has three line inputs (AUX1 Left, AUX1 Right and AUX2) and
- a stereo MIC. This patch adds gain controls for MIC, AUX1, AUX2 as
- well as INPGA.
- - ASoC: Convert da7210 to devm_kzalloc()
- - ASoC: Fix duplicate const warnings in da7210.c
- - ASoC: da7210: Add support for line out and DAC
- DA7210 has three line outputs. OUT1 Left, OUT1 Right and OUT2 (mono).
- This patch adds support for gain controls for these three line outs.
- It also adds support for overall DAC gain control.
- - ASoC: da7210: Add support for DAPM
- This patch adds support for DAPM covering all inputs and outputs
- as well as ADC and DAC.
- - ASoC: da7210: Add support for ALC and Noise suppression
- This patch adds controls to set following ALC parameters,
- - Max gain, Min gain, Noise gain, Attack rate, Release rate and delay
- It also adds a switch to enable/disable noise suppression.
- As per DA7210 data sheet, ALC and noise suppression can be enabled
- only if certain conditions are met. This condition checks are handled
- by simply using "_EXT" version of controls to capture change events.
- - ASoC: da7210: Add support for mute and zero cross controls
- This patch adds support for below set of controls,
- (1) Mute controls for MIC, AUX and ADC
- (2) Zero cross controls for head phone, AUX, INPGA and line out
- (3) Head phone mode selection - class H or G
- It also adds digital_mute() call back.
- - ASoC: da7210: Add support for High pass and Voice filters for ADC and DAC
- This patch add controls for setting cut-off for high pass and voice
- filters of ADC and DAC. There are also switches to enable/disable
- these filters.
- Also removed hard coded, fixed values of these parameters used by
- previous version of driver.
- - ASoC: da7210: Add support for ADC & DAC equalizers
- This patch adds support for ADC and DAC five band equalizers
- available on DA7210 codec.
- - ASoC: da7210: bugfix for head phone volume control
- This patch takes care of reserved bits of headphone volume
- register by using correct volume range.
- - ASoC: Convert DA7210 to table based DAPM init
- - ASoC: da7210: Add support for other DAI word lengths, format and mode
- This patchs adds support for following,
- (1) DAI 20 and 32 bit word sizes
- (2) DAI left and right justified formats
- (3) DAI slave mode
- - ASoC: da7210: convert to soc-cache
SoC Codec DFBM-CS320 bluethooth
- - ASoC: Add driver for the dfbmcs320 bluetooth module
- This patch adds a codec driver for the dfbmcs320 bluetooth module, which is used
- on the neo1973 boards.
- The patch also modifies the neo1937_wm8753 sound board driver to use the new
- driver instead of registering the bluetooth DAI manually.
- Previously there was a name mismatch between the bluetooth DAI and the bluetooth
- DAI link and the sound card was not instantiated, with this patch the issue is
- no longer present and sound support works again.
SoC Codec DIT SPDI/F
- - ASoC: spdif-dit: Add missing MODULE_*
- MODULE_ALIAS is required so that the module will auto-load based on a
- platform_device registration in the board file.
- While we're at it, add some other MODULE_*.
SoC Codec Freescale SGTL5000
- - ASoC: sgtl5000: update author email address
- Update MODULE_AUTHOR email address.
- - regulator: pass additional of_node to regulator_register()
- With device tree support for regulators, its needed that the
- regulator_dev->dev device has the right of_node attached.
- To be able to do this add an additional parameter to the
- regulator_register() api, wherein the dt-adapted driver can
- then pass this additional info onto the regulator core.
- - ASoC: Convert sgtl5000 to use devm_kzalloc()
- Convert sgtl5000 codec driver to use devm_kzalloc().
- - ASoC: sgtl5000: Fix voltage units in dev_err message
- vdda, vddio and vddd are voltages expressed in milivolts (mV), so use the
- proper annotation.
- - ASoC: sgtl5000: fix DB_RANGE size
- Give the correct number of entries to TLV_DB_RANGE_HEAD to prevent
- reading more data than actually is in the array.
- - ASoC: sgtl5000: Fix wrong mask in some snd_soc_update_bits calls
- Ensure all mask bits are clear before setting new value.
- - ASoC: Use SGTL5000_LINREG_VDDD_MASK instead of hardcoded mask value
- We have defined SGTL5000_LINREG_VDDD_MASK in sgtl5000.h,
- use it instead of hardcoded (0x1 << 4) - 1 for the mask.
- - ASoC: Set sgtl5000->ldo in ldo_regulator_register
- Otherwise calling ldo_regulator_remove() does not unregister regulator
- and free memories.
- - ASoC: sgtl5000: Fix setting mic bias resistor
- According to the datasheet:
- CHIP_MIC_CTRL 0x002A
- BITS[9:8] BIAS_RESISTOR
- 0x0 = Powerd off
- 0x1 = 2.0 kohm
- 0x2 = 4.0 kohm
- 0x3 = 8.0 kohm
- To set mic bias resistor, we need to update bits[9:8] of
- SGTL5000_CHIP_MIC_CTRL register.
- - ASoC: sgtl5000: Fix define for SGTL5000_BIAS_R_MASK
- According to the datasheet:
- CHIP_MIC_CTRL 0x002A
- BITS[9:8] BIAS_RESISTOR
- 0x0 = Powerd off
- 0x1 = 2.0 kohm
- 0x2 = 4.0 kohm
- 0x3 = 8.0 kohm
- Thus SGTL5000_BIAS_R_MASK should be defined as 0x0300 instead of 0x0200.
- - ASoC: sgtl5000: fix module device table type for sgtl5000_dt_ids
- The module device table for of_device_id should use "of" type.
- - ASoC: sgtl5000: add device tree probe support
- It adds device tree probe support for sgtl5000 driver.
- - ASoC: sgtl5000: fix cache handling
- Cache handling in this driver is broken. The chip has 16-bit registers, yet the
- register numbers also increase by 2 per register, i.e. there are only
- even-numbered registers. The cache in this driver, though, simply increments
- register numbers, so it does need some mapping as seen in
- sgtl5000_restore_regs(), note the '>> 1':
- snd_soc_write(codec, SGTL5000_CHIP_LINREG_CTRL,
- cache[SGTL5000_CHIP_LINREG_CTRL >> 1]);
- That, of course, won't work with snd_soc_update_bits(). (Thus, we won't even
- notice the missing register 0x1c in the default regs which shifted all follwing
- registers to wrong values.) Noticed on the MX28EVK where enabling the regulators
- simply locked up the chip.
- Refactor the routines and use a properly sized default_regs array which matches
- the register layout of the underlying chip, i.e. create a truly flat cache.
- This also saves some code which should make up for the bigger array a little.
- When soc-core will somewhen have another cache type which handles a step size,
- this conversion will also ease the transition.
- Tested-by: Dong Aisheng <b29396@freescale.com>
- Tested-by: Shawn Guo <shawn.guo@linaro.org>
- - ASoC: sgtl5000: guide user when regulator support is needed
- Print a hint when the user has a setup where CONFIG_REGULATOR is really
- needed to make the driver work.
- Tested-by: Dong Aisheng <b29396@freescale.com>
- Tested-by: Shawn Guo <shawn.guo@freescale.com>
- - ASoC: sgtl5000: refactor registering internal ldo
- The code for registering the internal ldo was present twice. Turn it
- into a function instead. Also, inform the user if LDO is used now.
- Tested-by: Dong Aisheng <b29396@freescale.com>
- Tested-by: Shawn Guo <shawn.guo@freescale.com>
- - ASoC: Support !REGULATOR build for sgtl5000
- The regulator is optional depending on board design.
- - ASoC: sgtl5000: use after free in ldo_regulator_register()
- The "ldo" variable was dereferenced after free on the error path.
- - ASoC: Staticise non-exported symbols in SGTL5000
- - ASoC: remove unnecessary header including in SGTL5000 codec driver
- Remove unnecessary headers:
- - mach/hardware.h in sgtl5000.c
- - linux/i2c.h in sgtl5000.h
- - ASoC: Add Freescale SGTL5000 codec support
- Add Freescale SGTL5000 codec support.
- Supported features:
- - line-in and mic input
- - headphone and line-out output
- - line-in bypass ADC and DAC to headphone
- - 16, 20, 24, 32 bit audio
- - 8 ~ 96k sample rates
SoC Codec General Digital MICs
- - ASoC: DMIC codec - Add input widget
- Digital microphones can have some additional elements in their
- audio path (like microphone bias). An input widget is required
- for digital microphone CODEC driver to allow external connections
- in machine drivers.
SoC Codec Ingenic JZ4740
- - ASoC: Convert jz4740 to devm_kzalloc()
- - ASoC: Include linux/io.h for jz4740 codec
- Include linux/io.h to fix below build errors:
- CC sound/soc/codecs/jz4740.o
- sound/soc/codecs/jz4740.c: In function 'jz4740_codec_read':
- sound/soc/codecs/jz4740.c:82: error: implicit declaration of function 'readl'
- sound/soc/codecs/jz4740.c: In function 'jz4740_codec_write':
- sound/soc/codecs/jz4740.c:92: error: implicit declaration of function 'writel'
- sound/soc/codecs/jz4740.c: In function 'jz4740_codec_probe':
- sound/soc/codecs/jz4740.c:373: error: implicit declaration of function 'ioremap'
- sound/soc/codecs/jz4740.c:373: warning: assignment makes pointer from integer without a cast
- sound/soc/codecs/jz4740.c:393: error: implicit declaration of function 'iounmap'
- make[3]: *** [sound/soc/codecs/jz4740.o] Error 1
- make[2]: *** [sound/soc/codecs] Error 2
- make[1]: *** [sound/soc] Error 2
- make: *** [sound] Error 2
- - ASoC: codecs: JZ4740: Convert to table based controls and DAPM setup
- Use the newly introduced dapm_widgets, dpam_routes and controls fields of the
- snd_soc_dai_driver struct to setup controls and DAPM.
- - ASoC: codecs: JZ4740: Fix OOPS
- Commit ce6120cc(ASoC: Decouple DAPM from CODECs) changed the signature of
- snd_soc_dapm_widgets_new to take an pointer to a snd_soc_dapm_context instead of
- a snd_soc_codec. The call to snd_soc_dapm_widgets_new in jz4740_codec_dev_probe
- was not updated to reflect this change, which results in a compiletime warning
- and a runtime OOPS.
- Since the core code calls snd_soc_dapm_widgets_new after the codec has been
- registered it can be dropped here.
SoC Codec LM4857
- - ASoC: Convert lm4857 to devm_kzalloc()
- - ASoC: Remove references to linux@wolfsonmicro.com
- - ASoC: neo1973_wm8753: Move lm4857 specefic code to its own module
- This patch moves the code for the lm4857 AMP from the neo1973_wm8753 sound
- board driver to its own module.
- The lm4857 is a generic AMP IC and not specific to the neo1973.
SoC Codec MAX98088
- - ASoC: Convert max98088 to devm_kzalloc()
- - ASoC: max98088 codec: Catch driver bugs for eq channel name
- Move the EQ channel names to a separate array and iterate over it in
- max98088_get_channel rather than duplicating the hardcoded channel
- names. Add an error message if an invalid channel is passed and check
- the error in the callers.
- Also added a BUILD_BUG_ON to ensure that the eq_mode_name and controls
- arrays are the same size.
- - ASoC: Remove unused "control_data" field of struct max98088_priv
- The control_data field is used to initialize the codec's control_data field,
- but since this is also done by the snd-soc-cache core, the redundant
- assignment can be removed and the field can be dropped.
- - ASoC: Remove redundant freq assignment for
- max98095->sysclk/max98088->sysclk
- Current implementation set max98095->sysclk/max98088->sysclk to freq twice.
- Set it once is enough, this patch removes the first assignment in case
- we may set invalid clock frequency to max98095->sysclk/max98088->sysclk.
- - ASoC: codecs: max98088: Added digital mute function in DAI1 and DAI2
- Added digital mute function in DAI1 and DAI2.
- - ASoC: codecs: max98088: Moved the EX Limiter Mode from dapm widget to control
- Moved the EX Limiter Mode from dapm widget to control, because it was not
- required DAPM route.
- - ASoC: codecs: max98088: Fixed invalid register definitions in mixer controls
- Fixed invalid register definitions in mixer controls such as left
- speaker mixer, left hp mixer and left rec mixer.
- - ASoC: Use data based init for max98088 DAPM
SoC Codec MAX98095
- - ASoC: Convert max98095 to devm_kzalloc()
- - ASoC: max98095: Convert codec->hw_write to snd_soc_write
- codec->hw_write is broken now, convert codec->hw_write to snd_soc_write.
- The hardware has 2 banks of registers sharing a section in I2C register space.
- The 1st bank is the primary one and is cached.
- The 2nd bank is for loading coefficients only and they do not need cache.
- These coefficients registers are therefore direct writes.
- Thus we set cache_bypass flag to deal with this before calling snd_soc_write.
- - ASoC: max98095 codec: Catch driver bugs for biquad channel name
- Move the biquad channel names to a separate array and iterate over it in
- max98095_get_bq_channel rather than duplicating the hardcoded channel
- names. Add an error message if an invalid channel is passed and check
- the error in the callers.
- Also added a BUILD_BUG_ON to ensure that the bq_mode_name and controls
- arrays are the same size.
- - ASoC: Remove unused "control_data" field of struct max98095_priv
- The control_data field is used to initialize the codec's control_data field,
- but since this is also done by the snd-soc-cache core, the redundant
- assignment can be removed and the field can be dropped.
- - ASoC: codecs: Max98095: Fix logging of hardware revision.
- The base hardware revision of the Maxim 98095 part is 0x40; the code
- which outputs the revision of the hardware has been updated to
- properly use uppercase alphabetic values for the revision numbers.
- Also, the use of a constant for the length 'max98095_dai' has been
- replaced with ARRAY_SIZE().
- - ASoC: Max98095: Move existing NULL check before pointer dereference.
- Visual inspection shows that max98095_put_eq_enum() and
- max98095_put_bq_enum() each have a possible NULL deref of 'pdata'.
- This change moves the NULL check above the use.
- - ASoC: Add EQ and filter to max98095 CODEC driver
- This patch adds the equalizer and biquad filter controls.
- - ASoC: Remove redundant freq assignment for
- max98095->sysclk/max98088->sysclk
- Current implementation set max98095->sysclk/max98088->sysclk to freq twice.
- Set it once is enough, this patch removes the first assignment in case
- we may set invalid clock frequency to max98095->sysclk/max98088->sysclk.
- - ASoC: Add max98095 CODEC driver
- This patch adds the MAX98095 CODEC driver.
SoC Codec MAX9850
- - ASoC: Convert max9850 to devm_kzalloc()
- - ASoC: Convert max9850 to table based DAPM and control init
- - ASoC: Fix spacing in MAX8950
- - ASoC: Add MAX9850 codec driver
- This patch adds ASoC support for the MAX9850 codec with headphone
- amplifier.
- Supported features:
- - Playback
- - 16, 20 and 24 bit audio
- - 8k - 48k sample rates
- - DAPM
SoC Codec MAX9877
- - ASoC: max9877: Update register if either val or val2 is changed
- In the case of ((max9877_regs[reg] >> shift) & mask) != val
- but ((max9877_regs[reg2] >> shift) & mask) == val2,
- current code does not update the registers.
- Fix the logic to update registers if either val or val2 is changed.
SoC Codec Philips UDA134x
- - ASoC: UDA134x: Remove POWER_OFF_ON_STANDBY define.
- Define POWER_OFF_ON_STANDBY cause trobles when trying to get some
- sound from codec because code for bias setup was not compiled
- (define wasn't defined). This define was removed in commit:
- cc3202f5 but again introduced by commit: f0fba2ad1 which then
- completely break codec functionality so remove it again.
- - ASoC: mini2440: Fix uda134x codec problem.
- ASoC audio for mini2440 platform in current kenrel doesn't work.
- First problem is samsung_asoc_dma device is missing in initialization.
- Next problem is with codec. Codec is initialized but never probed
- because no platform_device exist for codec driver. It leads to errors
- during codec binding to asoc dai. Next problem was platform data which
- was passed from board to asoc main driver but not passed to codec when
- called codec_soc_probe().
- Following patch should fix issues. But not sure if in correct way.
- Please review.
SoC Codec Philips UDA1380
- - ASoC: Convert uda1380 to devm_kzalloc()
- - ASoC: Convert uda1380 to table based DAPM and control init
- - ASoC: uda1380: Convert to gpio_request_one()
- Using gpio_request_one can make the error handling simpler.
- Also remove a redundant "Failed to issue reset" error message.
- We already show the error message in uda1380_reset() error path.
- - ASoC: uda1380: Return proper error in uda1380_modinit failure path
- Return proper error for uda1380_modinit if i2c_add_driver() fails.
SoC Codec RT5631
- - ASoC: Convert rt5631 to devm_kzalloc()
- - ASoC: rt5631: fix DB_RANGE size
- Give the correct number of entries to TLV_DB_RANGE_HEAD to prevent
- the last entry from being omitted.
- - ASoC: rt5631: Remove unused codec field from struct rt5631_priv
- - ASoC: Remove unused function check_vdac_to_outmix from rt5631
- - ASoC: Staticise non-exported symbols in rt5631
- - ASoC: Staticize rt5631_dai
- - ASoC: Add driver for rt5631
SoC Codec SSM2602
- - ASoC: Convert ssm2602 to devm_kzalloc()
- - ASoC: ssm2602: Use snd_soc_update_bits for read-modify-write
- Use snd_soc_update_bits for read-modify-write register access instead of
- open-coding it using snd_soc_read and snd_soc_write
- - ASoC: ssm2602: Support setting the oscillator and the clock output state
- Currently the oscillator is always enabled and the clock output is always
- disabled. This patch adds support for controlling the oscillator and clock
- output state through snd_soc_dai_set_sysclk. Which makes it possible to
- disable or enable them dynamically according to the requirements of the board
- on which the CODEC is used.
- This patch also slightly modifies the behavior as to when the oscillator is
- going to be disabled in low-power states. Previously it would only be disabled
- in BIAS_OFF, now it is also going to be disabled in BIAS_STANDBY, since no
- components which depend on it should be active in this state.
- - ASoC: ssm2602: Set initial bias level to standby
- Set the initial bias level to standby during CODEC probe instead of leaving the
- CODEC powered off.
- - ASoC: ssm2602: Re-enable oscillator after suspend
- Currently the the internal oscillator is powered down when entering BIAS_OFF
- state, but not re-enabled when going back to BIAS_STANDBY. As a result the
- CODEC will stop working after suspend if the internal oscillator is used to
- generate the sysclock signal. This patch fixes it by clearing the appropriate
- bit in the power down register when the CODEC is re-enabled.
- - ASoC: ssm2602: Do not dereference codec->control_data
- The driver assumes that control_data points to the drivers i2c_client struct,
- but this is no longer the case since the ASoC core has switched to regmap.
- - ASoC: Fix NULL vs. 0 warning in SSM2602
- sparse complains if 0 is used as a NULL pointer constant.
- - ASoC: SSM2602: Provide dB ranges for the volume controls
- Also fix the maximum value for the capture volume control.
- - ASoC: SSM2602: Model power supply for the digital core as a DAPM widget
- Model the power supply for the digital core as a DAPM_SUPPLY widget. This allows
- to cleanup the code a bit.
- - ASoC: SSM2602: Add entry for the ssm2603 to the device id table
- The SSM2603 is mostly register compatible with the SSM2602 and can be supported
- by the current driver without any changes.
- - ASoC: SSM2602: Add SSM2604 support
- The SSM2604 is basically a lightweight variant of the SSM2602 with a compatible
- register layout. Thus we can easily support both devices by the same driver,
- by providing a slightly set of controls, widgets and routes.
- Compared to the SSM2602 the SSM2604 has no microphone input and no headphone
- output.
- - ASoC: SSM2602: Fix reg_cache_size
- reg_cache_size is supposed to be the number of elements in the register cache,
- not the size in bytes.
- - ASoC: SSM2602: Do not power the codec up in probe
- It is not required to have the codec powered at this stage and DAPM will power
- the ADC and DAC down again after probe has run anyway.
- Thus we avoid some unnecessary writes by this change.
- - ASoC: SSM2602: Fix default register cache
- Some of the values in the default register cache did not represent the codecs
- state after reset. This patch fixes it.
- - ASoC: SSM2602: Remove unused struct and define
- Those are leftovers from a pre-multicomponent era.
- - ASoC: SSM2602: Remove duplicate control
- There are currently two controls which allow selecting the capture source, one
- as a normal control, the other as part of a DAPM_MUX widget.
- Remove the normal control.
- - ASoC: SSM2602: Cleanup coeff handling
- Drop unused field from the coeff struct, precalculate the srate register at
- compile-time and cleanup up the naming.
- - ASoC: SSM2602: Fix 'Mic Boost2' control
- The 'Mic Boost2' control's shift was off by one and thus was not working.
- - ASoC: SSM2602: Properly annotate i2c probe and remove functions
- Annotate the i2c probe and remove functions with __devinit and __devexit.
- - ASoC: SSM2602: add SPI support
- The ssm2602 codec has a SPI interface as well as I2C, so add the simple
- bit of glue to make it usable.
- - ASoC: SSM2602: convert to soc-cache
- - ASoC: SSM2602: fix codec name
- The codec name should not have a "-codec" suffix since this is not part of
- a MFD. This was incorrectly changed during the multi-component updated.
SoC Codec STA32X
- - ASoC: sta32x: Optimize the array work to find rate_min and rate_max
- For a given ir and fs, there is at most one possible match for the case
- mclk_ratios[ir][j].ratio * fs == freq.
- Thus we can break from the inner loop once a match is found.
- - ASoC: Convert sta32x to devm_kzalloc()
- - ASoC: Staticise non-exported symbols in sta32x
- - ASoC: sta32x: add workaround for ESD reset issue
- sta32x resets and loses all configuration during ESD test.
- Work around by polling the CONFA register once a second
- and restore all coeffcients and registers when CONFA
- changes unexpectedly.
- - ASoC: sta32x: add platform data definition
- Add a structure for platform specific configuration and use it,
- thereby removing a few FIXMEs which marked hard-coded values.
- - ASoC: sta32x: preserve coefficient RAM
- The coefficient RAM must be saved in a shadow so it can
- be restored when the codec is powered on using
- regulator_bulk_enable().
- - ASoC: sta32x: Write the register default value to cache for reserved registers
- Chip documentation explicitly requires that the reset values
- of reserved register bits are left untouched.
- codec->hw_read is broken now.
- Here we use below trick to avoid writing to reserved registers while resume.
- Write the register default value to cache for reserved registers,
- so the write to the these registers are suppressed by the cache
- restore code when it skips writes of default registers.
- - ASoC: sta32x: Set reg_cache_default to sta32x_regs
- - ASoC: sta32x: Move resource allocation and release to the corresponding callback functions
- This patch includes below small fixes:
- 1. Move sta32x_set_bias_level() from sta32x_i2c_remove() to sta32x_remove().
- 2. Remove a redundant regulator_bulk_free() call in sta32x_i2c_remove(),
- as we will call regulator_bulk_free() in sta32x_remove().
- 3. Remove unneeded snd_soc_codec_set_drvdata(codec, NULL) in sta32x_i2c_remove.
- The i2c core will set the clientdata to NULL.
- Johannes Stezenbach <js@sig21.net>
- - ASoC: sta32x: shortcut the for loop to get ir and mcs
- There is exactly one match or no match at all during the for loop iteration,
- thus we can break from the for loop once a match is found.
- - ASoC: sta32x: Fix a memory leak if snd_soc_register_codec fails
- - ASoC: STA32x: Preserve reserved register bits
- Chip documentation explicitly requires that the reset values
- of reserved register bits are left untouched. It is possible
- there are differences between STA326 and STA328 or future
- chip revisions in these bits, and clobbering them might
- cause malfunction.
- - ASoC: STA32x: Add mixer controls for biquad coefficients
- The STA32x has a number of preset EQ settings, but also
- allows full user control of the biquad filter coeffcients
- (when "Automode EQ" is set to "User").
- Each biquad has five signed, 24bit, fixed-point coefficients
- representing the range -1...1. The five biquad coefficients
- can be uploaded in one atomic operation into on-chip
- coefficient RAM.
- There are also a few prescale, postscale and mixing
- coefficients, in the same numeric format and range
- (a negative coefficient inverts phase).
- These coefficients are made available as SNDRV_CTL_ELEM_TYPE_BYTES
- mixer controls.
- - ASoC: add STA32X codec driver
- [zonque@gmail.com: transform to new ASoC structure]
SoC Codec STAC9766
- - ASoC: Fix reg_cache_size for stac9766
- reg_cache_size is supposed to be the number of elements in the register cache,
- not the size in bytes.
SoC Codec SigmaDSP Firmare Loader
- - ASoC: SigmaDSP: Add regmap support
- Add support for loading the SigmaDSP firmware using regmap. This allows us
- to transparently use SPI or I2C as the transport protocol on devices which
- support them.
- For now we keep the old I2C support since we have one user of this which is not
- straight forward to convert to regmap, due to variable length registers.
- - ASoC: SigmaDSP: Move private structs and functions to C file
- Move the structs and functions only used by SigmaDSP firmware loader itself
- from the header to the C file.
- - ASoC: SigmaDSP: Provide diagnostic error messages
- Provide some error messages when loading the firmware fails, so it is possible
- to diagnose the reason for the failure.
SoC Codec TI sn95031
- - ASoC: Remove needless codec->dapm.bias_level assignment to SND_SOC_BIAS_OFF
- This assignment is done by the snd_soc_register_codec so there is no need
- to redo it in probe function of a codec driver.
- - ASoC: sn95031: Do not use static variable for channel_index
- No reason to use static variable for channel_index.
- - ASoC: Drop exporting sn95031_get_mic_bias
- sn95031_get_mic_bias() is not used outside this driver
- and it is a static function now.
- Thus drop exporting sn95031_get_mic_bias.
- - ASoC: Staticize sn95031_dais
- - ASoC: sn95031: Staticize sn95031_pcm_hw_params
- - ASoC: sn95031: Fix the logic to find free channel
- In the case of no free channel available,
- current implementation returns 0 instead of negative errno.
- This patch fixes the logic to return -EINVAL if no free channel available.
- - ASoC: sn95031: decorate function with __devexit_p()
- According to the comments in include/linux/init.h:
- "Pointers to __devexit functions must use __devexit_p(function_name), the
- wrapper will insert either the function_name or NULL, depending on the config
- options."
- Fix this issue in codecs sn95031.
- - sound: Add delay.h to sound/soc/codecs/sn95031.c
- This is further fallout from delay.h removal from asm/apic.h and asm/dma.h:
- ca444564a947: x86: Stop including <linux/delay.h> in two asm header files
- Which caused this build failure:
- sound/soc/codecs/sn95031.c: In function ‘sn95031_get_mic_bias’:
- sound/soc/codecs/sn95031.c:153:2: error: implicit declaration of function ‘msleep’ [-Werror=implicit-function-declaration]
- LKML-Reference: <20110325152014.297890ec@endymion.delvare>
- - ASoC: Use data based init for sn95031 DAPM
- - ASoC: sn95031: fix the amic tlv scale
- The tlv scale is defined as (min, step, mute). The mute is not supported here so
- put the value to 0
- - ASoC: sn95031: fix the DMIC path routing
- This patch makes the DMIC dynamically connect to TX Mux, earlier code had
- erroneously made this as static path
- - ASoC: sn95031: make playback rails depend on actual pins they control
- This patch makes the codec playback rails (headset and speaker) depend on
- actual pins they control. This enables better power management of the codec
- - ASoC: mid-x86: Use the soc-jack apis for jack type detection
- This patch modifies the mfld_machine to use the new jack apis for adding the
- voltage zones for jack type detection. It also modifed TI sn95031 codec driver
- to use these new apis
- - ASoC: sn95031: Add support for reading mic bias
- This patch adds support to read the mic bias voltage
- when a jack is inserted. It uses ADC to measure.
- - ASoC: sn95031: Add jack support in the codec
- This patch adds support for jack detection and reporting in the codec
- It however is not fully functional as it doesn't measure adc to figure
- out what got inserted which will be added later
- - ASoC: sn95031: add capture support
- This patch adds the support for capture path in sn95031 codec.
- This codec supports upto 6DMICs, 2 AMICs and Linein. The linein and AMICs
- are connected through a MUX to ADC. The TX paths can be assigned to any of the
- ADCs or DMICs.
SoC Codec TLV320AIC23
- - ASoC: Convert tlv320aic23 to devm_kzalloc()
- - ASoC: tlv320aic23: Clear TLV320AIC23_MS_MASTER bit for slave mode
- According to the datasheet:
- Digital Audio Interface Format (07h) register:
- BIT6: Master/slave mode
- 0: Slave
- 1: Master
- Current code sets TLV320AIC23_MS_MASTER bit for master mode,
- but does not clear it for slave mode.
- - ASoC: tlv320aic23: convert to soc-cache
- - ASoC: Consolidate use of controls with custom get/put function
- Use the macros for controls require custom get/put function.
- This is to make sure that the soc_mixer_control is used
- consistently among the drivers.
- - ASoC: Use data based init for tlv320aic23 DAPM
SoC Codec TLV320AIC26
- - ASoC: Convert tlv320aic26 to devm_kzalloc()
- - audio: tlv320aic26: fix PLL register configuration
- The current PLL configuration code for the tlc320aic26 codec appears to assume a
- hardcoded system clock of 12 MHz. Use the clock value provided by the DAI_OPS
- API for the calculation.
- Tested using a MityDSP-L138 platform providing a 24.576 MHz clock.
SoC Codec TLV320AIC3X
- - ASoC: Convert tlv320aic3x to devm_kzalloc()
- - ASoC: Remove conditional I2C usage from tlv320aic3x driver
- The driver only supports I2C so doesn't need to do things conditionally.
- - ASoC: tlv320aic3x: Use snd_soc_update_bits for read-modify-write
- Use snd_soc_update_bits for read-modify-write register access instead of
- open-coding it using snd_soc_read and snd_soc_write
- - ASoC: tlv320aic3x: Clear BIT_CLK_MASTER and WORD_CLK_MASTER bits for for slave mode
- According to the datasheet:
- Page0 / Register8: Audio Serial Data interface Control Register A
- BIT 7: Bit Clock Directional Control
- 0: Bit clock is an input (slave mode)
- 1: Bit clock is an output (master mode)
- BIT 6: Word Clock Directional Control
- 0: Word clock is an input (slave mode)
- 1: Word clock is an output (master mode)
- Current code sets BIT_CLK_MASTER and WORD_CLK_MASTER bits for master mode,
- but does not clear these bits for slave mode.
- - ASoC: tlv320aic3x: Convert codec->hw_read to snd_soc_read
- codec->hw_read is broken now, let's covert to snd_soc_read.
- - ASoC: Fix DAPM sync for TLV320AIC3x custom DAPM widget
- We really should be doing this in the core, not in a driver...
- Tested-by: Jarkko Nikula <jarkko.nikula@bitmer.com>
- - ASoC: tlv320aic3x: Use driver_data field of struct i2c_device_id to identify models
- Save model information in driver_data so we can simplify the implementation.
- - ASoC: Remove unused "control_data" field of struct aic3x_priv
- The control_data field is used to initialize the codec's control_data field,
- but since this is also done by the snd-soc-cache core, the redundant
- assignment can be removed and the field can be dropped.
- - ASoC: omap: Update e-mail address of Jarkko Nikula
- My gmail account got disabled and I'm not going to reopen it.
- - ASoC: tlv320aic3x: Add correct hw registers to Line1 cross connect muxes
- Commit af46800 ("ASoC: Implement mux control sharing") revealed that
- "Left Line1[L | R] Mux" and "Right Line1[L | R] Mux" widgets were pointing
- to the same kcontrols and codec registers and thus soc-core falsely detected
- them as shared controls. This is actually wrong since there are separate
- registers in hardware that configure Line1L to RADC and Line1R to LADC cross
- connects so these muxes should not be shared.
- - ASoC: tlv320aic3x: Do soft reset to codec when going to bias off state
- TLV320AIC33, TLV320AIC34 and I believe others too in this family have some
- hw bugs that cause that analogue and digital VDD supplies remain leaking
- up to a few mA of current after certain use cases even the hw blocks inside
- codec are driven to off.
- Highest leakages occur after using the bypass paths inside codec but it
- is possible to get smaller leakages just by toggling mute switches in
- unused audio paths (i.e. no DAPM changes) while codec is on due another
- active audio path.
- While some cases are able to workaroud by making sure that e.g. output mixer
- switches are muted before powering down the output stage this doesn't help
- all the cases.
- Therefore use the software reset command to clear possible leakage currents
- since that works in every cases and affects only this codec instance. Only
- drawback is that now cache sync is required everytime when codec bias comes
- out from bias off state, not only when supply regulators were off.
- - ASoC: tlv320aic3x: Don't sync first two registers from register cache
- There is no need to sync first two registers from cache to hw after a reset.
- First one is used to select page for register access and this driver is
- normally accessing page 0 only. Second one does a software reset which is
- obviously unneeded after hardware or previous software reset command.
- - ASoC: Fix wrong data type access in a few codec drivers
- Commit fafd217 ("ASoC: Store a list of widgets in a DAPM mux/mixer kcontrol")
- changed the control private data type that is passed to snd_soc_cnew when
- creating dapm mixer and mux controls. Commit did not update a few codec
- drivers that are using their own put callbacks and thus are accessing a
- wrong data type.
- Tested-by: Stephen Warren <swarren@nvidia.com>
SoC Codec TLV320DAC33
- - ASoC: Convert tlv320dac33 to devm_kzalloc()
- - ASoC: tlv320dac33: Convert to table based init
- - ASoC: tlv320dac33: Add guarding parentheses to macros
- Put parentheses around macro argument uses. This avoids pitfalls
- for the programmer, where the argument expansion does not give the
- expected result, for example:
- SAMPLES_TO_US(substream->runtime->rate, dac33->uthr - DAC33_MODE7_MARGIN + 1);
- - ASoC: tlv320dac33: Update e-mail address
- - ASoC: tlv320dac33: Lower the OSC calibration time
- To get correct calibration, we can decrease the time
- needed for the OSC to calibrate itself.
- With this change we can save ~15ms in the OSC
- calibration phase.
- - ASoC: tlv320dac33: Move codec power up to DAPM
- Move the codec power on (in reg 0x01, bit 4) from
- set_bias_level:SND_SOC_BIAS_ON to a DAPM supply.
- In this way we can be sure, that all the things within
- the codec is powered before the external amp is
- going to be enabled.
- - ASoC: tlv320dac33: Restore L/R DAC power control register
- Register 0x40, 0x41 need to be restored after power up, since
- it contains gain related fields, which affects playback volume.
- - ASoC: tlv320dac33: Fix inconsistent spinlock usage
- The lock is used within the interrupt handler.
- Correct the spinlock usage, and use irqsave/irqrestore
- flavour of spin_lock/unlock.
- - ASoC: tlv320dac33: add MODULE_DEVICE_TABLE
- The device table is required to load modules based on modaliases.
SoC Codec TPA6130A2
- - ASoC: Convert tpa6130a2 to devm_kzalloc()
- - ASoC: tpa6130a2: Remove model_id from platform data
- The model_id is no longer needed within the platform_data
- for the TPA driver since the model of TPA specified
- with the device name (tpa6130a2/tpa6140a2).
- Also update rx51 (the only affected user) to use the device name rather
- than platform data.
- Tested-by: Jarkko Nikula <jarkko.nikula@bitmer.com>
- - ASoC: tpa6130a2: Model support cleanup
- Use the device name and driver_data to identify
- the TPA model supported by the driver.
- Board files should use either "tpa6130a2" or
- "tpa6140a2" as device name to specify the model
- in used on the specific board.
- Tested-by: Jarkko Nikula <jarkko.nikula@bitmer.com>
- - ASoC: tpa6130a2: Remove obsolete cleanup for clientdata
- The i2c core will clear the clientdata pointer automatically,
- we don't have to set the `data' field to NULL in remove() or
- if probe() failed anymore.
- - ASoC: tpa6130a2: Update e-mail address
SoC Codec TWL4030
- - ASoC: twl4030: Convert to table based init
- - ASoC: Consolidate use of controls with custom get/put function
- Use the macros for controls require custom get/put function.
- This is to make sure that the soc_mixer_control is used
- consistently among the drivers.
- - MFD: twl4030-audio: Rename platform data
- Allign the platform data names for twl4030 audio submodule:
- twl4030_audio_data: for the core MFD driver
- twl4030_codec_data: for ASoC codec driver
- twl4030_vibra_data: for the input/ForceFeedback driver
- To avoid breakage, change all depending drivers, files
- to use the new types.
- - MFD: twl4030-codec -> twl4030-audio: Rename the driver
- Rename the driver, and header file from twl4030-codec to
- twl4030-audio.
- To avoid breakage change depending drivers at the same time.
- - mfd: Use mfd cell platform_data for twl4030 codec cells platform
- bits
- With the addition of a platform device mfd_cell pointer, MFD drivers
- can go back to passing platform data back to their sub drivers.
- This allows for an mfd_cell->mfd_data removal and thus keep the
- sub drivers MFD agnostic. This is mostly needed for non MFD aware
- sub drivers.
- - mfd: mfd_cell is now implicitly available to twl4030 drivers
- The cell's platform_data is now accessed with a helper function;
- change clients to use that, and remove the now-unused data_size.
- - mfd: Use mfd cell platform_data for twl4030 codec cells platform bits
- With the addition of a platform device mfd_cell pointer, MFD drivers
- can go back to passing platform data back to their sub drivers.
- This allows for an mfd_cell->mfd_data removal and thus keep the
- sub drivers MFD agnostic. This is mostly needed for non MFD aware
- sub drivers.
- - ASoC: Fix spacing in MAX8950
SoC Codec TWL6040
- - ASoC: twl6040 - Add method to query optimum PDM_DL1 gain
- The DL1 PDM interface adds a little gain depending on the output device.
- Add a method to retrieve the gain value for machine driver usage.
- - ASoC: twl6040: Request core to inline the DAPM sequence
- We need to have as less time between McPDM shutdown,
- and power down of the DAC on the twl6040 codec as possible.
- Request core to ignore the pmdown_time for the playback
- stream.
- Backround: with the McPDM protocol we are sendning not only
- the pure audio stream, but OMAP McPDM also transmits
- additional information (for example offset cancellation).
- If McPDM is stopped prior to the DAC this information will
- be not sent to the codec, which can result noise rendered
- by the twl6040 codec.
- - ASoC: twl6040: Rename the Earphone Driver event handler
- Since the event handler is only used by the Earphone Driver, it is better
- to rename it from twl6040_power_mode_event to twl6040_ep_drv_event.
- - ASoC: twl6040: Change event ordering for Earphone driver
- It is better to switch HS Power Mode (if it was in low power mode) before
- we enable the Earpiece driver. The switched off EP driver can filter out
- noise coming from the Low Power to High Performance transition on the
- HSL DAC.
- - ASoC: twl6040: Remove PLL usage restrictions
- There is no limitation dictated by outputs or inputs regarding to the
- selected PLL (LP/HP).
- Remove the checks for this, and allow all path with any PLL configuration.
- - ASoC: twl6040: Remove Capture restriction for 17.64MHz sysclk
- Capture is supported in all PLL configuration.
- - ASoC: twl6040: Workaround for headset DC offset caused pop noise
- Both Headset DAC need to be turned on/off at the same time before
- any of the output drivers are enabled (HS Left/Right, Earpiece).
- Move the HS DAC enable code to sequenced DAPM_SUPPLY, and attach
- it to the DACs.
- - ASoC: twl6040: Support for vibra output paths
- twl6040 have two vibra output drivers.
- They can be operated with audio stream coming through
- the PDM interface (fifth channel).
- The vibra outputs can be controlled via the input/FF
- driver as well.
- Selection between the two mode is implemented within
- the codec driver, the input/FF driver can only operate if
- the routing is set to "Input FF".
- Changing from "Input FF" to "Audio PDM" mode is protected
- as well: The switchin can only be done, if there is no
- running effect from the input/FF.
- - ASoC: twl6040: Convert to table based init
- - ASoC: twl6040: Warn user in twl6040_put_volsw for error case
- Let the user know, that the callback has been called with unexpected
- register parameter.
- - ASoC: twl6040: Simply call snd_soc_put_volsw form the custom code
- The ASoC core now have one callback function, which can handle
- single, and double register mixer controls.
- - ASoC: twl6040: Prepare for core put_volsw/volsw_2r merger
- Avoid using the mc->rreg to identify the 2r type of gain control.
- Introduce a variable to track this.
- This change is needed to avoid breakage with the upcoming volsw volsw_2r
- merger.
- - ASoC: twl6040: Simplify custom get_volsw callback
- The custom get_volsw does not need to call any core get_volsw calls,
- since we are returning the shadow values for the gains.
- Return -EINVAL in the unlikely event, if the function has been called
- for unhandled control. This way we can remove one check in the code.
- - ASoC: Consolidate use of controls with custom get/put function
- Use the macros for controls require custom get/put function.
- This is to make sure that the soc_mixer_control is used
- consistently among the drivers.
- - ASoC: twl6040: Simplify custom put_volsw callback
- Return -EINVAL in the unlikely event, if the function has been called
- for unhandled control. This way we can remove one check in the code.
- - ASoC: twl6040: Simplify code in out_drv_event for pending work check
- Instead of checking, if the work is pending, it is safer to cancel
- the pending work, or wait till the scheduled work finishes.
- This way we can avoid modifying the variables used by the work
- function.
- Since we know that no work is pending, we can remove the two additional
- checks in POST_PMU, and PRE_PMD for non pending works.
- - ASoC: twl6040: Shift 2 identifies the HS output in out_drv_event
- None of the driver handled by out_drv_event have it's power
- bit shifted by 3.
- Remove the case for shift 3, and also add comment for the cases.
- - ASoC: twl6040: correct loop counters for HS/HF ramp code
- The Headset gain range is 0 - 0xf (4 bit resolution)
- The Handsfree gain range is 0 - 0x1d (5 bit resolution,
- 0x1e, and 0x1f values are invalid)
- - ASoC: twl6040: One workqueue should be enough
- It is a bit overkill to have three (3) separate
- workqueue for a single driver.
- We can manage things with one workqueue nicely.
- - ASoC: twl6040: No need to change delay during HF ramp
- The Handsfree gain have 2dB steps all the way, so there is no
- reason to have different delays as we approaching to the
- end of the scale.
- The comment was also wrong, since we have 0dB at 0x3 raw, at 16 the gain
- is -26dB.
- - ASoC: twl6040: No need to change delay during HS ramp
- The Headset gain have 2dB steps all the way, so there is no
- reason to have different delays as we approaching to the
- end of the scale.
- The comment was also wrong, since we have 0dB at 0x0 raw at
- one end of the range, and not in the middle.
- - ASoC: twl6040: Move the delayed_work for HS detection under twl6040_jack_data
- The delayed_work named 'delayed_work' is for the headset detection,
- so move it to the twl6040_jack_data struct.
- - ASoC: twl6040: Move delayed_work struct inside twl6040_output for HS/HF
- The delayed works for the output can be moved within the
- twl6040_output struct (from the twl6040_data) to be better
- organized.
- - ASoC: twl6040: Combine the custom volsw get, and put functions
- We can manage with one set of get, and put function for the gain
- controls we need to handle with custom code due to the shadowing
- of the register.
- For both get, and put function we can call decide based on the
- mc->rreg value, if we need to call the volsw, or the vlosw_2r
- variant (in 2r case rreg is not 0).
- Handling of the shadow values are the same for both type of
- controls.
- - ASoC: twl6040: Rename pga_event to out_drv_event
- This event handler is used with the OUT_DRV widgets.
- The name pga_event was misleading.
- - ASoC: twl6040: Function to fetch the TRIM values
- Provide API to fetch the TRIM values (for machine drivers)
- - ASoC: twl6040: Read the TRIM values from the chip
- Update the reg_cache with values from chip regarding to TRIM.
- - ASoC: twl6040: No need to read the INTID register
- Since our irq handler has been called, it is granted, that
- the reason was either PLUGINT, or UNPLUGINT.
- The INTID register has been checked in the MFD part of
- twl6040 driver (twl6040-irq.c).
- We have no reason to read from chip again here.
- - ASoC/MFD: twl6040: Combine bit definitions for Headset control registers
- Use one set of defines for the HS bits, since they are identical in both
- control register.
- - ASoC: twl6040/sdp4430: Change legacy DAI name
- Change the legacy DAI name from "twl6040-hifi" to "twl6040-legacy" to
- be more intuitive.
- - ASoC: twl6040: Support for AUX L/R output
- AUX L/R outputs can be driver from the Handsfree PGA output.
- - ASoC: twl6040: Use consistent names for Headset path
- Use "Headset XYZ" for user visible controls, while the internal DAPM
- widgets can use "HS XYZ".
- In this way we can group the Headset related controls in UI
- (alsamixer for example).
- - ASoC: twl6040: Use consistent names for Handsfree path
- Use "Handsfree XYZ" for user visible controls, while the internal DAPM
- widgets can use "HF XYZ".
- In this way we can group the Handsfree related controls in UI
- (alsamixer for example).
- - ASoC: twl6040: Earphone path correction
- Fix the DAPM routing for the earphone path.
- Convert the DAPM_SWITCH_E to DAPM_OUT_DRV_E, so we can have correct
- power up, and down sequence for EP.
- Introduce mute control (Earphone Playback Switch) for users to
- enable/disable the EP path.
- Note: the EP does not have it's own dedicated DAC. EP is connected to
- HSL DAC.
- - ASoC: twl6040: Introduce SW only shadow register
- Software only shadow register to be used by the driver.
- For example Earpiece path will need this shadow register.
- - ASoC: twl6040: Remove strings "NULL" from DAPM route
- Replace the string with plain NULL.
- - ASoC: twl6040: Fix comments for register names
- Change the register name strings in the comments for the
- twl6040_reg table, so it is easier to search for specific
- register.
- This is cosmetic change.
- Before we had for example:
- TWL6040_REG_HSLCTL as register definition.
- At the register table we had:
- TWL6040_HSLCTL
- Searching for TWL6040_HSLCTL resulted no hits.
- While if we look for REG_HSLCTL, we can find the places
- the register has been used.
- - ASoC: twl6040: Lower the power on gain values at startup
- The default gains on outputs/inputs are set to 0dB.
- This is fixing the pop noise issue at the first playback, which
- caused by the wrong starting point of the ramp code.
- The ramp code for the outputs expects the gains to be in
- their lowest configuration in order to be effective.
- After the playback stops, the ramp code takes care of
- ramping down the gains to their minimum.
- - ASoC: twl6040: Correct supported number of playback channels
- twl6040 supports 5 playback, and 2 capture channels
- - ASoC: twl6040: Fix the number of channels for vibra
- Only mono audio can be used for vibra (DL4 channel).
- - ASoC: twl6040: Use chip defaults in the initial reg_cache
- Reset the twl6040_reg array to hold the chip default values.
- The only changed values were for the microphone input selection.
- Select no input for the microphones in the twl6040_init_chip function.
- - ASoC: twl6040: Chip initialization cleanup
- There is no need to write to the vio registers at probe time, since most
- them either read only, or shared with MFD or not used.
- On the other hand it is a good idea to updated the ASICREV register in
- the cache at this time.
- After power up we need to restore some registers. Clean up the list to
- contain only the registers we are going to restore.
- - ASoC: twl6040: Add back support for legacy mode
- The legacy mode has been accidentaly removed by commit:
- ASoC: twl6040: add all ABE DAIs
- Add back the twl6040-hifi dai.
- - ASoC: twl6040: No need to convert the PLL ID
- Since the PLL handling has been simplified, and
- rebased on 0, there is no longer need for converting
- the PLL ID.
- - ASoC: twl6040: Configure PLL only once
- Avoid configuring the PLL several times during audio startup.
- We can configure the PLL at prepare time with parameters collected
- earlier hw_param, and set_dai_sysclk calls.
- - ASoC: twl6040: Simplify sample rate constraint handling
- We can manage the sample rate constraints without the need
- to maintain a variable and a pointer.
- This simplifies the handling of the constraint, and makes it
- more robust.
- - ASoC: twl6040: Move PLL selection to codec driver
- It is better if the selection between the Low power,
- and High performance PLL is handled within the codec
- driver, not in machine driver(s) to avoid duplicated
- code, and also to have consistent tracking of the selected
- PLL, and the resulting differences in supported sample
- rates.
- - ASoC: twl6040: Use neutral name for power mode text/enum
- Change the variable names to be neutral (not refering to HS).
- This will ease up the introduction of PLL selection, which
- going to use the same enum strings.
- - ASoC: twl6040: Do not use wrapper for irq request
- The twl6040_request_irq/free_irq inline functions are going
- to be removed, so replace them with direct calls.
- The irq number is provided by the core driver via resource.
- Reviewed-by: Felipe Balbi <balbi@ti.com>
- - ASoC: twl6040: Configure ramp step based on platform
- Enable ramp down/up step to be configured based on
- platform.
- - ASoC: twl6040: set default constraints.
- Set default sysclk constraints to high performance mode.
- - ASoC: twl6040: Remove pll and headset mode dependency
- Remove dependency between pll (hppll, lppll) and headset power
- mode (low-power, high-performance), as headset power mode can
- be used with any pll.
- A new control is created to allow headset power mode configuration
- from userspace. Changing headset power mode during earpiece related
- usecases is not propagated down to the codec as earpiece requires
- HS DAC in HP mode.
- - ASoC: twl6040: Support other sample rates in constraints.
- Add other supported sample rates to LP and HP modes.
- - ASoC: twl6040: add all ABE DAIs
- Add all DAIs to fully support OMAP4 ABE.
- - ASoC: twl6040: Convert into TWL6040 MFD child
- Convert TWL6040 CODEC driver into a TWL6040 MFD child, it implies
- that MFD-level operations like register accesses, clock setting
- and power management are done through MFD APIs, not directly by
- CODEC driver anymore. To avoid conflicts with the other MFD child,
- vibrator registers are skipped in CODEC driver.
- - MFD: twl4030-audio: Rename platform data
- Allign the platform data names for twl4030 audio submodule:
- twl4030_audio_data: for the core MFD driver
- twl4030_codec_data: for ASoC codec driver
- twl4030_vibra_data: for the input/ForceFeedback driver
- To avoid breakage, change all depending drivers, files
- to use the new types.
- - ASoC: twl6040 - According to TWL6040 specification, gain start at 6dB and not -6dB.
- - ASoC: twl6040 - fix LINEGAIN volume control
- Fix the TWL6040 LINEGAIN volume control to match the TRM.
- - ASoC: twl6040: Return -ENOMEM if create_singlethread_workqueue fails
- - ASoC: Staticise twl6040_hs_jack_report()
- It's an internal function so shouldn't be exported (as sparse points
- out).
SoC Codec WL1273
- - ASoC: Remove unneeded mutex_init in wl1273_probe()
- Since f0fba2ad "ASoC: multi-component - ASoC Multi-Component Support",
- snd_soc_register_codec() now does all the codec list and mutex init.
- Thus don't need to call mutex_init(&codec->mutex) in wl1273_probe() any more.
- - mfd: Use mfd cell platform_data for wl1273 cells platform bits
- With the addition of a platform device mfd_cell pointer, MFD drivers
- can go back to passing platform data back to their sub drivers.
- This allows for an mfd_cell->mfd_data removal and thus keep the
- sub drivers MFD agnostic. This is mostly needed for non MFD aware
- sub drivers.
- - mfd: mfd_cell is now implicitly available to wl1273 drivers
- The cell's platform_data is now accessed with a helper function;
- change clients to use that, and remove the now-unused data_size.
- - [media] ASoC: WL1273 FM radio: Access I2C IO functions through pointers
- These changes are needed to keep up with the changes in the
- MFD core and V4L2 parts of the wl1273 FM radio driver.
- Use function pointers instead of exported functions for I2C IO.
- Also move all preprocessor constants from the wl1273.h to
- include/linux/mfd/wl1273-core.h.
- Also update the year in the copyright statement.
SoC Codec WM1250-EV1
- - ASoC: Convert wm1250-ev1 driver to use devm_kzalloc()
- - ASoC: Set idle_bias_off for WM1250 EV1
- The WM1250 EV1 is functionally digital in a system (the analogue I/O
- is either ground referenced or always powered) so flag it as idle_bias_off.
- - ASoC: Add platform data for WM1250 EV1 GPIOs
- The WM1250 EV1 has some GPIOs which can be used to control the behaviour
- at runtime. Request them all if supplied and add a set_bias_level()
- function to start and stop the clocks.
- - ASoC: Correct revision display for WM1250-EV1 module
- The hardware documentation uses revision numbers starting at 1.
- - ASoC: Fix warning in WM1250-EV1 driver
- - ASoC: Parse board ID/revision information from WM1250-EV1 board
- The WM1250-EV1 board has an ID chip on it, check the board ID and display
- the board revision during startup.
- - ASoC: wm1250-ev1: Define "WM1250 Output" with SND_SOC_DAPM_OUTPUT
- Codec output pin should be defined with SND_SOC_DAPM_OUTPUT.
- - ASoC: Fix mis cherry-pick of wm1250-ev1 driver
- - ASoC: Add initial WM1250-EV1 Springbank audio I/O module driver
- The WM1250-EV1 Springbank audio I/O module for the Wolfson Glenfarclas
- reference platform provides a simple audio I/O with an independant clock
- domain, intended to simulate cellular modem and bluetooth subsystems
- within the platform.
- The card supports some limited GPIO based control but this is currently not
- implemented.
SoC Codec WM2000
- - ASoC: Convert WM2000 into a standard CODEC driver
- We've been able to handle external amps for a while now.
- - ASoC: Convert wm2000 to use regmap API
- The driver wasn't even using the ASoC common code.
- - ASoC: Remove unused struct wm2000_setup_data
- - ASoC: Convert WM2000 to devm_kzalloc()
- - ASoC: Move WM2000 to dev_pm_ops
- There's a general move to use dev_pm_ops rather than bus specific functions
- in order to facilitate work on the PM core. Do this conversion to WM2000.
- The driver ought to be updated to work better in a multi-component model
- but the mechanical conversion ensures that we avoid blocking PM core work
- until that happens.
SoC Codec WM5100
- - ASoC: Enable ASoC register map dump for some regmap CODECs
- It's still useful to be able to poke around in the register map at
- runtime.
- - ASoC: Make WM5100 tone generator widgets signal generators
- - ASoC: Use devm_kzalloc() in wm5100
- - ASoC: Remove WM5100 DSP memory windows from register default data
- They're all volatile so shouldn't have defaults and as we've got pages
- into the DSP memory the registers themselves aren't that useful - a
- further patch adding support for the DSPs will provide direct diagnostic
- access to the DSP memories.
- - ASoC: Move WM5100 platform data based setup into I2C probe
- Get things configured as early as possible, especially useful for the
- GPIOs which might be useful anyway.
- - ASoC: Convert WM5100 gpiolib support to direct regmap API usage
- - ASoC: Move most WM5100 resource allocation to I2C probe
- More standard Linuxish.
- - ASoC: Mark WM5100 MISC CONTROL as readable
- - ASoC: Need to convert wm5100 cache sync to direct regmap usage too
- ASoC knows nothing about the cache now.
- - ASoC: Convert wm5100 to direct regmap API usage
- - ASoC: Fix return value of wm5100_gpio_direction_out()
- We can't just pass back the return value of snd_soc_update_bits() as it
- will be 1 if a bit changed rather than zero.
- - ASoC: Update WM5100 accessory detection for revision A
- - ASoC: Implement WM5100 accessory detection support
- The WM5100 includes an advanced, low power, accessory detect subsystem
- capable of detecting both accessory presence and button presses while
- the device is in an ultra low power mode. Implement initial support for
- this.
- - ASoC: Add missing default for WM5100 Clocking 1
- - ASoC: Fix typo in 24.576MHz rate in WM5100
- - ASoC: Add missed free_irq in wm5100_remove and wm5100_probe error path
- - ASoC: Add missed BCLK rate to WM5100 driver
- Reported-by: Axel Lin <axel.lin@gmail.com>
- - ASoC: Dynamically manage DBVDD2 and DBVDD3 on WM5100
- Allow the DBVDD2 and DBVDD3 rails to be powered down when idle, helping
- fully power down connected devices when idle.
- - ASoC: Remove needless codec->dapm.bias_level assignment to SND_SOC_BIAS_OFF
- This assignment is done by the snd_soc_register_codec so there is no need
- to redo it in probe function of a codec driver.
- - ASoC: Add WM5100 driver
- The WM5100 is a highly integrated low power audio subsystem with advanced
- digital signal processing capabilities including effects, speech clarity
- enhancement and active noise cancellation. This initial driver provides
- support for basic audio paths, further patches will provide more
- complete functionality.
SoC Codec WM8350
- - ASoC: Convert WM8350 to table based DAPM and control init
- - ASoC: Convert WM8350 to devm_kzalloc()
- - ASoC: Replace remaining use of *_volsw_2r with *_volsw
- The snd_soc_*_volsw_2r functionality has been merged to
- *volsw callbacks.
- Few places still used the get, or put variant of volsw_2r,
- replace those with the corresponding *_volsw.
SoC Codec WM8400
- - ASoC: Convert WM8400 to table based DAPM and control init
- - ASoC: Convert WM8400 to devm_kzalloc()
- - ASoC: Convert wm8400 MICBIAS to a supply widget
- - ASoC: wm8400: Fix setting Fout clock divider for FLL Control 4
- What we want here is to clear the WM8400_FLL_OUTDIV_MASK bits then
- OR with factors.outdiv.
- - ASoC: wm8400: Fix wrong bit setting for WM8400_POWER_MANAGEMENT_2
- If (fakepower & ((1 << WM8400_INMIXR_PWR) | (1 << WM8400_AINRMUX_PWR)))
- is false, we should clear WM8400_AINR_ENA bits instead of WM8400_AINL_ENA.
- - mfd: Use mfd cell platform_data for wm8400 cells platform bits
- With the addition of a platform device mfd_cell pointer, MFD drivers
- can go back to passing platform data back to their sub drivers.
- This allows for an mfd_cell->mfd_data removal and thus keep the
- sub drivers MFD agnostic. This is mostly needed for non MFD aware
- sub drivers.
- Reviewed-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
- - asoc: wm8400-codec: Use mfd_data instead of driver_data
- Use mfd_data for passing information from mfd drivers to soc
- clients. The mfd_cell's driver_data field is being phased out.
- Clients that were using driver_data now access .mfd_data
- via mfd_get_data().
SoC Codec WM8510
- - ASoC: Convert WM8510 to table based DAPM and control init
- - ASoC: Remove unused -codec from Wolfson device driver names
- Devices that aren't MFDs don't need to distinguish this.
- - ASoC: wm8510: Convert to snd_soc_cache_sync
- Convert to snd_soc_cache_sync for sync reg_cache with the hardware.
- - ASoC: Add device tree binding for WM8510
SoC Codec WM8523
- - ASoC: Remove unneeded hw_write initialisation in wm8523
- It is not required after commit 8d50e447
- "ASoC: Factor out I/O for Wolfson 8 bit data 16 bit register CODECs"
- - ASoC: Convert WM8523 to table based control and DAPM initialization
- - ASoC: Add device tree binding for WM8523
- - ASoC: Remove -codec from WM8523 driver name
- It's redundant to specify it.
SoC Codec WM8580
- - ASoC: Fix return value of wm8580_set_sysclk()
- We can't just pass back the return value of snd_soc_update_bits() as it
- will be 1 if a bit changed rather than zero.
- - ASoC: Convert WM8580 to table based DAPM and control init
- - ASoC: wm8580: Use snd_soc_update_bits for read-modify-write
- Use snd_soc_update_bits for read-modify-write register access instead of
- open-coding it using snd_soc_read and snd_soc_write
- - ASoC: Replace remaining use of *_volsw_2r with *_volsw
- The snd_soc_*_volsw_2r functionality has been merged to
- *volsw callbacks.
- Few places still used the get, or put variant of volsw_2r,
- replace those with the corresponding *_volsw.
- - ASoC: Add device tree support for WM8580
- - ASoC: Remove redundant -codec from WM8580 driver name
SoC Codec WM8711
- - ASoC: Convert WM8711 to table based control init
- - ASoC: Leave input audio data bit length settings untouched in wm8711_set_dai_fmt
- Current implementation in wm8711_set_dai_fmt always clear BIT[3:2]
- (the Input Audio Data Bit Length Select) of WM8711_IFACE(07h) register.
- Input Audio Data Bit Length Select bits are set by wm8711_hw_params,
- we should leave BIT[3:2] untouched in wm8711_set_dai_fmt.
- - ASoC: wm8711: Fix wrong mask for setting input audio data bit length select
- The Input Audio Data Bit Length Select is controlled by BIT[3:2] of
- WM8711_IFACE(07h) register.
- Current code incorrectly masks BIT[1:0] which is for Audio Data Format Select.
- - ASoC: wm8711: Convert to snd_soc_cache_sync
- Convert to snd_soc_cache_sync for sync reg_cache with the hardware.
- - ASoC: Remove references to linux@wolfsonmicro.com
- - ASoC: wm8711: Use snd_soc_update_bits for read-modify-write
- Use snd_soc_update_bits for read-modify-write register access instead of
- open-coding it using snd_soc_read and snd_soc_write
- - ASoC: wm8711: Use snd_soc_update_bits for read-modify-write
- Use snd_soc_update_bits for read-modify-write register access instead of
- open-coding it using snd_soc_read and snd_soc_write
- - ASoC: Add device tree binding for WM8711
- - ASoC: Remove some more redundant -codecs from driver names
- - ASoC: Use data based init for wm8711 DAPM
SoC Codec WM8727
- - ASoC: Remove unused -codec from Wolfson device driver names
- Devices that aren't MFDs don't need to distinguish this.
SoC Codec WM8728
- - ASoC: Convert WM8728 to table based control init
- - ASoC: Add device tree binding for WM8728
- - ASoC: Remove some more redundant -codecs from driver names
- - ASoC: Use data based init for wm8728 DAPM
SoC Codec WM8731
- - ASoC: Use table based init for wm8731_snd_controls
- - ASoC: Ensure WM8731 register cache is synced when resuming from disabled
- - ASoC: wm8731: Convert to snd_soc_cache_sync
- Convert to snd_soc_cache_sync for sync reg_cache with the hardware.
- - ASoC: Add device tree binding for WM8731
- Tested with the famous "hey, look! this compiles" test plan.
- Acked by: Grant Likely <grant.likely@secretlab.ca>
- - ASoC: Manage WM8731 ACTIVE bit as a supply widget
- Now we have supply widgets there's no need to open code the handling of
- the ACTIVE bit.
- Tested-by: Nicolas Ferre <nicolas.ferre@atmel.com>
- - ASoC: wm8731: fix wm8731_check_osc() connected condition
- The crystal oscillator is only enabled if the WM8731_SYSCLK_XTAL master clock
- is specified. Fix the connected() struct snd_soc_dapm_route function to take
- this into account. Oscillator is not enabled on machine that need it otherwise.
- Machine drivers have to make sure that they use the proper SYSCLK value.
- - ASoC: Convert WM8731 to table based DAPM setup
SoC Codec WM8737
- - ASoC: Add device tree binding for WM8737
SoC Codec WM8741
- - ASoC: Convert WM8741 to table based DAPM and control init
- - ASoC: Convert WM8741 to devm_kzalloc()
- - ASoC: wm8741: Use snd_soc_cache_sync to sync reg_cache with the hardware
- - ASoC: wm8741: Fix setting interface format for DSP modes
- According to the datasheet:
- Format Control (05h)
- BITS[3:2]
- FMT[1:0] Audio data format selection
- 00 = right justified mode
- 01 = left justified mode
- 10 = I2S mode
- 11 = DSP mode
- BIT[4] LRP Polarity selec for LRCLK/DSP mode select
- 0 = normal LRCLK poalrity/DSP mode A
- 1 = inverted LRCLK poarity/DSP mode B
- For SND_SOC_DAIFMT_DSP_A, we should set 0x000C instead of 0x0003.
- For SND_SOC_DAIFMT_DSP_B, we should set 0x001C instead of 0x0013.
- - ASoC: Fix setting update bits for WM8741_DACRMSB_ATTENUATION
- After checking the code and datasheet, I think what we want in the second
- snd_soc_update_bits call is to update WM8741_DACRMSB_ATTENUATION register
- instead of WM8741_DACRLSB_ATTENUATION.
- - ASoC: Add device tree binding for WM8741
- - ASoC: Add SPI support for WM8741
- - ASoC: Refactor WM8741 regulator handling into CODEC generic code
- No meaningful runtime impact but is more in line with other CODECs and
- will support further work.
- - ASoC: Remove some more redundant -codecs from driver names
SoC Codec WM8750
- - ASoC: Convert WM8750 to table based DAPM and control init
- - ASoC: Convert WM8750 to devm_kzalloc()
- - ASoC: wm8750: Convert to snd_soc_cache_sync
- Convert to snd_soc_cache_sync for sync reg_cache with the hardware.
- - ASoC: wm8750: Use snd_soc_update_bits for read-modify-write
- Use snd_soc_update_bits for read-modify-write register access instead of
- open-coding it using snd_soc_read and snd_soc_write
- - ASoC: Remove redundant -codec from WM8750
- - ASoC: Add device tree binding for WM8750
- - ASoC: Fix compile warning in wm8750.c
- sound/soc/codecs/wm8750.c:784:2: warning: missing braces around initializer
- sound/soc/codecs/wm8750.c:784:2: warning: (near initialization for ‘wm8750_spi_ids[2].name’)
- It's because struct spi_device_id.name is a char array, not a pointer,
- while the driver initializes explicitly with 0.
- - ASoC: Terminate WM8750 SPI device ID table
- Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
- - ASoC: Fix typo in wm8750 spi_ids
- Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
- - ASoC: Fix SPI driver binding for WM8987
- As we had no id_table only the driver name would be matched against
- meaning that WM8987 devices wouldn't be bound.
SoC Codec WM8753
- - ASoC: Convert WM8753 to table based DAPM and control init
- - ASoC: wm8753: Skip noop reconfiguration of DAI mode
- This patch makes it possible to set DAI mode to its currently applied
- value even if codec is active. This is necessary to allow
- aplay -t raw -r 44100 -f S16_LE -c 2 < /dev/urandom &
- alsactl store -f backup.state
- alsactl restore -f backup.state
- to work without returning errors. This patch is based on a patch sent
- by Klaus Kurzmann <mok@fluxnetz.de>.
- - ASoC: Fix setting update bits for WM8753_LADC and WM8753_RADC
- Current code set update bits for WM8753_LDAC and WM8753_RDAC twice,
- but missed setting update bits for WM8753_LADC and WM8753_RADC.
- I think it is a copy-paste bug in commit 776065
- "ASoC: codecs: wm8753: Fix register cache incoherency".
- - ASoC: Add device tree binding for WM8753
- - ASoC: Remove unneeded -codec from WM8753 driver name
- - ASoC: codecs: wm8753: Fix DAI mode switching
- The wm8753 codec supports switching between different DAI modes.
- The current drivers tries to implement this by changing the DAI driver at
- runtime. But to properly work this would require support from the ASoC core.
- So this patch takes a different approch on how the DAI mode switching is
- implemented.
- The only difference, from a driver point of view, between the different DAI modes
- is how to program the DAI format to the hardware. So what this patch is, it
- stores the current format for each DAI in the drivers private struct and when
- the DAI mode is changed the format gets simply reprogrammed according to the
- new DAI mode.
- Futhermore this patch restricts the changing of the DAI format to when the
- codec is inactive.
SoC Codec WM8770
- - ASoC: Convert wm8770 to devm_kzalloc()
- - ASoC: Make WM8770 SPI usage unconditional
- The device only supports SPI.
- - ASoC: Add device tree binding for WM8770
SoC Codec WM8776
- - ASoC: Convert WM8776 to devm_kzalloc()
- - ASoC: Remove unused variable in wm8776 driver
- - ASoC: Convert wm8776 to table based control and DAPM init
- - ASoC: wm8776: add missing break in sample size switch
- Broken in commit d1dc698a54259cb454284456483b45f67c865cf8
- - ASoC: wm8776: Convert to snd_soc_cache_sync
- Convert to snd_soc_cache_sync for sync reg_cache with the hardware.
- - ASoC: support all possible sample rates in the WM8776 driver
- The WM8776 supports a continuous range of sample rates rather than
- discrete values and supports a wider range of sample rates on the
- playback path than is currently supported. Update the constraints on
- the DAIs to reflect this.
- - ASoC: support sample sizes properly in the WM8776 codec driver
- Use snd_pcm_format_width() to determine the sample size, instead of
- checking specify sample formats and assuming that those are the only
- valid format.
- This change adds support for big-endian architectures (which use the _BE
- formats) and the packed 24-bit format (SNDRV_PCM_FORMAT_S24_3xE).
- [Fixed single letter variable name legibility problem -- broonie]
- - ASoC: Add device tree binding for WM8776
- - ASoC: Remove redundant -codec from WM8776 driver name
SoC Codec WM8782
- - ASoC: wm8782: Add __devexit_p at necessary place
- According to the comments in include/linux/init.h:
- "Pointers to __devexit functions must use __devexit_p(function_name), the
- wrapper will insert either the function_name or NULL, depending on the config
- options."
- We have __devexit annotation for wm8782_remove(), thus add __devexit_p at
- necessary place.
- - ASoC: add WM8782 ADC Codec Driver
- [zonque@gmail.com: transform to new ASoC structure]
SoC Codec WM8804
- - ASoC: Convert WM8804 to table based control init
- - ASoC: Add device tree binding for WM8804
- - ASoC: WM8804 does not support sample rates below 32kHz
- Reported-by: Kieran O'Leary <Kieran.O'Leary@wolfsonmicro.com>
SoC Codec WM8900
- - ASoC: Convert WM8900 to table based DAPM and control init
- - ASoC: Remove unused -codec from Wolfson device driver names
- Devices that aren't MFDs don't need to distinguish this.
- - ASoC: Convert wm8900 MICBIAS to a supply widget
- - ASoC: wm8900: Use snd_soc_update_bits for read-modify-write
- Use snd_soc_update_bits for read-modify-write register access instead of
- open-coding it using snd_soc_read and snd_soc_write
- - ASoC: wm8900: Fix the mask defines
- Now we have done bitwise NOT against the mask bits for the defines of
- WM8900_REG_CLOCKING1_BCLK_MASK,
- WM8900_REG_CLOCKING1_OPCLK_MASK and WM8900_LRC_MASK.
- But we don't have the bitwise NOT against the mask bits for the defines of
- WM8900_REG_CLOCKING2_DAC_CLKDIV,
- WM8900_REG_CLOCKING2_ADC_CLKDIV and WM8900_REG_DACCTRL_AIF_LRCLKRATE.
- It is error prone to mix the inconsistent meaning for different mask defines.
- So lets make the defines for each mask to be corresponding to the bits
- defines in datasheet. Don't add extra "bitwise NOT" to the defines.
- - ASoC: wm8900: Fix wrong mask for setting DAC_CLKDIV/ADC_CLKDIV/LRCLK_MODE
- After checking the datasheet, I think what we want to do here is to
- clear the WM8900_REG_CLOCKING2_DAC_CLKDIV/WM8900_REG_CLOCKING2_ADC_CLKDIV/
- WM8900_REG_DACCTRL_AIF_LRCLKRATE bits and then OR with div value.
- - ASoC: wm8900: fix a memory leak if wm8900_set_fll fails
SoC Codec WM8903
- - ASoC: Fix return value of wm8903_gpio_direction_in() and wm8903_gpio_direction_out()
- We can't just pass back the return value of snd_soc_update_bits() as it
- will be 1 if a bit changed rather than zero.
- - ASoC: WM8903: Add of_match_table
- This allows the device to be matched against the device tree using the
- compatible flag directly, as is standard, rather than falling back to
- matching .id_table against the non-vendor portion of the first compatible
- property value.
- - ASoC: Don't fail if we can't read the IRQ type in WM8903
- If we fail to read the IRQ type from the interrupt controller don't
- fail, just assume a value and solider on - we may fail later when we try
- to request the IRQ but it's possible we'll succeed.
- - ASoC: WM8903: Add device tree binding
- Document the device tree binding for the WM8903 codec, and modify the
- driver to extract platform data from the device tree, if present.
- Based on work by John Bonesio, but significantly reworked since then.
- - ASoC: WM8903: Get default irq_active_low from IRQ controller
- If the WM8903 is hooked up to an interrupt, set the irq_active_low flag
- in the default platform data based on the IRQ's IRQ_TYPE. Map IRQ_TYPE_NONE
- (a lack of explicit configuration/restriction) to irq_active_low = false;
- the previous default.
- This code is mainly added to support device tree interrupt bindings,
- although will work perfectly well in a non device tree system too.
- Any interrupt controller that supports only a single IRQ_TYPE could
- set each IRQ's type based on that restriction. This applies equally
- with and without device tree. To cater for interrupt controllers
- that don't do this, for which irqd_get_trigger_type() will return
- IRQ_TYPE_NONE, the platform data irq_active_low field may be used
- in systems that don't use device tree.
- With device tree, every IRQ must have some IRQ_TYPE set.
- Controllers that support DT and multiple IRQ_TYPEs must define the
- interrupts property (as used in interrupt source nodes) such that it
- defines the IRQ_TYPE to use. When the core DT setup code initializes
- wm8903->irq, the interrupts property will be parsed, and as a side-
- effect, set the IRQ's IRQ_TYPE for the WM8903 probe() function to read.
- Controllers that support DT and a single IRQ_TYPE could arrange to
- set the IRQ_TYPE somehow during their initialization, or hard-code
- it during the processing of the child interrupts property.
- - ASoC: WM8903: Remove conditionals checking pdata != NULL
- The pdata pointer is now always valid. Remove any conditions that check
- its validity.
- This patch is mostly just removing an indentation level. One variable had
- to be moved due to the removal of a scope, and one comment was split into
- two. Viewing the patch with git show/diff -b will show that it's actually
- very small.
- Note that WM8903_MIC_BIAS_CONTROL_0 is now written unconditionally,
- whereas it used to be written only if pdata was supplied. Since
- defpdata.micdet_cfg = 0, this unconditional write simply echos the HW
- defaults in the case where pdata is not supplied.
- Based on work by John Bonesio, but significantly reworked since then.
- - ASoC: WM8903: Fix platform data gpio_cfg confusion
- wm8903_platform_data.gpio_cfg[] was intended to be interpreted as follows:
- 0: Don't touch this GPIO's configuration register
- 1..7fff: Write that value to the GPIO's configuration register
- 8000: Write zero to the GPIO's configuration register
- other: Undefined (invalid)
- The rationale is that platform data is usually global data, and a value of
- zero means that the field wasn't explicitly set to anything (e.g. because
- the field was new to the pdata type, and existing users weren't update to
- initialize it) and hence the value zero should be ignored. 0x8000 is an
- explicit way to get 0 in the register.
- The code worked this way until commit 7cfe561 "ASoC: wm8903: Expose GPIOs
- through gpiolib", where the behaviour was changed due to my lack of
- awareness of the above rationale.
- This patch reverts to the intended behaviour, and updates all in-tree users
- to use the correct scheme. This also makes WM8903 consistent with other
- devices that use a similar scheme.
- WM8903_GPIO_NO_CONFIG is also renamed to WM8903_GPIO_CONFIG_ZERO so that
- its name accurately reflects its purpose.
- - ASoC: WM8903: Create default platform data structure
- When no platform data is supplied, point pdata at a default platform
- structure. This enables two future changes:
- a) Defines the default platform data values in a single place.
- b) There is always a valid pdata pointer, so some conditional code can
- be simplified by a later patch.
- Based on work by John Bonesio, but significantly reworked since then.
- - ASoC: Move initial WM8903 identification and reset to I2C probe
- Get control of the device earlier and avoid trying to do an ASoC probe
- on a card that won't work.
- Tested-by: Stephen Warren <swarren@nvidia.com>
- - ASoC: Convert WM8903 to direct regmap API usage
- Converting to an rbtree cache as regcache doesn't have a flat cache.
- Since the top of the register map is fairly sparse this should be an
- overall win.
- Tested-by: Stephen Warren <swarren@nvidia.com>
- - ASoC: Don't resync WM8903 register cache on reset
- We only do this on initial power on so it's at best a waste of time as
- the core will have already defaulted to the same values.
- Tested-by: Stephen Warren <swarren@nvidia.com>
- - ASoC: Use a normal cache sync for WM8903
- The driver used to use a complicated method to sync the register cache
- after having brought the bias level up to standby in resume due to the
- use of the write sequencer to manage the initial power up. Now that we
- don't use the write sequencer there is no need for this and we can just
- use snd_soc_cache_sync() directly.
- Tested-by: Stephen Warren <swarren@nvidia.com>
- - ASoC: WM8903 only supports I2C so don't ifdef it
- Tested-by: Stephen Warren <swarren@nvidia.com>
- - ASoC: Use table based control init for WM8903
- Tested-by: Stephen Warren <swarren@nvidia.com>
- - ASoC: Convert WM8903 to devm_kzalloc()
- Tested-by: Stephen Warren <swarren@nvidia.com>
- - ASoC: WM8903: Disallow all invalid gpio_cfg pdata values
- The GPIO registers are 15 bits wide. Hence values, higher than 0x7fff are
- not legal GPIO register values. Modify the pdata.gpio_cfg handling code
- to reject all illegal values, not just WM8903_GPIO_NO_CONFIG (0x8000). This
- will allow the later use of 0xffffffff as an invalid value in future device
- tree bindings, meaning "don't touch this GPIO's configuration".
- - ASoC: Convert WM8903 MICBIAS to a supply widget
- Also rename it to MICBIAS to reflect the pin name and help any out of tree
- users notice the change.
- - ASoC: WM8903: Free IRQ on device removal
- Without this, request_irq on subsequent device initialization fails, and
- the codec cannot be used.
- - ASoC: Fix wrong data type access in a few codec drivers
- Commit fafd217 ("ASoC: Store a list of widgets in a DAPM mux/mixer kcontrol")
- changed the control private data type that is passed to snd_soc_cnew when
- creating dapm mixer and mux controls. Commit did not update a few codec
- drivers that are using their own put callbacks and thus are accessing a
- wrong data type.
- Tested-by: Stephen Warren <swarren@nvidia.com>
- - ASoC: WM8903: Fix Digital Capture Volume range
- Increase the range of the Digital Capture Volume control to be 120 steps.
- Each step is 0.75dB, and the range starts at -72dB, giving a max setting
- of 18dB, which matches the latest datasheet, to the precision of the step
- size.
- - ASoC: WM8903: Implement DMIC support
- In addition to the currently supported analog capture path, the WM8903
- also supports digital mics.
- The analog and digital capture paths are exclusive; a mux is present to
- select the capture source.
- Logically, the mux exists to select the decimator's input, from either
- the ADC or DMIC block outputs. However, the ADC power domain also
- includes the DMIC interface. Consequently, this change represents the
- mux as existing immediately before the ADC, and selecting between the
- Input PGA and DMIC block outputs.
- An alternative might be to represent the mux in its correct location,
- and associate the ADC power enable controls with both the real ADC, and
- a fake ADC for the DMIC?
- - ASoC: WM8903: HP and Line out PGA/mixer DAPM fixes
- Update the headphone and line out mixers and PGAs use the same logical
- set of register bits and sequencing as the speaker mixer/PGA.
- This allows ALSA controls for mute and volume on headphone and line out
- to operate correctly.
- Per conversation on alsa-devel, earlier datasheets indicated that the
- POWER_MANAGEMENT_* register bits 0 and 1 were aliases to ANALOG_* register
- bits 0 and 4, and hence only one copy of those bits was programmed.
- However, later datasheets corrected this.
- [swarren: Applied same change to headphone widgets]
- - ASoC: Convert WM8903 to table based DAPM setup
- - ASoC: Warn if WM8903 platform data is used to enable microphone IRQ
- The WM8903 interrupts are clear on read so if the WM8903 detection is
- enabled from platform data when the IRQ is in use (rather than using a
- direct signal from a GPIO) status may be lost during startup. Help users
- spot this misconfiguration by adding a WARN_ON().
- - ASoC: Use explicit sequence for WM8903 bias off
- This makes no real difference compared to the write sequencer sequence
- that was previously used but can run without a clock being provided.
- Also remove the write sequencer support code as this was the last use
- of it.
- - ASoC: Don't use write sequencer to power up WM8903
- The write sequencer sequencer sequence takes longer than is desirable
- as it brings up a full playback path which is not required at this
- point. Open coding the sequence cuts the startup time by two thirds.
- - ASoC: Convert WM8903 bias management to use snd_soc_update_bits()
- - ASoC: Actively manage WM8903 DC servo configuration
- Explicitly cache the DC servo offsets for digital paths in the driver,
- allowing them to be preserved over suspend and resume, and ensure that
- we recalibrate analogue outputs paths when they are in use so that we
- cover any changes in the input offset.
- - ASoC: Fix WM8903 DAC mute default
- The WM8903 register map does not mute the DAC by default at startup
- so we need to explicitly do so.
- - ASoC: Dynamically manage CLK_SYS in WM8903
- - ASoC: Convert WM8903 to use PGA_S for output stage enables
- This simplfies the code and slightly reduces the startup time.
- - ASoC: Add support for AIF channel muxing on WM8903
- - ASoC: Display WM8903 chip revision alphabetically
- - ASoC: Remove redundant -codec from WM8903 driver name
- It causes noisy -codecs to appear in things like .codec_name.
- - ASoC: Correct definition of WM8903_VMID_RES_5K
- - ASoC: WM8903: Fix mic detection enable logic
- The mic detection HW should be enabled when either mic or short detection
- is required, not when only both are required.
- - ASoC: WM8903: Fix mic detection register definitions
- * There is no hysteresis enable field in the current datasheet.
- * Mic detection threshold field is only 2 bits wide.
- - ASoC: Accept any logical value WM8903 GPIO set()
- - ASoC: wm8903: Expose GPIOs through gpiolib
- Also, update platform_data GPIO handling to have an explicit "don't
- touch this pin" option.
- Add #defines for the GPIO pin functions.
SoC Codec WM8904
- - ASoC: Remove unused -codec from Wolfson device driver names
- Devices that aren't MFDs don't need to distinguish this.
- - ASoC: Convert wm8904 MICBIAS to a supply widget
- - ASoC: WM8904: Set `invert' bit for Capture Switch
- Set `invert' bit for Capture Switch. Otherwise analogue is muted when
- Capture Switch is ON.
- - ASoC: Remove unused "control_data" field of struct wm8904_priv
- The control_data field is used to initialize the codec's control_data field,
- but since this is also done by the snd-soc-cache core, the redundant
- assignment can be removed and the field can be dropped.
- - ASoC: Add basic WM8918 support
- The WM8918 is register compatible with the WM8904 with a subset of the
- functionality. Add the device ID, a subsequent patch will ensure that only
- the relevant functionality is exported to userspace.
SoC Codec WM8915
- - ASoC: Rename WM8915 to WM8996
- For marketing reasons the part will be called WM8996. In order to avoid
- user confusion rename the driver to reflect this.
- - ASoC: Allow WM8915 BCLK calculation outside hw_params()
- Allow more dynamic management of the device clocking by allowing BCLK to
- be calculated when we set SYSCLK. This means that if the system is idle
- when hw_params() runs then we don't try to use the SYSCLK used in that case
- to set up the BCLK dividers, we can instead wait until a later point such
- as bias level configuration. This makes it easier to manage low power modes.
- - ASoC: Error out when FLL lock interrupt is not delivered on WM8915
- When the FLL locks on the WM8915 an interrupt is generated. For safety
- error out if we don't get that interrupt when the IRQ output of the
- WM8915 is hooked up. Since we *really* expect an interrupt but the
- threaded IRQ handler may take a bit longer than expected to get
- scheduled also dramatically increase the delay in this case.
- - ASoC: Suppress noop SYSCLK updates in WM8915
- - ASoC: Use a lower detection rate when monitoring headphones on WM8915
- We only need to increase the detection rate to maximum if we're monitoring
- for button presses as the response times needed for user interaction there
- are much lower.
- - ASoC: Remove internally generated WM8915 supplies
- DCVDD and MICVDD are intended to be (and almost always are) generated by
- on-board LDOs which are transparently controlled by the driver so we
- shouldn't really be requesting them from the regulator API. If the driver
- is updated to support external supply of these then we will need to change
- the way we handle this.
- - ASoC: Support edge triggered IRQs for WM8915
- Really this should be something the IRQ core can cope with for us but since
- it doesn't currently do so (at least for threaded interrupts like this) do
- so in the driver. This allows us to run with interrupt controllers that
- only support edge triggered interrupts.
- - ASoC: Add missing break in WM8915 FLL source selection
- - ASoC: Only update SYSCLK_ENA when pausing WM8915 SYSCLK
- - ASoC: Remove duplicate linux/delay.h inclusion.
- It's enough to include linux/delay.h just once in
- sound/soc/codecs/wm8915.c, so remove the duplicate.
- - ASoC: Remove outdated FIXME from WM8915
- Actually the current code is perfectly sensible given the hardware.
- - ASoC: Use shared controls for input signal path in WM8915
- Gives finer grained power management.
- - ASoC: Support 24.576MHz MCLKs in WM8915
- We can safely divide these down to within the supported SYSCLK range.
- - ASoC: Move WM8915 FLL operations onto the CODEC
- Since the WM8915 FLL is not tied to a particular audio interface move it
- to a CODEC wide operation.
- - ASoC: Add WM8915 CODEC driver
- The WM8915 is an ultra low power mobile CODEC designed for smartphones,
- featuring a mixture of digital and analogue I/O with flexible mixing
- options and advanced low power accessory detection functionality in a
- compact package.
SoC Codec WM8940
- - ASoC: wm8940: Fix setting PLL Output clock division ratio
- According to the datasheet:
- The PLL Output clock division ratio is controlled by BIT[5:4] of
- WM8940_GPIO register(08h).
- Current code read/write the WM8940_ADDCNTRL(07h) register which is wrong.
- - ASoC: wm8940: Fix mask for setting BCLKDIV
- According to the datasheet:
- BCLK is controlled by BIT[4:2] of WM8940_CLOCK(06h) register.
- - ASoC: wm8940: Properly set codec->dapm.bias_level
- Reported-by: Chris Paulson-Ellis <chris@edesix.com>
- - ASoC: wm8940: Convert to snd_soc_cache_sync
- Convert to snd_soc_cache_sync for sync reg_cache with the hardware.
- - ASoC: Remove unused "control_data" field of struct wm8940_priv
- The control_data field is used to initialize the codec's control_data field,
- but since this is also done by the snd-soc-cache core, the redundant
- assignment can be removed and the field can be dropped.
- - ASoC: wm8940: remove unnecessary if statements
- removing unnecessary if(ret) checks
- This updated patch corrects a minor spelling problem in the commit message
- and resolves two other (similar) issues found in wm8940.c by Jonathan Cameron.
SoC Codec WM8958
- - ASoC: Say how long short WM8958 DSP2 firmwares are
- - ASoC: WM8958: correctly show firmware magic on mismatch
- - ASoC: Don't restart an already running WM8958 DSP2
- Don't want to upset the DSP.
- - ASoC: Skip noop reconfiguration of WM8958 DSP2 algorithms
- If we're setting the currently applied value for one of the DSP algorithm
- configurations we can just skip all the handling as the control set is a
- noop. This ensures we do not disrupt a running DSP.
- - ASoC: fix wm8958-dsp2 printk format warnings
- Fix printk format warnings in wm8958-dsp2.c:
- sound/soc/codecs/wm8958-dsp2.c:103: warning: format '%d' expects type 'int', but argument 4 has type 'size_t'
- sound/soc/codecs/wm8958-dsp2.c:111: warning: format '%d' expects type 'int', but argument 3 has type 'size_t'
- sound/soc/codecs/wm8958-dsp2.c:144: warning: format '%d' expects type 'int', but argument 5 has type 'size_t'
- - ASoC: Add WM8958 enhanced EQ support
- DSP2 in the WM8958 can be used to support an upgraded EQ for use in
- demanding applications.
- - ASoC: Add WM8958 VSS support
- With appropriate firmware the WM8958 can support Virtual Surround Sound or
- VSS, widening the stereo audio image for improved user experience. Enable
- support for this mode of operation when the appropriate firmware can be
- loaded at runtime.
- - ASoC: Refactor WM8958 DSP to support additional algorithms
- In preparation for the addition of additional WM8958 algorithms
- reorganise the code to make it easier to add such support later.
- - ASoC: Support download of WM8958 MBC firmware
- Allow userspace to supply an update to the ROM firmware. The firmware
- request is non-blocking so userspace can load the firmware at its
- leisure without delaying startup, the driver will begin using the
- firmware the next time MBC is started after it has been supplied.
- - ASoC: Handle startup sequencing of WM8958 DSP2 with deferred clocking
- The DSP2 startup requires that the clock be enable so if we've deferred
- clock startup we need to defer DSP2 startup
- - ASoC: Factor WM8958 DSP2 handling into separate file
- DSP2 on the WM8958 has a default ROM which provides a multi-band
- compressor for enhanced performance on mobile devices but can also
- support runtime download of alternative firmware. In preparation for
- more exploiting this functionality refactor the code to split the
- handling of DSP2 into a separate file.
SoC Codec WM8960
- - ASoC: Convert WM8960 to devm_kzalloc()
- - ASoC: wm8960: Use snd_soc_update_bits for read-modify-write
- Use snd_soc_update_bits for read-modify-write register access instead of
- open-coding it using snd_soc_read and snd_soc_write
- - ASoC: Remove unused AUDIO_NAME define from WM8960
- - ASoC: Remove I2C ifdefs from WM8960
- The driver only supports I2C as the control interface.
- - ASoC: Convert wm8960 MICBIAS to a supply widget
- - ASoC: wm8960: Convert to snd_soc_cache_sync
- Convert to snd_soc_cache_sync for sync reg_cache with the hardware.
- - ASoC: Remove unused "control_data" field of struct wm8960_priv
- The control_data field is used to initialize the codec's control_data field,
- but since this is also done by the snd-soc-cache core, the redundant
- assignment can be removed and the field can be dropped.
SoC Codec WM8961
- - ASoC: Use standard cache sync code in wm8961
- We write the reset register with the default value so it should not be
- mistakenly written.
- - ASoC: Convert wm8961 to devm_kzalloc()
- - ASoC: Remove I2C ifdefs from wm8961 driver
- The driver only supports I2C so no need to conditionalise its use.
- - ASoC: Fix comments for disabling amplifier and PGA
- - ASoC: Convert wm8961 MICBIAS to a supply widget
- - ASoC: wm8961: Convert codec->hw_read to snd_soc_read
- codec->hw_read is broken now, let's covert to snd_soc_read.
SoC Codec WM8962
- - ASoC: Fix return value of wm8962_gpio_direction_out()
- We can't just pass back the return value of snd_soc_update_bits() as it
- will be 1 if a bit changed rather than zero.
- - ASoC: Enable ASoC register map dump for some regmap CODECs
- It's still useful to be able to poke around in the register map at
- runtime.
- - ASoC: Make WM8962 beep a signal generator
- - ASoC: Convert WM8962 to devm_kzalloc()
- - ASoC: Disable debounce on some WM8962 interrupts
- Allow them to work when the device is unclocked.
- - ASoC: Convert WM8962 to direct regmap usage
- This initial conversion just moves the register init, regulator acquisition
- and device verification out to the I2C probe(). Movement of other parts of
- the driver like the GPIO and beep generation code will follow.
- - ASoC: wm8962: fix DB_RANGE size
- Give the correct number of entries to TLV_DB_RANGE_HEAD to prevent
- reading more data than actually is in the arrays.
- - ASoC: Manage thermal shutdown for WM8962
- Disable the thermal shutdown circuits for headphone and speaker when the
- relevant outputs are not enabled in order to save current in idle modes.
- - ASoC: Disable MICBIAS and SYSCLK when stopping WM8962 accessory detection
- They aren't needed any more. If machines need them for other purposes then
- further changes will be required.
- - ASoC: WM8962 accessory detection requires MICBIAS
- Force MICBIAS on as well as SYSCLK as the WM8962 accessory detection can't
- function without both. No point in making machine drivers manually enable
- it.
- - ASoC: Enable SYSCLK last when enabling WM8962 mic detection
- Ensure everything is set up before we start detecting.
- - ASoC: Start WM8962 FLL if SYSCLK is enabled
- Since we have code to automatically manage the start and stop of the FLL
- based on the SYSCLK widget if SYSCLK is already enabled and the FLL is
- configured then we need to start it up.
- - ASoC: Ensure we always delay for WM8962 FLL when starting from SYSCLK
- - ASoC: Ensure the WM8962 oscillator and PLLs start up disabled
- Since there is no current software control for these they would otherwise
- be left enabled, consuming power.
- - ASoC: Ensure WM8962 PLL registers are reset
- The WM8962 has a separate software reset for the PLL registers. Ensure that
- these are reset also on startup.
- - ASoC: Remove direct register cache accesses from WM8962 driver
- Also fix return values for speaker switch updates.
- - ASoC: Fix a bug in WM8962 DSP_A and DSP_B settings
- - ASoC: Convert WM8962 MICBIAS to a supply widget
- A supply widget is generally clearer than a MICBIAS widget and a mic bias
- is just a type of supply so use a supply widget for the MICBIAS. This also
- avoids confusion with the routing when connected to multiple inputs.
- - ASoC: Rename WM8962 DMIC widget to DMIC_ENA
- Matches the register name and avoids confusion with board widgets.
- - ASoC: Remove bitrotted wm8962_resume()
- This functionality is now subsumed within the bias management, using the
- standard cache management functionality, without assuming the cache type.
- - ASoC: Provide more detail on WM8962 thermal shutdown status
- - ASoC: Clear any outstanding WM8962 FLL lock completions before waiting
- Ensure that we don't spuriously trigger early.
- - ASoC: Report IRQ_NONE when we don't see an interrupt from WM8962
- This should never happen with level triggered IRQs.
- - ASoC: Initial WM8962 DSP2 support
- The WM8962 features a DSP providing a number of signal processing
- features including HD Bass and Virtual Surround Sound (VSS). Enable
- initial support for this, allowing users to enable and disable the
- algorithms using the default coefficient sets. Further patches will
- add support for runtime configuration of the DSP coefficients.
- - ASoC: Add basic WM8962 capture low/high pass filter control
- - ASoC: Move WM8962 CLKREG_OVD earlier
- When the clocking registers are not overriden some of the registers are
- not writable.
- - ASoC: Acknowledge WM8962 interrupts before acting on them
- This closes the small race between a status being read in response to an
- interrupt and clearing the interrupt, meaning that if the status changes
- between those periods we might not get a reassertion of the interrupt.
- - ASoC: Defer all WM8962 clocking configuration until power up
- Don't require an audio rate SYSCLK in hw_params() in order to better
- support microphone detection use cases.
- - ASoC: Implement base 5 band EQ control for WM8962
- ReTune Mobile modes are not currently supported.
- - ASoC: Report errors when we have a WM8962 IRQ and don't get FLL lock
- We really should be getting the interrupt - if we don't get one it's very
- likely that the configuration is incorrect and audio will fail. Also
- increase the timeout substantially in this case for safety.
- - ASoC: Factor out I2C usage in WM8962 driver
- The chip can actually support SPI so we shouldn't assume we've got an I2C
- device even though that's the most common configuration.
- - ASoC: Fix WM8962 headphone volume update for use of advanced caches
- - ASoC: Implement WM8962 ADC high pass filter configuration
- - ASoC: Don't warn if the WM8962 SYSCLK FLL setting doesn't match reality
- When bringing up audio low power modes boards may configure SYSCLK before
- they actually start the FLL as we do much of the clocking setup prior to
- the power up sequence.
- - ASoC: Implement WM8962 DMIC support
- DMIC support is automatically disabled when none of the GPIOs are set up
- to bring out the DMICCLK and DMICDAT pins at startup.
- Note that there's no support for controlling DMIC routing except the power
- control so the board DAPM configuration will need to manage DMIC enable and
- disable if analogue mics (eg, a headset) also exist.
- - ASoC: Define constants for WM8962 GPIO functions
- - ASoC: Move WM8962 FLL configuration to CODEC
- There's only one DAI anyway.
- - ASoC: Support FLL lock interrupt on WM8962
- - ASoC: Accept any logical value for WM8962 GPIO set()
SoC Codec WM8971
- - ASoC: Convert wm8971 MICBIAS to a supply widget
- - ASoC: wm8971: Convert to snd_soc_cache_sync
- Convert to snd_soc_cache_sync for sync reg_cache with the hardware.
- - ASoC: Avoid writing to WM8971_RESET in wm8971_resume
- Writing to WM8971_RESET resets all registers to the default state.
- Thus we should avoid writing to WM8971_RESET on resume.
- - ASoC: wm8971: Use snd_soc_update_bits for read-modify-write
- Use snd_soc_update_bits for read-modify-write register access instead of
- open-coding it using snd_soc_read and snd_soc_write
SoC Codec WM8974
- - ASoC: Convert wm8974 MICBIAS to a supply widget
- - ASoC: wm8974: Convert to snd_soc_cache_sync
- Convert to snd_soc_cache_sync for sync reg_cache with the hardware.
- - ASoC: Remove references to linux@wolfsonmicro.com
SoC Codec WM8978
- - ASoC: Remove unused "control_data" field of struct wm8978_priv
- The control_data field is used to initialize the codec's control_data field,
- but since this is also done by the snd-soc-cache core, the redundant
- assignment can be removed and the field can be dropped.
- - ASoC: Add TLV information for WM8978 DAC limiter
- - ASoC: Fix broken bitfield definitions in WM8978
SoC Codec WM8983
- - ASoC: Convert wm8983 MICBIAS to a supply widget
- - ASoC: Writing register default value for the reset register
- The WM8983 can be reset by performing a write of any value to
- the software reset register.
- To avoid writing to the software reset register while resume,
- we should write the same value in wm8983_reg_defs to software
- reset register in wm8983_probe().
- The write to the reset register is suppressed by the cache
- restore code when it skips writes of default registers.
- - ASoC: WM8983: Initial driver
- The WM8983 is a low power, high quality stereo CODEC
- designed for portable multimedia applications. Highly flexible
- analogue mixing functions enable new application features,
- combining hi-fi quality audio with voice communication.
SoC Codec WM8985
- - ASoC: Convert wm8985 MICBIAS to a supply widget
SoC Codec WM8988
- - ASoC: Convert wm8988 MICBIAS to a supply widget
- - ASoC: wm8988: Convert to snd_soc_cache_sync
- Convert to snd_soc_cache_sync for sync reg_cache with the hardware.
- - ASoC: wm8988: Use snd_soc_update_bits for read-modify-write
- Use snd_soc_update_bits for read-modify-write register access instead of
- open-coding it using snd_soc_read and snd_soc_write
- - ASoC: wm8988: Use snd_soc_update_bits for read-modify-write
- Use snd_soc_update_bits for read-modify-write register access instead of
- open-coding it using snd_soc_read and snd_soc_write
SoC Codec WM8990
- - ASoC: Convert wm8990 MICBIAS to a supply widget
- - ASoC: wm8990: Use snd_soc_update_bits for read-modify-write
- Use snd_soc_update_bits for read-modify-write register access instead of
- open-coding it using snd_soc_read and snd_soc_write
- This patch also includes a comment fix in wm8990_set_dai_pll(),
- if freq_in and freq_out are 0, what we do is to clear WM8990_PLL_ENA bit.
- Thus the comment should be "Turn off PLL".
- - ASoC: wm8990: Fix wrong bit setting for WM8990_POWER_MANAGEMENT_2
- If (fakepower & ((1 << WM8990_INMIXR_PWR_BIT) | (1 << WM8990_AINRMUX_PWR_BIT)))
- is false, we should clear WM8990_AINR_ENA bits instead of WM8990_AINL_ENA.
- - ASoC: wm8990: Remove incorrect comments
- - ASoC: wm8990: Convert to snd_soc_cache_sync for sync reg_cache with the hardware
SoC Codec WM8991
- - ASoC: Convert wm8991 MICBIAS to a supply widget
- - ASoC: wm8991: Use snd_soc_update_bits for read-modify-write
- Use snd_soc_update_bits for read-modify-write register access instead of
- open-coding it using snd_soc_read and snd_soc_write
- - ASoC: wm8991: Fix wrong bit setting for WM8991_POWER_MANAGEMENT_2
- If (fakepower & ((1 << WM8991_INMIXR_PWR_BIT)|(1 << WM8991_AINRMUX_PWR_BIT))))
- is false, we should clear WM8991_AINR_ENA bits instead of WM8991_AINL_ENA.
- - ASoC: Remove references to linux@wolfsonmicro.com
- - ALSA: Remove unneeded version.h includes from sound/
- In the sound/ directory there are two files (flagged by 'make
- versioncheck'); sound/pci/asihpi/asihpi.c and
- sound/soc/codecs/wm8991.c that include linux/version.h although they
- don't need it. This patch removes the unneeded includes.
SoC Codec WM8993/4
- - ASoC: Wait for WM8993 FLL to stabilise
- Ensure the FLL is locked before we return from set_fll().
- - ASoC: Fix partial cherry pick in wm8993
- - ASoC: Use standard register cache sync in wm8993
- - ASoC: Convert wm8993 to devm_kzalloc()
- - ASoC: Convert WM8994 MICBIASes to supply widgets
- There are some in tree systems using the driver but none use the MICBIAS
- widgets.
- - ASoC: wm_hubs: fix DB_RANGE size
- Give the correct number of entries to TLV_DB_RANGE_HEAD to prevent
- reading more data than actually is in the array.
- - ASoC: wm8993: fix DB_RANGE size
- Give the correct number of entries to TLV_DB_RANGE_HEAD to prevent
- reading more data than actually is in the array.
- - ASoC: Disable thermal shutdown when not using speakers in wm_hubs
- The thermal shutdown support in wm_hubs devices is tied to the speaker
- drivers (which are the only high power subsystems within the device).
- Ensure minimal current usage when the thermal shutdown support is not
- required by disabling the circuit when the speaker drivers are powered
- down.
- - ASoC: Replace remaining use of *_volsw_2r with *_volsw
- The snd_soc_*_volsw_2r functionality has been merged to
- *volsw callbacks.
- Few places still used the get, or put variant of volsw_2r,
- replace those with the corresponding *_volsw.
- - ASoC: Add VMID widget for wm_hubs devices
- Currently this does not actually do anything, it is being introduced in
- order to facilitate additional power optimisations for current generation
- devices.
- - ASoC: Support separate left and right channel dcs_codes values
- Some devices can have performance optimized by setting different offsets
- for left and right channels.
- - ASoC: Implement new DC servo readback mode for late WM8994 revisions
- Later WM8994 devices implement a new DC servo readback mode with the
- register used to access the offset moved to register 0x59. Implement
- support for this and enable it on the appropriate devices.
- - ASoC: Disable wm_hubs periodic DC servo update
- This does not function correctly in all circumstances so disable the
- periodic updates unconditionally for stable; a future patch will reenable
- where appropriate.
- - ASoC: Handle spurious wm_hubs DC servo done interrupts
- Don't assume the first fire indicates that we're done.
- - ASoC: Implement DC servo completion IRQ handling for wm_hubs devices
- The individual devices should set the flag dcs_done_irq in the hubs
- shared data structure to indicate that they will flag the interrupt
- by calling wm_hubs_dcs_done().
- - ASoC: Use late enable handling for direct voice, speaker and headphone
- This ensures appropriate clocking for bypass paths to speaker and
- headphone and direct voice paths on affected revisions.
- - ASoC: Correct left/right swap in wm_hubs DC offset correction
- It was consistently wrong for everything except WM8993 so should be no
- functional change.
- - ASoC: Allow suppression of series updates on wm_hubs devices
- Some devices do not support manual updates of the DC servo.
- - ASoC: Trigger wm_hubs series update startup off a separate flag
- Allowing the two to be used independently.
- - ASoC: Fix wm_hubs input PGA ZC bits
- - ASoC: Fix wrong data type access in a few codec drivers
- Commit fafd217 ("ASoC: Store a list of widgets in a DAPM mux/mixer kcontrol")
- changed the control private data type that is passed to snd_soc_cnew when
- creating dapm mixer and mux controls. Commit did not update a few codec
- drivers that are using their own put callbacks and thus are accessing a
- wrong data type.
- Tested-by: Stephen Warren <swarren@nvidia.com>
- - ASoC: Add some missing volume update bit sets for wm_hubs devices
- - ASoC: Ensure output PGA is enabled for line outputs in wm_hubs
- Also fix a left/right typo while we're at it.
- - ASoC: Fix output PGA enabling in wm_hubs CODECs
- The output PGA was not being powered up in headphone and speaker paths,
- removing the ability to offer volume control and mute with the output
- PGA.
- - ASoC: Log wm_hubs DC servo operation code when reporting a timeout
- - ASoC: Hook wm_hubs micbiases up to CLK_SYS
- The microphone detection functionality requires a clock to work. In any
- non-detection case where the MICBIAS is enabled CLK_SYS will be needed
- anyway so there is no negative impact on power consumption.
SoC Codec WM8994
- - ASoC: Enable ASoC register map dump for some regmap CODECs
- It's still useful to be able to poke around in the register map at
- runtime.
- - ASoC: Remove unused label from wm8994 probe()
- - ASoC: Remove WM8994 register cache
- Now that the mfd is using the register map cache there's no need for the
- CODEC driver to do any register cache management or any funny dances to
- interact with the other drivers using the device so just remove the cache
- initialisation and volatility information.
- - ASoC: Remove ASoC-specific WM8994 I/O code
- Just go directly to the regmap API, saving code and making integration
- that bit more direct.
- - sound: mfd: Define some additional wm8994 registers
- Add a bunch of definitions for wm8994 registers that are not currently
- used by software.
- - ASoC: Rely on core enabling the wm8994 with runtime PM
- No need to do this in the driver now.
- - ASoC: Add missing err label
- Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
- - ASoC: Convert WM8994 to devm_kzalloc()
- Still have a manual free in there for some realloc()ed memory as there's
- no devm version of that.
- - ASoC: Add platform data for WM8958/WM1811 microphone detection rates
- Allow systems to override the default microphone detection rates using
- platform data in case the settings are not suitable (eg, due to an
- unusually noisy jack).
- - ASoC: Ensure we reconfigure WM8958 microphone detection on rate changes
- We don't need to rerun DAPM if the clock source is the same but we do
- need to adjust the microphone detection rate in case we are moving from
- an audio to a non-audio rate.
- - ASoC: Implement support for WM1811A jack detection
- The WM1811A features an advanced low power accessory detection subsystem
- which allows the device to be maintained in a very low power state while
- the system is idle without sacrificing any accessory detection features.
- Implement software support for this, automatically managing the power
- configuration of the device depending on the detected accessory.
- - ASoC: Rename WM8994 detecting flag to mic_detecting
- More specific and avoids confusion with a following change.
- - ASoC: Allow more WM8958/WM1811 button levels with default handler
- The WM8958 and WM1811 support detecting a range of buttons. Allow the
- user to provide platform data enabling more of these levels without
- having to write a custom detection handler.
- - ASoC: Tune down active mode detection rate for WM8958 mic detection
- Saves a little power.
- - ASoC: Don't use control_data to get struct wm8994
- This will support refactoring to make use of the regmap API more directly
- in the core.
- - ASoC: Provide debug log of accessory status on WM8958
- - ASoC: Enhance default WM8958 microphone detection
- Actively manage the detection rate for microphones with WM8958, providing
- improved power consumption and maximising the benefit from the hardware
- debounce.
- - ASoC: Put WM8958 and WM1811 MICBIAS into bypass mode when no audio
- When we don't have any active audio we can put the microphone biases into
- bypass mode to save power at the expense of performance.
- - ASoC: Ensure SYSCLK is enabled for WM8958 accessory detection
- Ensure SYSCLK is enabled while running accessory detection on WM8958.
- It is always required so there is no sense in requiring machine drivers
- to individually do this.
- - ASoC: Mark WM8994 ADC muxes as virtual
- Since they don't actually have power bits but do have events associated
- with them it's important that we bootstrap their state properly which
- making them virtual does.
- - ASoC: Supply dcs_codes for newer WM1811 revisions
- Based on initial data.
- - ASoC: Error out if we can't generate a LRCLK at all for WM8994
- - ASoC: Ensure we get an impedence reported for WM8958 jack detect
- Occasionally we may see an accessory reported before we have a stable
- impedance for the accessory. If this happens then reread the status in
- order to ensure that the handler can take the appropriate action for the
- status change.
- - ASoC: Don't use wm8994->control_data when requesting IRQs
- The field is no longer initialised so this will crash if running on
- wm8958.
- Reported-by: Thomas Abraham <thomas.abraham@linaro.org>
- - ASoC: Don't use wm8994->control_data in wm8994_readable_register()
- The field is no longer initialised so this will crash if running on
- wm8958.
- Reported-by: Thomas Abraham <thomas.abraham@linaro.org>
- - ASoC: wm8994: Use SND_SOC_DAPM_AIF_OUT for AIF3 Capture
- - ASoC: Update WM1811 DCS codes for latest evaluation results
- Evaluation of larger quantities of material has provided new DCS codes
- values to be applied for WM1811.
- - ASoC: Remove impossible case from wm8994_hw_params
- We set hw_params callback for wm8994_aif3_dai_ops to wm8994_aif3_hw_params.
- Thus no need to check wm8994-aif3 in wm8994_hw_params.
- - ASoC: wm8994: Fix setting rate_reg for wm8994-aif2
- For wm8994-aif2, the rate_reg should be WM8994_AIF2_RATE.
- - ASoC: wm8994: Slightly optimize configure_clock
- snd_soc_update_bits() will only write new register value
- if the old value is different from the new value.
- In additional, snd_soc_update_bits() returns 0 for no change.
- No need to read WM8994_CLOCKING_1 register before calling snd_soc_update_bits().
- - ASoC: Add WM1811 support
- The WM1811 is mostly register compatible with the WM8994 and WM8958,
- providing a high performance audio hub CODEC in a small form factor
- suitable for ultra compact system designs.
- - ASoC: Fix backport of WM8994 thermal warning
- Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
- - ASoC: Implement WM8994 thermal warning and shutdown interrupt support
- ALSA doesn't really have good mechanisms for dealing with these so we just
- log them - the hardware already has automatic shutdown support.
- - ASoC: Add WM8958 noise gate support
- - ASoC: Disable pulls on WM8994 AIF2 when starting it
- Pull control is availalbe for WM8994 AIF2, generally disabled as part of
- the GPIO configuration in order to save power after system startup. As on
- newer devices in the series there is no GPIO functionality on these pins
- this will happen less naturally so have the driver disable the pulls as the
- AIF is probed.
- - ASoC: Disable WM8994 VMID for digital only paths
- On WM8994 class devices only the analogue portions of the CODEC require
- VMID so when running digital only paths we can leave VMID disabled.
- On some earlier devices the FLL uses VMID so we don't use DAPM reference
- counting alone, we maintain an internal reference count which is also
- enabled and disabled by the FLL startup.
- - ASoC: Add VMID widget for wm_hubs devices
- Currently this does not actually do anything, it is being introduced in
- order to facilitate additional power optimisations for current generation
- devices.
- - ASoC: Specify register defaults for WM8958 MICBIAS1 and MICBIAS2
- - ASoC: Support separate left and right channel dcs_codes values
- Some devices can have performance optimized by setting different offsets
- for left and right channels.
- - ASoC: Implement new DC servo readback mode for late WM8994 revisions
- Later WM8994 devices implement a new DC servo readback mode with the
- register used to access the offset moved to register 0x59. Implement
- support for this and enable it on the appropriate devices.
- - ASoC: Add missing break in WM8994 probe
- This error would have no effect on current silicon revisions, the fall
- through case has the same behaviour.
- - ASoC: Correct WM8994 MICBIAS supply widget hookup
- The WM8994 and WM8958 series of devices have two MICBIAS supplies rather
- than one, the current widget actually manages the microphone detection
- control register bit (which is managed separately by the relevant API).
- Fix this, hooking the relevant supplies up to the MICBIAS1 and MICBIAS2
- widgets.
- - ASoC: Reduce power consumption for idle DAIs in WM8994
- If DAIs are idle but their clocks are in use for some reason (eg, as
- SYSCLK or for accessory detect) then set the clock dividers to the maximum
- to reduce slightly the power consumption of the unclocked circuits.
- - ASoC: Handle failed WM8994 FLL lock waits
- Try the completion before we start the FLL so that if an interrupt was
- delayed long enough for us to miss it we don't wait for the completion
- it signalled.
- - ASoC: Fix shift in WM8958 accessory detection default implementation
- - ASoC: Log WM8994 FIFO errors from the interrupt
- We should spot them anyway on state changes but logging them gives us
- better time information about when the misconfiguration happened.
- - ASoC: Don't warn on low WM8994/58 AIFnCLKs
- We can have valid but very low clocks in accessory detection modes.
- - ASoC: Use WM8994 FLL lock interrupt
- If we have interrupts then wait for the FLL lock interrupt rather than
- using dead reckoning when waiting for the FLL to start.
- - ASoC: Hook up DC servo completion IRQ for WM8994 and WM8958
- - ASoC: Use late enable handling for direct voice, speaker and headphone
- This ensures appropriate clocking for bypass paths to speaker and
- headphone and direct voice paths on affected revisions.
- - ASoC: Conditionalize the enable of WM8994 ADC TDM mode
- Future devices will not benefit from this.
- - ASoC: Trigger wm_hubs series update startup off a separate flag
- Allowing the two to be used independently.
- - ASoC: Ensure we delay long enough for WM8994 FLL to lock when starting
- This delay is very conservative.
- - ASoC: Disable WM8994/58 microphone detection over suspend
- It will be non-functional with the basises and clocks off anyway, if the
- system needs microphone detection enabled over suspend then it should be
- causing the CODEC to ignore suspend using the APIs for that to prevent
- the biases being disabled.
- - ASoC: Set left channel volume update bits for WM8994
- Ensures that we apply volume updates that don't affect the right channel.
- - ASoC: Add WM8958 enhanced EQ support
- DSP2 in the WM8958 can be used to support an upgraded EQ for use in
- demanding applications.
- - ASoC: Add WM8958 VSS support
- With appropriate firmware the WM8958 can support Virtual Surround Sound or
- VSS, widening the stereo audio image for improved user experience. Enable
- support for this mode of operation when the appropriate firmware can be
- loaded at runtime.
- - ASoC: Refactor WM8958 DSP to support additional algorithms
- In preparation for the addition of additional WM8958 algorithms
- reorganise the code to make it easier to add such support later.
- - ASoC: Support download of WM8958 MBC firmware
- Allow userspace to supply an update to the ROM firmware. The firmware
- request is non-blocking so userspace can load the firmware at its
- leisure without delaying startup, the driver will begin using the
- firmware the next time MBC is started after it has been supplied.
- - ASoC: Mark WM8958 DSP2 registers readable
- - ASoC: Handle startup sequencing of WM8958 DSP2 with deferred clocking
- The DSP2 startup requires that the clock be enable so if we've deferred
- clock startup we need to defer DSP2 startup
- - ASoC: Factor WM8958 DSP2 handling into separate file
- DSP2 on the WM8958 has a default ROM which provides a multi-band
- compressor for enhanced performance on mobile devices but can also
- support runtime download of alternative firmware. In preparation for
- more exploiting this functionality refactor the code to split the
- handling of DSP2 into a separate file.
- - ASoC: Treat WM8958 revision A as WM8994 revision D
- The first WM8958 revision requires similar treatment.
- - ASoC: WM8994: Don't disable the AIF[1|2]CLK_ENA unconditionaly
- Since we began using the late clock disable functionality, ensure that
- we don't disable the clock if any of the ADC or DAC paths are still
- enabled. This happens when we have simultaneous playback and recording.
- - ASoC: Fix section mismatch warnings in WM8994
- Annoying as the __devinitdata is actually correct.
- - ASoC: WM8994: Ensure MICBIAS is provided with a clock
- The patch 'ASoC: WM8994: Improve Playback Robustness' did not handle
- this case properly.
- - ASoC: Ensure WM8958 gets all WM8994 late revision widgets
- Without this fix the driver won't instantiate properly on relevant
- devices.
- - ASoC: Fix typo in late revision WM8994 DAC2R name
- Without this fix the driver won't instantiate properly on relevant
- devices.
- - ASoC: WM8994: Ensure late enable events are processed for the ADCs
- Ensure that the ADCs are provided with a clock as the previous patch
- "ASoC: WM8994: Improve playback robustness" did not handle this case
- properly.
- - ASoC: WM8994: Improve playback robustness
- On WM8994 revision D and earlier ensure proper playback robustness
- as some rare use cases can trigger issues.
- - ASoC: WM8994: Improve robustness in some use cases
- Ensure that on disabling certain registers such as AIF1DAC1L,
- AIF1DAC1R etc. the AIF1CLK and AIF2CLK remain enabled. Similarly
- when enabling those registers, AIF1CLK and AIF2CLK will remain
- disabled.
- - ASoC: Simplify default WM8958 jack detection code
- The default WM8958 jack detection handler implements a full set of buttons
- and also support for video detection. Support for multi-button jacks is
- fairly system specific and will usually require some tuning for headsets
- so simplify the implementation to only report a simple short to ground
- button, leaving multi-button headsets to be handled by system specific
- code.
- - ASoC: Support configuration of WM8958 microphone bias analogue parameters
- The WM8958 has a different microphone bias architecture to WM8994 so needs
- different configuration to WM8994. Support this in platform data.
- - ASoC: Support WM8958 direct microphone detection IRQ
- Allow direct routing of the WM8958 microphone detection signal to a GPIO
- to be used, saving the need to demux the interrupt.
- - ASoC: Mark WM8958 microphone bias registers as readable
- - ASoC: Mark WM8958 microphone detection registers readable
- So they show up in codec_reg.
- - ASoC: Fix missing space in WM8994
- - ASoC: Fix WM8958 default microphone detection argument ordering
- - ASoC: Improve WM8994 digital power sequencing
- On WM8994 revision D and earlier ensure optimal sequencing with
- simultaneous usage of AIF1 and AIF2 by tying the signals together
- so if paths through both are connected the streams are started
- simultaneously.
- - ASoC: Create an AIF1ADCDAT signal widget to match AIF2
- Due to the different routing for AIF1 and AIF2 we weren't using a
- single widget to represent the ADCDAT signal. For consistency add
- one.
SoC Codec WM8995
- - ASoC: Fix wm8995 regmap usage
- - ASoC: Convert WM8995 to direct regmap usage
- Large code size increase due to the addition of readability information
- and the reformatting of the defaults table.
- - ASoC: Convert wm8995 MICBIASes to supply widgets
- - ASoC: wm8995: Slightly optimize configure_clock
- snd_soc_update_bits() will only write new register value
- if the old value is different from the new value.
- In additional, snd_soc_update_bits() returns 0 for no change.
- No need to read WM8995_CLOCKING_1 register before calling snd_soc_update_bits().
- - ASoC: Add missed regulator_unregister_notifier and regulator_bulk_free in wm8995_remove
- - ASoC: wm8995: Remove unused i2c variable in wm8995_remove()
- - ASoC: wm8995: Return -EINVAL if device ID mismatch
SoC Codec WM8996
- - ASoC: Enable ASoC register map dump for some regmap CODECs
- It's still useful to be able to poke around in the register map at
- runtime.
- - ASoC: Tune the accessory detection rates for WM8996
- Use longer intervals when the microphone is not inserted to increase
- robustness against leisurely insertion.
- - ASoC: Convert wm8996 to use devm_kzalloc()
- - ASoC: Convert WM8996 gpiolib to regmap
- Actually pretty straightforward.
- - ASoC: Move most WM8996 resource acquisition to I2C probe
- Now that the WM8996 driver is using the regmap API for register I/O we no
- longer need the ASoC card to be active in order to interact with the chip.
- In order to be more idiomatic for Linux move most of the existing probe()
- function out into the I2C probe() function prior to registration with ASoC.
- The IRQ and GPIO init will be moved separately as these are slightly more
- involved.
- - ASoC: Convert WM8996 to direct regmap API usage
- - ASoC: Fix WM8996 24.576MHz clock operation
- Record the clock after the divider as that is what all SYSCLK users see.
- Without this the other clock configuration in the device comes out at
- half rate.
- - ASoC: wm8996: Avoid a redundant i2c_get_clientdata call in wm8996_i2c_remove
- - ASoC: wm8996: Fix wrong mask for setting WM8996_AIF_CLOCKING_2
- - ASoC: wm8996: Use SND_SOC_DAPM_AIF_OUT for AIF2 Capture
- - ASoC: Remove needless codec->dapm.bias_level assignment to SND_SOC_BIAS_OFF
- This assignment is done by the snd_soc_register_codec so there is no need
- to redo it in probe function of a codec driver.
- - ASoC: Add DRC control for WM8996
- - ASoC: Refcount WM8996 bandgap from FLL too
- For digital only paths we need to make sure the bandgap is enabled prior
- to starting the FLL which isn't tied into DAPM.
- - ASoC: Fix unused variable warning in WM8996
- - ASoC: Initial WM8996 headphone impedance measurement support
- The WM8996 can measure the impedance of accessories connected to the
- headphone output. Implement initial support for this, measuring the
- left channel impedance when an accessory is detected and using this
- to distinguish between a line load and a headphone load.
- - ASoC: WM8996 only needs bandgap for analogue functionality
- Rather than managing the bandgap in the bias level control use a supply
- widget as we only actually need to enable it for analogue paths, not
- fully digital ones.
- - ASoC: Fix WM8996 DC servo operation without IRQ
- We need to count the timeout down.
- Reported-by: Axel Lin <axel.lin@gmail.com>
- - ASoC: Correct channel numbers for WM8996 AIF2
- The AIF1 channels are numbered from zero than one; do the same thing for
- AIF2 too.
- - ASoC: Disable WM8996 CPVDD supply when not in use
- The WM8996 only requires CPVDD when the charge pump is active so control
- it separately to the other supplies, only enabling it when the charge pump
- is active. This will result in a small power saving on systems which are
- able to provide independent software control of the supply.
- - ASoC: Check that WM8996 FLL started even if we don't have the IRQ
- We can directly read the FLL lock status on WM8996 so even if we don't
- have an interrupt wired up we can still verify that the FLL started
- successfully.
- - ASoC: Add 3D stereo support for wm8996
- My first patch to ASoC ever! If I did something wrong, blame Ian.
- - ASoC: Correct element count for WM8996 sidetone HPF
- I can count. Honest.
- - ASoC: Clear completions from late WM8996 FLL lock IRQs
- In case we have a pending completion, for example due to a problem with
- the input clock which got corrected after we timed out.
- - ASoC: Optimise WM8996 no interrupt path
- This occurs frequently if we are in edge triggered mode as we must poll the
- interrupt status register until we get no more interrupts so it's worth
- the effort - it means we skip writing null acknowledgements to the chip.
- - ASoC: Automatically manage WM8996 MICBIAS regulating mode
- For non-audio uses like accessory detection we can use a lower quality,
- unregulated microphone bias, saving a little power. As the hardware can
- manually enable and disable the biases we can select regulating mode
- automatically with supply widgets connected to the biases.
- - ASoC: Fix configuration of WM8996 input enables
- There's no need for separate widgets for the enables (as the map already
- shows).
- - ASoC: WM8996 record paths need AIFCLK
- Make AIFCLK supply the record paths otherwise record will not work unless
- there is a simultaneous playback.
- - ASoC: Acknowledge WM8996 interrupts before acting on them
- This closes the small race between a status being read in response to an
- interrupt and clearing the interrupt, meaning that if the status changes
- between those periods we might not get a reassertion of the interrupt.
- - ASoC: Rename WM8915 to WM8996
- For marketing reasons the part will be called WM8996. In order to avoid
- user confusion rename the driver to reflect this.
SoC Codec WM9081
- - ASoC: Remove cache default for volatile wm9081 reset register
- - ASoC: Convert wm9081 driver to use devm_kzalloc()
- - ASoC: wm9081: Use snd_soc_update_bits for read-modify-write
- Use snd_soc_update_bits for read-modify-write register access instead of
- open-coding it using snd_soc_read and snd_soc_write
- - ASoC: Convert WM9081 to direct regmap API usage
- - ASoC: wm9081: Don't write WM9081_BIAS_ENA bit to WM9081_VMID_CONTROL register
- WM9081_BIAS_ENA is the bit[1] of WM9081_BIAS_CONTROL_1 register (05h).
- Current code incorrectly write it to WM9081_VMID_CONTROL(04h) register.
- - ASoC: wm9081: Fix reading wrong register for setting VMID 2*240k
- VMID Divider Enable and Select is controlled by BIT[2:1] of WM9081_VMID_CONTROL
- register (04h).
- Current code reads wrong register (WM9081_BIAS_CONTROL_1) for setting
- VMID 2*240k.
- - ASoC: Only enable thermal shutdown when required on WM9081
- The WM9081 thermal shutdown is only effective when the speaker output is
- enabled so disable it when that is not in use for a small current saving.
- - ASoC: wm9081: Fix setting soft VMID ramp enable with VMID 2*240k
- According to the datasheet:
- BIT 2:1
- VMID_SEL[1:0] VMID Divider Enable and Select
- 00 = VMID disabled
- 01 = 2x40k Omh divider
- 10 = 2x240k Omh divider
- 11 = 2x5k Omh divider
- To set VMID 2*240k, we should OR reg with 0x04 instead of 0x40.
- - ASoC: WM9081 interrupt status register is volatile
- Not that we have interrupt handling in the driver at the minute.
- - ASoC: Convert WM9081 to table based control init
- At least for the core controls, the optionally selected controls are still
- added programatically.
- - ASoC: Remove unused "control_data" field of struct wm9081_priv
- The control_data field is used to initialize the codec's control_data field,
- but since this is also done by the snd-soc-cache core, the redundant
- assignment can be removed and the field can be dropped.
- - ASoC: Allow source specification for CODEC level sysclk
- Similarly to PLLs/FLLs some modern CODECs provide selectable system clock
- sources. When the clock is the clock for a DAI we do not usually need to
- identify which clock is being configured so can use clk_id for the source
- clock but with CODEC wide system clocks we will need to specify both the
- clock being configured and the source.
- Add a source argument to the CODEC driver set_sysclk() operation to
- reflect this. As this operation is not as widely used as the DAI
- set_sysclk() operation the change is not very invasive. We probably
- ought to go and make the same alternation for DAIs at some point.
- - ASoC: Change WM9081 speaker output enable to _OUT_DRV
- More for neatness than any actual performance improvement.
- - ASoC: Simplify WM9081 speaker startup by using widgets for spaker output
- Now we have a register write minimisation code in DAPM we don't need to
- worry about the ordering of the enable and disable of the PGA and the
- output stage.
- - ASoC: Convert WM9081 SYSCLK configuration to be device wide
- Also respace the CODEC ops a bit for legibility.
- - ASoC: Use data based init for WM9081 DAPM
- - ASoC: Add platform data for WM9081 IRQ pin configuration
- The WM9081 IRQ output can be either active high or active low and can
- support either CMOS or open drain modes.
- - ASoC: Fix WM9081 platform data initialisation
- It went AWOL in the multi-component conversion.
- - ASoC: Remove -codec suffix from WM9081 driver
SoC Codec WM9090
- - ASoC: Use standard snd_soc_cache_sync() for WM9090
- - ASoC: Convert WM9090 to devm_kzalloc()
- - ASoC: wm9090: fix DB_RANGE size
- Give the correct number of entries to TLV_DB_RANGE_HEAD to prevent
- reading more data than actually is in the arrays.
- - ASoC: Remove unused variable 'wm9090' in wm9090_probe
- Eliminate below build warning:
- CC sound/soc/codecs/wm9090.o
- sound/soc/codecs/wm9090.c: In function 'wm9090_probe':
- sound/soc/codecs/wm9090.c:550: warning: unused variable 'wm9090'
- - ASoC: Remove unused "control_data" field of struct wm9090_priv
- The control_data field is used to initialize the codec's control_data field,
- but since this is also done by the snd-soc-cache core, the redundant
- assignment can be removed and the field can be dropped.
- - ASoC: Add device ID for WM9093 to WM9090 driver
- The WM9093 is an enhanced version of the WM9093. Add the device ID to
- the driver, further patches will add support for the additional features
- in the WM9093.
- - ASoC: Remove unused mutex from WM9090 driver
SoC Codec WM9705
- - ASoC: Use data based init for wm9705 DAPM
SoC Codec WM9712
- - ASoC: Use data based init for wm9712 DAPM
SoC Codec WM9713
- - ASoC: Use data based init for wm9713 DAPM
SoC Codec ads1174/8
- - ASoC: Delete ads117x.h
- This is not required after multi-component patch.
SoC Codec alc5621/2/3
- - ASoC: Convert alc5623 to devm_kzalloc()
- - ASoC: Rename rt562[1|2]_vol_snd_controls to alc562[1|2]_vol_snd_controls
- The module desciption says this is ASoC alc5621/2/3 driver.
- Make the naming consistent with the reset of the code.
- - ASoC: alc5623: Convert codec->hw_read to snd_soc_read
- codec->hw_read is broken now, let's covert to snd_soc_read.
- - ASoC: Remove unused "control_data" field of struct alc5623_priv
- The control_data field is used to initialize the codec's control_data field,
- but since this is also done by the snd-soc-cache core, the redundant
- assignment can be removed and the field can be dropped.
- - ASoC: alc5623: Remove unused mutex
SoC Codec alc5632
- - ASoC: Rename ALC5632 MICBIAS to common name convention.
- - ASoC: alc5632: Remove volatile registers from regmap defaults
- There is no need to provide defaults for the volatile
- registers and doing so might cause confusion.
- - ASoC: alc5632: Update of i2c_probe function to use regmap API only
- - ASoC: alc5632: Added support of two undocumented registers
- There are two undocumented registers in use in alc5632_i2c_probe
- function. It must be added to support future rewrite of this
- function to use regmap API completely.
- - ASoC: alc5632: Remove unrelevant registers and name the relevant
- - ASoC: alc5632: rename volume/switch contols for master and speaker volumes.
- - ASoC: Convert ALC5632 codec to use regmap API
- - ASoC: alc5632: Fix compile without CONFIG_PM
- - ASoC: Remove unused control_data and mutex fields from struct alc5632_priv
- Acked-off-by: Leon Romanovsky <leon@leon.nu>
- - ASoC: Remove unnecessary backslash from alc5632 codec
- - ASoC: Remove unused defines in alc5632 codec
- - ASoC: Add new Realtek ALC5632 CODEC driver
- This driver implements basic functionality, using I²C for the control
- channel.
SoC Codec tlv320aic32x4
- - ASoC: Convert tlv320aic32x4 to devm_kzalloc()
- - ASoC: tlv320aic32x4: Use snd_soc_update_bits for read-modify-write
- Use snd_soc_update_bits for read-modify-write register access instead of
- open-coding it using snd_soc_read and snd_soc_write.
- - ASoC: tlv320aic32x4 fix initialization of micpga routing
- Checking the pdata-flags used 'or', so the check is always true. Use 'and' to
- correctly mask the flags.
- - ASoC: Fix outdated API usage in tlv320aic32x4
- - ASoC: Add TI tlv320aic32x4 codec support.
- This patch adds support for tlv320aic3205 and tlv320aic3254 codecs.
- It doesn't include miniDSP support for aic3254.
SoC DaVinci
- - ASoC: davinci-i2s.c: use devm_ functions
- The various devm_ functions allocate memory that is released when a driver
- detaches. This patch uses devm_kzalloc, devm_request_mem_region and
- devm_ioremap for data that is allocated in the probe function of a platform
- device and is only freed in the remove function.
- In this case, the original code did not contain a call to iounmap, nor does
- one appear anywhere else in the file. I have assumed that it is safe to
- use devm_ioremap for the allocation in any case.
- - ASoC: davinci-mcasp.c: use devm_ functions
- The various devm_ functions allocate memory that is released when a driver
- detaches. This patch uses devm_kzalloc, devm_request_mem_region and
- devm_ioremap for data that is allocated in the probe function of a platform
- device and is only freed in the remove function.
- In this case, the original code did not contain a call to iounmap, nor does
- one appear anywhere else in the file. I have assumed that it is safe to
- use devm_ioremap for the allocation in any case.
- - ASoC: davinci-vcif.c: use devm_ functions
- The various devm_ functions allocate memory that is released when a driver
- detaches. This patch uses devm_kzalloc, devm_request_mem_region and
- devm_ioremap for data that is allocated in the probe function of a platform
- device and is only freed in the remove function.
- - ASoC: davinci: Add .owner to struct snd_soc_card
- Missed .owner of struct snd_soc_card will prevent the module from being
- removed from underneath its users.
- Reported-by: Lothar Waßmann <LW@KARO-electronics.de>
- - ASoC: Convert davinci directory to module_platform_driver
- Factor out some boilerplate code.
- - Drop default from "DM365 codec select" choice
- SND_DM365_EXTERNAL_CODEC does not exist, so it's a useless default.
- - ASoC: Remove redundant snd_soc_dapm_sync() calls from machine drivers
- The core will sync DAPM as part of the card initialization, there is no
- need for machine drivers to do so during their setup.
- OMAP drivers are omitted as I know Peter already has patches for them.
- - ASoC: Davinci: Fix FS polarity for I2S format
- Commit 75d9ac4 ("ASoC: Allow DAI formats to be specified in the dai_link")
- changed DAI format flag values and we cannot simply invert anymore e.g.
- frame-sync with ^= SND_SOC_DAIFMT_NB_IF (which was anyway misuse) as there
- is no anymore fixed bit position for bit-clock or frame-sync inversion.
- Fix this by relying only on DAI format flag values passed to us and by not
- making any assumption on individual bit positions
- - ASoC: davinci-pcm: trivial: replace link with actual chan/link
- The ambiguously named variable 'link' is used as a temporary throughout
- davinci-pcm -- its presence makes grepping (and groking) the code
- difficult.
- Replace link with the value of link in almost all sites. The exception
- is a couple places where the last-assigned link/chan needs to be
- returned by a function -- in these cases, rename to last_link.
- - ASoC: davinci-mcasp: add support for unsigned PCM formats
- Although the McASP supports sign-extending samples in RX or TX [1]; the
- davinci-mcasp driver does not touch the {R,X}PBIT or {R,X}PAD field of the
- {R,X}FMT registers meaning that the McASP will serialize the bytes it is given
- regardless of their signedness. So supporting unsigned formats is as simple
- as adding them to the metadata of the davinci-mcasp driver.
- Update the FMTBITs reported in the snd_soc_dai_driver and also update the case
- statements in davinci-mcasp's hw_params() function so that the McASP can be
- connected to CODECs that use unsigned values.
- [1] http://www.ti.com/lit/ug/sprufm1/sprufm1.pdf
- - ASoC: davinci: add missing break statement
- In davinci_vcif_trigger() function, a break() statement was missing
- causing the davinci_vcif_stop() function to be called as a fallback
- after calling davinci_vcif_start().
- - ASoC: davinci: fix codec start and stop functions
- According to DM365 voice codec data sheet at [1], before starting
- recording or playback, ADC/DAC modules should follow a reset and
- enable cycle. Writing a 1 to the ADC/DAC bit in the register resets
- the module and clearing the bit to 0 will enable the module. But the
- driver seems to be doing the reverse of it.
- [1] http://focus.ti.com/lit/ug/sprufi9b/sprufi9b.pdf
- - ASoC: davinci-pcm: comments for the conversion to BATCH mode
- In the previous commit 'ASoC: davinci-pcm: convert to BATCH mode', the phase
- offset of 2 was mentioned in the commit message but not well commented in the
- source.
- Add descriptive comments of the phase offset with and without ping-pong
- buffers enabled.
- - ASoC: davinci-pcm: convert to BATCH mode
- The davinci-pcm driver's snd_pcm_ops pointer function currently calls into
- the edma controller driver to read the current positions of the edma channels
- to determine pos to return to the ALSA framework. In particular,
- davinci_pcm_pointer() calls edma_get_position() and the latter has a comment
- indicating that "Its channel should not be active when this is called" whereas
- the channel is surely active when snd_pcm_ops.pointer is called.
- The operation of davinci-pcm in capture and playback appears to follow close
- the other pcm drivers who export SNDRV_PCM_INFO_BATCH except that davinci-pcm
- does not report it's positions from pointer() using the last transferred
- chunk. Instead it peeks directly into the edma controller to determine the
- current position as discussed above.
- Convert the davinci-pcm driver to BATCH mode: count the periods elapsed in the
- prtd->period member and use its value to report the 'pos' to the alsa
- framework in the davinci_pcm_pointer function.
- There is a phase offset of 2 periods between the position used by dma setup
- and the position reported in the pointer function. Either +2 in the dma
- setup or -2 in the pointer function (with wrapping, both) accounts for this
- offset -- I opted for the latter since it makes the first-time setup clearer.
- Reviewed-by: Steven Faludi <stevenfaludi@nanometrics.ca>
- - ASoC: davinci-pcm: extract period elapsed functions
- Extract functions that modify the prtd->period member in preparation for
- conversion to BATCH mode playback.
- Reviewed-by: Steven Faludi <stevenfaludi@nanometrics.ca>
- - ASoC: davinci-pcm: fix audible glitch on 2nd ping-pong playback
- The release of the dma channels was being performed in prepare and there was a
- edma_resume call for the asp-channel only being executed on START, RESUME and
- PAUSE_RELEASE.
- The mcasp on da850evm with ping-pong buffers enabled was exhibiting an audible
- glitch on every playback after the first. It was determined through trial and
- error that the following two changes fix this problem:
- 1) Move the edma_start calls from prepare to trigger and 2) reverse the order
- of starting the asp and ram channels.
- Reviewed-by: Steven Faludi <stevenfaludi@nanometrics.ca>
- - ASoC: davinci-pcm: increase the maximum channels
- Based on the registration of davinci-mcasp.1 in the davinci-evm platform
- setup for da830 and dm6467, davinci-pcm can handle more than the currently
- reported maximum channels of 2.
- Increase the maximum channels to 384 to match the maximum reported by
- davinci-mcasp.1.
- Reviewed-by: Steven Faludi <stevenfaludi@nanometrics.ca>
- - ASoC: davinci-pcm: expand the .formats
- Based on the data_type test in ping_pong_dma_setup, davinci-pcm is capable of
- handling data of width up to and including 32bits.
- "
- if ((data_type == 0) || (data_type > 4)) {
- printk(KERN_ERR "%s: data_type=%i\n", __func__, data_type);
- return -EINVAL;
- }
- "
- Update the .format member of the snd_pcm_hardware instances it registers to
- reflect this capability.
- Reviewed-by: Steven Faludi <stevenfaludi@nanometrics.ca>
- - ASoC: davinci-pcm: trivial: make ping-pong params setup symmetrical
- The setup of the pong channel uses EDMA_CHAN_SLOT instead of & 0x3f as the
- setup of the ping channel does.
- Make the setup of ping and pong symmetric. There is no functional change
- introduced by this patch.
- Reviewed-by: Steven Faludi <stevenfaludi@nanometrics.ca>
- - mfd: Use mfd cell platform_data for davinci cells platform bits
- With the addition of a platform device mfd_cell pointer, MFD drivers
- can go back to passing platform back to their sub drivers.
- This allows for an mfd_cell->mfd_data removal and thus keep the
- sub drivers MFD agnostic. This is mostly needed for non MFD aware
- sub drivers.
- - ASoC: davinci-mcasp: enable ping-pong SRAM buffers
- The davinci-i2s driver copies the platform data for playback and capture
- sram sizes which is in turn used by davinci-pcm to allocate ping-pong
- buffers.
- Copy also the platform data in davinci-mcasp probe.
- - davinci-mcasp: fix _CBM_CFS pin directions
- The current davinci_mcasp_set_dai_fmt() sets bits ACLKX and ACLKR in the PDIR
- register for the codec clock-master/frame-slave mode; however, this results in
- the ACLKX and ACLKR pins being outputs according to SPRUFM1 [1] which
- conflicts with "codec is clock master."
- Similarly to the previous patch in this series, "fix _CBM_CFS hw_params" --
- For codec clock-master/frame-slave mode (_CMB_CFS), clear bits ACLKX and ACLKR
- in the PDIR register to set the pins as inputs and hence allow externally
- sourced bit-clocks.
- [1] http://www.ti.com/litv/pdf/sprufm1
- Reviewed-by: James Nuss <jamesnuss@nanometrics.ca>
- - davinci-mcasp: fix _CBM_CFS hw_params
- The current davinci_mcasp_set_dai_fmt() sets bits ACLKXE and ACLKRE (CLKXM
- and CLKRM as they are reffered to in SPRUFM1 [1]) for codec clock-slave/
- frame-slave mode (_CBS_CFS) which selects internally generated bit-clock and
- frame-sync signals; however, it does the same thing again for codec
- clock-master/frame-slave mode (_CBM_CFS) in the very next case statement which
- is incorrectly selecting internally generated bit-clocks in this mode.
- For codec clock-master/frame-slave mode (_CBM_CFS), clear bits ACLKXE and
- ACLKRE to select externally-generated bit-clocks.
- [1] http://www.ti.com/litv/pdf/sprufm1
- Reviewed-by: James Nuss <jamesnuss@nanometrics.ca>
- - davinci-mcasp: use bitfield definitions for PDIR
- The current driver creates value for set/clr of PDIR using (x<<26) instead
- of the #defines that are convieniently made available.
- Update the driver to use the bitfield definitions of PDIR. There is no
- functional change introduced by this patch.
- Reviewed-by: James Nuss <jamesnuss@nanometrics.ca>
- - ASoC: davinci-mcasp: correct tdm_slots limit
- The current check for the number of tdm-slots specified by platform data is
- always true (x >= 2 || x <= 32); therefore the else branch that warns of an
- incorrect number of slots can never be taken.
- Check that the number of tdm slots specified by platform data is between 2
- and 32, inclusive.
- Reviewed-by: James Nuss <jamesnuss@nanometrics.ca>
- - asoc: davinci_voicecodec: use mfd_data instead of driver_data
- Use mfd_data for passing information from mfd drivers to soc
- clients. The mfd_cell's driver_data field is being phased out.
- Clients that were using driver_data now access .mfd_data
- via mfd_get_data().
- - ASoC: Davinci: Replace usage of IO_ADDRESS with ioremap()
- This patch modifies the Davinci i2s and mcasp drivers to make use of
- ioremap() instead of IO_ADDRESS()
- - ASoC: Davinci: Call clk_disable() and clk_put() in case of error
- In case of any error in probe() function, clk_disable() and clk_put()
- should be called if clk_enable() and clk_get() went through.
- - ASoC: Davinci: Use resource_size() helper function
- This patch modifies the Davinci i2s and mcasp drivers
- to make use of the resource_size() helper function for readability.
- - asoc: davinci: da830/omap-l137: correct cpu_dai_name
- McASP1 is used on the DA830/OMAP-L137 platform for the codec.
- This is different from the DA850/OMAP-L138 platform which uses McASP0.
- This is fixed by adding a new snd_soc_dai_link struct.
SoC Dynamic Audio Power Management
- - ASoC: dapm - Fix check for codec context in dapm_power_widgets().
- Fixes a NULL pointer dereference in dapm_power_widgets() if the dapm context
- has no codec.
- - ASoC: Dynamically allocate the rtd device for a non-empty release()
- The device model needs a release() function so it can free devices when
- they become dereferenced. Do that for rtds.
- - ASoC: Take a pm_runtime reference on DAPM devices that are enabled
- As for PCMs take a runtime power management reference to devices that are
- in a non-off bias, avoiding the need to do this in individual drivers.
- - ASoC: Add signal generator widget type
- A signal generator behaves as an input would but is not considered for
- any of the special behaviour associated with external input pins. This
- is especially useful when automatically working out not connected widgets.
- - ASoC: Log automatic pin disconnection per CODEC rather than per card
- This makes the output a bit less confusing on multi-CODEC systems as the
- same pin may appear in multiple CODECs.
- - ASoC: Implement fully_routed card property
- A card is fully routed if the DAPM route table describes all connections on
- the board.
- When a card is fully routed, some operations can be automated by the ASoC
- core. The first, and currently only, such operation is described below, and
- implemented by this patch.
- Codecs often have a large number of external pins, and not all of these pins
- will be connected on all board designs. Some machine drivers therefore call
- snd_soc_dapm_nc_pin() for all the unused pins, in order to tell the ASoC core
- never to activate them.
- However, when a card is fully routed, the information needed to derive the
- set of unused pins is present in card->dapm_routes. In this case, have
- the ASoC core automatically call snd_soc_dapm_nc_pin() for each unused
- codec pin.
- This has been tested with soc/tegra/tegra_wm8903.c and soc/tegra/trimslice.c.
- - ASoC: Fix DAPM sync for TLV320AIC3x custom DAPM widget
- We really should be doing this in the core, not in a driver...
- Tested-by: Jarkko Nikula <jarkko.nikula@bitmer.com>
- - ASoC: Cache connected input and output recursions
- The number of connected input and output endpoints for a given widgets
- can't change during a DAPM run so there is no need to redo the recursion
- through branches of the tree we've already visited. Doing this on one of
- my test systems gives an improvement of:
- Power Path Neighbour
- Before: 63 607 731
- After: 63 141 181
- which scales up well as more widgets are involved in paths.
- - ASoC: Assign power_check when we allocate DAPM widgets
- This ensures none of the rest of the code ever encounters a widget which
- does not have a power check function.
- - ASoC: Suppress early calls to snd_soc_dapm_sync()
- Ensure we only have one sync during the initial startup of the card by
- making snd_soc_dapm_sync() a noop on non-instantiated cards. This avoids
- any bounces due to things like jacks reporting their initial state on
- partially initialised cards. The callers that don't also get called at
- runtime should just be removed.
- - ASoC: Use dapm_mark_dirty() for new DAPM widgets for consistency
- - ASoC: Stop checking for supplied widgets after we find the first
- We don't really care how many widgets a supply is supplying, we just care
- if the number is non-zero. This didn't actually produce any improvement
- in the test cases I've been using but seems obviously sensible enough that
- I'm pushing it out anyway.
- We could do a similar thing for other widgets but this may be unhelpful
- for further refactorings Liam was working on aiming to allow us to
- identify connected audio paths.
- - ASoC: Don't mark the outputs of supplies as dirty on state changes
- The whole point of supply widgets is that they aren't inputs to their
- sinks so a state change in a supply should never affect the state of the
- widget being supplied and we don't need to mark them as dirty.
- Power Path Neighbour
- Before: 69 727 905
- After: 63 607 731
- This is particularly useful where supplies affect large portions of the
- chip (eg, a bandgap supplying the analogue sections).
- - ASoC: Only run power_check() on a widget once per run
- Some widgets will get power_check() run on them more than once during a
- DAPM run, most commonly due to supply widgets checking to see if their
- consumers are powered up. It's wasteful to do this so cache the result
- of power_check() during a run. For one system I tested this on I got an
- improvement of:
- Power Path Neighbour
- Before: 106 970 1186
- After: 69 727 905
- from this.
- - ASoC: Add verbose debugging showing why widgets get marked dirty
- Help diagnose why we're checking widgets by providing some logging when
- we first dirty them. This should possibly be a trace point if it's useful
- but can be absurdly verbose if enabled, we can always change it later if
- desired.
- - ASoC: Reduce the number of neigbours we mark dirty when updating power
- If two widgets are not currently connected then there is no need to
- propagate a power state change between them as we mark the affected
- widgets when we change a connection. Similarly if a neighbour widget is
- already in the state being set for the current widget then there is no
- need to recheck.
- On one system I tested this gave:
- Power Path Neighbour
- Before: 114 1066 1327
- After: 106 970 1186
- which is an improvement, although relatively small.
- - ASoC: Do DAPM power checks only for widgets changed since last run
- In order to reduce the number of DAPM power checks we run keep a list of
- widgets which have been changed since the last DAPM run and iterate over
- that rather than the full widget list. Whenever we change the power state
- for a widget we add all the source and sink widgets it has to the dirty
- list, ensuring that all widgets in the path are checked.
- This covers more widgets than we need to as some of the neighbour widgets
- won't be connected but it's simpler as a first step. On one system I tried
- this gave:
- Power Path Neighbour
- Before: 207 1939 2461
- After: 114 1066 1327
- which seems useful.
- - ASoC: Mark headphone, mic, speaker and line widgets as always connected
- We're not actually doing any dynamic power management based on connection
- and output drivers (which are pretty much the same thing) are marked as
- unconditionally connected already.
- - ASoC: Factor out widget power check operation
- We've got the same code in two different places, let's have it in a single
- place instead.
- - ASoC: Ensure all DAPM widgets have a power check callback
- Makes the code simpler.
- - ASoC: Move bias level decision into main dapm_power_widgets()
- Future patches will try to reduce the number of widgets we check on each
- DAPM run but we're still going to need to look and see if the devices is
- on at all so we can manage the overall device bias. Move these checks out
- into the main dapm_power_widgets() function so we don't have to think about
- them for now.
- Once we're doing more incremental updates it'll probably be worth using
- refcounts for each bias level to avoid having to do the sweep over all
- widgets but that's not going to be where the big performance wins are.
- - ASoC: Factor write of widget power out into a separate function
- Split the decision about what the new power should be out from the
- implementation of that decision.
- - ASoC: Also count neighbour checks for supplies
- Missed when the stat was originally added.
- - ASoC: Don't force bias on ground referenced devices
- Currently we force all devices in the system to be at the same bias level.
- This is due to concerns about power or pop/click impacts from either
- ramping VMID or mismatching VMID on the analogue I/O lines between
- connected devices but does mean we power devices up more often than we
- really need to.
- If a device flags idle_bias_off this will usually mean that it's either
- all digital or ground referenced (in which case the idle and powered bias
- levels are identical) so this concern does not apply and we can save some
- power by leaving it off when not needed itself.
- - ASoC: Add another DAPM stat for neighbour checks
- The number of times we look at a potentially connected neighbour is just
- as important as the number of times we actually recurse into looking at
- that neighbour so also collect that statistic.
- - ASoC: Factor out per-widget DAPM power checks
- The indentation is getting a little deep. Should be straight code motion,
- no functional changes.
- - ASoC: Trace and collect statistics for DAPM graph walking
- One of the longest standing areas for improvement in ASoC has been the
- DAPM algorithm - it repeats the same checks many times whenever it is run
- and makes no effort to limit the areas of the graph it checks meaning we
- do an awful lot of walks over the full graph. This has never mattered too
- much as the size of the graph has generally been small in relation to the
- size of the devices supported and the speed of CPUs but it is annoying.
- In preparation for work on improving this insert a trace point after the
- graph walk has been done. This gives us specific timing information for
- the walk, and in order to give quantifiable (non-benchmark) numbers also
- count every time we check a link or check the power for a widget and report
- those numbers. Substantial changes in the algorithm may require tweaks to
- the stats but they should be useful for simpler things.
- - ASoC: Display the error code when we fail to add a DAPM control
- Useful for diagnostics.
- - ASoC: soc-dapm: Fix parameter comment for snd_soc_dapm_free
- We have dapm_context instead of codec parameter.
- - ASoC: DAPM: Allow multiple mixer sources to be routed via the same switch
- Currently it is only possible to route one source per switch into a mixer.
- This patch modifies the code, so that it is possible to route multiple sources
- into a mixer via the same switch. One use-case for this is routing a stereo
- channel pair into a mono-mixer via the same switch.
- - ASoC: dapm - change stream event dbg to vdgb
- Stream event debug can be noisy on larger audio devices so improve the
- debug SNR by changing it to the verbose level.
- - ASoC: dapm - Add DAPM stream completion event.
- In preparation for Dynamic PCM (AKA DSP) support.
- This adds a callback function to be called at the completion of a DAPM stream
- event.
- This can be used by DSP components to perform calculations based on DAPM graphs
- after completion of stream events.
- - ASoC: dapm - Add methods to retrieve snd_card and soc_card from dapm context.
- In preparation for ASoC Dynamic PCM (AKA DSP) support.
- Provide convenience methods to retrieve the soc_card or snd_card from a
- DAPM context.
- - ASoC: dapm - add DAPM macro for external enum widgets
- Add a convenience macro for external enumerated widgets.
- - ASoC: Don't use -1 to boostrap subseq so it can be used by drivers
- Makes life a little easier if you want to add subsequences to an existing
- driver as you can use -1 to put things at the start of sequences.
- - ASoC: core - Add platform widget IO
- Allow platform driver widgets to perform any IO required for DAPM.
- - ASoC: Fix DAPM sequence run for per-widget I/O methods
- Previously we were using the DAPM context rather than a widget as the
- argument for update_bits() so we didn't need to care that our list walk
- of widgets left us one beyond the end of the list. Now we're using them
- for the register update we need to make sure we're pointing at an actual
- widget not the list_head.
- Fix originally suggested by Liam on IM.
- - ASoC: dapm - Refactor widget IO functions in preparation for platform widgets.
- This time with soc_widget_update_bits reflecting recent soc_update_bits changes.
- Currently widget IO is tightly coupled to the CODEC drivers. Future platform DSP
- devices have mixer components that can alter power usage and hence require full
- DAPM support.
- This provides a generic widget IO operation wrapper in preparation for
- future patches that implement platform driver DAPM.
- - ASoC: Fix mismerge with release branch
- - ASoC: Add weak routes for sidetone style paths
- Normally DAPM will power up any connected audio path. This is not ideal
- for sidetone paths as with sidetone paths the audio path is not wanted in
- itself, it is only desired if the two paths it provides a sidetone between
- are both active. If the sidetone path causes a power up then it can be
- hard to minimise pops as we first power up either the sidetone or the main
- output path and then power the other, with the second power up potentially
- introducing a DC offset.
- Address this by introducing the concept of a weak path. If a path is marked
- as weak then DAPM will ignore that path when walking the graph, though all
- the relevant controls are still available to the application layer to allow
- these paths to be configured.
- - ASoC: Only provide a default bias level update for CODEC contexts
- This allows the card driver to use the bias level variable more easily in
- multi component systems.
- - ASoC: Simplify logic in snd_soc_dapm_set_bias_level()
- No functional changes but much less indentation.
- - ASoC: Remove trace for DAPM bias level logging
- It's redundant now thanks to the use of the generic trace infrastructure.
- - ASoC: Indentation fix for null loop operation
- More with the legibility.
- - ASoC: Don't bring the CODEC up to full power for supplies and biases
- If the only widgets active within a CODEC are supplies and micbiases we
- are not passing audio, we are probably just doing microphone detection.
- This will not generally require either fully accurate reference voltages
- or much power so
- If this turns out to be unsuitable for some systems we can provide a
- facility to override this decision.
- - ASoC: Specify target bias state directly as a bias state
- Rather than a simple flag to say if we want the DAPM context to be at full
- power specify the target bias state. This should have no current effect
- but is a bit more direct and so makes it easier to change our decisions
- about the which bias state to go into in future.
- - ASoC: snd_soc_new_{mixer,mux,pga} make sure to use right DAPM context
- Currently it is possible that snd_soc_new_{mixer,mux,pga} is called with a
- DAPM context not matching the widgets context. This can lead to a wrong
- prefix_len calculation, which will result in undefined behaviour. To avoid
- this always use the DAPM context from the widget itself.
- - ASoC: simple style fix
- replace the tab with spaces,
- make it align with other paragraphs
- - ASoC: Fix dapm_is_shared_kcontrol so everything isn't shared
- Commit af46800 ("ASoC: Implement mux control sharing") introduced
- function dapm_is_shared_kcontrol.
- When this function returns true, the naming of DAPM controls is derived
- from the kcontrol_new. Otherwise, the name comes from the widget (and
- possibly a widget's naming prefix).
- A bug in the implementation of dapm_is_shared_kcontrol made it return 1
- in all cases. Hence, that commit caused a change in control naming for
- all controls instead of just shared controls.
- Specifically, a control is always considered shared because it is always
- compared against itself. Solve this by never comparing against the widget
- containing the control being created.
- Equally, controls should never be shared between DAPM contexts; when the
- same codec is instantiated multiple times, the same kcontrol_new will be
- used. However, the control should no be shared between the multiple
- instances.
- I tested that with the Tegra WM8903 driver:
- * Shared is now mostly 0 as expected, and sometimes 1.
- * The expected controls are still generated after this change.
- However, I don't have any systems that have a widget/control naming
- prefix, so I can't test that aspect.
- Thanks for Jarkko Nikula for pointing out how to fix this.
- Reported-by: Liam Girdwood <lrg@ti.com>
- Tested-by: Jarkko Nikula <jhnikula@gmail.com>
- - ASoC: Fix power down for widgetless per-card DAPM context case
- Commit 52ba67b ("ASoC: Force all DAPM contexts into the same bias state")
- powers up all the DAPM contexts in a card if any DAPM context becomes
- active. Unfortunately power down newer happens if per-card DAPM context
- doesn't have any widgets.
- Reason for this is that power state of per-card DAPM context without
- widgets is never cleared and thus all the DAPM contexts remain permanently
- active. Test for widgetless calling DAPM context in dapm_power_widgets()
- doesn't work for per-card DAPM context since power change is never
- originating from widgetless per-card DAPM context.
- Fix this by pre-clearing power state flag of non-codec DAPM context at the
- beginning of power sequence.
- - ASoC: Implement mux control sharing
- Control sharing is enabled when two widgets include pointers to the
- same kcontrol_new in their definition. Specifically:
- static const struct snd_kcontrol_new adcinput_mux =
- SOC_DAPM_ENUM("ADC Input", adcinput_enum);
- static const struct snd_soc_dapm_widget wm8903_dapm_widgets[] = {
- SND_SOC_DAPM_MUX("Left ADC Input", SND_SOC_NOPM, 0, 0, &adcinput_mux),
- SND_SOC_DAPM_MUX("Right ADC Input", SND_SOC_NOPM, 0, 0, &adcinput_mux),
- };
- This is useful when a single register bit or field affects multiple
- muxes at once. The common case is to have separate control bits or
- fields for each mux (channel). An alternative way of looking at this
- is that the mux is a stereo (or even n-channel) mux, rather than
- independant mono muxes.
- Without this change, a separate kcontrol will be created for each
- DAPM_MUX. This has the following disadvantages:
- * Confuses the user/programmer with redundant controls that don't
- map to separate hardware.
- * When one of the controls is changed, ASoC fails to update the DAPM
- logic for paths solely affected by the other controls impacted by
- the same register bits. This causes some paths not to be correctly
- powered up or down. Prior to this change, to work around this, the
- user or programmer had to manually toggle all duplicate controls away
- from the intended setting, and then back to it.
- Control sharing implies that the control is named based on the
- kcontrol_new itself, not any of the widgets that are affected by it.
- Control sharing is implemented by: When creating kcontrols, if a
- kcontrol does not yet exist for a particular kcontrol_new, then a new
- kcontrol is created with a list of widgets containing just a single
- entry. This is the normal case. However, if a kcontrol does already
- exists for the given kcontrol_new, the current widget is simply added
- to that kcontrol's list of affected widgets.
- - ASoC: Store a list of widgets in a DAPM mux/mixer kcontrol
- A future change will allow multiple widgets to be affected by the same
- control. For example, a single register bit that controls separate muxes
- in both the L and R audio paths.
- This change updates the code that handles relevant controls to be able
- to iterate over a list of affected widgets. Note that only the put
- functions need significant modification to implement the iteration; the
- get functions do not need to iterate, nor unify the results, since all
- affected widgets reference the same kcontrol.
- When creating the list of widgets, always create a 1-sized list, since
- the control sharing is not implemented in this change.
- - ASoC: Add w->kcontrols, and populate it
- Future changes will need reference to the kcontrol created for a given
- kcontrol_new. Store the created kcontrol values now.
- - ASoC: s/w->kcontrols/w->kcontrol_news/g
- A future change will modify struct snd_soc_dapm_widget to store the
- actual kcontrol pointers for each kcontrol_new in a field named
- kcontrols. Rename the existing kcontrols field to enable this.
- - ASoC: Remove DAPM debugfs entries before freeing widgets
- Remove the DAPM debugfs entries before freeing the context's widgets, otherwise a
- use after free situation might occur.
- - ASoC: Move DAPM widget debugfs entry creation to snd_soc_dapm_new_widgets
- Currently debugfs entries for a DAPM widgets are only added in
- snd_soc_dapm_debugfs_init. If a widget is added later (for example in the
- dai_link's probe callback) it will not show up in debugfs.
- This patch moves the creation of the widget debugfs entry to
- snd_soc_dapm_new_widgets where it will be added after the widget has been
- properly instantiated.
- As a side-effect this will also reduce the number of times the DAPM widget list
- is iterated during a card's instantiation.
- Since it is possible that snd_soc_dapm_new_widgets is invoked form the codecs or
- cards probe callbacks, the creation of the debugfs dapm directory has to be
- moved before these are called.
- - ASoC: Move DAPM debugfs directory creation to snd_soc_dapm_debugfs_init
- Move the creation of the DAPM debugfs directory to snd_soc_dapm_debugfs_init
- instead of having the same duplicated code in both codec and card DAPM setup.
- - ASoC: Add dapm_find_widget helper
- This patch adds a helper function for searching DAPM widgets by name.
- This allows to streamline functions which operate on widgets by name.
- It also allows to get rid of copy'n'pasted code which was added to fallback to
- widgets from other contexts if the widget was not found in the current context.
- - ASoC: fix a simple coding style issue
- - ASoC: snd_soc_dapm_get_pin_status: Match other contexts too
- Not all widgets on a card are within the codec's DAPM context. Fix
- snd_soc_dapm_get_pin_status to search all contexts when looking for a
- widget.
- This change is required when modifying tegra_wm8903 to use
- snd_soc_card.widgets rather than calling snd_soc_dapm_new_controls; the
- former adds the widgets to the card's DAPM context, whereas tegra_wm8903
- uses the codec's DAPM context when calling snd_soc_dapm_new_controls.
- By code inspection, I suspect this also applies to Samsung Speyside.
- - ASoC: Allow DAPM pin operations to match any context
- The DAPM pin operations currently require that the specific DAPM context
- that the pin being operated in is contained in be specified. With multi
- component and especially with the addition of a per-card DAPM context
- this isn't ideal as it means that things like disabling unused pins on
- CODECs require looking up the CODEC DAPM context.
- Fix this by falling back to matching a widget in any context if there isn't
- a match in the current context. The code isn't ideal currently but will do
- the job.
- - ASoC: Force all DAPM contexts into the same bias state
- Currently we allow all DAPM contexts to determine their own bias level.
- While this should in general work in most situations and will deliver the
- lowest possible power it causes problems for our integration with the
- card bias level as we're calling the card bias level functions for each
- DAPM context even though they're card wide but don't say which CODEC
- we're calling them for. Mitigate against this by forcing everything to
- be in the same state.
- - ASoC: Remove special casing for registerless widgets
- Since we recently explicitly set the register for registerless widgets
- to no register there is no longer any need to special case power updates
- for them, we can allow them to be handled with the register compression
- code as other widgets are.
- As this is the only remaining user of dapm_generic_apply_power() and
- dapm_update_bits() also remove those functions.
- Noticed-by: Lu Guanqun <guanqun.lu@intel.com>
- - ASoC: Add bias level data to DAPM context debugfs
- This is also in the old sysfs diagnostics but it's nice to have everything
- in one place.
- - ASoC: Explicitly say registerless widgets have no register
- This stops code that handles widgets generically from attempting to access
- registers for these widgets.
- - ASoC: Use the correct DAPM context when cleaning up final widget set
- Now we've got multi-component we need to make sure that the DAPM context
- (and hence register I/O context) we use to apply the pending updates at
- the end of a DAPM sequence is the one we were processing rather than the
- one that was used to initate the state change.
- - ASoC: Fix double addition of prefixes due to widget prefixing
- We're not only prefixing all controls, we're also prefixing the widget
- names in the runtime data. This causes us to add the prefix twice - once
- when using the widget name to generate the control name and once when
- adding the control.
- Really we shouldn't be prefixing the widget names at all, the matching
- code should be handing this as we always know which DAPM context a
- widget came from and always display the widget name in terms of a DAPM
- context. However, we're quite close to the merge window and that's
- relatively invasive.
- Reported-by: Jarkko Nikula <jhnikula@gmail.com>
- - ASoC: Fix prefixing of DAPM controls by factoring prefix into snd_soc_cnew()
- Currently will ignore prefixes when creating DAPM controls. Since currently
- all control creation goes through snd_soc_cnew() we can fix this by factoring
- the prefixing into that function.
- - ASoC: Check for a CODEC before dereferencing in DAPM
- A CODEC pointer is optional (and is checked for in most contexts within
- DAPM) - add checks to the few places where it was missed.
- - ASoC: Get the card directly from the DAPM context
- Rather than indirecting through the CODEC we can look the card up directly
- from the card pointer in the DAPM context.
- - ASoC: soc-dapm: Include quotes around contents in debugfs entries
- Sometimes the name of the control switch of a dapm route contains
- spaces which makes it impossible to distinguish it from the source widget.
- Add quotes around the names of the widgets to makes these parsable.
- - ASoC: Run bias level changes for all DAPM contexts in parallel
- As bias level changes can be quite time consuming and the bias changes
- for multiple devices aren't strongly tied to each other (if anything it
- can be advantageous to bring different devices up together) we can improve
- the state transition time for multi-component systems by running the bias
- level changes for all the devices in parallel. This is very simple to
- achieve using the kernel async functionality so use that to schedule the
- work.
- This should have no practical effect for the overwhelming majority of
- systems which have a single DAPM context - we'll bounce into another
- thread to do the bias level change but otherwise everything will happen
- in exactly the same order as it did before.
- - ASoC: Remove card from snd_soc_dapm_set_bias_level()
- We can get the card from the DAPM context so don't bother passing it as
- an argument.
- - ASoC: Remove export of snd_soc_dapm_stream_event()
- The only thing that should ever be calling this is soc-core and that is
- built as part of the same module so doesn't need the export.
- - ASoC: Ensure supplies are maintained for force enabled widgets
- If a widget has been force enabled then not only do we need to keep the
- widget itself enabled, we also need to keep any supplies the widget
- requires enabled. The user could force all the individual widgets on but
- this requires too much knowledge of device internals.
- Tested-by: Stephen Warren <swarren@nvidia.com>
- - ASoC: Sync initial widget state with hardware
- ASoC generally uses the register defaults for everything, but in some
- cases the hardware will default to enabling some of the DAPM widgets
- (clocks for example). Ensure that DAPM knows about the actual widget
- state at initialisation by reading the enable bits after instantiating
- the widgets so they don't get left enabled needlessly.
- - ASoC: Add subsequence information to seq_notify callbacks
- Allows drivers to distinguish which subsequence is being notified when
- they get called back.
- - ASoC: Remove controls from sequenced PGA arguments
- We have zero users for PGA controls and the core support for them was
- removed a while ago so no point in cut'n'pasting them into new macros,
- even if it's too much hassle to update the existing ones.
- - ASoC: Provide per widget type callback when executing DAPM sequences
- Many modern devices have features such as DC servos which take time to start.
- Currently these are handled by per-widget events but this makes it difficult
- to paralleise operations on multiple widgets, meaning delays can end up
- being needlessly serialised. By providing a callback to drivers when all
- widgets of a given type have been handled during a DAPM sequence the core
- allows drivers to start operations separately and wait for them to complete
- much more simply.
- - ASoC: Add support for sequencing within
- With larger devices there may be many widgets of the same type in series
- in an audio path. Allow drivers to specify an additional level of ordering
- within each widget type by adding a subsequence number to widgets and then
- splitting operations on widgets so that widgets of the same type but
- different sequence numbers are processed separately. A typical example
- would be a supply widget which requires that another widget be enabled
- to provide power or clocking.
- SND_SOC_DAPM_PGA_S() and SND_SOC_DAPM_SUPPLY_S() macros are provided
- allowing this to be used with PGAs and supplies as these are the most
- commonly affected widgets.
- - ASoC: Explicitly say if we're powering up or down
- Rather than passing the sequence to use for DAPM widgets around by reference
- explicitly say if we're powering up or down until the point where we need
- the sequence itself. This should make no practical difference in itself but
- supports future refactoring.
- - ASoC: Fix mask/val_mask confusion snd_soc_dapm_put_volsw()
- snd_soc_dapm_put_volsw() has variables for both the unshifted and
- shifted mask for updates commit 97404f (ASoC: Do DAPM control updates in
- the middle of DAPM sequences) got confused between the two of these.
- Since there's no need to keep a copy of the unshifted mask fix this and
- simplify the code by using only one mask variable.
- [Completely rewrote the changelog to describe the issue -- broonie.]
SoC EP93XX
- - sound-soc: move to dma_transfer_direction
- fixup usage of dma direction by introducing dma_transfer_direction,
- this patch moves asoc drivers to use new enum
- - ASoC: ep93xx: Add .owner to struct snd_soc_card
- Missed .owner of struct snd_soc_card will prevent the module from being
- removed from underneath its users.
- Reported-by: Lothar Waßmann <LW@KARO-electronics.de>
- - ASoC: Use dai_fmt in snappercl15 machine driver
- Reviewed-by: Mika Westerberg <mika.westerberg@iki.fi>
- - ASoC: Use dai_fmt in edb93xx machine driver
- - ASoC: Convert ep93xx directory to module_platform_driver
- Factor out some boilerplate code.
- - ASoC: Staticise ep93xx_ac97_dai
- - ASoC: edb93xx: convert to use snd_soc_register_card()
- Current method for machine driver to register with the ASoC core is to use
- snd_soc_register_card() instead of creating a "soc-audio" platform device.
- Reviewed-by: Ryan Mallon <rmallon@gmail.com>
- - ASoC: simone: convert to use snd_soc_register_card()
- Current method for machine driver to register with the ASoC core is to
- use snd_soc_register_card() instead of creating a "soc-audio" platform device.
- In addition we use platform_device_register_simple() to create a platform
- device for the codec. This function will handle putting and deleting the
- device automatically which simplifies the error handling in the machine
- driver.
- Reviewed-by: Ryan Mallon <rmallon@gmail.com>
- - ASoC: ep93xx-pcm: add MODULE_ALIAS
- To get the PCM module loaded automatically by udev et al. we need to add a
- proper MODULE_ALIAS.
- Reviewed-by: Ryan Mallon <rmallon@gmail.com>
- - ASoC: snappercl15: convert to use snd_soc_register_card()
- Current method for machine driver to register with the ASoC core is to use
- snd_soc_register_card() instead of creating a "soc-audio" platform device.
- Reviewed-by: Ryan Mallon <rmallon@gmail.com>
- - sound/soc/ep93xx/ep93xx-i2s.c: add missing kfree
- Introduce a new label that includes kfree and jump to that one.
- A simplified version of the semantic match that finds this problem is as
- follows: (http://coccinelle.lip6.fr/)
- // <smpl>
- @@
- identifier x;
- expression E1!=0,E2,E3,E4;
- statement S;
- iterator I;
- @@
- (
- if (...) { ... when != kfree(x)
- when != x = E3
- when != E3 = x
- * return ...;
- }
- ... when != x = E2
- when != I(...,x,...) S
- if (...) { ... when != x = E4
- kfree(x); ... return ...; }
- )
- // </smpl>
- Reviewed-by: H Hartley Sweeten <hsweeten@visionengravers.com>
- - Change Ryan Mallon's email address across the kernel
- I no longer work at Bluewater Systems. Update my email address accordingly. I
- have deleted my email address from C files rather than change it. This
- was suggested by several people, since the commit from my new email
- address will cause scripts/get_maintainer.pl to function properly. I
- have not added the .mailmap entry as suggested by Joe because I think
- it is no longer necessary if I touch all the files which had my name
- in them.
- Reviewed-by: Jesper Juhl <jj@chaosbits.net>
- - ASoC: ep93xx: convert to use the DMA engine API
- Now that we have the EP93xx DMA engine driver in place, we convert the ASoC
- drivers (I2S, AC97 and PCM) to take advantage of this new API. There are no
- functional changes.
- - ASoC: Enable 192kHz sample rate for EP93xx.
- Enable 192kHz sample rate for EP93xx.
- - ASoC: Improve EP93xx I2S clocks management.
- Improve EP93xx I2S clocks management.
- Some freqs values are set not exact as they requested for MCLK and
- original code was not able to find divisors for SCLK and LRCLK.
- This code just picks up nearest value from 3 possible variants.
- This patch makes 44100 and 192000 rates working and fixes
- capture function (by selecting SCLK/LRCLK=64 where possible).
- All other rates should work as before.
- - ASoC: EDB93xx: Manage I2S rates according to datasheet for CS4271 CODEC.
- Manage I2S rates according to datasheet for CS4271 CODEC in EDB93xx
- machine driver.
- - ASoC: Remove warnings in ep93xx-i2s.c
- Remove warnings in ep93xx-i2s.c
- - ASoC: ep93xx-ac97: remove extra empty line
- - ASoC: EDB93xx machine sound driver with CS4271
- Added support for EDB93xx sound with CS4271 CODEC.
- Features:
- - Playback, Capture
- - Sample rates from 8kHz to 96kHz tested
SoC FSI SH7724
- - ASoC: fsi-ak4642: modify specification method of FSI / ak464x
- Current fsi-ak4642 was using id_entry name in order to specify
- FSI port and ak464x codec.
- But it was no sense, no flexibility.
- Platform can specify FSI/ak464x pair by this patch.
- - ASoC: sh: fsi: modify selection method of I2S/PCM/SPDIF format
- Current format selection of FSI-codecs depended on platform information for FSI,
- and chip default settings for codecs. It is not understandable/formal method.
- This patch modify FSI and FSI-codecs to use snd_soc_dai_set_fmt.
- But FSI can use I2S/PCM and SPDIF format today.
- It can be selected to I2S/PCM by snd_soc_dai_set_fmt, but can not select SPDIF.
- So, this patch change FSI platform information to have DAI/SPDIF mode.
- If platform selects DAI mode (default),
- FSI-codecs can select I2S/PCM by snd_soc_dai_set_fmt,
- and if it is SPDIF mode, FSI become SPDIF format.
- - ASoC: sh: fsi: Add snd_soc_dai_set_fmt support
- This patch add snd_soc_dai_ops :: set_fmt to FSI driver and
- select master/slave clock mode by snd_soc_dai_set_fmt on
- fsi-xxx.c instead of platform infomation code.
- This patch remove fsi_is_master function which is no longer needed.
SoC Freescale
- - ASoC: fsl: Add .owner to struct snd_soc_card
- Missed .owner of struct snd_soc_card will prevent the module from being
- removed from underneath its users.
- Reported-by: Lothar Waßmann <LW@KARO-electronics.de>
- - ASoC: fsl/powerpc: don't rely on the cell-index property
- Instead of using the 'cell-index' property in the I2C adapter node to
- determine the adapter number, just query the i2c_adapter object directly.
- Previously, the I2C nodes always appeared in cell-index order, so the
- dynamic numbering coincided with the cell-index property. With commit
- ab827d97 ("powerpc/85xx: Rework P1022DS device tree"), the I2C nodes are
- unintentionally reversed in the device tree, and so the machine driver
- guesses the wrong I2C adapter number.
- - ASoC: p1022ds: add support for fsl,P1022 and fsl,P1022DS model names
- Commit ab827d97 ("powerpc/85xx: Rework P1022DS device tree") renamed the
- the /model property of the P1022DS device tree from "fsl,P1022" to
- "fsl,P1022DS". To support both old and new device trees, the ASoC
- machine driver for the P1022DS needs to query the /model property and
- update the platform driver object dynamically.
- - ASoC: Convert fsl directory to module_platform_driver
- Factor out some boilerplate code.
- - ASoC: mpc8610: tell the CS4270 codec that it's the master
- Commit ac601555 ("ASoC: Return early with -EINVAL if invalid dai format is
- detected") requires the machine driver to tell the CS4270 codec driver
- whether the CS4270 should be configured for master or slave operation.
- - ASoC: fsl_ssi: properly initialize the sysfs attribute object
- Commit 6992f533 ("sysfs: Use one lockdep class per sysfs attribute")
- requires 'struct attribute' objects to be initialized with sysfs_attr_init().
- - ASoC: fsl: Fix error handling if platform_device_add fails
- Call platform_device_put() instead of platform_device_unregister() if
- platform_device_add() fails.
- - ASoC: improve asynchronous mode support in the fsl_ssi driver
- The Freescale SSI audio controller supports "synchronous" and "asynchronous"
- modes. In synchronous mode, playback and capture use the same input clock,
- so sample rates must be the same during simultaneous playback and capture.
- Unfortunately, the code which supports asynchronous mode is just broken in
- various ways. In particular, it was constraining sample sizes as well as
- the sample rate.
- The fix also allows us to simplify the code by eliminating the 'asynchronous',
- 'playback', and 'capture' variables that were used to keep track of playback
- and capture streams.
- Unfortunately, it turns out that simulataneous playback and record does not
- actually work on the only platform that supports asynchronous mode: the
- Freescale P1022DS reference board. If a second stream is started, the SSI
- grinds to halt for both streams. This is true even if the P1022 is configured
- for synchronous mode, so it's likely a hardware problem that needs to be
- worked around.
- - ASoC: Remove redundant -codec from WM8776 driver name
- - ASoC: MPC5200: replace of_device with platform_device
- 'struct of_device' no longer exists, and its functionality has been merged
- into platform_device. Update the MPC5200 audio DMA driver (mpc5200_dma)
- accordingly. This fixes a build break.
- - sound/soc/fsl/mpc8610_hpcd.c: add missing of_node_put
- The first change is to add an of_node_put, since codec_np has previously
- been allocated. The rest of the patch reorganizes the error handling code
- so the only code executed is that which is needed.
- A simplified version of the semantic match that finds this problem is as
- follows: (http://coccinelle.lip6.fr/)
- // <smpl>
- @@
- identifier x;
- expression E1!=0,E2,E3,E4;
- statement S;
- iterator I;
- @@
- (
- if (...) { ... when != of_node_put(x)
- when != x = E3
- when != E3 = x
- * return ...;
- }
- ... when != x = E2
- when != I(...,x,...) S
- if (...) { ... when != x = E4
- of_node_put(x); ... return ...; }
- )
- // </smpl>
- - sound/soc/fsl/p1022_ds.c: add missing of_node_put
- dma_channel_np has been accessed at this point, so decrease its reference
- count before leaving the function.
- A simplified version of the semantic match that finds this problem is as
- follows: (http://coccinelle.lip6.fr/)
- // <smpl>
- @@
- identifier x;
- expression E1!=0,E2,E3,E4;
- statement S;
- iterator I;
- @@
- (
- if (...) { ... when != of_node_put(x)
- when != x = E3
- when != E3 = x
- * return ...;
- }
- ... when != x = E2
- when != I(...,x,...) S
- if (...) { ... when != x = E4
- of_node_put(x); ... return ...; }
- )
- // </smpl>
- - sound/soc/fsl/fsl_dma.c: add missing of_node_put
- of_parse_phandle increments the reference count of np, so this should be
- decremented before trying the next possibility.
- Since we don't actually use np, we can decrement the reference count
- immediately.
- Reported-by: Julia Lawall <julia@diku.dk>
- - ASoC: fsl: fix build warning in fsl_dma
- The previous patch to fsl_dma.c ("fix initialization of DMA buffers")
- left behind an unused local variable that causes a build warning.
- - ASoC: claim the IRQ when the fsl_ssi device is probed, not opened
- The PowerPC Freescale SSI driver is claiming the IRQ when the IRQ when
- the device is opened, which means that the /proc/interrupts entry for
- the SSI exists only during playback or capture. This also meant that
- the user won't know that the IRQ number is wrong until he tries to use
- the device. Instead, we should claim the IRQ when the device is probed.
- - ASoC: p1022ds: fix incorrect referencing of device tree properties
- Device tree integer properties are encoded in big-endian format, but some of
- the Freescale ASoC drivers were assuming that the host is in big-endian format
- as well. Although this is true, it's better to use endian-safe accessors.
- Also add a check for a failed ioremap() call in the SSI driver.
- - ASoC: fsl: fix initialization of DMA buffers
- The DMA (PCM) driver used by some Freescale PowerPC supports separate DAIs
- for playback and capture, so DMA buffers should be allocated only for the
- initialized streams. Instead of checking for the number of active channels,
- which apparently is not reliable, check to see if the actual stream object
- exists.
- Also provide a better name for the DMA interrupt.
- - dt/sound: Eliminate users of of_platform_{,un}register_driver
- Get rid of users of of_platform_driver in drivers/sound. The
- of_platform_{,un}register_driver functions are going away, so the
- users need to be converted to using the platform_bus_type directly.
- - ASoC: Replace pdev with card in machine driver probe and remove
- In order to support cards instantiated without using soc-audio remove
- the use of the platform device in the card probe() and remove() ops.
SoC Ingenic JZ4740
- - ASoC: jz4740: Add .owner to struct snd_soc_card
- Add missing .owner of struct snd_soc_card. This prevents the module from being
- removed from underneath its users.
- Reported-by: Lothar Waßmann <LW@KARO-electronics.de>
- - ASoC: Convert jz4740 directory to module_platform_driver
- Factor out some boilerplate code.
- - ASoC: Staticise jz4740_pcm_new()
- It is not used outside this driver so no need to make the symbol global.
- - ASoC: JZ4740: Fix i2s shutdown
- The i2s shutdown callback has the check whether it should be disabled reversed.
- Currently it is disabled if another stream is still active, but kept enabled if
- the last stream is closed. This patch fixes it.
- - ASoC: JZ4740: qi_lb60: Use the SND_SOC_DAPM_EVENT_OFF for the speakers status
- Use SND_SOC_DAPM_EVENT_OFF for determining whether the speaker should be turned
- on or off instead of open coding it.
- - ASoC: JZ4740: qi_lb60: Use gpio_request_array to request and setup gpios
- This patch changes the qi_lb60 setup code to use gpio_request_array instead of
- manually calling gpio_request and gpio_direction_output for each gpio.
- Doing so makes the code a bit more compact.
- - ASoC: JZ4740: Convert qi_lb60 codec to table based DAPM setup
- Use the newly introduced dapm_widgets, dpam_routes and fields of the
- snd_soc_card struct to setup DAPM.
SoC Intel Medfield MID platform
- - ASoC: mid-x86: Add .owner to struct snd_soc_card
- Add missing .owner of struct snd_soc_card. This prevents the module from being
- removed from underneath its users.
- Reported-by: Lothar Waßmann <LW@KARO-electronics.de>
- - ASoC: Fix compile error in sound/soc/mid-x86/sst_platform.c
- The variable ret_val is used but not declared. This causes
- the following compile error:
- sound/soc/mid-x86/sst_platform.c: In function ‘sst_platform_open’:
- sound/soc/mid-x86/sst_platform.c:274:2: error: ‘ret_val’ undeclared (first use in this function)
- sound/soc/mid-x86/sst_platform.c:274:2: note: each undeclared identifier is reported only once for each function it appears in
- make[1]: *** [sound/soc/mid-x86/sst_platform.o] Error 1
- Fix this.
- - ASoC: Staticise mfld_msic_dailink
- Acked by: Vinod Koul <vinod.koul@linux.intel.com>
- - ASoC: Staticise sst_pcm_new and sst_soc_platform_drv
- Acked-by Vinod Koul <vinod.koul@linux.intel.com>
- - ASoC: sst_platform: fix the dsp driver interface
- lower level drivers typically register with upper layers.
- So fix by exporting symbols from sst_platform driver for dsp driver to
- register to sst platform driver
- Now this driver doesnt depend on sst driver, so remove the dependency
- and the header files
- - ASoC: Convert mid-x86 directory to module_platform_driver
- Factor out some boilerplate code.
- - ASoC: Staticise sst_platform_dai
- It is not used outside this driver so no need to make the symbol global.
- - ASoC: Remove unused fields in struct mfld_mc_private
- Both *socdev and *codec of struct mfld_mc_private are not being used
- in this driver, remove it.
- - ASoC: sst_platform: fix memory leak
- snd_pcm_hw_constraint_integer() could return -1, in this case, sst platform is
- not opened successfully. However the corresponding close callback isn't able
- to be called later on to release these two allocated memories, thus resulting
- in memory leak.
- This patch moves the check for hardware contraints earlier, thus resolving this
- issue.
- - ASoC: sst_platform: using builtin function
- Use the builtin snd_soc_set_runtime_hwparams() instead of assigning it by
- myself.
- - ASoC: sst_platform: trivial coding style fix
- - ASoC: sst_platform: add hw_free callback to fix resource leak
- - ASoC: sst_platform: Fix lock acquring
- Fix the possible dead lock shown below:
- spin_lock
- sst_get_stream_status
- sst_period_elapsed
- intel_sst_interrupt
- handle_IRQ_event
- handle_fasteoi_irq
- do_IRQ
- common_interrupt
- spin_lock
- sst_set_stream_status
- sst_platform_pcm_trigger
- - ASoC: sst_platform: unregister sst card when being closed
- - ASoC: sst_platform: free the resources on fail path
- - ASoC: sst_platform: initialize module_name properly
- module_name will be checked in register_sst_card.
- It will fail to register sst card if it's not initialized.
- - ASoC: sst_platform: fix the pulseaudio error
- Pulseaudio doesnt work with current driver and it was root caused to absense of
- hw_params function and malloc_pages in it.
- This patch adds this and allows pa to work fine with these drivers
- - ASoC: mfld_machine: make use of soc_register_card API
- This patch removes the old method of soc-audio device creation in mfld machine
- and makes use of new soc_register_card API to register the card
- - ASoC: mid-x86: Use the soc-jack apis for jack type detection
- This patch modifies the mfld_machine to use the new jack apis for adding the
- voltage zones for jack type detection. It also modifed TI sn95031 codec driver
- to use these new apis
- - ASoC: mfld_machine: Add support for jack detection
- This patch adds support for registering jack interupt
- and registering jack with core
- - ASoC: mid-x86: Fix dependency on intel_sst driver
- Enabling medfield asoc driver causes compliation error when intel_sst
- is not selected
- ERROR: "register_sst_card" [sound/soc/mid-x86/snd-soc-sst-platform.ko]
- undefined!
- This patch puts proper dependency to elimate build error
- Reported-by: Andrew Morton <akpm@linux-foundation.org>
- - ASoC: mid-x86: Add support for capture in machine driver
- This configures the capture unused pins
- - ASoC: sst_platform: add support for capture stream on headset dai
SoC Layer
- - Rediff the usbusx2y.c and soc-core.c patches to match recent kernel
- - Don't include obsolete trace/events/asoc.h hack
- - Fix a typo in soc-core.patch in the prvioust commit
- - Fix build-errors of soc-core due to new trace points
- Ugly hacks again.
- - Add build stub for soc/soc-io.c
- - Fix a build of soc-pcm.c with older kernels without mutex_lock_nested()
- - Fix wrongly refreshed soc-core.patch
- - Add missing soc/soc-pcm.c build stub
- - Regenerated soc-core.patch to fix fuzz
- - Fix a compile error of soc/soc-jack.c with older kernels
- Just define a dummy irq_set_irq_wake().
- - Regenerated soc/soc-core.patch
- - Regenerate ac97_codec.patch and soc-core.patch to resolve fuzz
- - Fixed typos in soc-core.patch
- to fix build errors.
- - Fix yet another build error in ASoC for older kernels
- - Fix build with the recent ASoC updates
- - Regenerated soc-core.patch
- - Always use the dummy trace/events/asoc.h
- - ASoC: core - Free platform DAPM context at platform removal.
- Fix platform removal by freeing the platform DAPM resources and remove
- it from the DAPM list.
- - ASoC: Dynamically allocate the rtd device for a non-empty release()
- The device model needs a release() function so it can free devices when
- they become dereferenced. Do that for rtds.
- - ASoC: soc-pcm: Allocate PCM operations dynamically to support multiple DAIs
- The original code does not cover the case that two DAIs(CPU) have different
- ASoC core PCM operations(like mmap, pointer...). Currently we have only one
- global soc_pcm_ops for ASoC core PCM operation. When two DAIs have different
- pointer functions, second DAI's pointer function is set for both first DAI
- and second DAI in case of original code.
- This patch uses runtime's pcm_ops instead of global pcm_ops for each DAIs. So
- each DAIs can have different ASoC core PCM operations. This is needed to
- support multiple DAIs.
- - ASoC: Declare soc_new_pcm() properly
- Ensure that everything is seeing the same declaration by moving it to
- a header file rather than putting the declaration in soc-core.c
- - ASoC: Allow DAI links to be specified using device tree nodes
- DAI link endpoints and platform (DMA) devices are currently specified
- by name. When instantiating sound cards from device tree, it may be more
- convenient to refer to these devices by phandle in the device tree, and
- for code to describe DAI links using the "struct device_node *"
- ("of_node") those phandles map to.
- This change adds new fields to snd_soc_dai_link which can "name" devices
- using of_node, enhances soc_bind_dai_link() to allow binding based on
- of_node, and enhances snd_soc_register_card() to ensure that illegal
- combinations of name and of_node are not used.
- - ASoC: Remove ifdefs for GPIO_SYSFS
- It is part of the GPIO API so should be stubbed appropriately.
- - ASoC: Add utility to parse DAPM routes from device tree
- Implement snd_soc_of_parse_audio_routing(), a utility function that can
- parses a simple DAPM route table from device tree.The machine driver
- specifies the DT property to use, since this is binding-specific.
- - ASoC: Add utility to set a card's name from device tree
- Implement snd_soc_of_parse_card_name(), a utility function that sets a
- card's name from device tree. The machine driver specifies the DT
- property to use, since this is binding-specific.
- - ASoC: Remove rbtree register cache
- All users now use regmap directly so delete the ASoC version of the code.
- - ASoC: Fix an obvious copy paste error in an error message
- The message was obviously copied from soc_init_codec_debugfs()
- - ASoC: Refactor some conditions and loop in soc_bind_dai_link()
- Transform some loops from:
- for_each(x) {
- if (f(x)) {
- work_on(x);
- }
- }
- to new structure:
- for_each(x) {
- if (!f(x))
- continue;
- work_on(x);
- }
- This will allow future modification of f(x) with less impact to the code.
- - ASoC: Hold runtime PM references to components of active DAIs
- Every device that implements runtime power management for DAIs is doing
- it in pretty much the same way: in the startup callback they take a
- runtime PM reference and then in the shutdown callback they release that
- reference, keeping the device active while the DAI is active. Given the
- frequency with which this is done and the obviousness of the need to keep
- the device active in this period factor the code out into the core, taking
- references on the device for each CPU DAI, CODEC DAI and DMA device in the
- core.
- As runtime PM is reference counted this shouldn't interfere with any
- other reference holding by the drivers, and since (in common with the
- existing implementations) we don't check for errors on enabling it
- shouldn't matter if the device actually has runtime PM enabled or not.
- Tested-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
- - ASoC: Sort WM9090 in with the CODEC drivers
- The driver itself has been a regular CODEC driver for a while now.
- - ASoC: Convert WM2000 into a standard CODEC driver
- We've been able to handle external amps for a while now.
- - ASoC: Drop unused state parameter from CODEC suspend callback
- The existence of this parameter is purely historical. None of the CODEC drivers
- uses it and we always pass in the same value anyway, so it should be safe to
- remove it.
- - ASoC: Move SigmaDSP firmware loader to ASoC
- It has been pointed out previously, that the firmware subsystem is not the right
- place for the SigmaDSP firmware loader. Furthermore the SigmaDSP is currently
- only used in audio products and we are aiming for better integration into the
- ASoC framework in the future, with support for ALSA controls for firmware
- parameters and support dynamic power management as well. So the natural choice
- for the SigmaDSP firmware loader is the ASoC subsystem.
- - ASoC: Fix CODEC enumeration for auto_nc_codec_pins
- We need to enumerate all the CODECs that are part of the card we're
- instantiating, not all the CODECs that are in the system as the system
- may have multiple cards.
- - ASoC: Implement fully_routed card property
- A card is fully routed if the DAPM route table describes all connections on
- the board.
- When a card is fully routed, some operations can be automated by the ASoC
- core. The first, and currently only, such operation is described below, and
- implemented by this patch.
- Codecs often have a large number of external pins, and not all of these pins
- will be connected on all board designs. Some machine drivers therefore call
- snd_soc_dapm_nc_pin() for all the unused pins, in order to tell the ASoC core
- never to activate them.
- However, when a card is fully routed, the information needed to derive the
- set of unused pins is present in card->dapm_routes. In this case, have
- the ASoC core automatically call snd_soc_dapm_nc_pin() for each unused
- codec pin.
- This has been tested with soc/tegra/tegra_wm8903.c and soc/tegra/trimslice.c.
- - ASoC: Add support for CS42L73 codec
- This patch adds support for the Cirrus Logic CS42L73 low power stereo
- codec.
- - ASoC: Remove LZO cache type
- There are no current users and new drivers ought to be using the regmap
- API and its cache implementation directly so just delete the ASoC copy.
- - ASoC: Add new Realtek ALC5632 CODEC driver
- This driver implements basic functionality, using I²C for the control
- channel.
- - ASoC: Remove extra space in runtime struct definition
- My usual technique for finding definitions is to search for "name {"
- which breaks with the extra space.
- - ASoC: Fix build dependency for SND_SOC_JZ4740_CODEC
- Currently SND_SOC_JZ4740_CODEC depends on SOC_JZ4740 but SOC_JZ4740 is not
- defined in any Kconfig. Thus the codec driver will not be built when select
- "Build all ASoC CODEC drivers".
- (Unless it is selected by SND_JZ4740_SOC_QI_LB60).
- Remove the dependency with SOC_JZ4740, then this code driver can be built when
- select "Build all ASoC CODEC drivers".
- - ASoC: Provide a more complete DMA driver stub
- Allow userspace applications to do more parameter setting by providing a
- more complete stub DMA driver specifying a wildcard set of formats and
- channels and essentially random values for the DMA parameters. This is
- required for useful runtime operation of the dummy DMA driver until we
- are able to figure out how to power up links and do hw_params() from DAPM.
- Sending to stable as without this the dummy driver is not terribly
- useful.
- Reported-by: Kyung-Kwee Ryu <Kyung-Kwee.Ryu@wolfsonmicro.com>
- Tested-by: Kyung-Kwee Ryu <Kyung-Kwee.Ryu@wolfsonmicro.com>
- - ASoC: skip resume of soc-audio devices without codecs
- There are cases where there is no working codec on the soc-audio devices,
- and snd_soc_suspend() will skip such device when suspending. Yet its
- counterpart snd_soc_resume() does not check this, causing complaints
- about spinlock lockup:
- [ 176.726087] BUG: spinlock lockup on CPU#0, kworker/0:2/1067, d8ab82a8
- [ 176.732539] [<80014a14>] (unwind_backtrace+0x0/0xec) from [<805b3fc8>] (dump_stack+0x20/0x24)
- [ 176.741082] [<805b3fc8>] (dump_stack+0x20/0x24) from [<80322208>] (do_raw_spin_lock+0x118/0x158)
- [ 176.749882] [<80322208>] (do_raw_spin_lock+0x118/0x158) from [<805b7874>] (_raw_spin_lock_irqsave+0x5c/0x68)
- [ 176.759723] [<805b7874>] (_raw_spin_lock_irqsave+0x5c/0x68) from [<8002a020>] (__wake_up+0x2c/0x5c)
- [ 176.768781] [<8002a020>] (__wake_up+0x2c/0x5c) from [<804a6de8>] (soc_resume_deferred+0x3c/0x2b0)
- [ 176.777666] [<804a6de8>] (soc_resume_deferred+0x3c/0x2b0) from [<8004ee20>] (process_one_work+0x2e8/0x50c)
- [ 176.787334] [<8004ee20>] (process_one_work+0x2e8/0x50c) from [<8004fd08>] (worker_thread+0x1c8/0x2e0)
- [ 176.796566] [<8004fd08>] (worker_thread+0x1c8/0x2e0) from [<80053ec8>] (kthread+0xa4/0xb0)
- [ 176.804843] [<80053ec8>] (kthread+0xa4/0xb0) from [<8000ea70>] (kernel_thread_exit+0x0/0x8)
- - ASoC: Remove needless unlikely()
- There's no point in adding unlikely() annotations outside of hot paths
- and on systems using these features the annotation will always be wrong
- (as opposed to being something that only comes up once in a while) so
- the annotation may even be harmful.
- - ASoC: Allow machines to ignore pmdown_time per-link
- With this flag, each dai_link in machine driver can choose
- to ignore pmdown_time during DAPM shut down sequence.
- If the ignore_pmdown_time is set, the DAPM for corresponding DAI
- will be executed immediately.
- - ASoC: Fix prefixing of DAPM controls
- We don't want to clear the prefix while we're creating the DAPM controls
- for the device as the prefix is applied during control creation.
- - ASoC: core: Add flag to ignore pmdown_time at pcm_close
- With this flag codec drivers can indicate that it is desired
- to ignore the pmdown_time for DAPM shutdown sequence when
- playback stream is stopped.
- The DAPM sequence will be executed without delay in this case.
- - ASoC: Instantiate card widgets immediately
- This ensures they are available prior to the card late_probe().
- - ASoC: Fix typo in Kconfig symbol for tlv320aic32x4
- It is currently named "TVL" instead of "TLV".
- - ASoC: Squash error codes from regmap down to -1 on read
- The ASoC code always uses -1 as the error code due to reporting errors in
- band with the value. Ensure we don't confuse anything by making sure we
- don't pass actual error codes back into the rest of the code on read.
- - ASoC: Ensure all DAPM widgets are instantiated with the card
- Specifically for the widgets added by machine driver late probe functions.
- - ASoC: Suppress early calls to snd_soc_dapm_sync()
- Ensure we only have one sync during the initial startup of the card by
- making snd_soc_dapm_sync() a noop on non-instantiated cards. This avoids
- any bounces due to things like jacks reporting their initial state on
- partially initialised cards. The callers that don't also get called at
- runtime should just be removed.
- - ASoC: fix codec breakage caused by the volsw/volsw_2r merger
- By accident few places still uses the _2r calls from
- the core.
- This is a quick fix, the drivers using the old callbacks
- going to be changed.
- - ASoC: Ensure DAPM widgets are set up before we sync jacks
- We synchronise jack state on startup - when we do that make sure that we
- have set up all the DAPM widgets first in case we end up touching any of
- the partially set up widgets when syncing the jack pins.
- Tested-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
- - ASoC: core: Remove snd_soc_put_volsw_2r definition
- We do not have users for snd_soc_put_volsw_2r anymore.
- It can be removed.
- - ASoC: core: Combine snd_soc_put_volsw/put_volsw_2r functions
- Handle the put_volsw/put_volsw_2r in one function.
- To avoid build breakage in twl6040 keep the
- snd_soc_put_volsw_2r as define, and map it snd_soc_put_volsw.
- - ASoC: core: Combine snd_soc_get_volsw/get_volsw_2r functions
- Handle the get_volsw/get_volsw_2r in one function.
- - ASoC: core: Combine snd_soc_info_volsw/info_volsw_2r functions
- Handle the info_volsw/info_volsw_2r in one function.
- - ASoC: core: Change SOC_SINGLE/DOUBLE_VALUE representation
- SOC_SINGLE/DOUBLE_VALUE is used for mixer controls, where the
- bits are within one register.
- Assign .rreg to be the same as .reg for these types.
- With this change we can tell if the mixer in question:
- is mono:
- mc->reg == mc->rreg && mc->shift == mc->rshift
- is stereo, within single register:
- mc->reg == mc->rreg && mc->shift != mc->rshift
- is stereo, in two registers:
- mc->reg != mc->rreg
- The patch provide a small inline function to query, if the mixer
- is stereo, or mono.
- - ASoC: Do DAPM power checks only for widgets changed since last run
- In order to reduce the number of DAPM power checks we run keep a list of
- widgets which have been changed since the last DAPM run and iterate over
- that rather than the full widget list. Whenever we change the power state
- for a widget we add all the source and sink widgets it has to the dirty
- list, ensuring that all widgets in the path are checked.
- This covers more widgets than we need to as some of the neighbour widgets
- won't be connected but it's simpler as a first step. On one system I tried
- this gave:
- Power Path Neighbour
- Before: 207 1939 2461
- After: 114 1066 1327
- which seems useful.
- - ASoC: core: Introduce SOC_DOUBLE_R_VALUE macro
- With the new macro we can remove duplicated code
- for the SOC_DOUBLE_R type of controls.
- - ASoC: core: Introduce SOC_DOUBLE_VALUE macro
- With the new macro we can remove duplicated code
- for the SOC_DOUBLE type of controls.
- We can also remap the SOC_SINGLE_VALUE macro to
- SOC_DOUBLE_VALUE
- - ASoC: Instantiate DAPM widgets before we do the DAI link init
- The DAI init function may want to do something that needs the widgets to
- be instantiated.
- - ASoC: Allow DAI formats to be specified in the dai_link
- For almost all machines the DAI format is a constant, always set to the
- same thing. This means that not only should we normally set it on init
- rather than in hw_params() (where it has been for historical reasons) we
- should also allow users to configure this by setting a variable in the
- dai_link structure. The combination of these two will make many machine
- drivers even more data driven.
- Implement a new dai_fmt field in the dai_link doing just that. Since 0 is
- a valid value for many format flags and we need to be able to tell if the
- field is actually set also add one to all the values used to configure
- formats.
- - ASoC: Add Kconfig and Makefile entries for rt5631 codec
- - ASoC: soc-core: symmetry checking for each DAIs separately
- The orginal code does not cover the case that one DAI such as codec
- may be shared between other two DAIs(CPU).
- When do symmetry checking, altough the codec DAI requires symmetry,
- the two CPU DAIs may still be configured to run on different rates.
- We change to check each DAI's state separately instead of only checking
- the dai link to prevent this issue.
- Tested-by: Wolfram Sang <w.sang@pengutronix.de>
- - ASoC: Ensure we generate a driver name
- Commit 873bd4c (ASoC: Don't set invalid name string to snd_card->driver
- field) broke generation of a driver name for all ASoC cards relying on the
- automatic generation of one. Fix this by using the old default with spaces
- replaced by underscores.
- - ASoC: Trace and collect statistics for DAPM graph walking
- One of the longest standing areas for improvement in ASoC has been the
- DAPM algorithm - it repeats the same checks many times whenever it is run
- and makes no effort to limit the areas of the graph it checks meaning we
- do an awful lot of walks over the full graph. This has never mattered too
- much as the size of the graph has generally been small in relation to the
- size of the devices supported and the speed of CPUs but it is annoying.
- In preparation for work on improving this insert a trace point after the
- graph walk has been done. This gives us specific timing information for
- the walk, and in order to give quantifiable (non-benchmark) numbers also
- count every time we check a link or check the power for a widget and report
- those numbers. Substantial changes in the algorithm may require tweaks to
- the stats but they should be useful for simpler things.
- - ASoC: Add WM5100 driver
- The WM5100 is a highly integrated low power audio subsystem with advanced
- digital signal processing capabilities including effects, speech clarity
- enhancement and active noise cancellation. This initial driver provides
- support for basic audio paths, further patches will provide more
- complete functionality.
- - ASoC: Remove unused step size from debugfs CODEC write function
- We don't use the step size so there's no need to work it out.
- - ASoC: Fix reporting of partial jack updates
- We need to report the entire jack state to the core jack code, not just
- the bits that were being updated by the caller, otherwise the status
- reported by other detection methods will be omitted from the state seen
- by userspace.
- - ASoC: Allow source specification for CODEC level sysclk
- Similarly to PLLs/FLLs some modern CODECs provide selectable system clock
- sources. When the clock is the clock for a DAI we do not usually need to
- identify which clock is being configured so can use clk_id for the source
- clock but with CODEC wide system clocks we will need to specify both the
- clock being configured and the source.
- Add a source argument to the CODEC driver set_sysclk() operation to
- reflect this. As this operation is not as widely used as the DAI
- set_sysclk() operation the change is not very invasive. We probably
- ought to go and make the same alternation for DAIs at some point.
- - ASoC: Allow register defaults to be larger than unsigned short
- Devices that need this exist; obviously the newer regmap defaults
- mechanism will deal with this more happily.
- - ASoC: soc_codec_reg_show use snd_soc_codec_readable_register
- Use snd_soc_codec_readable_register instead of open-coding it.
- - ASoC: Fix register cache sync register_writable WARN_ONs
- Currently the condition for these WARN_ONs is reversed and they are placed
- before the actual check whether we are going to write to that register. So if
- the codec implements the register_writable callback we'll get a warning for each
- writable register when syncing the register cache.
- While we are at it change the check to use snd_soc_codec_writable_register
- instead of open-coding it.
- - ASoC: snd_soc_codec_{readable,writable}_register change default to true
- Change the default return value of snd_soc_codec_{readable,writable}_register to
- true when no codec specific callback for this function is given. Otherwise all
- registers of that codec will neither be readable nor writable, which is most
- certainly not what we want.
- - ASoC: soc-core: use GFP_KERNEL flag for kmalloc in snd_soc_cnew
- GFP_ATOMIC is not needed here, use GFP_KERNEL instead.
- - ASoC: Allow idle_bias_off to be specified in CODEC drivers
- If devices can unconditionally support idle_bias_off let them flag it in
- their driver structure.
- - ASoC: Fix check for symmetric rate enforcement
- The ASoC core tries to not enforce symmetric rates when
- two streams open simultaneously. It does so by checking
- rtd->rate being zero. This works exactly once after booting
- because it is not set to zero again when the streams close.
- Fix this by setting rtd->rate when no active stream is left.
- [This leads to lots of warnings about not enforcing the symmetry in some
- situations as there's a race in the userspace API where we know we've
- got two applications but don't know what rates they want to set.
- -- broonie ]
- - ASoC: Add ADAU1373 codec support
- This patch adds support for the Analog Devices ADAU1373 audio codec.
- - ASoC: soc-pcm: Remove unused global mutex
- Since commit b8c0dab9bf3373010e857a8d3f1b594c60a348dd
- "ASoC: core - PCM mutex per rtd",
- the global pcm_mutex is not being used any more.
- - ASoC: soc-cache: Remove unneeded codec_drv pointer variable in snd_soc_lzo_get_blksize
- Since commit aea170a099793abcd0e6de46b947458073204241
- "ASoC: soc-cache: Add reg_size as a member to snd_soc_codec",
- the codec_drv pointer variable is not used in snd_soc_lzo_get_blksize.
- - ASoC: soc-cache: Remove unneeded codec_drv pointer variable in snd_soc_flat_cache_init
- Since commit d779fce5d79525d66269c8f6e430e1515d697f3d
- "ASoC: soc-cache: Ensure flat compression uses a copy of the defaults cache",
- the codec_drv pointer variable is not used any more.
- - ASoC: soc-jack: Fix checking return value of request_any_context_irq
- request_any_context_irq() returns a negative value on failure.
- On success, it returns either IRQC_IS_HARDIRQ or IRQC_IS_NESTED.
- - ASoC: Support !CONFIG_REGMAP builds
- Since we changed regmap to be selected and register per bus rather than
- via the core only we can't rely on it being enabled by the ASoC core.
- Support compiling it out.
- Reported-by: Axel Lin <axel.lin@gmail.com>
- - ASoC: soc-io: Fix CONFIG_REGMAP_I2C/SPI guards to support regmap modules
- When CONFIG_REGMAP_I2C/SPI are m, CONFIG_REGMAP_I2C_MODULE is set in the
- pre-processor instead of CONFIG_REGMAP_I2C. This removes SND_SOC_I2C as a
- valid option for snd_soc_codec_set_cache_io()'s control parameter, and
- causes any ASoC regmap-using codec built as a module to fail to initialize.
- - ASoC: soc-io: Add CONFIG_REGMAP_I2C/CONFIG_REGMAP_SPI guards for regmap_init_i2c/regmap_init_spi
- In the case of "make da8xx_omapl_defconfig;make", the SPI support is disabled.
- Thus calling regmap_init_spi in soc-io.c has below build error.
- ERROR: "regmap_init_spi" [sound/soc/snd-soc-core.ko] undefined!
- make[1]: *** [__modpost] Error 1
- make: *** [modules] Error 2
- This patch fixes the build error by adding CONFIG_REGMAP_I2C/CONFIG_REGMAP_SPI
- guards for regmap_init_i2c/regmap_init_spi.
- - ASoC: Add regmap as a control type
- Allow drivers to set up their own regmap API structures. This is mainly
- useful with MFDs where the core driver will have set up regmap at the
- minute, though it may make sense to push the existing regmap setup out
- of the core into the drivers.
- - ASoC: Use new register map API for ASoC generic physical I/O
- Remove all the ASoC specific physical I/O code and replace it with calls
- into the regmap API. The bulk write code can only be used safely if all
- regmap calls are locked with the CODEC lock, we need to add bulk support
- to the regmap API or replace the code with an open coded loop (though
- currently it has no users...).
- - ASoC: Trivial formatting fix in soc-core.c
- Utterly trivial but it annoys me.
- - ASoC: mxs: add asoc configuration files
- Tested-by: Wolfram Sang <w.sang@pengutronix.de>
- - ASoC: dapm - Add DAPM stream completion event.
- In preparation for Dynamic PCM (AKA DSP) support.
- This adds a callback function to be called at the completion of a DAPM stream
- event.
- This can be used by DSP components to perform calculations based on DAPM graphs
- after completion of stream events.
- - ASoC: Rename WM8915 to WM8996
- For marketing reasons the part will be called WM8996. In order to avoid
- user confusion rename the driver to reflect this.
- - ASoC: core: make comments fit the code
- In one comment, cpu_dai was mentioned although codec_dai was used in the
- code. Also, fix the name for the card dai list which has no seperation
- into card_dai and codec_dai.
- - ASoC: Mark cache as dirty when suspending
- Since quite a few drivers are not managing to flag the cache as needing
- to be resynced after suspend and it's a reasonable thing to do flag the
- cache as needing sync automatically when suspending.
- The expectation is that systems will mainly only keep the CODEC powered
- when doing audio through the CODEC so we won't actually suspend the
- device anyway; drivers which want to can override this behaviour when
- they resume.
- - ASoC: twl6040: Convert into TWL6040 MFD child
- Convert TWL6040 CODEC driver into a TWL6040 MFD child, it implies
- that MFD-level operations like register accesses, clock setting
- and power management are done through MFD APIs, not directly by
- CODEC driver anymore. To avoid conflicts with the other MFD child,
- vibrator registers are skipped in CODEC driver.
- - MFD: twl4030-codec -> twl4030-audio: Rename the driver
- Rename the driver, and header file from twl4030-codec to
- twl4030-audio.
- To avoid breakage change depending drivers at the same time.
- - ASoC: Don't use codec->control_data in bulk write
- In order to facilitate merging with the register map I/O replace the use
- of control_data for the bulk writes with direct lookup of the client data
- from the device.
- - ASoC: pcm - rename snd_codec_close() to snd_pcm_close().
- Make sure we follow naming convention for all PCM ops.
- - ASoC: WM8983: Initial driver
- The WM8983 is a low power, high quality stereo CODEC
- designed for portable multimedia applications. Highly flexible
- analogue mixing functions enable new application features,
- combining hi-fi quality audio with voice communication.
- - ASoC: core - Add platform IO tracing
- Trace platform IO just like CODEC IO.
- - ASoC: core - Add convenience register for platform kcontrol and DAPM
- Allow platform probe to register platform kcontrols and DAPM just like
- the CODEC probe().
- - ASoC: core - Add platform widget IO
- Allow platform driver widgets to perform any IO required for DAPM.
- - ASoC: core - Add API call to register platform kcontrols.
- In preparation for Dynamic PCM (AKA DSP) support.
- Allow platform drivers to register kcontrols.
- - ASoC: core - Add platform read and write.
- In preparation for ASoC Dynamic PCM (AKA DSP) support.
- Allow platform driver to perform IO. Intended for platform DAPM.
- - ASoC: core - Make platform probe more like codec probe.
- In preparation for ASoC dynamic PCM support (AKA ASoC DSP)
- Platform will also support DAPM so separate out the probe function
- to simplify the code (just like the codec probe).
- - ASoC: Add ADAV80x codec driver
- This patch adds support for the Analog Devices ADAV801 and ADAV803 audio codec.
- - ASoC: add WM8782 ADC Codec Driver
- [zonque@gmail.com: transform to new ASoC structure]
- - ASoC: add STA32X codec driver
- [zonque@gmail.com: transform to new ASoC structure]
- - ASoC: Remove adau1701 from SND_SOC_ALL_CODECS due to Sigma dependency
- The Sigma code is in drivers/firmware which is only included on a very
- small subset of architectures and so ends up breaking the build on
- others. There's a pending patch to make the directory build as standard
- but it's not merged yet.
- - ASoC: Add ADAU1701 codec driver
- This patch adds support for the Analog Devices ADAU1701 SigmaDSP.
- - ASoC: Move register I/O code into a separate file
- For clarity and to help ongoing refactoring in this area create a new file
- to contain the physical I/O functions, separating them out from the cache
- operations.
- - ASoC: Factor out redundant read() functions
- We've got a whole bunch of functions which just call straight through to
- do_hw_read(). Simplify this situation by removing them and using hw_read()
- directly.
- - ASoC: core - PCM mutex per rtd
- In preparation for the new ASoC Dynamic PCM support (AKA DSP support).
- The new ASoC Dynamic PCM core allows DAIs to be dynamically re-routed
- at runtime between the PCM device end (or Frontend - FE) and the physical DAI
- (Backend - BE) using regular kcontrols (just like a hardware CODEC routes
- audio in the analog domain). The Dynamic PCM core therefore must be
- able to call PCM operations for both the Frontend and Backend(s) DAIs at
- the same time.
- Currently we have a global pcm_mutex that is used to serialise
- the ASoC PCM operations. This patch removes the global mutex
- and adds a mutex per RTD allowing the PCM operations to be reentrant and
- allow control of more than one DAI at at time. e.g. a frontend PCM hw_params()
- could configure multiple backend DAI hw_params() with similar or different
- hw parameters at the same time.
- - ASoC: core - Separate out PCM operations into new file.
- In preparation for Dynamic PCM support (AKA DSP support).
- There will be future patches that add support to allow PCMs to be dynamically
- routed to multiple DAIs at startup and also during stream runtime. This patch
- moves the ASoC core PCM operaitions into a new file called soc-pcm.c. This will
- in simplify the ASoC core features into distinct files.
- - ASoC: Suppress restore of default register values for rbtree cache sync
- Currently the rbtree code will write out the entire register map when
- doing a cache sync which is wasteful and will slow things down. Check
- to see if the value we're about to write is the default and don't bother
- restoring it if it is, either the value will have been retained or the
- device will have been reset and holds the value already.
- We should really store the defaults in the nodes but this resolves the
- immediate issue.
- - ASoC: core - Allow components to probe/remove in sequence.
- Some ASoC components depend on other ASoC components to provide clocks and
- power resources in order to probe() and vice versa for remove().
- Allow components to be ordered so that components can be probed() and removed()
- in sequences that conform to their dependencies.
- - ASoC: core - Optimise and refactor pcm_new() to pass only rtd
- Currently pcm_new() passes in 3 arguments :- card, pcm and DAI.
- Refactor this to only pass in 1 argument (i.e. the rtd) since struct rtd contains
- card, pcm and DAI along with other members too that are useful too.
- - ASoC: Add context parameter to card DAPM callbacks
- The card callback will get called for each DAPM context in the card so it
- can be useful for it to know which device is currently undergoing a
- transition.
- - ASoC: Specify target bias state directly as a bias state
- Rather than a simple flag to say if we want the DAPM context to be at full
- power specify the target bias state. This should have no current effect
- but is a bit more direct and so makes it easier to change our decisions
- about the which bias state to go into in future.
- - ASoC: Enforce the mask in snd_soc_update_bits()
- Avoids issues if someone does a read followed by restore and doesn't mask
- out only the bits being updated.
- - ASoC: Don't set invalid name string to snd_card->driver field
- The snd_card->driver field contains a driver name string, and in
- general it shouldn't contain space or special letters. The commit
- 2b39535b9e54888649923beaab443af212b6c0fd changed the string copy from
- card->name, but the long name string may contain such letters, thus
- it may still lead to a segfault.
- A temporary fix is not to copy the long name string but just keep it
- empty as the earlier version did.
- Reported-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
- - ASoC: Remove unused and about to be broken SND_SOC_CUSTOM I/O bus
- This will be removed in -next so let's drop it from mainline as soon as
- we can in order to minimise surprises.
- - ASoC: Check for NULL register bank in snd_soc_get_cache_val()
- - ASoC: Use explicit endianness conversion in snd_soc_16_8_write()
- - ASoC: Use cpu_to_be16() in 8x16 write
- - ASoC: Convert 7x9 write to use cpu_to_be16()
- Run the data through cpu_to_be16() so it's at least clear what we're up to.
- - ASoC: core: Don't schedule deferred_resume_work twice
- For cards that have two or more DAIs, snd_soc_resume's loop over all
- DAIs ends up calling schedule_work(deferred_resume_work) once per DAI.
- Since this is the same work item each time, the 2nd and subsequent
- calls return 0 (work item already queued), and trigger the dev_err
- message below stating that a work item may have been lost.
- Solve this by adjusting the loop to simply calculate whether to run the
- resume work immediately or defer it, and then call schedule work (or not)
- one time based on that.
- Note: This has not been tested in mainline, but only in chromeos-2.6.38;
- mainline doesn't support suspend/resume on Tegra, nor does the mainline
- Tegra ASoC driver contain multiple DAIs. It has been compile-checked in
- mainline.
- - ASoC: Convert 16x16 write to use cpu_to_be16()
- Make it clear what we're doing.
- - ASoC: soc-cache: Cache a pointer to the last accessed rbnode
- Whenever we are doing a read or a write through the rbtree code, we'll
- cache a pointer to the rbnode. To avoid looking up the register
- everytime we do a read or a write, we first check if it can be found in
- the cached register block, otherwise we traverse the rbtree and finally
- cache the rbnode for future use.
- - ASoC: soc-cache: Block based rbtree compression
- This patch prepares the ground for the actual rbtree optimization patch
- which will save a pointer to the last accessed rbnode that was used
- in either the read() or write() functions.
- Each rbnode manages a variable length block of registers. There can be no
- two nodes with overlapping blocks. Each block has a base register and a
- currently top register, all the other registers, if any, lie in between these
- two and in ascending order.
- The reasoning behind the construction of this rbtree is simple. In the
- snd_soc_rbtree_cache_init() function, we iterate over the register defaults
- provided by the driver. For each register value that is non-zero we
- insert it in the rbtree. In order to determine in which rbnode we need
- to add the register, we first look if there is another register already
- added that is adjacent to the one we are about to add. If that is the case
- we append it in that rbnode block, otherwise we create a new rbnode
- with a single register in its block and add it to the tree.
- In the next patch, where a cached rbnode is used by both the write() and the
- read() functions, we also check if the register we are about to add is in the
- cached rbnode (the least recently accessed one) and if so we append it in that
- rbnode block.
- - ASoC: core - remove superfluous new line.
- - ASoC: core - fix module reference counting for CPU DAIs
- Currently CODEC and platform drivers have their module reference count
- incremented soc_probe_dai_link() whilst CPU DAI drivers have their reference
- count incremented in soc_bind_dai_link().
- CPU DAIs should have their reference count incremented in soc_probe_dai_link()
- just like the CODEC and platform drivers.
- - ASoC: core: Don't set "(null)" as a driver name
- Commit 22de71b ("ASoC: core - allow ASoC more flexible machine name")
- writes "(null)" to driver name string in struct snd_card if card->driver_name
- is NULL. This causes segmentation faults with some user space ALSA utilities
- like aplay and arecord.
- Fix this by using the card->name if no driver name is specified.
- - ASoC: Asahi Kasei AK4641 codec driver
- A driver for the AK4641 codec used in iPAQ hx4700 and Glofiish M800
- among others.
- - ASoC: Silence DEBUG_STRICT_USER_COPY_CHECKS=y warning
- Enabling DEBUG_STRICT_USER_COPY_CHECKS causes the following
- warning:
- In file included from arch/x86/include/asm/uaccess.h:573,
- from include/linux/poll.h:14,
- from include/sound/pcm.h:29,
- from include/sound/ac97_codec.h:31,
- from sound/soc/soc-core.c:34:
- In function 'copy_from_user',
- inlined from 'codec_reg_write_file' at
- sound/soc/soc-core.c:252:
- arch/x86/include/asm/uaccess_64.h:65:
- warning: call to 'copy_from_user_overflow' declared with
- attribute warning: copy_from_user() buffer size is not provably
- correct
- presumably due to buf_size being signed causing GCC to fail to
- see that buf_size can't become negative.
- - ASoC: Reintroduce do_spi_write()
- There is an unfortunate difference in return values between spi_write()
- and i2c_master_send() so we need an adaptor function to translate.
- Reported-by: Lars-Peter Clausen <lars@metafoo.de>
- - ASoC: core - allow ASoC more flexible machine name
- Allow ASoC machine drivers to register a driver name
- and a longname. This allows user space to determine
- the flavour of machine driver.
- - ASoC: Use spi_write() for SPI writes
- do_spi_write() is just an open coded copy of do_spi_write() so we can
- delete it and just call spi_write() directly. Indeed, as a result of
- recent refactoring all the SPI write functions are just very long
- wrappers around spi_write() which don't add anything except for some
- pointless copies so we can just use spi_write() as the hw_write
- operation directly. It should be as type safe to do this as it is to do
- the same thing with I2C and it saves us a bunch of code.
- - ASoC: Remove byte swap in 4x12 SPI write
- snd_soc_4_12_spi_write() contains a byte swap. Since this code was written
- for an Analog CODEC on a Blackfin reference board it appears that this is
- done because while Blackfin is little endian the CODEC is big endian (as
- are most CODECs).
- Push this up into the generic 4x12 write function and use cpu_to_be16() to
- do the byte swap so things are more regular and things work on both CPU
- endiannesses.
- - ASoC: Don't squash 16x8 registers down to 8 bits
- Currently we'll force all registers to fit in 8 bits before passing
- down to the I/O function. Looks like a cut'n'paste bug.
- - ASoC: soc-cache: Allow codec->cache_bypass to be used with snd_soc_hw_bulk_write_raw()
- If we specifically want to write a block of data to the hw bypassing the
- cache, then allow this to happen inside snd_soc_hw_bulk_write_raw().
- - ASoC: Create codec DAPM widgets before calling the codecs probe function
- This allows to create DAPM routes depending on those widgets in the
- codecs probe function. This is helpful when supporting similar codecs
- with minor differences in the DAPM routing with the same driver.
- Something similar has already been done for cards in commit
- a841ebb9 (ASoC: Create card DAPM widgets early so they can be used in
- callbacks).
- - ASoC: Don't crash on PM operations
- The move over to exposing snd_soc_register_card() let the initialisation
- of the driver data we use to find the card in PM operations go AWOL. Fix
- this by setting the driver data when we register the card.
- - ASoC: Move DAPM widget debugfs entry creation to snd_soc_dapm_new_widgets
- Currently debugfs entries for a DAPM widgets are only added in
- snd_soc_dapm_debugfs_init. If a widget is added later (for example in the
- dai_link's probe callback) it will not show up in debugfs.
- This patch moves the creation of the widget debugfs entry to
- snd_soc_dapm_new_widgets where it will be added after the widget has been
- properly instantiated.
- As a side-effect this will also reduce the number of times the DAPM widget list
- is iterated during a card's instantiation.
- Since it is possible that snd_soc_dapm_new_widgets is invoked form the codecs or
- cards probe callbacks, the creation of the debugfs dapm directory has to be
- moved before these are called.
- - ASoC: Move DAPM debugfs directory creation to snd_soc_dapm_debugfs_init
- Move the creation of the DAPM debugfs directory to snd_soc_dapm_debugfs_init
- instead of having the same duplicated code in both codec and card DAPM setup.
- - ASoC: Free the card's DAPM context
- Free the card's DAPM context when the card is removed.
- - ASoC: Declare const properly for enum texts
- The enum texts are supposed to be const char * const []. Without the
- second const, it gets compile warnings like
- sound/soc/codecs/max98095.c:607:2: warning: initialization discards qualifiers from pointer target type
- - ASoC: Work around allmodconfig failure
- - ASoC: Add more natural support for no-DMA DAIs
- Since we can now support multiple platforms allow machines to not specify
- a platform in a DAI link. Since the rest of the code requires that we have
- a struct device for all objects we do this by substituting in a dummy
- device that we register automatically.
- - ASoC: Allow platform drivers to have no ops structure
- - ASoC: fix two ident style problems
- - ASoC: remove unused comment
- `type` parameter is not longer used in `snd_soc_codec_set_cache_io`,
- so remove this line.
- - ASoC: Make struct snd_soc_card's dapm_widgets and dapm_routes const
- Those should not be modified (and are not) by the core code, so make them const.
- This also makes them consistent with the same members of snd_soc_codec.
- - ASoC: Create card DAPM widgets early so they can be used in callbacks
- This helps with things like setting up the initial state.
- - ASoC: Add initial WM1250-EV1 Springbank audio I/O module driver
- The WM1250-EV1 Springbank audio I/O module for the Wolfson Glenfarclas
- reference platform provides a simple audio I/O with an independant clock
- domain, intended to simulate cellular modem and bluetooth subsystems
- within the platform.
- The card supports some limited GPIO based control but this is currently not
- implemented.
- - ASoC: Add WM8915 CODEC driver
- The WM8915 is an ultra low power mobile CODEC designed for smartphones,
- featuring a mixture of digital and analogue I/O with flexible mixing
- options and advanced low power accessory detection functionality in a
- compact package.
- - ASoC: Add soc_remove_dai_links
- card->num_rtd should be 0 after soc_romve_dai_link
- - ASoC: SSM2602: add SPI support
- The ssm2602 codec has a SPI interface as well as I2C, so add the simple
- bit of glue to make it usable.
- - ASoC: Add data based control initialisation for CODECs and cards
- Allow CODEC and card drivers to point to an array of controls from their
- driver structure rather than explicitly calling snd_soc_add_controls().
- - ASoC: fix config error path
- initialize ret to invalid value so that when we reach the config error path in
- soc_pcm_open, it will return the correct error code. without this patch, though
- config error path is executed, soc_pcm_open will return 0 in
- snd_pcm_open_substream and then cause double release of substream.
- - ASoC: check channel mismatch between cpu_dai and codec_dai
- Suppose we have:
- cpu_dai
- channels_min = 1
- channels_max = 1
- codec_dai
- channels_min = 2
- channels_max = 2
- This is a mismatch that should not happen, however according to the current
- code, the result of runtime->hw will be:
- channels_min = 2
- channels_max = 1
- We better spot it early. This patch checks this mismatch.
- - ASoC: Add max98095 CODEC driver
- This patch adds the MAX98095 CODEC driver.
- - ASoC: Tegra: Suspend/resume support
- ASoC machine drivers that are their own platform_driver (as opposed to
- those using the soc-audio platform_driver) need to explicitly set up
- power-management operation callbacks.
- To avoid cut/paste, snd_soc_pm_ops also needs to be exported.
- - ASoC: Fix comment width in soc-cache.c
- Lines should be less than 80 columns.
- - ASoC: Remove excessively verbose logging on I2C write
- We don't need to log every I2C transfer, and certainly not at error level.
- - ASoC: Fix to avoid compile error
- This patch fixes to avoid compile error when ASoC codec doesn't use I2C
- nor SPI on snd_soc_hw_bulk_write_raw().
- - ASoC: format_register_str: Don't clip register values
- wordsize is used as the textual width of a register address.
- regsize is used as the textual width of a register value.
- The assignments to these values were swapped. In the case of WM8903, which
- has 8-bit register addresses and 16-bit register values, this caused the
- register values to be clipped to 2 digits instead of the full 4.
- - ASoC: Name jack GPIOs based on jack not codec
- snd_soc_jack_gpio has a name field. Use that name when registering the IRQ,
- since this is far more informative than the codec driver name. This shows
- up in /proc/interrupts.
- - ASoC: soc-cache: Warn on syncing any non-writable registers
- When syncing the cache, if the driver has given us a writable_register()
- callback, use it to check if we are syncing a non-writable register
- and if so warn the user.
- - ASoC: soc-cache: Fix indentation issues
- - sound: Fixup the last user of the old irq functions
- I had seen that before, but now that I removed set_irq_wake it broke.
- - ASoC: fix sorting order of codecs in kconfig
- - ASoC: ad73311: drop I2C requirement
- The AD73311 codec does not use I2C, so don't require it in Kconfig.
- - ASoC: Add snd_soc_codec_{readable,writable}_register()
- Provide the top level ASoC core functions for indicating whether
- a given register is readable or writable.
- - ASoC: Add default snd_soc_default_writable_register() callback
- By using struct snd_soc_reg_access for the read/write/vol attributes
- of the registers, we provide callbacks that automatically determine whether
- a given register is readable/writable or volatile.
- - ASoC: soc-cache: Return -ENOSYS instead of -EINVAL
- These functions fail with -EINVAL if the corresponding callbacks
- are not implemented. Change them to return -ENOSYS as it is more
- appropriate for unimplemented callbacks.
- - ASoC: soc-cache: Factor-out the SPI write code
- The handling of all snd_soc_x_y_spi_write() functions is similar.
- Create a separate function and update all callers to use it.
- - ASoC: soc-cache: Factor-out the hw_read() specific code
- The handling of all snd_soc_x_y_read() functions is similar.
- Factor it out into a separate function and update all callers.
- - ASoC: soc-cache: Factor-out the hw_write() specific code
- The handling of all snd_soc_x_y_write() functions is similar.
- Factor it out into a separate function and update all functions
- to use it.
- - ASoC: Add control_type in snd_soc_codec
- This is mainly used by the soc-cache code to easily determine the
- currently used underlying serial bus. Set SND_SOC_CUSTOM to 1 so we
- can distinguish it if it is not initialized or set.
- - ASoC: soc-cache: Introduce raw bulk write support
- As it has become more common to have to write firmware or similar
- large chunks of data to the hardware, add a function to perform
- raw bulk writes that bypass the cache. This only handles volatile
- registers as we should avoid getting out of sync with the actual
- cache.
- - ASoC: soc-cache: Factor-out the I2C read code
- The handling of all snd_soc_x_y_read_i2c() functions is similar.
- Make a generic I2C read function and update all callers to use it.
- - [media] ASoC: WL1273 FM radio: Access I2C IO functions through pointers
- These changes are needed to keep up with the changes in the
- MFD core and V4L2 parts of the wl1273 FM radio driver.
- Use function pointers instead of exported functions for I2C IO.
- Also move all preprocessor constants from the wl1273.h to
- include/linux/mfd/wl1273-core.h.
- Also update the year in the copyright statement.
- - ASoC: Remove bogus check for register validity in debugfs write
- Since not all registers need to be cached and the cache is entirely
- optional anyway we shouldn't be checking that a register is in the
- cached range. If the register is invalid then the actual I/O code
- can determine that and report an error.
- Similarly, the step size can and should be enforced by the lower level
- code if it's important.
- - ASoC: Add MAX9850 codec driver
- This patch adds ASoC support for the MAX9850 codec with headphone
- amplifier.
- Supported features:
- - Playback
- - 16, 20 and 24 bit audio
- - 8k - 48k sample rates
- - DAPM
- - ASoC: Add LM4857 to SND_SOC_ALL_CODECS
- - ASoC: Add driver for the dfbmcs320 bluetooth module
- This patch adds a codec driver for the dfbmcs320 bluetooth module, which is used
- on the neo1973 boards.
- The patch also modifies the neo1937_wm8753 sound board driver to use the new
- driver instead of registering the bluetooth DAI manually.
- Previously there was a name mismatch between the bluetooth DAI and the bluetooth
- DAI link and the sound card was not instantiated, with this patch the issue is
- no longer present and sound support works again.
- - ASoC: Fix prefixing of DAPM controls by factoring prefix into snd_soc_cnew()
- Currently will ignore prefixes when creating DAPM controls. Since currently
- all control creation goes through snd_soc_cnew() we can fix this by factoring
- the prefixing into that function.
- - ASoC: Warn rather than set a silly constraint when we can't do symmetry
- Symmetric rate configuration can fail if the second stream starting tries
- to apply the symmetric constraint before the first stream has got far
- enough to pick a rate. Rather than try to enforce a nonsensical rate of
- 0Hz log a warning and allow the application to carry on. Things might go
- wrong later on but the user will know about it and there's unlikely to be
- lasting damage.
- - ASoC: Refactor symmetric_rates check to reduce indentation
- - ASoC: Provide CODEC clocking operations and API calls
- When multi component systems use DAIless amplifiers which require clocking
- configuration it is at best hard to use the current clocking API as this
- requires a DAI even though the device may not even have one. Address this
- by adding set_sysclk() and set_pll() operations and APIs for CODECs.
- In order to avoid issues with devices which could be used either with or
- without DAIs make the DAI variants call through to their CODEC counterparts
- if there is no DAI specific operation. Converting over entirely would create
- problems for multi-DAI devices which offer per-DAI clocking setup.
- - ASoC: Add DAPM widget and path data to CODEC driver structure
- Allow a slight simplification of CODEC drivers by allowing DAPM routes and
- widgets to be provided in a table. They will be instantiated at the end of
- CODEC probe.
- - ASoC: neo1973_wm8753: Move lm4857 specefic code to its own module
- This patch moves the code for the lm4857 AMP from the neo1973_wm8753 sound
- board driver to its own module.
- The lm4857 is a generic AMP IC and not specific to the neo1973.
- - ASoC: Add missing debugfs conditionals
- - ASoC: Add TI tlv320aic32x4 codec support.
- This patch adds support for tlv320aic3205 and tlv320aic3254 codecs.
- It doesn't include miniDSP support for aic3254.
- - ASoC: Add a late_probe() callback to cards
- This is run after the DAPM widgets and routes are added, allowing setup
- of things like jacks using the routes. The main card probe() is run before
- anything else so can't be used for this purpose.
- - ASoC: Allow card DAPM widgets and routes to be set up at registration
- These will be added after all devices are registered and allow most DAI
- init functions in machine drivers to be replaced by simple data.
- Regular controls are not supported as the registration function still
- works in terms of CODECs.
- - ASoC: Add a per-card DAPM context
- This means that rather than adding the board specific DAPM widgets to a
- random CODEC DAPM context they can be added to the card itself which is
- a bit cleaner. Previously there only was one DAPM context and it was
- tied to the single supported CODEC.
- - ASoC: Add Freescale SGTL5000 codec support
- Add Freescale SGTL5000 codec support.
- Supported features:
- - line-in and mic input
- - headphone and line-out output
- - line-in bypass ADC and DAC to headphone
- - 16, 20, 24, 32 bit audio
- - 8 ~ 96k sample rates
- - ASoC: Pass the jack to jack notifiers
- We're currently not passing anything and this will make the card and so on
- more discoverable.
- - ASoC: Add kerneldoc for jack_status_check callback
- - ASoC: Allow GPIO jack detection to be configured as a wake source
- Some systems wish to use jacks as wake sources. Provide a wake flag in the
- GPIO configuration which causes the driver to enable the IRQ as a wake
- source.
- - ASoC: Allow use sleeping gpio in soc-jack
- It is safe to use sleeping gpio in snd_soc_jack_gpio_detect as it is not
- called from interrupt context. This avoids WARN_ON from __gpio_get_value
- if sleeping gpio is registered for jack.
- - ASoC: add support for multiple jack types
- This patch adds soc-jack support for adding voltage zones and for
- detecting jack type
- - ASoC: soc-cache: dereferencing before checking
- The patch c358e640a66 "ASoC: soc-cache: Add trace event for
- snd_soc_cache_sync()" introduced a dereference of "codec->cache_ops"
- before we had checked it for NULL.
- I pulled the check forward, and then pulled everything in an indent
- level.
- - ASoC: soc-core: Support debugfs entries larger than PAGE_SIZE bytes
- For some codecs with large register maps, it was not possible to dump
- all registers via the codec_reg file but only up to PAGE_SIZE bytes.
- This patch fixes this problem.
- - ASoC: Update PM ifdefs for exported suspend/resume
- - ASoC: Use snd_pcm_format_width() in snd_soc_params_to_frame_size()
- - ASoC: soc-core: Ensure codec_reg has fixed length fields
- Make the format of the codec_reg file more easily parsable. Remove
- the header field which gives the codec name. These changes are important
- when it comes to extend the debugfs codec_reg file to dump more than
- PAGE_SIZE bytes to make it easier to calculate offsets within the
- file.
- We still need to handle the case when the snd_soc_read() call fails
- and <no data: %d> is outputted.
- - ASoC: Move card list initialization to snd_soc_register_card
- All ASoC cards need snd_soc_initialize_card_lists called. Previously, it was
- only called for cards backed by a "soc-audio" platform device, via
- soc_probe(). However, it's also needed for cards backed by other platform
- devices, and registered directly via snd_soc_register_card().
- - ASoC: Add card driver data
- Provide driver data for cards within the card structure. To simplify the
- implementation of the PM operations we don't use the struct device driver
- data as this is used by the core to retrieve the card in callbacks from
- the device model and PM core.
- - ASoC: soc-core: Increment codec and platform driver refcounts before probing
- Commit f6c2ed5 "ASoC: Fix the device references to codec and platform drivers"
- moved codec and platform driver refcount increments from soc_bind_dai_link
- to more appropriate places.
- Adjust a little them so that refcounts are incremented before executing the
- driver probe functions.
- - ASoC: Add subsequence information to seq_notify callbacks
- Allows drivers to distinguish which subsequence is being notified when
- they get called back.
- - ASoC: Make cache status available via debugfs
- Could just as well live in sysfs but sysfs doesn't have the simple
- value export helpers debugfs does.
- - ASoC: Export card PM callbacks for use in direct registered cards
- Allow hookup of cards registered directly with the core to the PM
- operations by exporting the device power management operations to
- modules, also exporting the default PM operations since it is
- expected that most cards will end up using exactly the same setup.
- Note that the callbacks require that the driver data for the card be
- the snd_soc_card.
- - ASoC: Replace pdev with card in machine driver probe and remove
- In order to support cards instantiated without using soc-audio remove
- the use of the platform device in the card probe() and remove() ops.
- - ASoC: Use card rather than soc-audio device to card PM functions
- The platform device for the card is tied closely to the soc-audio
- implementation which we're currently trying to remove in favour of
- allowing cards to have their own devices. Begin removing it by
- replacing it with the card in the suspend and resume callbacks we
- give to cards, also taking the opportunity to remove the legacy
- suspend types which are currently hard coded anyway.
- - ASoC: Fix type for snd_soc_volatile_register()
- We generally refer to registers as unsigned ints (including in the
- underlying CODEC driver operation).
- - ASoC: soc-cache: Add trace event for snd_soc_cache_sync()
- This patch makes it easy to see when the syncing process begins and
- ends. You can also enable the snd_soc_reg_write tracepoint to see
- which registers are being synced.
- - ASoC: CS4271 codec support
- Added support for CS4271 codec to ASoC.
- - ASoC: soc-cache: Apply the cache_bypass option
- Incorporate the use of the cache_bypass functionality in the
- syncing functions. The snd_soc_flat_cache_sync() need not be
- hooked as there is no performance benefit from using the
- cache_bypass option.
- - ASoC: soc-cache: Introduce the cache_bypass option
- This is primarily needed to avoid writing back to the cache
- whenever we are syncing the cache with the hardware. This gives a
- performance benefit especially for large register maps.
- - ASoC: Provide per widget type callback when executing DAPM sequences
- Many modern devices have features such as DC servos which take time to start.
- Currently these are handled by per-widget events but this makes it difficult
- to paralleise operations on multiple widgets, meaning delays can end up
- being needlessly serialised. By providing a callback to drivers when all
- widgets of a given type have been handled during a DAPM sequence the core
- allows drivers to start operations separately and wait for them to complete
- much more simply.
- - ASoC: fill in snd_soc_pcm_runtime.card before calling snd_soc_dai_link.init()
- The .card member of the snd_soc_pcm_runtime structure pointed to by the
- snd_soc_dai_link.init() argument used to be initialized before the
- function being called. This has changed, probably unintentionally,
- after recent refactorings. Since the function implementations are free
- to make use of this pointer, move its assignment back before the
- function is called to avoid NULL pointer dereferences.
- Created and tested on Amstrad Delta againts linux-2.6.38-rc2
- - ASoC: Fix module refcount for auxiliary devices
- Commit f6c2ed5 "ASoC: Fix the device references to codec and platform drivers"
- moved codec driver refcount increments from soc_bind_dai_link into
- soc_probe_codec.
- However, the commit didn't remove try_module_get from soc_probe_aux_dev so
- the auxiliary device reference counts are incremented twice as the
- soc_probe_codec is called from soc_probe_aux_dev too.
SoC MXS
- - Add missing build-stub for soc/mxs/*
- - ASoC: mxs-saif: convert to clk_prepare/clk_unprepare
- The patch converts mxs-saif driver to clk_prepare/clk_unprepare by
- using helper functions clk_prepare_enable/clk_disable_unprepare.
- - ASoC: mxs-saif: remove function in platform_data
- Add master_mode and master_id in platfrom_data since it's board
- specific and board knows it.
- Then we can remove the function pointer in platfrom_data to make
- the driver more devicetree friendly.
- - ASoC: mxs: Add appropriate MODULE_ALIAS()
- - ASoC: mxs: Add missing MODULE_LICENSE("GPL")
- The sound driver refuses to load as module, because of the missing
- MODULE_LICENSE("GPL").
- The file header indicates that the driver is indeed published under
- the GPL.
- - ASoC: Convert mxs directory to module_platform_driver
- Factor out some boilerplate code.
- - ASoC: mxs: Add .owner to struct snd_soc_card
- Add missing .owner of struct snd_soc_card. This prevents the module from being
- removed from underneath its users.
- - sound: Revert "ASoC: mxs: correct 'direction' of device_prep_dma_cyclic"
- This reverts commit dbec3b30a601791717bc5bb827e210c3b5d6e067 as it
- should never have been applied to the ASoC tree at all, let alone 3.2.
- - ASoC: mxs: correct 'direction' of device_prep_dma_cyclic
- The commit 49920bc (dmaengine: add new enum dma_transfer_direction)
- changes the type of parameter 'direction' of device_prep_dma_cyclic
- from dma_data_direction to dma_transfer_direction.
- - ASoC: mxs: Add appropriate MODULE_ALIAS()
- - ASoC: mxs: Add missing MODULE_LICENSE("GPL")
- The sound driver refuses to load as module, because of the missing
- MODULE_LICENSE("GPL").
- The file header indicates that the driver is indeed published under
- the GPL.
- - ASoC: keep pointer to resource so it can be freed
- Add a new variable for storing resources accessed subsequent to the one
- accessed using request_mem_region, so the one accessed using
- request_mem_region can be released if needed.
- The resource variable names are also changed to be more descriptive.
- This code is also missing some calls to iounmap.
- The semantic match that finds this problem is as follows:
- (http://coccinelle.lip6.fr/)
- // <smpl>
- @r@
- expression E, E1;
- identifier f;
- statement S1,S2,S3;
- @@
- if (E == NULL)
- {
- ... when != if (E == NULL || ...) S1 else S2
- when != E = E1
- *E->f
- ... when any
- return ...;
- }
- else S3
- // </smpl>
- - ASoC: mxs-saif: add record function
- 1. add different clkmux mode handling
- SAIF can use two instances to implement full duplex (playback &
- recording) and record saif may work on EXTMASTER mode which is
- using other saif's BITCLK&LRCLK.
- The clkmux mode could be set in pdata->init() in mach-specific code.
- For generic saif driver, it only needs to know who is his master
- and the master id is also provided in mach-specific code.
- 2. support playback and capture simutaneously however the sample
- rates can not be different due to hw limitation.
- - ASoC: mxs-sgtl5000: add record function
- - sound/soc/mxs/mxs-saif.c: add missing kfree
- Move the test on pdev->id before the kzalloc to avoid requiring kfree when
- the test fails. This fix was suggested by Wolfram Sang.
- A simplified version of the semantic match that finds this problem is as
- follows: (http://coccinelle.lip6.fr/)
- // <smpl>
- @@
- identifier x;
- expression E1!=0,E2,E3,E4;
- statement S;
- iterator I;
- @@
- (
- if (...) { ... when != kfree(x)
- when != x = E3
- when != E3 = x
- * return ...;
- }
- ... when != x = E2
- when != I(...,x,...) S
- if (...) { ... when != x = E4
- kfree(x); ... return ...; }
- )
- // </smpl>
- Reviewed-by: Wolfram Sang <w.sang@pengutronix.de>
- - ASoC: mxs-saif: clear clk gate first before register setting
- Saif needs clear clk gate first before writing registers or the write
- will not success.
- The original xx_get_mclk function clear clk gate after mclk setting
- that may cause the former mclk setting unwork, then the real output
- mclk maybe inaccurate.
- Placing the clear before setting mclk to avoid such an issue.
- We also have to clear clk gate in startup instead of in prepare function.
- - ASoC: mxs: add mxs-sgtl5000 machine driver
- The driver only supports playback firstly.
- For recording, as we have to use two saif instances to implement full
- duplex (playback & recording) due to hardware limitation, we need to
- figure out a good design to fit in ASoC.
- Tested-by: Wolfram Sang <w.sang@pengutronix.de>
- - ASoC: mxs: add mxs-pcm driver
- Tested-by: Wolfram Sang <w.sang@pengutronix.de>
- - ASoC: mxs: add mxs-saif driver
- Tested-by: Wolfram Sang <w.sang@pengutronix.de>
- - ASoC: mxs: add asoc configuration files
- Tested-by: Wolfram Sang <w.sang@pengutronix.de>
SoC Marvell Kirkwood
- - ARM: Orion: Get address map from plat-orion instead of via platform_data
- Use an getter function in plat-orion/addr-map.c to get the address map
- structure, rather than pass it to drivers in the platform_data
- structures. When the drivers are built for none orion platforms, a
- dummy function is provided instead which returns NULL.
- Tested-by: Michael Walle <michael@walle.cc>
- - ASoC: Convert kirkwood-t5325 to table based DAPM init
- - ASoC: Use dai_fmt in kirkwood-t5325 machine driver
- - ASoC: Use dai_fmt in kirkwood-openrd machine driver
- - ASoC: Fix build error in sound/soc/kirkwood/kirkwood-i2s.c
- Since commit db33f4de "ARM: Orion: Remove address map info from all platform data structures",
- the dram is removed from struct kirkwood_asoc_platform_data.
- This patch fixes below build error:
- CC sound/soc/kirkwood/kirkwood-i2s.o
- sound/soc/kirkwood/kirkwood-i2s.c: In function 'kirkwood_i2s_dev_probe':
- sound/soc/kirkwood/kirkwood-i2s.c:444: error: 'struct kirkwood_asoc_platform_data' has no member named 'dram'
- sound/soc/kirkwood/kirkwood-i2s.c:450: error: 'struct kirkwood_asoc_platform_data' has no member named 'dram'
- make[3]: *** [sound/soc/kirkwood/kirkwood-i2s.o] Error 1
- make[2]: *** [sound/soc/kirkwood] Error 2
- make[1]: *** [sound/soc] Error 2
- make: *** [sound] Error 2
- - ASoC: kirkwood: Add .owner to struct snd_soc_card
- Add missing .owner of struct snd_soc_card. This prevents the module from being
- removed from underneath its users.
- Reported-by: Lothar Waßmann <LW@KARO-electronics.de>
- - ASoC: Convert kirkwood directory to module_platform_driver
- Factor out some boilerplate code.
- - ASoC: kirkwood: Make SND_KIRKWOOD_SOC_OPENRD and SND_KIRKWOOD_SOC_T5325 depend on I2C
- SND_KIRKWOOD_SOC_T5325 selects SND_SOC_ALC5623, but SND_SOC_ALC5623 needs
- CONFIG_I2C. So we need to make SND_KIRKWOOD_SOC_T5325 depend on I2C,
- otherwise I got below build error if CONFIG_I2C is not selected.
- CC sound/soc/codecs/alc5623.o
- sound/soc/codecs/alc5623.c: In function 'alc5623_i2c_probe':
- sound/soc/codecs/alc5623.c:1002: error: implicit declaration of function 'i2c_smbus_read_word_data'
- sound/soc/codecs/alc5623.c:1009: error: implicit declaration of function 'i2c_smbus_read_byte_data'
- sound/soc/codecs/alc5623.c: In function 'alc5623_modinit':
- sound/soc/codecs/alc5623.c:1096: error: implicit declaration of function 'i2c_add_driver'
- sound/soc/codecs/alc5623.c: In function 'alc5623_modexit':
- sound/soc/codecs/alc5623.c:1108: error: implicit declaration of function 'i2c_del_driver'
- make[3]: *** [sound/soc/codecs/alc5623.o] Error 1
- make[2]: *** [sound/soc/codecs] Error 2
- make[1]: *** [sound/soc] Error 2
- make: *** [sound] Error 2
- Also fix the same issue for SND_KIRKWOOD_SOC_OPENRD.
- - ASoC: kirkwood-i2s: Add __devexit_p at necessary place
- According to the comments in include/linux/init.h:
- "Pointers to __devexit functions must use __devexit_p(function_name), the
- wrapper will insert either the function_name or NULL, depending on the config
- options."
- We have __devexit annotation for kirkwood_i2s_dev_remove(), thus add __devexit_p
- at necessary place.
- - ASoC: Fix trivial build regression in Kirkwood I2S
- A fix merged in 3.1-rc2 introduced a small regression, this should get it
- to build again.
- - sound/soc/kirkwood/kirkwood-i2s.c: add missing kfree
- Adjust the goto to jump to the error handling code that includes kfree.
- A simplified version of the semantic match that finds this problem is as
- follows: (http://coccinelle.lip6.fr/)
- // <smpl>
- @@
- identifier x;
- expression E1!=0,E2,E3,E4;
- statement S;
- iterator I;
- @@
- (
- if (...) { ... when != kfree(x)
- when != x = E3
- when != E3 = x
- * return ...;
- }
- ... when != x = E2
- when != I(...,x,...) S
- if (...) { ... when != x = E4
- kfree(x); ... return ...; }
- )
- // </smpl>
SoC NVIDIA Tegra
- - ASoC: tegra: Add .owner to struct snd_soc_card
- Missed .owner of struct snd_soc_card will prevent the module from being
- removed from underneath its users.
- Reported-by: Lothar Waßmann <LW@KARO-electronics.de>
- - ASoC: Tegra+WM8903 machine: Add device tree binding
- This driver is parameterized in two ways:
- a) Platform data, which supplies the set of GPIOs used by the driver.
- These GPIOs can now be parsed out of device tree.
- b) Machine-specific DAPM route arrays embedded into the ASoC machine
- driver itself. Historically, the driver picks the appropriate array
- to use using machine_is_*(). The driver now requires this array to
- be parsed from device tree when instantiated through device tree,
- using the core ASoC support for this parsing.
- Based on work by John Bonesio, but significantly reworked since then.
- - ASoC: Tegra machine ASoC driver for boards using ALC5332 codec
- At this stage only Toshiba AC100/Dynabook supported.
- - ASoC: Tegra: Move DAS configuration into DAS driver
- Move DAS routing setup into the DAS driver itself. This removes the need
- to duplicate this in each machine driver, of which we'll soon have three.
- An added advantage is that the machine drivers no longer call the Tegra20-
- specific DAS functions by name, so the machine driver no longer needs to
- be split up into Tegra20 and Tegra30 versions.
- If individual machine drivers need a different routing setup to this
- default, they can still call the DAS functions to set that up.
- Long-term, DAS will be a codec driver, and user-space will be able to
- control its routing, possibly within constraints that the machine driver
- sets up. Configuring the DAS routing from the DAS driver is a very slight
- move in that direction.
- - ASoC: Tegra I2S: Add device tree binding
- - ASoC: Convert tegra_spdif to use module_platform_driver()
- Use the module_platform_driver() macro which makes
- the code smaller and a bit simpler.
- - ASoC: Convert WM8903 MICBIAS to a supply widget
- Also rename it to MICBIAS to reflect the pin name and help any out of tree
- users notice the change.
- - ASoC: TrimSlice machine: Set the new fully_routed flag
- Set card.fully_routed to request the ASoC core calculated unused codec
- pins, and call snd_soc_dapm_nc_pin() for them. Remove the open-coded
- calls.
- - ASoC: Tegra+WM903 machine: Set the new fully_routed flag
- Set card.fully_routed to request the ASoC core calculated unused codec
- pins, and call snd_soc_dapm_nc_pin() for them. Remove the open-coded
- calls.
- - ASoC: Tegra I2S: Remove dependency on pdev->id
- When devices are instantiated from device-tree, pdev->id is set to -1.
- Rework the driver so it doesn't depend on the ID.
- Tegra I2S instantiated from board files are configured with pdev
- name "tegra-i2s" and ID 0 or 1. The driver core then names the
- device "tegra-i2s.0" or "tegra-i2s.1". This is not changing.
- When a device is instantiated from device-tree, it will have
- pdev->name="" and pdev->id=-1. For this reason, the pdev->id value is
- not something we can rely on.
- This patch doesn't actually change any names though:
- When a device is instantiated from device-tree, the overall device name
- will be "${unit_address}.${node_name}". This causes issues such as
- clk_get() failures due to lack of a device-name match. To solve that,
- AUXDATA was invented, to force a specific device name, thus allowing
- dev_name() to return the same as the non-device-tree case. Tegra
- currently uses AUXDATA for the I2S controllers. Eventually, AUXDATA will
- go away, most likely replaced by phandle-based references within the
- device tree.
- - ASoC: Tegra TrimSlice machine: Use devm_ APIs and module_platform_driver
- module_platform_driver saves some boiler-plate code.
- The devm_ APIs remove the need to manually clean up allocations,
- thus removing some code.
- - ASoC: Tegra+WM8903 machine: Use devm_ APIs and module_platform_driver
- module_platform_driver saves some boiler-plate code.
- The devm_ APIs remove the need to manually clean up allocations,
- thus removing some code.
- - ASoC: Tegra DAS: Add device tree binding
- - ASoC: Tegra I2S: Use devm_ APIs and module_platform_driver
- module_platform_drive saves some boiler-plate code.
- The devm_ APIs remove the need to manually clean up allocations,
- thus removing some code.
- - ASoC: Tegra: Move DAS configuration into machine drivers
- This removes potentially machine-specific routing knowledge from the
- I2S driverinto the machine drivers, which is better equipped to know
- what the appropriate routing configuration is.
- - ASoC: Tegra DAS: Use devm_ APIs and module_platform_driver
- module_platform_drive saves some boiler-plate code.
- The devm_ APIs remove the need to manually clean up allocations,
- thus removing some code.
- - ASoC: Tegra PCM: Use module_platform_driver
- This saves some boiler-plate code.
- - ASoC: Tegra: sparse cleanup
- Fixes the following sparse warnings:
- sound/soc/tegra/tegra_das.c:215:8: warning: Using plain integer as NULL pointer
- sound/soc/tegra/tegra_das.c:237:8: warning: Using plain integer as NULL pointer
- sound/soc/tegra/tegra_pcm.c:370:32: warning: symbol 'tegra_pcm_platform' was not declared. Should it be static?
- - ASoC: Remove unused srate variable in tegra_spdif_hw_params
- - ASoC: tegra: Staticise tegra_i2s_dai and tegra_spdif_dai
- - ASoC: Tegra: wm8903 machine driver: Drop Ventana support
- Board file support for Ventana is not yet mainlined, and probably won't
- ever be given the move to Device-Tree. Consequently, the Ventana entry
- is being removed from arch/arm/tools/mach-types in the next merge window,
- since it was registered over a year ago.
- This will also remove function machine_is_ventana(), which is used by
- the ASoC Tegra WM8903 machine driver. This will cause compilation
- failures. Drop Ventana support to resolve this.
- Hopefully, in the not-too-distant future, tegra_wm8903.c will be able to
- configure itself from Device-Tree, and hence we'll be able to re-instate
- Ventana support just by creating a .dts file for the board.
- Also note that Aebl support is in a similar boat. However, that board
- isn't scheduled for deprecation for at least another 5 months, and
- perhaps we will have completely removed non-Device-Tree support from
- tegra_wm8903.c by then and/or adjusted mach-types policy.
- - ASoC: Tegra: wm8903 machine driver: Allow re-insertion of module
- Two issues were preventing module snd-soc-tegra-wm8903.ko from being
- removed and re-inserted:
- a) The speaker-enable GPIO is hosted by the WM8903 chip. This GPIO must
- be freed before snd_soc_unregister_card() is called, because that
- triggers wm8903.c:wm8903_remove(), which calls gpiochip_remove(), which
- then fails if any of the GPIOs are in use. To solve this, free all GPIOs
- first, so the code doesn't care where they come from.
- b) We need to call snd_soc_jack_free_gpios() to match the call to
- snd_soc_jack_add_gpios() during initialization. Without this, the
- call to snd_soc_jack_add_gpios() fails during any subsequent modprobe
- and initialization, since the GPIO and IRQ are already registered. In
- turn, this causes the headphone state not to be monitored, so the
- headphone is assumed not to be plugged in, and the audio path to it is
- never enabled.
- - ASoC: Tegra: tegra_pcm_deallocate_dma_buffer: Don't OOPS
- Not all PCM devices have all sub-streams. Specifically, the SPDIF driver
- only supports playback and hence has no capture substream. Check whether
- a substream exists before dereferencing it, when de-allocating DMA
- buffers in tegra_pcm_deallocate_dma_buffer.
- - ASoC: Tegra: Implement SPDIF CPU DAI
- This is a minimal driver for the Tegra SPDIF controller.
- In hardware, the SPDIF output signal is always routed to any active HDMI
- display controllers, and may also be routed to external pins on Tegra
- using the pinmux.
- - ASoC: Tegra: I2S: s/clk_get_sys/clk_get/
- The clock needed by the I2S driver is associated with the I2S device name
- in the standard fashion. Hence, use clk_get(dev) instead of clk_get_sys(clk_name).
- - ASoC: Tegra: I2S: Ensure clock is enabled when writing regs
- The I2S controller needs a clock to respond to register writes. Without
- this, register writes will at worst hang the CPU. In practice, I've only
- observed writes being dropped.
- Luckily, the dropped register writes historically had no effect:
- TEGRA_I2S_TIMING: The value we wrote was the reset default.
- TEGRA_I2S_FIFO_SCR: The default was for the FIFOs to request more data
- when one slot was empty. The requested value was for the FIFOs to request
- when four slots were empty. The DMA controller in the mainline kernel is
- configured to burst a single entry at a time into the FIFO, hence there
- was no issue. The only negative effect was on bus efficiency losses due
- to an increased number of arbitration attempts.
- However, in various non-upstream changes, the DMA controller now bursts
- four entries at a time into the FIFO. If there is only space for one
- entry, the data is simply dropped. In practice, this resulted in 3/4 of
- samples being dropped, and playback at 4x the expected rate and pitch.
- By fixing the clocking issue, this is solved.
- - soc/tegra/Kconfig - add missing depends on MACH_HAS_SND_SOC_TEGRA_WM8903
- Merge synchronization fix.
- - ASoC: Remove default settings from Tegra Kconfig
- There needs to be a strong reason for overriding the Kconfig default.
- - ASoC: Tegra: Enable Kaen HP_MUTE at boot
- We want the default state of the HP_MUTE signal to be asserted, so that
- the headphones are muted before the first audio playback. Without this,
- the headphones are left unmuted until shortly after the first audio
- playback completes.
- - ASoC: tegra: TrimSlice machine support
- - ASoC: Tegra: wm8903: s/code/data/ for control/widget/maps
- Replace calls to a variety of registration functions by updating
- struct snd_soc_card snd_soc_tegra_wm8903 to directly point at the
- various control/widget/map tables instead. The ASoC core now
- performs any required registration based on these data fields.
- (Applying Mark's TrimSlice review comments to the existing driver)
- - ASoC: Tegra: Retrieve card from DAPM context not codec
- Card widgets are created in the card's DAPM context, not any codec's DAPM
- context. Hence, w->codec==NULL. Instead, find the card from the widget
- through the DAPM context of the widget, not the codec of the widget.
- - ASoC: Tegra: Don't return mclk_changed from utils_set_rate
- Only the clock programming code needs to know whether the clocks changed,
- and that is encapsulated within tegra_asoc_utils_set_rate(). The machine
- driver's call to snd_soc_dai_set_sysclk(codec_dai, ...) is safe
- irrespective of whether the clocks changed.
- (Applying Mark's TrimSlice review comments to the existing driver)
- - ASoC: Tegra: wm8903: Remove redundant drvdata clears
- When the driver is not initialized/registered, nothing should be touching
- these fields anyway, so there's no point clearing them out.
- (Applying Mark's TrimSlice review comments to the existing driver)
- - ASoC: Tegra: wm8903 probe: Don't call machine_is_*()
- This machine driver is a platform driver, and hence will only be
- instantiated on the correct machines. Hence, there is no need to
- check the current machine during probe.
- (Applying Mark's TrimSlice review comments to the existing driver)
- - ASoC: Tegra: Support more boards
- * Ventana is identical to Harmony.
- * Seaboard, Kaen, and Aebl are all pretty similar, mainly with slightly
- different sets of GPIOs, and slightly different WM8903 pin connectivity.
- - ASoC: Tegra: Don't store snd_soc_jack_gpio in an array
- Storing the struct in an array makes the assignments to the GPIO member a
- little non-obvious, and is pointless when there's only a single GPIO.
- (I thought I fixed this during the review cycle when first submitting this
- driver, but I guess I overlooked that)
- - ASoC: Tegra: Rename Kconfig SND_TEGRA_SOC_* to SND_SOC_TEGRA_*
- The previous commit renames SND_TEGRA_SOC_HARMONY to SND_TEGRA_SOC_WM8903.
- While we're breaking people's .config files, rename all Tegra/SOC-related
- Kconfig variables to be more consistent with at least the core codec
- variables. Note that there exist machines that name their variables both
- ways.
- - ASoC: Tegra: Rename harmony.c to tegra_wm8903.c
- Soon, this machine driver will be updated to handle a number of Tegra boards
- using the WM8903 codec. Rename the file in advance to reflect this.
- Fix the content of tegra_wm8903.c to match the rename; replace references
- to Harmony board with something more generic.
- * s/struct tegra_harmony/struct tegra_wm8903/
- * s/harmony/machine/ # variable name
- * Similar rename for some functions
- * Similar comment fix
- * Similar MODULE_DESCRIPTION fix
- - ASoC: Tegra: Fix compile when debugfs not enabled
- The prototype of the inline dummy version of tegra_i2s_debug_add
- was not consistent with the real version.
- Reported-by: Rhyland-Klein <rklein@nvidia.com>
- - ARM: Tegra: select MACH_HAS_SND_SOC_TEGRA_WM8903
- CONFIG_SND_SOC_TEGRA_WM8903 is useful for many Tegra boards. To avoid the
- ASoC tegra/Kconfig enumerating them all, instead have the Tegra machine
- Kconfig select MACH_HAS_SND_SOC_TEGRA_WM8903 where appropriate, and have
- SND_SOC_TEGRA_WM8903 depend on this.
- [Redid ASoC diff so it applies. -- broonie]
- - ASoC: Tegra: Suspend/resume support
- ASoC machine drivers that are their own platform_driver (as opposed to
- those using the soc-audio platform_driver) need to explicitly set up
- power-management operation callbacks.
- To avoid cut/paste, snd_soc_pm_ops also needs to be exported.
- - ASoC: Tegra: Fix error handling in DMA channel alloc
- tegra_dma_allocate_channel() returns NULL on errors, not an error pointer.
- - ASoC: Tegra: Move utilities to separate module
- The utilities will be required by every machine driver. Including the
- utility object directly into every machine driver causes a build failure
- if the modules are actually built into the kernel, since each will define
- the symbols exported by the utility file. Solve this by moving the
- utility object into a separate module.
- - ASoC: Tegra: Add MODULE_ALIAS
- With the appropriate MODULE_ALIAS in place, the audio modules will be
- automatically loaded; there is no longer a need for manual modprobes.
- - ASoC: Tegra: Harmony: Explicitly set mic enables
- Harmony has both an external mic (a regular mic jack) and an internal mic
- (a 0.1" two-pin header on the board).
- The external mic is connected to the WM8903's IN1L pin, and is supported
- by the current driver.
- The internal mic is connected to the WM8903's IN1R pin, and is not supported
- by the current driver.
- It appears that no Harmony systems were shipped with any internal mic
- connected; users were expected to provide their own. This makes the
- internal mic connection less interesting.
- The WM8903's Mic Bias signal is used for both of these mics. For each mic,
- a GPIO drives a transistor which gates whether the mic bias signal is
- actively connected to that mic, or isolated from it.
- The dual use of the mic bias for both mics makes a general-purpose complete
- implementation of mic detection using the mic bias complex. So, for
- simplicity, the internal mic is currently ignored by the driver.
- This patch configures the relevant GPIOs to enable the mic bias connection
- to the external mic, and disable the mic bias connection to the internal
- mic. Note that in practice, this is the default state if these GPIOs aren't
- configured.
- - ASoC: Harmony: Call snd_soc_dapm_nc_pin
- - ASoC: Tegra: Harmony: Implement mic detection
- * Add jack definition for mic jack
- * Request wm8903 to enable mic detection
- * Force mic bias on, since it's required for mic detection
- - ASoC: Remove redundant -codec from WM8903 driver name
- It causes noisy -codecs to appear in things like .codec_name.
- - ASoC: Tegra: Harmony: Add switch control for speaker
- - ASoC: Tegra: Harmony: Add headphone jack detection
- - ASoC: Tegra: Harmony: Remove redundant !!
- gpio_set_value* should accept logic values not just 0 or 1. The WM8903 GPIO
- driver has been fixed to work this way, so remove the redundant !!
- previously required when it didn't accept values >1.
- - ASoC: Tegra: I2S: Use dev_err not pr_err
- - ASoC: Tegra: utils: Don't use global variables
- Instead, have the machine driver provide storage for the utility data
- somehow.
- For Harmony in particular, store this within struct tegra_harmony, itself
- referenced by snd_soc_card's drvdata.
- - ASoC: Tegra: Harmony: Use dev_err not pr_err
- - ASoC: Tegra: Harmony: Fix indentation issue.
- Indent with TABs not spaces.
- - ASoC: Tegra: Harmony: Support the internal speaker
- Add DAPM widget definitions for the internal speaker paths. Currently, this
- path is always enabled while playback is active.
- Add code to control the speaker amplifier GPIO.
- The GPIO is requested during _init, since that's the first time it is
- guaranteed that the WM8903 module is loaded, probed, and hence has exported
- its GPIO chip.
- - ASoC: Tegra: Harmony: Don't use soc-audio platform device
- Previously, snd-soc-tegra-harmony internally instantiated a platform device
- object whenever the module was loaded. Instead, switch to a more typical model
- where arch/arm/mach-tegra defines a platform device, and snd-soc-tegra-harmony
- acts as a driver for such a platform device.
- Define a new struct tegra_harmony to store driver data in the future.
SoC Nuvoton NUC900
- - upstream sync merge fix
- - ASoC: mxs: Add appropriate MODULE_ALIAS()
- - ASoC: nuc900: Add .owner to struct snd_soc_card
- Add missing .owner of struct snd_soc_card. This prevents the module from being
- removed from underneath its users.
- Reported-by: Lothar Waßmann <LW@KARO-electronics.de>
- - ASoC: Convert nuc900 directory to module_platform_driver
- Factor out some boilerplate code.
- - ARM: 7175/1: add subname parameter to mfp_set_groupg callers
- commit 798681bf "ARM: 7158/1: add new MFP implement for NUC900"
- adds subname parameter for mfp_set_groupg.
- Thus add subname parameter to the callers.
- - ASoC: Staticise nuc900_dma_getposition()
- It is not used outside this driver so no need to make the symbol global.
- - ASoC: nuc900-pcm: remove unused variable 'dai'
- Remove unused variable 'dai' to eliminate below warning.
- CC sound/soc/nuc900/nuc900-pcm.o
- sound/soc/nuc900/nuc900-pcm.c: In function 'nuc900_dma_new':
- sound/soc/nuc900/nuc900-pcm.c:321: warning: unused variable 'dai'
- - ASoC: add missing clk_put to nuc900-ac97
- This goto is after the call to clk_get, so it should go to the label that
- includes a call to clk_put.
- A simplified version of the semantic match that finds this problem is as
- follows: (http://coccinelle.lip6.fr/)
- // <smpl>
- @r exists@
- expression e1,e2;
- statement S;
- @@
- e1 = clk_get@p1(...);
- ... when != e1 = e2
- when != clk_put(e1)
- when any
- if (...) { ... when != clk_put(e1)
- when != if (...) { ... clk_put(e1) ... }
- * return@p3 ...;
- } else S
- // </smpl>
SoC PXA2xx 88PM860x Tavor EVB3
- - ASoC: Use dai_fmt in tavorevb3 machine driver
- - ASoC: Convert tavorevb3 to table based DAPM init
- Also remove a unsued ret variable to silence the build warning.
SoC PXA2xx Aeronix Zipit Z2
- - ASoC: Convert z2 to table based DAPM init
- - ASoC: Use dai_fmt in z2 machine driver
- - ASoC: Remove redundant -codec from WM8750
- - ASoC: PXA: Z2: Fix codec pin name
- MONO was renamed to MONO1.
- - ASoC: PXA: z2: Mute internal speaker when headphones are connected
SoC PXA2xx Corgi
- - ASoC: pxa: Convert corgi to use snd_soc_register_card()
- Use snd_soc_register_card() instead of creating a "soc-audio" platform device.
- - ASoC: Convert corgi to table based DAPM and control init
- - ASoC: Use dai_fmt in corgi machine driver
- - ASoC: pxa: Add .owner to struct snd_soc_card
- Missed .owner of struct snd_soc_card will prevent the module from being
- removed from underneath its users.
- Reported-by: Lothar Waßmann <LW@KARO-electronics.de>
- - ASoC: Fix CODEC device name for Corgi
- Got typoed in the multi-component changes.
SoC PXA2xx E740
- - ASoC: pxa: Add .owner to struct snd_soc_card
- Missed .owner of struct snd_soc_card will prevent the module from being
- removed from underneath its users.
- Reported-by: Lothar Waßmann <LW@KARO-electronics.de>
- - ASoC: pxa: Convert e740_wm9705 to use snd_soc_register_card()
- Use snd_soc_register_card() instead of creating a "soc-audio" platform device.
- - ASoC: Convert e740_wm9705 to use gpio_request_one()
- - ASoC: correct pxa AC97 DAI names
- Correct names for pxa AC97 DAI are pxa2xx-ac97 and pxa2xx-ac97-aux. Fix
- that for all PXA platforms.
SoC PXA2xx E750
- - ASoC: pxa: Add .owner to struct snd_soc_card
- Missed .owner of struct snd_soc_card will prevent the module from being
- removed from underneath its users.
- Reported-by: Lothar Waßmann <LW@KARO-electronics.de>
- - ASoC: pxa: Convert e750_wm9705 to use snd_soc_register_card()
- Use snd_soc_register_card() instead of creating a "soc-audio" platform device.
- - ASoC: Convert e750_wm9705 to use gpio_request_one()
- - ASoC: correct pxa AC97 DAI names
- Correct names for pxa AC97 DAI are pxa2xx-ac97 and pxa2xx-ac97-aux. Fix
- that for all PXA platforms.
SoC PXA2xx E800/WM9712
- - ASoC: pxa: Add .owner to struct snd_soc_card
- Missed .owner of struct snd_soc_card will prevent the module from being
- removed from underneath its users.
- Reported-by: Lothar Waßmann <LW@KARO-electronics.de>
- - ASoC: pxa: Convert e800_wm9712 to use snd_soc_register_card()
- Use snd_soc_register_card() instead of creating a "soc-audio" platform device.
- - ASoC: Convert e800_wm9712 to use gpio_request_one()
- - ASoC: Fix error handling in e800_init to free gpios
- - ASoC: correct pxa AC97 DAI names
- Correct names for pxa AC97 DAI are pxa2xx-ac97 and pxa2xx-ac97-aux. Fix
- that for all PXA platforms.
SoC PXA2xx MIOA701
- - ASoC: Convert pxa directory to module_platform_driver
- Factor out some boilerplate code.
SoC PXA2xx Poodle
- - ASoC: Use dai_fmt in poodle machine driver
- - ASoC: Convert poodle to table based DAPM and control init
- - ASoC: pxa: Convert poodle to use snd_soc_register_card()
- Use snd_soc_register_card() instead of creating a "soc-audio" platform device.
- - ASoC: pxa: Remove redundant snd_soc_dapm_sync() calls from machine drivers
- The core will sync DAPM as part of the card initialization, there is no
- need for machine drivers to do so during their setup.
SoC PXA2xx Spitz
- - ASoC: Convert spitz to table based DAPM and control init
- - ASoC: Use dai_fmt in spitz machine driver
- - ASoC: pxa: Remove redundant snd_soc_dapm_sync() calls from machine drivers
- The core will sync DAPM as part of the card initialization, there is no
- need for machine drivers to do so during their setup.
- - ASoC: Remove redundant -codec from WM8750
- - ASoC: Properly handle spitz MIC GPIO
- This patch firstly restructurizes the code a bit by getting rid of continuous
- checking for machine type in spitz_mic_bias().
- Then the patch properly requests the MIC GPIO in the spitz_init() and frees it
- in spitz_exit().
SoC PXA2xx Tosa
- - ASoC: pxa: Convert tosa to use snd_soc_register_card()
- Use snd_soc_register_card() instead of creating a "soc-audio" platform device.
- - ASoC: Replace pdev with card in machine driver probe and remove
- In order to support cards instantiated without using soc-audio remove
- the use of the platform device in the card probe() and remove() ops.
SoC PXA2xx Zylonite
- - ASoC: use a valid device for dev_err() in Zylonite
- A recent conversion has introduced references to &pdev->dev, which does
- not actually exist in all the contexts it's used in.
- Replace this with card->dev where necessary, in order to let
- the driver build again.
- - ASoC: zylonite: set .codec_dai_name in initializer
- Fix the initialization of .codec_dai_name in zylonite_dai initializer,
- do not mix it with the initialization of .codec_name which is set
- already a few lines above.
- - ASoC: Replace pdev with card in machine driver probe and remove
- In order to support cards instantiated without using soc-audio remove
- the use of the platform device in the card probe() and remove() ops.
- - ASoC: Use card rather than soc-audio device to card PM functions
- The platform device for the card is tied closely to the soc-audio
- implementation which we're currently trying to remove in favour of
- allowing cards to have their own devices. Begin removing it by
- replacing it with the card in the suspend and resume callbacks we
- give to cards, also taking the opportunity to remove the legacy
- suspend types which are currently hard coded anyway.
SoC PXA2xx saarb
- - ASoC: Convert saarb to table based DAPM init
- Also remove a unused ret variable to silence the build warning.
- - ASoC: Use dai_fmt in saarb machine driver
SoC S6000
- - ASoC: s6000: Add .owner to struct snd_soc_card
- Add missing .owner of struct snd_soc_card. This prevents the module from being
- removed from underneath its users.
- Reported-by: Lothar Waßmann <LW@KARO-electronics.de>
- - ASoC: Convert s6000 directory to module_platform_driver
- Factor out some boilerplate code.
- - ASoC: s6000-pcm: remove unused variable 'dai'
SoC SH7760 AC97
- - ASoC: sh: Add .owner to struct snd_soc_card
- Add missing .owner of struct snd_soc_card. This prevents the module from being
- removed from underneath its users.
- Reported-by: Lothar Waßmann <LW@KARO-electronics.de>
- - ASoC: Use core pm_runtime callbacks for fsi
- Now that the core holds a pm_runtime reference to the device while the
- link is active there is no need for the driver to do so.
- - ASoC: Use core pm_runtime callbacks for siu_dai
- Now that the core holds a pm_runtime reference to the device while the
- link is active there is no need for the driver to do so.
- - ASoC: Remove unused extern declarations for sh4_hac_dai and sh7760_soc_platform
- Both sh4_hac_dai and sh7760_soc_platform are changed to static
- by multi-component patch and they are not used in sh7760-ac97.c now.
- - ASoC: Convert sh directory to module_platform_driver
- Factor out some boilerplate code.
- - ASoC: fsi-ak4642: modify specification method of FSI / ak464x
- Current fsi-ak4642 was using id_entry name in order to specify
- FSI port and ak464x codec.
- But it was no sense, no flexibility.
- Platform can specify FSI/ak464x pair by this patch.
- - ASoC: fsi: add valid data position control support
- FSI2 can control valid data position, like
- package in front/back or stream mode (16bit x 2).
- But current fsi driver is assuming it was in-back.
- - ASoC: fsi: fixup compile warning
- This patch fixup below warning
- ${linux}/sound/soc/sh/fsi.c:442:3:\
- warning: passing argument 1 of '__fsi_reg_read' makes pointer\
- from integer without a cast
- ${linux}/sound/soc/sh/fsi.c:517:3: \
- warning: passing argument 1 of '__fsi_reg_write' makes pointer\
- from integer without a cast
- ${linux}/sound/soc/sh/fsi.c:663:3: \
- warning: passing argument 1 of '__fsi_reg_mask_set' makes pointer\
- from integer without a cast
- - ASoC: sh: use correct __iomem annotations
- This removes a few unnecessary type casts and avoids
- sparse warnings.
- - ASoC: Staticise sh4_ssi_dai
- - ASoC: sh: fsi-hdmi: fixup snd_soc_card name
- it shouldn't contain space letters and
- special letters like parentheses.
- aplay will be "Segmentation fault" without this patch
- special thanks to Takashi.
- - ASoC: sh: fsi-da7210: fixup snd_soc_card name
- it shouldn't contain space letters and
- special letters like parentheses.
- aplay will be "Segmentation fault" without this patch.
- special thanks to Takashi.
- - ASoC: sh: fsi-ak4642: fixup snd_soc_card name
- it shouldn't contain space letters and
- special letters like parentheses.
- aplay will be "Segmentation fault" without this patch.
- special thanks to Takashi.
- - ASoC: sh: fsi: add fsi_hw_startup/shutdown
- This patch is preparation of cleanup suspend/resume patch.
- - ASoC: sh: fsi: cleanup suspend/resume
- Current FSI driver was using saved_xxx variable for suspend/resume.
- OTOH, the start and stop of power/clock are controlled by
- fsi_hw_startup/fsi_hw_shutdown in current FSI driver.
- The all necessary registers value are set by fsi_hw_startup.
- So, if fsi_hw_shutdown is called when "suspend" is generated,
- and fsi_hw_startup is called at "resume",
- the saved_xxx are not needed.
- - ASoC: sh: fsi: remove fsi_module_init/kill
- FSIA/B ports is enabled by default when power-on,
- and current FSI is supporting RuntimePM.
- In addition, current fsi_module_init/kill doesn't care
- simultaneous playback/recorde.
- This mean FSI port control is not needed.
- This patch remove fsi_module_init/kill
- - ASoC: sh: fsi: make sure fsi_stream_push/pop access by spin lock
- fsi_stream_push/pop might be called in same time.
- This patch protect it.
- - ASoC: sh: fsi: remove pm_runtime from fsi_dai_set_fmt.
- pm_runtime_get/put_sync were used to access FSI register in fsi_dai_set_fmt
- which is called when ALSA probe.
- But this register value will disappear after pm_runtime_put_sync
- if platform is supporting RuntimePM.
- To solve this issue, this patch adds new variable for format,
- and remove pm_runtime_get/put_sync from fsi_dai_set_fmt.
- - ASoC: sh: fsi: tidyup unclear variable naming
- Some variables on this driver were a unclear naming,
- and were different unit (byte, frame, sample).
- And some functions had wrong name
- (ex. it returned "sample width" but name was "fsi_get_frame_width").
- This patch tidy-up this issue, and the minimum unit become "sample".
- Special thanks to Takashi YOSHII.
- - ASoC: sh: fsi: irq control moves to fsi_port_start/stop
- Using fsi_irq_enable/disable in fsi_port_start/stop is very natural.
- This patch is preparation of cleanup suspend/resume patch.
- - ASoC: sh: fsi: add fsi_set_master_clk
- Current FSI driver is using set_rate call back function which is for
- master mode.
- By this patch, it is used from fsi_set_master_clk.
- This patch is preparation of cleanup suspend/resume patch.
- - ASoC: sh: fsi: tidyup parameter of fsi_stream_push
- It is possible to create buff_len and period_len
- from substream->runtime.
- This patch is preparation of tidyup unclear variable naming patch.
- - ASoC: sh: fsi: Add module/port clock control function
- The FIFO of each port were always working though it was not used
- in current FSI driver.
- This patch add module/port clock control function for fixing it.
- This patch is also caring suspend/resume.
- Reviewed-by: Simon Horman <simon@horms.net>
- - ASoC: sh: fsi: add dev_pm_ops :: suspend/resume
- Current FSI driver sets important settings when probing.
- And it are not set again as long as driver is not bind again.
- This mean FSI driver will lost it from register
- if suspend/resume are happen.
- This patch save important settings for suspend/resume.
- Reviewed-by: Simon Horman <simon@horms.net>
- - ASoC: sh: fsi: add fsi_is_clk_master function
- If FSI port is clock master, it use set_rate function
- which is callback from platform,
- and it is not necessary to call it if FSI port is clock slave.
- Current FSI driver called this callback if platform provide it.
- This patch modify it.
- Reviewed-by: Simon Horman <simon@horms.net>
- - ALSA: add a module alias to the FSI driver
- This patch enables FSI driver autoloading on sh-mobile systems.
- Reviewed-by: Simon Horman <horms@verge.net.au>
- - ASoC: fsi: driver safely remove for against irq
- free_irq and pm_runtime_disable should be called before
- snd_soc_unregister_xxx
- - ASoC: fsi: modify vague PM control on probe
- - ASoC: fsi: take care in failing case of dai register
- - ASoC: sh: fsi: modify selection method of I2S/PCM/SPDIF format
- Current format selection of FSI-codecs depended on platform information for FSI,
- and chip default settings for codecs. It is not understandable/formal method.
- This patch modify FSI and FSI-codecs to use snd_soc_dai_set_fmt.
- But FSI can use I2S/PCM and SPDIF format today.
- It can be selected to I2S/PCM by snd_soc_dai_set_fmt, but can not select SPDIF.
- So, this patch change FSI platform information to have DAI/SPDIF mode.
- If platform selects DAI mode (default),
- FSI-codecs can select I2S/PCM by snd_soc_dai_set_fmt,
- and if it is SPDIF mode, FSI become SPDIF format.
- - ASoC: sh: fsi: free from NULL pointer of struct sh_fsi_platform_info
- Current FSI driver assumed master->info is not NULL.
- This patch allow NULL in master->info
- - ASoC: sh: fsi: move chan_num from fsi_stream to fsi_priv
- - ASoC: sh: fsi-hdmi: Add FSI port and HDMI selection
- This patch add platform_device_id which can control
- PortA/PortB for FSI2-HDMI from platform data.
- - ASoC: sh: fsi: Add snd_soc_dai_set_fmt support
- This patch add snd_soc_dai_ops :: set_fmt to FSI driver and
- select master/slave clock mode by snd_soc_dai_set_fmt on
- fsi-xxx.c instead of platform infomation code.
- This patch remove fsi_is_master function which is no longer needed.
- - ASoC: sh: fsi: Add fsi_get_priv_frm_dai function
- - ASoC: ak4642: add SND_SOC_DAIFMT_FORMAT support
- This patch support LEFT_J / I2S only for now
SoC Texas Instruments OMAP
- - ASoC: cx20442: add bias control over a platform provided regulator
- Now that a regulator device for controlling the codec chip reset state
- over a platform agnostic regulator API is available on the only board
- using this driver so far, extend the driver with a bias control function
- which will request virtual power to the codec chip from that virtual
- regulator, and will supersede the present implementation existing at the
- sound card level.
- Thanks to the regulator sharing mechanism, both the old (the sound card)
- and the new (the codec) implementations should coexist smoothly until
- the sound card file is updated. For this to work as expected, update the
- sound card .set_bias_level callback to not touch codec->dapm.bias_level.
- While extending the cx20442 structure, drop unused control_type member.
- Created against linxu-3.2-rc6, tested on top of patch 1/4 "ARM: OMAP1:
- ams-delta: set up a regulator over the modem reset GPIO pin".
- - ASoC: omap: Add .owner to struct snd_soc_card
- Missed .owner of struct snd_soc_card will prevent the module from being
- removed from underneath its users.
- Reported-by: Lothar Waßmann <LW@KARO-electronics.de>
- - ASoC: omap-mcbsp: Enable FIFO usage on OMAP4
- Allow McBSP FIFO configuration from ASoC dai driver
- on OMAP4 platform.
- - ASoC: Staticise rx51_aux_dev
- - ASoC: Use core pm_runtime callbacks for omap-mcpdm
- Now that the core holds a pm_runtime reference to the device while the
- link is active there is no need for the driver to do so.
- - ASoC: Use core pm_runtime callbacks for omap-dmic
- Now that the core holds a pm_runtime reference to the device while the
- link is active there is no need for the driver to do so.
- - ASoC: sdp4430: Add support for digital microphones
- OMAP4 SDP/Blaze boards have digital microphones.
- - ASoC: OMAP4: omap-dmic: Initial support for OMAP DMIC
- Add support for OMAP4 Digital Microphone interface.
- - ASoC: Convert omap directory to module_platform_driver
- Factor out some boilerplate code.
- - ASoC: sdp3430: Let core to deal with the DAPM widgets
- Pass the DAPM widgets/routes via the snd_soc_card struct
- to core.
- - ASoC: osk5912: Let core to deal with the DAPM widgets
- Pass the DAPM widgets/routes via the snd_soc_card struct
- to core. With this change we do not need the init function
- since the remaining snd_soc_dapm_enable_pin calls are
- not needed.
- - ASoC: n810: Let the core to register DAPM widgets/routes and controls
- Pass the DAPM widgets/routes and static controls via the
- snd_soc_card struct to core. In this way the machine driver
- does not need to handle the DAPM widgets/routes.
- - ASoC: am3517evm: Let core to deal with the DAPM widgets
- Pass the DAPM widgets/routes via the snd_soc_card struct
- to core. With this change we do not need the init function
- since the remaining snd_soc_dapm_enable_pin calls are
- not needed.
- - ASoC: sdp4430: No need to call dapm_pin_enable at init time
- Widgets are connected by default.
- - ASoC: sdp4430: Let core to deal with the DAPM widgets
- Pass the DAPM widgets/routes via the snd_soc_card struct
- to core.
- - ASoC: zoom2: No need to call dapm_pin_enable at init time
- Widgets are connected by default.
- - ASoC: zoom2: Let core to deal with the DAPM widgets
- Pass the DAPM widgets/routes via the snd_soc_card struct
- to core.
- - ASoC: OMAP machines: Remove soc_dapm_sync() call from init
- No need to call soc_dapm_sync at init time.
- - ASoC: fix checkpatch.pl error in omap-mcbsp
- - ASoC: omap-pcm: Fix the no period wakeup implementation
- After omap_request_dma the BLOCK_IRQ is enabled as default
- configuration for the channel.
- If we are requested for no period wakeup, we need to disable
- the BLOCK_IRQ in order to not receive any interrupts.
- - ASoC: omap: Use single hw_params callback in sdp3430 and zoom2
- There is no need to use two hw_params callbacks in sdp3430 and zoom2 as
- thet are now identical. Use instead the same snd_soc_ops structure and
- hw_params callback for both DAI links.
- - ASoC: omap: Convert bunch of machine drivers to use init time DAI format
- - ASoC: omap-mcbsp: Prepare for init time DAI format setting
- Before commit 75d9ac4 ("ASoC: Allow DAI formats to be specified in the
- dai_link") expectation for omap-mcbsp was that snd_soc_dai_set_fmt is to be
- called first in machine hw_params callback before other CPU DAI functions.
- Thus it was enough that only omap_mcbsp_dai_set_dai_fmt cleared the
- mcbsp->regs structure. [Note that this was pure convention, it's always
- been OK to set things on init -- broonie]
- Now this doesn't hold anymore since machine drivers can set the DAI format
- only once on init time and thus mcbsp->regs may get out of sync when other
- CPU DAI functions are modifying them dynamically with different values
- between the calls. Therefore clear the accessed mcbsp->regs bits and
- bitfields in other functions too.
- - ASoC: omap-mcbsp: Fix FS polarity for LEFT_J, DSP_A and DSP_B formats
- Commit 75d9ac4 ("ASoC: Allow DAI formats to be specified in the dai_link")
- changed DAI format flag values and we cannot simply invert anymore e.g.
- frame-sync with ^= SND_SOC_DAIFMT_NB_IF (which was anyway misuse) as there
- is no anymore fixed bit position for bit-clock or frame-sync inversion.
- Fix this by relying only on DAI format flag values passed to us and by not
- making any assumption on individual bit positions.
- - ASoC: sdp4430: Fix string for FM input name
- The name contains invalid valid character (/), which
- causes problems when trying to create the debugfs
- directory structure:
- ASoC: Failed to create Aux/FM Stereo In debugfs file
- - ASoC: sdp4430: Configure McPDM offset cancellation
- Based on the values from twl6040 codec (HSOTRIM L/R) we can configure
- the McPDM offset cancellation.
- - ASoC: omap-mcpdm: API to configure offset cancellation
- The offset cancellation values can be different from board to board, even
- on the same HW platform.
- Provide a way for the machine drivers to configure the McPDM offset
- cancellation.
- - ASoC: omap-mcbsp: Fix compile time warning about ambiguous ‘else’
- Fixes the following compile time warning:
- omap-mcbsp.c:519: warning: suggest explicit braces to avoid ambiguous ‘else’
- - ASoC: omap-mcpdm: Correct the supported number of channels
- OMAP4 McPDM supports 5 downlink (playback), and
- 3 uplink (capture) channels.
- - ASoC: omap-mcbsp: Do not attempt to change DAI sysclk if stream is active
- Attempt to change McBSP CLKS source while another stream is active is not
- safe after commit d135865 ("OMAP: McBSP: implement functional clock
- switching via clock framework") in 2.6.37.
- CLKS parent clock switching using clock framework have to idle the McBSP
- before switching and then activate it again. This short break can cause a
- DMA transaction error to already running stream which halts and recovers
- only by closing and restarting the stream.
- This goes more fatal after commit e2fa61d ("OMAP3: l3: Introduce
- l3-interconnect error handling driver") in 2.6.39 where l3 driver detects a
- severe timeout error and does BUG_ON().
- Fix this by not changing any configuration in omap_mcbsp_dai_set_dai_sysclk
- if the McBSP is already active. This test should have been here just from
- the beginning anyway.
- - ASoC: twl6040/sdp4430: Change legacy DAI name
- Change the legacy DAI name from "twl6040-hifi" to "twl6040-legacy" to
- be more intuitive.
- - ASoC: omap-mcpdm: Replace legacy driver
- Reasons for the replacement:
- The current driver for McPDM was developed to support the legacy mode only.
- In preparation for the ABE support the current driver stack need the be
- replaced.
- The new driver is much simpler, easier to extend, and it also fixes some of the
- issues with the old stack.
- Main changes:
- - single file for omap-mcpdm (mcpdm.c/h removed)
- - Define names for registers, bits cleaned up, prefixed
- - Full-duplex audio operation (arecord | aplay) has been fixed
- - Less code
- McPDM need to be turned off after all streams has been stopped.
- This might cause pop noise on the output, if the codec's DAC is
- still powered at this time.
- - ASoC: OMAP4: McPDM: Convert to hwmod/omap_device
- In order to probe, and operate correctly, the OMAP McPDM driver needs to
- be converted to use hwmod.
- The device name has been changed to probe the driver.
- Replace the clk_* with pm_runtime_* calls to manage the clocks correctly.
- Missing request_mem_region/release_mem_region added.
- - ASoC: omap-mcpdm: Fix threshold and dma configuration
- DMA packet_size must be configured based on the McPDM FIFO threshold
- value, number of channels.
- Due to the FIFO operation the DMA muse be configured differently for
- playback, and capture.
- At the same time fix the McPDM threshold values used for playback, and
- capture to avoid broken code.
- - ASoC: omap: Fix build errors in ams-delta
- Fix "error: too few arguments to function 'ams_delta_set_bias_level'"
- build errors in ams-delta.c that were introduced after commit d4c6005 ("ASoC:
- Add context parameter to card DAPM callbacks") by adding dapm context
- to ams_delta_set_bias_level calls.
- - ASoC: omap: Update e-mail address of Jarkko Nikula
- My gmail account got disabled and I'm not going to reopen it.
- - ASoC: twl6040: Move PLL selection to codec driver
- It is better if the selection between the Low power,
- and High performance PLL is handled within the codec
- driver, not in machine driver(s) to avoid duplicated
- code, and also to have consistent tracking of the selected
- PLL, and the resulting differences in supported sample
- rates.
- - ASoC: twl6040: Convert into TWL6040 MFD child
- Convert TWL6040 CODEC driver into a TWL6040 MFD child, it implies
- that MFD-level operations like register accesses, clock setting
- and power management are done through MFD APIs, not directly by
- CODEC driver anymore. To avoid conflicts with the other MFD child,
- vibrator registers are skipped in CODEC driver.
- - MFD: twl4030-codec -> twl4030-audio: Rename the driver
- Rename the driver, and header file from twl4030-codec to
- twl4030-audio.
- To avoid breakage change depending drivers at the same time.
- - treewide: Fix recieve/receive typos
- Just spelling fixes.
- - ASoC: OMAP4: Add HDMI Audio machine driver for OMAP4 boards
- Add machine driver for HDMI audio on OMAP4 boards. This driver is
- in charge of putting together the HDMI audio codec and the CPU DAI
- and register the HDMI sound card with ALSA.
- - ASoC: OMAP: Add CPU DAI driver for HDMI
- Addition of the HDMI CPU DAI driver for OMAP4. This driver is in
- charge of configuring DMA settings for HDMI. Also, it finds
- the HDMI video device and determines if audio playback can proceed.
- - ASoC: OMAP: Update Makefile and Kconfig for HDMI audio
- Update Makefile and Kconfig to build HDMI audio support for
- OMAP4 SDP and Panda boards.
- - omap: Remove support for omap2evm
- The board support has never been merged for it as noticed
- by Russell King <linux@arm.linux.org.uk>. So let's remove the
- related dead code.
- - ASoC: omap-mcbsp: Remove restrictive checks for cpu type
- Current checks for cpu type were too restrictive leading
- to failures for other silicons in same family.
- The problem was found while testing audio playback on
- AM37x and AM35x processors. But should exist on OMAP36xx
- as well.
- - ASoC: omap-pcm: Period wakeup disabling on OMAP2+
- Allow disabling ALSA period wakeup interrupts.
- This can only be done on OMAP2+ (2/3/4), since there
- we can chain the DMA.
- - ASoC: RX51: Update e-mail address
- - ASoC: omap-pcm: Update e-mail address
- - ASoC: omap-mcbsp: Update e-mail address
- - ASoC: omap: rx51: Enable McBSP2 sidetone
- McBSP sidetone is needed in telephony applications. McBSP sidetone is a
- configurable FIR filter that forms a loopback from McBSP input to output.
- This patch enables the McBSP2 sidetone ALSA controls so that it can be used
- on Nokia RX-51/N900.
- Sidetone feature can be tested with following commands:
- (set up codec input and output paths)
- # Enable and configure sidetone
- amixer -D hw:0 set 'McBSP2 Sidetone' on
- amixer set -D hw:0 'McBSP2 Sidetone Channel 0' 32767
- echo 32767 >/sys/devices/platform/omap-mcbsp.2/st_taps
- # Do not loop audio via CPU
- arecord -f dat >/dev/null |aplay /dev/zero
- - ASoC: McBSP: get hw params from McBSP driver
- Removed the use of macros to obtain base address and DMA channel number.
- Instead use the McBSP driver API's that passes base address and DMA
- channel number to the client driver.
- - ASoC: omap: rx51: Add FM transmitter support
- Si4713 FM transmitter on Nokia RX-51/N900 is connected to same Line out
- signals of TLV320AIC34 than TPA6130 headphone amplifier.
- This patch adds route to transmitter and "FM Transmitter" control to keep
- route active when needed.
- - ASoC: omap: rx51: Report headset insertion instead of video out cable
- It is more usefull to report headset instead of video out cable in response
- to jack insertion as this is more usual use-case and because now the headset
- feature is supported. Automatic accessory detection is not possible at the
- moment so most sensible static accessory type have to be used.
- - ASoC: omap: rx51: Add headset support
- This patch adds support for headset microphone in Nokia RX-51/N900. The mic
- signal from audio jack is routed to codec A LINE1L via two switches and the
- mic bias is coming from codec B part.
- First switch is the tv-out switch that is already supported and the second
- switch selects between voltage detection circuit and codecs. As there is
- no use for voltage detection at the moment the second switch is connected
- statically to codecs in rx51_soc_init.
- Headset can be active when control "Jack Function" is set to "Headset".
- - ASoC: omap: rx51: Use gpio_request_one to configure tvout_sel gpio
- Just slight cleanup to be sync with upcoming change.
- - omap: Start using CONFIG_SOC_OMAP
- We want to have just CONFIG_ARCH_OMAP2, 3 and 4. The rest
- are nowadays just subcategories of these.
- Search and replace the following:
- ARCH_OMAP2420 SOC_OMAP2420
- ARCH_OMAP2430 SOC_OMAP2430
- ARCH_OMAP3430 SOC_OMAP3430
- No functional changes.
- - ASoC: AM3517: Update codec name after multi-component update
- The i2c client device name (".2-001a" in this case, including
- the separator period) for the AIC23 codec on the TI AM3517-EVM
- was appended to the codec_name member of am3517evm_dai to
- resolve the names mismatch happening in soc_bind_dai_link(),
- due to which the card was not getting registered.
- - ASoC: omap: rx51: Add earphone support
- Earphone in Nokia RX-51/N900 is connected to left HP output of B part of the
- TLV320AIC34 dual codec. In RX-51 the codec A is used as a traditional codec
- and the codec B as an auxiliary device.
- Audio from codec A goes via the codec B to earphone:
- MONO_LOUT of A -> LINE2R of B (B interconnects) -> HPLOUT of B -> Earphone.
- Take earphone into use by utilizing the recent ASoC auxiliary and
- cross-device support.
- - ASoC: omap: rx51: Add stereo output support to audio jack
- Audio jack in Nokia RX-51/N900 is driven by TPA6130 headphone amplifier.
- This patch adds support for it and stereo output can be active when
- "Jack Function" == "TV-OUT" || "Headphone".
- As the TPA6130 can output very high volume levels the output is limited
- with snd_soc_limit_volume. Limiting value is found from Maemo kernel sources.
- - ASoC: Amstrad Delta: fix const related build error
- The Amstrad Delta ASoC driver used to override the digital_mute()
- callback, expected to be not provided by the on-board CX20442 CODEC
- driver, with its own implementation. While this is still posssible when
- substituting the whole empty snd_soc_dai_driver.ops member (the CX20442
- case), replacing snd_soc_dai_ops.digital_mute only is no longer correct
- after the snd_soc_dai_driver.ops member has been constified, and results
- in build error.
- Drop this actually not used code path in hope the CX20442 driver never
- provides its own snd_soc_dai_ops structure.
- Created and tested against linux-2.6.38-rc2
Soc Codec STA32X
- - ASoC: sta32x: add workaround for ESD reset issue
- sta32x resets and loses all configuration during ESD test.
- Work around by polling the CONFA register once a second
- and restore all coeffcients and registers when CONFA
- changes unexpectedly.
- - ASoC: sta32x: add platform data definition
- Add a structure for platform specific configuration and use it,
- thereby removing a few FIXMEs which marked hard-coded values.
Soc PXA2xx Imote 2
- - ASoC: Use dai_fmt in imote2 machine driver
- - ASoC: pxa: Convert imote2 to use snd_soc_register_card()
- Use snd_soc_register_card() instead of creating a "soc-audio" platform device.
Soc PXA2xx Magician
- - ASoC: Remove unused rate variable in magician_playback_hw_params
Soc PXA2xx Raumfeld
- - ASoC: Add missing platform_device_put in raumfeld_audio_init error path
- - ASoC: fix raumfeld platform
- Commit f0fba2ad (ASoC: multi-component - ASoC Multi-Component Support)
- broke support for Raumfeld platforms as it didn't take into account the
- different hardware features on individual devices.
- In particular, Raumfeld speakers have no S/PDIF output, so the members
- of the snd_soc_card struct must be set dynamically.
- - ASoC: PXA: formatting
- - ASoC: Use card rather than soc-audio device to card PM functions
- The platform device for the card is tied closely to the soc-audio
- implementation which we're currently trying to remove in favour of
- allowing cards to have their own devices. Begin removing it by
- replacing it with the card in the suspend and resume callbacks we
- give to cards, also taking the opportunity to remove the legacy
- suspend types which are currently hard coded anyway.
Soc iPAQ hx4700
- - ASoC: Use dai_fmt in hx4700 machine driver
- - ASoC: Convert pxa directory to module_platform_driver
- Factor out some boilerplate code.
- - ASoC: Fix hx4700 error handling to free gpios if snd_soc_register_card fails
- - ASoC: add iPAQ hx4700 machine driver
- AK4641 connected via I2S and I2C, jack detection via GPIO.