Detailed SoC changes v1.0.23 v1.0.24: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
m (1 revision(s)) |
(No difference)
|
Revision as of 12:35, 27 January 2011
Detailed SoC changelog between 1.0.23 and 1.0.24 releases
alsa-driver
SoC PXA2xx Core
- - arm/pxa2xx: reorgazine SSP and SPI header files
- The PXA-SPI driver relies on some files / defines which are arm specific
- and are within the ARM tree. The CE4100 SoC which is x86 has also the
- SPI core.
- This patch moves the ssp and spi files from arm/mach-pxa and plat-pxa to
- include/linux where the CE4100 can access them.
- This move got verified by building the following defconfigs:
- cm_x2xx_defconfig corgi_defconfig em_x270_defconfig ezx_defconfig
- imote2_defconfig pxa3xx_defconfig spitz_defconfig zeus_defconfig
- raumfeld_defconfig magician_defconfig
- - ASoC: fix SND_PXA2XX_LIB Kconfig warning
- Fix following warning observed when SND_PXA2XX_SOC is set and SND_ARM isn't:
- warning: (SND_PXA2XX_AC97 && SOUND && !M68K && SND && SND_ARM && ARCH_PXA ||
- SND_PXA2XX_SOC && SOUND && !M68K && SND && SND_SOC && ARCH_PXA) selects
- SND_PXA2XX_LIB which has unmet direct dependencies (SOUND && !M68K && SND &&
- SND_ARM)
- - ASoC: pxa-ssp: fix a memory leak in pxa_ssp_remove()
- The "priv" allocated in pxa_ssp_probe() should be kfreed in pxa_ssp_remove().
- - ASoC: Enable autoloading of pxa2xx CPU I2S driver with module alias
- - ASoC: remove include of pxa2xx-pcm.h in pxa2xx-ac97.c
- Fix reference to moved header file, which was unused anyway.
- This change fixes below build error:
- CC sound/soc/pxa/pxa2xx-ac97.o
- sound/soc/pxa/pxa2xx-ac97.c:27:24: error: pxa2xx-pcm.h: No such file or directory
- make[3]: *** [sound/soc/pxa/pxa2xx-ac97.o] Error 1
- make[2]: *** [sound/soc/pxa] Error 2
- make[1]: *** [sound/soc] Error 2
- make: *** [sound] Error 2
- - ASoC: add saarb machine driver for 88pm860x
- 88PM860x codec is used in Marvell saarb development board. 88PM860x codec
- is used as master mode for SSP communication. Only I2S format is supported.
- - ASoC: add tavorevb3 machine driver for 88pm860x
- - ASoC: update setting for pxa ssp slave mode
- SCFR bit is required to be always set if pxa ssp is in slave mode. This bit
- indicates clock input to SSPSCLK is only active during data transfers.
- - ASoC: fix pxa2xx-pcm.h path
- Since pxa2xx-pcm.h is removed from sound/soc/pxa, we need to update the
- path in related files.
- Tested-by: Ian Lartey <ian@opensource.wolfsonmicro.com>
- - ASoC: multi-component: Fix reference to moved header file, which was unused anyway.
- Removed #include of pxa2xx-pcm.h
- - [ARM] pxa: add namespace on ssp
- In order to prevent code ambiguous, add namespace on functions in ssp driver.
- - [ARM] pxa: remove incorrect select PXA_SSP in Kconfig
- PXA_SSP is actually used by drivers like drivers/spi/pxa2xx_spi.c and
- sound/soc/pxa/pxa-ssp.c, not by boards. Remove those incorrect 'select'
- from Kconfig and make SOC_PXA_SSP to select.
- - [ARM] pxa: move ssp into common plat-pxa
- - [ARM] pxa: merge regs-ssp.h into ssp.h
- No need to separate them as they should be together from the begining.
SoC Audio for Freecale i.MX1x i.MX2x CPUs
- - ASoC: phycore-ac97: fix resource leak
- Fix imx_phycore_init() error path and imx_phycore_exit() to properly free
- allocated resources.
- - ASoC: imx-ssi: fix resource leak
- Fix imx_ssi_probe() error path and imx_ssi_remove() to properly free
- allocated resources.
- - ASoC: i.MX: we can do mono
- Whether we can do mono or not depends on the codec. No need
- to limit this in the ssi driver.
- - phycore-ac97: add ac97 to cardname
- We have different codecs on the pcm038 (ac97 wm9712 and mc13783).
- To make alsactl restore work correctly these should have different
- names.
- - ASoC i.MX: switch to new DMA api
- - ASoC i.MX: register dma audio device
- We have two different transfer methods on i.MX: FIQ and DMA. Since
- the merge of the ASoC multicomponent support the DMA device is lost.
- Add it again. Also, imx_ssi_dai_probe has to be called for !AC97
- aswell.
- - ASoC i.MX phycore ac97: remove unnecessary includes
- - ASoC i.MX eukrea tlv320: Fix for multicomponent
- - ASoC: Remove -dai suffix from i.MX SSI driver
- While it is a generic serial port in practice the i.MX SSI is only supported
- in Linux as an audio port (the i.MX has dedicated SPI controllers and so on).
- This means we don't need to disambiguate against other uses of the hardware
- and so can drop the -dai suffix from the driver name which fixes merge
- issues with the i.MX tree in -next.
- - ASoC: i.MX ssi: use SSI_STCCR in synchronous mode
- In synchronous mode the SSI_SRCCR values are ignored. Instead
- SSI_STCCR must be used for both receiving and transmitting.
- - ASoC: Fix for changed Eureka Kconfig symbol names
- - fix comment typos concerning "challenge"
- - ASoC: eukrea-tlv320: add support for cpuimx35sd
- - ASoC: imx: check kzalloc() result and fix memory leak
- If kzalloc() fails we must exit with -ENOMEM. Also we must free
- allocated runtime->private_data on error as it would be lost on next
- call to snd_imx_open().
- - ASoC: imx: check kzalloc() result and fix memory leak
- If kzalloc() fails we must exit with -ENOMEM. Also we must free
- allocated runtime->private_data on error as it would be lost on next
- call to snd_imx_open().
- - ASoC: clean i.MX Kconfig
- - ASoC: eukrea-tlv320: add support for our i.MX25 board
- * tdm slot has to be configured to get sound working on i.MX25
- - ASoC: imx: add eukrea-tlv320
- Add the necessary files to support the TLV320AIC23B wired in I2S
- on our i.MX platforms.
- - ASoC: imx-ssi.c: add new choices to platform configuration
- * introduce 3 new flags to allow a more detailed configuration
- of the SSI link :
- IMX_SSI_NET : enable Network Mode
- IMX_SSI_SYN : enable Synchronous Mode
- IMX_SSI_USE_I2S_SLAVE : enable I2S Slave Mode
- * new platform can use these settings without breaking actual
- platforms.
- - ASoC: MX31ads sound support should depend on MACH_MX31ADS_WM1133_EV1
- - ASoC: Add missing Kconfig entry for Phytec boards
- - ASoC: Update Freescale i.MX SSI driver DMA parameter handling
- This updates the i.MX SSI driver to make it compatible with the ASoC tree
- following the move of DMA parameters from the DAI to the audio substream
- object.
- - ASoC: imx-ssi: do not call hrtimer_disable in trigger function
- Doing so causes a deadlock, so just signal the timer to stop
- using an atomic variable.
- - ASoC: imx-ssi: increase minimum periods to 4
- Currently the notification of elapsed periods is not very exact.
- Increase minimum periods to 4 as suggested by Liam Girdwood.
- - ASoC: imx-ssi: Use a hrtimer in FIQ mode
- Using a regular timer results in poll times < 1 jiffie with small
- buffers, so we loaded the timer with the actual jiffie value. We can
- be more accurate using a hrtimer. Also, we have to call
- snd_pcm_period_elapsed after playing period_bytes and not
- runtime->period_size (which is in samples and not in bytes).
- - ASoC: imx-pcm-dma-mx2: restart DMA after an error
- - ASoC: imx-ssi: honor IMX_SSI_DMA flag
- When checking if we are DMA capable we have to check for the
- IMX_SSI_DMA flag which is already set from platform_data instead
- of setting it again when we want to do DMA.
SoC Audio for TXx9
- - DMAENGINE: extend the control command to include an arg
- This adds an argument to the DMAengine control function, so that
- we can later provide control commands that need some external data
- passed in through an argument akin to the ioctl() operation
- prototype.
- [dan.j.williams@intel.com: fix up some missed conversions]
- - DMAENGINE: generic slave control v2
- Convert the device_terminate_all() operation on the
- DMA engine to a generic device_control() operation
- which can now optionally support also pausing and
- resuming DMA on a certain channel. Implemented for the
- COH 901 318 DMAC as an example.
- [dan.j.williams@intel.com: update for timberdale]
- - MIPS: TXx9: Add missing MODULE_ALIAS definitions for TXx9 platform devices
- This enables autoloading of the TXx9 sound driver on RBTX4927.
- To: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
- Patchwork: http://patchwork.linux-mips.org/patch/1101/
SoC Audio for the Atmel AT32/AT91 System-on-Chip
- - ASoC: Fix codec device id format used by some dai_links
- The id part of an I2C device name is created with the "%d-%04x" format string.
- So for example for an I2C device which is connected to the adapter with the id 0
- and has its address set to 0x1a the id part of the devices name would be
- "0-001a".
- Currently some sound board drivers have the id part the codec_name field of
- their dai_link structures set as if it had been created by a "%d-0x%x" format
- string. For example "0-0x1a" instead of "0-001a".
- As a result there is no match between the codec device and the dai_link and no
- sound card is instantiated.
- This patch fixes it.
- - ASoC: Do not include soc-dapm.h
- There is no need to include soc-dapm.h since soc.h includes it.
- - ASoC: sam9g20_wm8731: fix resource leak in at91sam9g20ek_init error path
- Fix the error path to properly free allocated resources.
- - ASoC: snd-soc-afeb9260: remove unneeded platform_device_del in error path
- - ASoC: atmel: test wrong variable
- After clk_get() mclk is checked second time instead of pllb check.
- In patch v1 Jarkko Nikula noticed that PTR_ERR() is also has wrong argument.
- - Fix Atmel soc audio boards Kconfig dependency
- Add Kconfig dependency on AT91_PROGRAMMABLE_CLOCKS for the Atmel SoC
- audio SAM9G20-EK and PlayPaq boards. Fixes link errors on missing
- clk_set_parent and clk_set_rate when building without
- AT91_PROGRAMMABLE_CLOCKS.
- - ASoC: Add simplfied device registration for Atmel SSC devices
- Since the SSC is already being registered as a device under arch and
- the DMA and SSC hardware are pretty much the same provide a simplified
- device registration function for the Atmel SSC which will add the
- ASoC-specific devices within the ASoC code, parenting the SSC device
- off the actual SSC device. Also use it in the sam9g20-ek driver.
- - ASoC: Fix device name for AT91SAM9G20-EK devices
- A couple of typos in the multi-component conversion.
- - ASoC: Support non-crystal master clocks for WM8731
- Instead of unconditionally enabling the crystal oscillator on the WM8731
- only enable it when explicitly selected via set_sysclk(), allowing machine
- drivers to specify that they drive a clock into MCLK alone. This avoids
- any conflicts between the oscillator and the external MCLK source and saves
- power for systems which do not need the oscillator.
- This should also deliver a small power saving on systems using the crystal
- since the oscillator will only be enabled when the ADC or DAC is active.
- - ASoC: atmel: trivial code cleanup
- Remove break after return, it is not needed.
- - ASoC: atmel: patch for the unnecessary variable removal
- The variable 'periods' of structure 'atmel_runtime_data'
- seems no use in whole atmel alsa driver,so I make a patch
- to remove the unnecessary variable.
SoC Audio for the Samsung S3C24XX chips
- - Move to build stub soc/samsung
- - ASoC: Samsung: Rename from s3c24xx to samsung
- Finally, move the 's3c24xx' directory to 'samsung'
- - ASoC: Fix compile breakage in jz4740.c and smartq_wm8987.c
- Commit ce6120c require that soc-dapm.h cannot be included before soc.h but
- these two drivers were not checked. Fix them by including only soc.h as it
- includes soc-dapm.h.
- - ASoC: RX1950: Fix hw_params function
- Unfortunatelly, I misunderstood datasheet, and on s3c244x-iis
- when MPLLin source for master clock is selected, prescaler has
- no effect. Remove dividor calculation for 44100 rate; remove 88200
- rate at all, rx1950 can't do it.
- - ASoC: s3c24xx: Fix compilation problem for mini2440
- When make mini2440_defconfig compilation end with undefined
- references to DMA functions. There was missing selection
- for S3C2410_DMA when compile ASoC audio for S3C24xx CPU.
- Tested on mini2440 board.
- - ASoC: SAMSUNG: Add Machine driver for S/PDIF PCM audio
- This patch add S/PDIF machine driver to support S/PDIF PCM audio
- on SMDKC100, SMDKC110 and SMDKV210 boards.
- - ASoC: SAMSUNG: Add S/PDIF CPU driver
- This patch adds S/PDIF CPU driver for various Samsung SoCs.
- - Fix typo configue => configure in comments
- - ASoC: rx1950: Fix clkdiv for 16khz and 48khz
- Usage of 256 as clkdiv gives better rounding error (<1%)
- for 16khz and 48khz
- - ASoC: rx1950: remove unnecessary headers
- - ASoC: rx1950: check that machine is rx1950 in glue driver
- - ASoC: Add debug logging for s3c-ac97 resets
- Helps tracing errors further up the stack.
- - ASoC: Convert s3c-ac97 to pr_() macros
- Could use dev_() but we'd have to remember the struct device somewhere
- and it wouldn't make the logging clearer.
- - ASoC: Clean up the CODEC device as well as the board for SMDK WM9713
- Otherwise we try to re-register the CODEC device if the module is reloaded
- and sysfs becomes miserable.
- - ASoC: Clarify naming for SMDK WM9713 driver
- At least some of the systems using this device have multiple audio
- subsystems so provide some guidance to userspace about which one this
- is.
- - ASoC: Remove unneeded WM9713 header include from SMDK WM9713 driver
- - ASoC: Prototype s3c64xx_i2s_get_clock()
- So machine drivers can see the declaration.
- - ASoC: Samsung: Debug PCM snd_soc_dai_driver registration
- Each of the two PCM controllers need to be registered during probe
- with appropriate 'name' of the dai driver.
- - ASoC: Set more meaningful name for SMDK64xx WM8580 audio
- Since the SMDK64xx boards have two audio subsystems using the board
- name as the card name by itself isn't so user friendly as it might
- be.
- - ASoC: S3C: Fix PCM TXFIFO_DIPSTICK value
- This patch modify FIFO_DIPSTICK value of PCM TX FIFO to be a optimal one.
- Privious value (0x20) did not support 'Almost_full' of PCM FIFO for the DMA
- request.
- - ASoC: S3C: Fix PCM RX FIFO settings
- When PCM capture, sound recorded abnormally because of RX FIFO
- threshold settings are missing. So, This patch modify PCM RX FIFO
- setting codes same as TX.
- And for DMA, if PCM RXFIFO_DIPSTICK is not '0', it doesn't effect
- to DMA request, because DMA refer RX_FIFO_EMPTY flag as the DMA
- request.
- - ASoC: Samsung: Debug PCM platform device name
- The PCM controller platform devices are registered by the
- name 'samsung-pcm', so use the same in the CPU driver.
- - ASoC: S3C: AC97: Remove the -dai suffix
- Drop the invalid -dai suffix appended to the Samsung AC97 CPU DAI.
- - ASoC: Add HP iPAQ RX1950 support
- - ASoC: Automatically calculate clock ratio for WM8580
- Implement set_sysclk() and then rather than assuming 256fs use the
- supplied value to calculate and configure the clock ratio for the
- currently used sample rate. As a side effect we also end up
- implementing clock selection for the ADC path.
- In order to avoid confusion remove the existing set_clkdiv() based
- configuration of the clock source for the DAC and update the SMDK64xx
- driver (which is the only in-tree user of the CODEC).
- - ASoC: Add a bit of resource unwinding in the S3C IISv4 driver
- There's much more needed but this'll get us started.
- - ASoC: Add MODULE_ALIAS to Samsung DAI drivers
- - ASoC: multi-component - Add Goni sound driver
- This patch add sound support for the Goni board based on S5PV210.
- The Goni board is based on Samsung SoC(S5PV210) and include
- WM8994 codec over I2S to support sound.
- The kind of jack is below states :
- * SND_JACK_HEADPHONE
- * SND_JACK_HEADSET
- * SND_JACK_MECHANICAL
- : When TV-OUT cable is inserted on Goni board,
- the TV-OUT cable isn't connected to television.
- * SND_JACK_AVOUT
- : When TV-OUT cable is inserted on Goni board,
- the TV-OUT cable is connected to television.
- - ASoC: multi-component - Add Aquila sound driver
- This patch add sound support for the Aquila board based on S5PC110.
- The Aquila board is based on Samsung SoC(S5PC110) and include
- WM8994 codec over I2S to support sound. This uses the I2Sv4 driver
- compatible with I2Sv5 to run sound.
- The kind of jack is below states :
- * SND_JACK_HEADPHONE
- * SND_JACK_HEADSET
- * SND_JACK_MECHANICAL
- : When TV-OUT cable is inserted on Aquila board,
- the TV-OUT cable isn't connected to television.
- * SND_JACK_AVOUT
- : When TV-OUT cable is inserted on Aquila board,
- the TV-OUT cable is connected to television.
- ASoC: multi-component: SAMSUNG: Fix wrong field name on Aquila board
- This patch modify the wrong field name on Aquila board.
- - ASoC: Document CFG switch settings for SMDK6410 WM8580 usage
- Sadly these aren't soft controllable and can't be read back either :(
- - ASoC: Remove /s from widget names on SMDK64xx WM8580
- Otherwise debugfs gets upset when we try to create filenames with /
- in them.
- - sound: Remove pr_<level> uses of KERN_<level>
- - ASoC:Support Samsung SoC(S5P) in I2Sv2
- This patch modify I2Sv2 driver to support Samsung SoC(S5PV210).
- - ASoC: Invert speaker enabling behaviour in SmartQ sound driver
- The speaker was enabled when the headphone was plugged in, which isn't the
- wanted behaviour so correct this.
- - ASoC: Add SmartQ sound driver
- This adds sound support for the SmartQ board.
- The hardware consists of a S3C6410 coupled with a WM8987 over I²S. The WM8750
- driver is used for driving the WM8987, as they are register compatible.
- - ASoC: s3c: patch for the unnecessary variable 'state' removal
- The variable 'state' of structure 's3c_ac97_info' seems no use here,
- so this patch is to remove the unnecessary variable.
- - ASOC: S5PV210: Enable AC97 support
- The S5PV210 and S5PC110 has the AC97 controller same as S3C6410.
- Simply enable the options to build the drivers for S5PC110 and
- S5PV210 also.
- - ASOC: S5PC100: Enable AC97 support
- The S5PC100 has the AC97 controller same as S3C6410.
- Simply enable the options to build the drivers for
- S5PC100 also.
- - ASoC: SAMSUNG: I2S: Add bit definitions
- Define more bit definitions in the order of mainline
- support for the SoC.
- - ASoC: Allow active paths from the GSM modem while the GTA02 is suspended
- - ASoC: SMDK64XX: Switch to IISv4 CPU driver
- Switch the MACHINE driver to use IISv4 CPU dai.
- Remove BROKEN dependency now that we have proper CPU driver available.
- Also, disable build for SMDK6400, since the S3C6400 doesn't have IISv4
- controller.
- - ASoC: S3C64XX: IISv4: Add CPU driver
- Add the CPU driver for the IISv4 block found on S3C6410.
- For now, the driver is almost a copy of s3c64xx-i2s.c but
- it should diverge as more IISv4 specific stuff is added.
- - ASoC: S3C: I2S: Move set_sysclk to common code
- Now that we can specify feature of a particular controller, we can
- avoid multiple copies of same code by defining the CDCLKCON bit
- feature in controller specific code and detecting that flag in the
- code common to all controllers.
- - ASoC: S3C: I2Sv2: New field for controller feature
- In order to make s3c-i2s-v2.c manage controllers with minor
- quirks and variation in features, we define a per-block flag
- that indicates the availability/lack of a particular feature
- to the s3c-i2s-v2.c
- While adding support for new SoCs' I2S, check for the blocks
- of older SoCs that have similar feature and set the flag for
- that feature.
- - ASoC: S3C64XX: I2S: Use s3c2412 defines
- Now that the fields are defined for s3c2412, use them and avoid having
- multiple copies of same defines.
- - ASoC: S3C: I2Sv2: Unify i2s_get_clock callback
- Now that we have two callbacks s3c2412_i2s_get_clock & s3c64xx_i2s_get_clock
- doing exactly the same thing, we can define one generic s3c_i2sv2_get_clock
- and discard other two copies. Also, switch the users to make calls to the
- newly defined and generic s3c_i2sv2_get_clock
- - ASoC: S3C: I2Sv2: Discard redundant field iis_clk
- No need to keep redundant field iis_clk in s3c_i2sv2_info.
- iis_cclk and iis_pclk is all we need.
- - ASoC: S3C2412: I2S: Return correct source clock
- Until now, s3c2412_get_iisclk would return NULL since iis_clk was never
- initialized.
- Return appropriate pointer as per the selection made for source clock.
- - ASoC: S3C2412: I2S: Debug IMS field
- The IMS field of s3c2412/13 is essentially the same as that of s3c64xx.
- That is, the IISMOD[11] bit decides Master/Slave mode and IISMOD[10] bit
- selects source clock for signal generation.
- For that reason, remove improper defines for IISMOD[11:10] field mask
- and define two 1bit fields that can be set independent of each other.
- As a consequence, corresponding fields for PLAT_S3C64XX too get to use
- these new defines.
- - ASoC: S3C: I2Sv2: Move defines closer to driver
- The header for I2Sv2
- linux/arch/arm/plat-s3c/include/plat/regs-s3c2412-iis.h
- contains only controller specific definitions and nothing
- SoC specific. So, it could be moved to sound/soc/s3c24xx/
SoC Audio for the Samsung chips
- - Move to build stub soc/samsung
- - ASoC: Samsung: Fix outdated cpu_dai_name for s3c24xx i2s
- During the multi-component patch the s3c24xx i2s driver was renamed from
- "s3c24xx-i2s" to "s3c24xx-iis", while the sound board drivers were not
- updated to reflect this change as well.
- As a result there is no match between the dai_link and the i2s driver and no
- sound card is instantiated.
- This patch fixes the problem by updating the sound board drivers to use
- "s3c24xx-iis" for the cpu_dai_name.
- - ASoC: SAMSUNG: Clean-up header includes
- This patch remove including unnecessary/duplicated headers which relative
- with Samsung SoCs.
- - ASoC: SAMSUNG: Move PCM specific definitions into pcm.c
- This patch moves PCM specific definitions, they doesn't need to be
- shared, into 'pcm.c' from 'pcm.h'.
- - ASoC: SAMSUNG: Clean-up DMA header file
- This patch moves DMA specific definitions, they doesn't need to be
- shared, into 'dma.c' from 'dma.h'. And remove unnecessery definitions
- on 'dma.h'.
- - ASoC: SAMSUNG: Remove AC97 header file
- This patch moves AC97 specific definitions, they doesn't need to be shared,
- into 'ac97.c' from 'ac97.h'. This patch also remove header file, 'ac97.h',
- and remove includes on machine drivers.
- - ASoC: RX1950: Enable Mic Jack during glue driver init
- Enable Mic Jack during glue driver init, otherwise capture will not work.
- - ASoC: Change Samsung Kconfig from ASOC_ to SND_SOC_
- The rest of ASoC is using SND_SOC_ as the prefix for all the Kconfig
- symbols so do so for the new Samsung drivers too, rather than using
- ASOC_ as they currently are.
- - ASoC: SAMSUNG: Debug wrong parameter
- snd_soc_jack_new()'s first parameter was changed from snd_soc_card to
- snd_soc_codec after Multi-Component support patches. So, this patch
- fixes parameter that we missed.
- - ASoC: SMDKV310: Add I2S support
- Add ASoC machine driver for SMDKV310/C210 boards that have
- a WM8994 attached to I2S-0.
- - ASoC: SMDKV310: Enable AC97 device
- Enable AC97 audio device on SMDKV310/C210.
- - ASoC: SMDKC110: Enable I2S device
- - ASoC: SMDKV210: Enable I2S device
- - ASoC: SMDK6442: Enable I2S device
- - ASoC: SMDK6450: Enable I2S device
- - ASoC: SMDK6440: Enable I2S device
- - ASoC: SMDK_WM8580: Make I2S0 as default dai
- Since most newer SMDKs have I2S0 routed to the WM8580's Primary DAI,
- future changes can be minimized if the default CPU DAIs are set to
- 0, rather than 2.
- - ASoC: Samsung: I2S: Flush FIFO after stop
- Flush the FIFO while stopping the channel rather than starting.
- This saves time during stream start and keeps the FIFOs clean
- when the channel is idling.
- - ASoC: Samsung: Set default rclk source rate
- Since the rclk_srcrate is cleared upon startup, it should be
- initialized upon second and later 'open' calls to the device
- with same root-clock source. The bug is otherwise visible in
- Codec-Slave mode.
- - ASoC: Add HP iPAQ H1940 support
- Add glue driver to make s3c24xx-i2s and uda1380 produce some sound on
- H1940.
- - ASoC: SAMSUNG: Remove duplicated snd_card on smdk_spdif
- This patch remove duplicated snd_card defination on smdk_spdif.
- - ASoC: SAMSUNG: Fix initial return value
- This patch fixed intial return value to be a '0' as asuccess on
- set_audio_clock_heirachy(). This avoids unintended error on initialize.
- - ASoC: Fix resource leak in smdk_spdif.c
- Properly free allocated resources in smdk_init() error path.
- Add missing platform_device_unregister() in smdk_exit().
- - ASoC: Add missing gpio_free(S3C64XX_GPK(12)) in smartq_exit()
- - ASoC: Fix resource leak in neo1973_gta02_init() error path
- Properly free allocated resources in neo1973_gta02_init() error path.
- - ASoC: Fix resource leak in goni_wm8994.c
- Properly free allocated resources in goni_init() error path.
- Add missing snd_soc_unregister_dai() in goni_exit().
- - ASoC: Make SMDK WM8580 driver unloadable
- Supply a module exit function so that the driver can be unloaded.
- - ASoC: Fix compile error for smartq_wm8987.c
- Fix below compile error:
- CC sound/soc/samsung/smartq_wm8987.o
- sound/soc/samsung/smartq_wm8987.c: In function 'smartq_hifi_hw_params':
- sound/soc/samsung/smartq_wm8987.c:42: error: 'struct snd_soc_pcm_runtime' has no member named 'dai'
- sound/soc/samsung/smartq_wm8987.c:43: error: 'struct snd_soc_pcm_runtime' has no member named 'dai'
- sound/soc/samsung/smartq_wm8987.c: In function 'smartq_wm8987_init':
- sound/soc/samsung/smartq_wm8987.c:192: warning: passing argument 1 of 'snd_soc_jack_new' from incompatible pointer type
- sound/soc/samsung/smartq_wm8987.c: At top level:
- sound/soc/samsung/smartq_wm8987.c:216: warning: initialization from incompatible pointer type
- make[3]: *** [sound/soc/samsung/smartq_wm8987.o] Error 1
- make[2]: *** [sound/soc/samsung] Error 2
- make[1]: *** [sound/soc] Error 2
- make: *** [sound] Error 2
- - ASoC: neo1973_gta02_wm8753: fix wrong parameter for snd_soc_register_dai and snd_soc_unregister_dai
- - ASoC: smdk_wm9713: fix resource leak in smdk_init error path
- Fix the error path to properly free allocated resources.
SoC Blackfin
- - ASoC: Fix codec device id format used by some dai_links
- The id part of an I2C device name is created with the "%d-%04x" format string.
- So for example for an I2C device which is connected to the adapter with the id 0
- and has its address set to 0x1a the id part of the devices name would be
- "0-001a".
- Currently some sound board drivers have the id part the codec_name field of
- their dai_link structures set as if it had been created by a "%d-0x%x" format
- string. For example "0-0x1a" instead of "0-001a".
- As a result there is no match between the codec device and the dai_link and no
- sound card is instantiated.
- This patch fixes it.
- - ASoC: Blackfin: fix DAI/SPORT config dependency issues
- While I2S/TDM/AC97 DAI is built-in, others are compiled as modules,
- SND_BF5XX_SOC_SPORT will be module, then DAI can't get some symbols.
- Except that, SND_BF5XX_AC97 depends on SND_BF5XX_SOC_AC97 too.
- - ASoC: Blackfin TDM: use external frame syncs
- We don't want to use internal frame syncs otherwise we sometimes
- get out of sync, so don't enable them when setting up the SPORT.
- - ASoC: Blackfin AC97: fix build error after multi-component update
- We need to tweak how we query the active capture/playback state after
- the recent overhauls of common code.
- - ASoC: Blackfin TDM: fix missed snd_soc_dai_get_drvdata update
- One spot was missed in this driver when converting from
- snd_soc_dai.private_data to snd_soc_dai_get_drvdata.
- - ASoC: add AD1980 obsolete information
- This codec has been obsoleted by ADI, so add appropriate warnings to the
- source tree to dissuade people from using in new designs based on driver
- support.
- - ASoC: Remove unnecessary casts of private_data
SoC Codec 88PM860x
- - ASoC: Yet more x86 tracepoint workarounds
- - ASoC: codecs: Remove unused reg_cache fields from device structs
- The multi-component patch(commit f0fba2ad1) moved the allocation of the
- register cache from the driver to the ASoC core. Most drivers where adjusted to
- this, but there are quite a few drivers left which now have an unused reg_cache field in
- their private device struct.
- This patch removes these unused fields.
- - ASoC: ifdef out trace points from modules for x86
- No idea why this works on ARM but not x86.
- - ASoC: Add jack IRQ trace to 88pm860x driver
- - ASoC: Simplify pm860x_probe error handling
- Simplify pm860x_probe error handling and return actual error code we got.
- - ASoC: add 88pm860x codec driver
- Add 88PM860x codec driver. 88PM860x codec supports two interfaces. And it
- also supports headset/mic/hook/short detection.
SoC Codec AC97
- - ASoC: ac97: add MODULE_ALIAS for the platform driver
- So that modprobe can load the driver automatically when the platform device
- appears.
- - ASoC: ac97: don't call snd_soc_new_ac97_codec at probe
- It is not needed since snd_ac97_mixer() will create a new ac97 object for us.
- Removing the call also fixes a memory leak since codec->ac97 is set to NULL at
- the beginning of snd_ac97_mixer().
- - ASoC: Clean up AC'97 glue driver
- Remove version number and clean up some indentation.
SoC Codec AD1836
- - ASoC: Fix incorrect kfree in ad1836_probe error path
- We allocated memory for ad1836 in ad1836_spi_probe,
- and will free the memory in either ad1836_spi_probe error path or
- ad1836_spi_remove.
- Thus we should not call kfree(ad1836) in ad1836_probe, otherwise
- we have double free of ad1836.
- - ASoC: ad1836: fix a memory leak if another ad1836 is registered
- ad1836 is allocated in ad1836_spi_probe() but is not freed if ad1836_register()
- return -EINVAL (if another ad1836 is registered).
- - ASoC: Add indirection for CODEC private data
- One of the features of the multi CODEC work is that it embeds a struct
- device in the CODEC to provide diagnostics via a sysfs class rather than
- via the device tree, at which point it's much better to use the struct
- device private data rather than having two places to store it. Provide
- an accessor function to allow this change to be made more easily, and
- update all the CODEC drivers are updated.
- To ensure use of the accessor the private data structure member is
- renamed, meaning that if code developed with older an older core that
- still uses private_data is merged it will fail to build.
SoC Codec AD193X
- - ASoC: codecs: Remove unused reg_cache fields from device structs
- The multi-component patch(commit f0fba2ad1) moved the allocation of the
- register cache from the driver to the ASoC core. Most drivers where adjusted to
- this, but there are quite a few drivers left which now have an unused reg_cache field in
- their private device struct.
- This patch removes these unused fields.
- - ASoC: Fix incorrect kfree in ad193x_probe error path
- We allocated memory for ad193x in ad193x_spi_probe,
- and will free the memory in either ad193x_spi_probe error path or
- ad193x_spi_remove.
- Thus we should not call kfree(ad193x) in ad193x_probe, otherwise
- we have double free of ad193x.
- - ASoC: ad193x: add set_sysclk entry to support different clock input
- - ASoC: ad193x: fix typo, delete redundant space
- - ASoC: ad193x: fix wrong register setting in ad193x_set_dai_fmt
- - ASoC: Add indirection for CODEC private data
- One of the features of the multi CODEC work is that it embeds a struct
- device in the CODEC to provide diagnostics via a sysfs class rather than
- via the device tree, at which point it's much better to use the struct
- device private data rather than having two places to store it. Provide
- an accessor function to allow this change to be made more easily, and
- update all the CODEC drivers are updated.
- To ensure use of the accessor the private data structure member is
- renamed, meaning that if code developed with older an older core that
- still uses private_data is merged it will fail to build.
SoC Codec AD1980
- - ASoC: Staticise AD1980 DAI
- It doesn't need to be exported with multi-component.
- - ASoC: ad1980 - set reg_cache_default to ad1980_reg
- - ASoC: ad1980: remove unneeded function declaration
- - ASoC: add AD1980 obsolete information
- This codec has been obsoleted by ADI, so add appropriate warnings to the
- source tree to dissuade people from using in new designs based on driver
- support.
SoC Codec AD73311
- - ASoC: sound/ad73311: add missing __devexit marker
- This fixes the following warning:
- sound/soc/codecs/ad73311.c:50:12: warning: 'ad73311_remove' defined but not used
SoC Codec AK4104
- - ASoC: Add indirection for CODEC private data
- One of the features of the multi CODEC work is that it embeds a struct
- device in the CODEC to provide diagnostics via a sysfs class rather than
- via the device tree, at which point it's much better to use the struct
- device private data rather than having two places to store it. Provide
- an accessor function to allow this change to be made more easily, and
- update all the CODEC drivers are updated.
- To ensure use of the accessor the private data structure member is
- renamed, meaning that if code developed with older an older core that
- still uses private_data is merged it will fail to build.
SoC Codec AK4535
- - ASoC: ak4535: Improve readability for setting mute
- The mute/unmute is controled by SMUTE (Soft Mute Control bit):
- 0: Normal Operation (Default)
- 1: DAC outputs soft-muted
- I think this change improves readability.
- - ASoC: Remove unneeded suspend bias managment from CODEC drivers
- The core will ensure that the device is in either STANDBY or OFF bias
- before suspending, restoring the bias in the driver is unneeded. Some
- drivers doing slightly more roundabout things have been left alone
- for now.
- Tested-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
SoC Codec AK4642
- - ASoC: ak4642: make sure name of register/value
- This patch replace magic code with defined name,
- and remove unnecessary settings which set default value
- - ASoC: ak4642: simultaneous playback/recorde support
- - ASoC: ak4642: code clean up
- - ASoC: ak4642: Revive ak4642_snd_controls
- This patch revive ak4642_snd_controls which was removed on
- f0fba2ad1b6b53d5360125c41953b7afcd6deff0
- - ASoC: ak4642: fix a memory leak if failed to initialise AK4642
- ak4642 should be kfreed if ak4642_init() return error.
- Reviewed-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
- - ASoC: ak4642: Add Digital Playback Volume control
- - ASoC: header cleanup for ak4642
SoC Codec AK4671
- - ASoC: codecs: Remove unused reg_cache fields from device structs
- The multi-component patch(commit f0fba2ad1) moved the allocation of the
- register cache from the driver to the ASoC core. Most drivers where adjusted to
- this, but there are quite a few drivers left which now have an unused reg_cache field in
- their private device struct.
- This patch removes these unused fields.
- - ASoC: Remove needless codec->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.
SoC Codec CQ0093 Voice
- - ASoC: Do not include soc-dai.h
- There is no need to include soc-dai.h since soc.h includes it. Convert
- drivers to include only soc.h.
- - ASoC: Remove unneeded suspend bias managment from CODEC drivers
- The core will ensure that the device is in either STANDBY or OFF bias
- before suspending, restoring the bias in the driver is unneeded. Some
- drivers doing slightly more roundabout things have been left alone
- for now.
- Tested-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
SoC Codec CS4270
- - ASoC: Update users of readable_register()/volatile_register()
- - ASoC: cs4270: use the built-in register cache support
- Update the CS4270 driver to use ASoC's internal codec register cache feature.
- This change allows ASoC to perform the low-level I2C operations necessary to
- read the register cache. Support is also added for initializing the register
- cache with an array of known power-on default values.
- The CS4270 driver was handling the register cache itself, but somwhere along
- the conversion to multi-compaonent, this feature broke.
- - ASoC: codecs: Remove unused reg_cache fields from device structs
- The multi-component patch(commit f0fba2ad1) moved the allocation of the
- register cache from the driver to the ASoC core. Most drivers where adjusted to
- this, but there are quite a few drivers left which now have an unused reg_cache field in
- their private device struct.
- This patch removes these unused fields.
- - ASoC: Staticise CS4270 DAI
- It's not needed with multi-component.
- - ASoC: Remove export of CS4270 DAI
- Not needed with multi-component.
SoC Codec CS42L51
- - ASoC: Change my mail address
- Like other coworkers, I'm about leave Mandriva/Edge-It so I'm changing
- my mail address to use my personal one.
- - ASoC: OpenRD Client : Fix naming breakage due to multicomponent support
- multicomponent support added/changed some device name but added some typos,
- breaking existing OpenRD Client support.
- - ASoC: Add driver for cs42l51
- This patch is adding a ASoC driver for the cs42l51 from Cirrus Logic.
- Master mode and spi mode are not supported.
SoC Codec CX20442
- - ASoC: Move pop time from DAPM context to sound card
- Based on discussion the dapm_pop_time in debugsfs should be per card rather
- than per device. Single pop time value for entire card is cleaner when the
- DAPM sequencing is extended to cross-device paths.
- debugfs/asoc/{card->name}/{codec dir}/dapm_pop_time
- ->
- debugfs/asoc/{card->name}/dapm_pop_time
- - ASoC: Use a more adequate name for the CX20442 codec DAI
- In the process of unification of codec DAI names while implementing
- multi-component, the CX20442 codec DAI has been renamed to "cx20442-hifi".
- This new name seems not adequate for a 8kHz voice codec.
- Use a better name, "cx20442-voice", as suggested by Liam Girdwood.
SoC Codec DA7210
- - ASoC: da7210: code clean up
- - ASoC: da7210: fix a memory leak if failed to initialise da7210 audio codec
- da7210 should be kfreed if da7210_init() return error.
- This patch also fixes the error handing in the case of snd_soc_register_dai()
- fail by adding snd_soc_unregister_codec() in error path.
- - ASoC: da7210: Add HeadPhone Playback Volume control
- HeadPhone Playback Volume control register of DA7210 has
- reserved area. This patch considered it as mute.
- - ASoC: header cleanup for da7210
- - ASoC: da7210: Fencepost error in reg cache read
- An index equal to the array size may not be accessed.
SoC Codec DIT SPDI/F
- - ASoC: Fix S/PDIF build
- - ASoC: spdif: Add codec driver to use spdif stand-alone
- This patch adds spdif dummy codec driver for using spdif-dit as
- a stand-alone. Until this, spdif-dit can be used only with other
- codecs like tlv320aci3x in davinci platform.
SoC Codec General Digital MICs
- - ASoC: DMIC codec: Adding a generic DMIC codec
- This codec is to be used by the DMIC driver to
- control the DMIC codec. This driver will be used on future
- implementations of the DMIC driver to support codec specific
- features.
- At this time, the codec driver just registers the codec DAI.
SoC Codec MAX98088
- - ASoC: Update users of readable_register()/volatile_register()
- - ASoC: codecs: max98088: Fix register cache incoherency
- The multi-component patch(commit f0fba2ad1) moved the allocation of the
- register cache from the driver to the ASoC core. Most drivers where adjusted to
- this, but the max98088 driver still uses its own register cache for its
- private functions, while functions from the ASoC core use the generic cache.
- Thus we end up with two from each other incoherent caches, which can lead to
- undefined behaviour.
- This patch fixes the issue by changing the max98088 driver to use the
- generic register cache in its private functions.
- - ASoC: max98088 - fix a memory leak
- - ASoC: Add support for MAX98089 CODEC
- This patch adds initial support for the MAX98089 CODEC.
- - ASoC: sound/max98088: add missing __devexit marker
- This fixes the following warning:
- sound/soc/codecs/max98088.c:2054:12: warning: 'max98088_i2c_remove' defined but not used
- - ASoC: max98088: Staticise m98088_eq_band
- This function is not exported and it does not seem to be called from
- anywhere else therefore it should be static.
- - ASoC: Restore MAX98088 CODEC driver
- This reverts commit f6765502f8daae3d237a394889276c8987f3e299 and adds
- the missing include file.
- - Revert "ASoC: Add max98088 CODEC driver"
- This reverts commit e65d255a5a610ce9e185e0df855250706aca7c21 since it
- does not build.
- - ASoC: Add max98088 CODEC driver
- This patch adds the MAX98088 CODEC driver.
SoC Codec Philips UDA134x
- - ASoC: uda134x - set reg_cache_default to uda134x_reg
- After checking the code in 2.6.36,
- I found this is missing during multi-component conversion.
- - ASoC: uda134x: correct bias level setup for codecs family
- For UDA1341 codec power control is managed in STATUS1 register, and
- for all other codecs in DATA011 register.
- - ASoC: uda134x: add DATA011 register found in codecs family
- In UDA1340, UDA1344 and UDA1345 codecs there is one more functional
- register in part of DATA0 tranfser. For UDA1341 this register
- coincides with EA register.
- - ASoC: uda134x: fix bias level setup on initialization
- On initialization ADC/DAC are enabled only for UDA1341, that's why
- bias_level shall be set to off explicitly, otherwise dapm is
- misinformed about bias_level on startup.
- - ASoC: uda134x: replace a macro with a value in platform struct.
- This change wipes out a hardcoded macro, which enables codec bias
- level control. Now is_powered_on_standby value shall be used instead.
- - ASoC: UDA134X: Add UDA1345 CODEC support
- This patch adds support for Philips UDA1345 CODEC. The CODEC has only
- volume control, de-emphasis, mute, DC filtering and power control features.
SoC Codec Philips UDA1380
- - ASoC: UDA1380: Add delay between power on and reset
- - ASoC: uda1380: make driver more powersave-friendly
- Disable some codec modules in standby mode, completely disable
- codec in off mode to save some power.
- Fix suspend/resume: mark mixer regs as dirty on resume to
- restore mixer values, otherwise driver produces no sound
- (master is muted by default).
SoC Codec SSM2602
- - ASoC: Remove needless codec->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: Remove unneeded suspend bias managment from CODEC drivers
- The core will ensure that the device is in either STANDBY or OFF bias
- before suspending, restoring the bias in the driver is unneeded. Some
- drivers doing slightly more roundabout things have been left alone
- for now.
- Tested-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
SoC Codec STAC9766
- - ASoC: stac9766 - set reg_cache_default to stac9766_reg
- Looks like this is missing during multi-component conversion.
SoC Codec TI sn95031
- - ASoC: sn95031 fix the code style and format inconsistencies
- this patch fixes inconsistencies commented by Mark.
- This also fixes few other style things in audio_map & header file
- - ASoC: sst v2: Add sn95031 codec driver
- This patch adds the sn95031 asoc codec driver. This driver currently
- supports only playback. Capture and jack detection to be added later
SoC Codec TLV320AIC23
- - sound: codecs/tlv320aic23: fix bias management for suspend/resume
- in tlv320aic23_set_bias_level, for the case SND_SOC_BIAS_ON, the
- comment says "vref/mid, osc on, dac unmute" but the code doesn't
- clear the corresponding bits, thus when resuming, several bits are
- not cleared preventing the codec from working.
- in tlv320aic23_suspend, clearing the active register is not needed
- as it will be done by tlv320aic23_set_bias_level, when setting
- bias to SND_SOC_BIAS_OFF
SoC Codec TLV320AIC26
- - ASoC: missing conversions to snd_soc_codec_*_drvdata()
- Conversions to snd_soc_codec_{get|set}_drvdata() were missing in some files
- in the previous commit.
SoC Codec TLV320AIC3X
- - ASoC: Move DAPM paths from DAPM context to snd_soc_card
- Decoupling DAPM paths from DAPM context is a first prerequisite when
- extending ASoC core to cross-device paths. This patch is almost a nullop and
- does not allow to construct cross-device setup but the path clean-up part in
- dapm_free_widgets is prepared to remove cross-device paths between a device
- being removed and others.
- - ASoC: Remove unused aic3x_i2c_init and aic3x_i2c_exit functions
- - ASoC: tlv320aic3x - fix variable may be used uninitialized warning
- If aic3x_read failed , val is used uninitialized.
- Fix it by initializing val to 0.
- This patch fixes below compile warning:
- sound/soc/codecs/tlv320aic3x.c: In function 'aic3x_get_gpio':
- sound/soc/codecs/tlv320aic3x.c:1183: warning: 'val' may be used uninitialized in this function
- sound/soc/codecs/tlv320aic3x.c: In function 'aic3x_headset_detected':
- sound/soc/codecs/tlv320aic3x.c:1211: warning: 'val' may be used uninitialized in this function
- sound/soc/codecs/tlv320aic3x.c: In function 'aic3x_button_pressed':
- sound/soc/codecs/tlv320aic3x.c:1219: warning: 'val' may be used uninitialized in this function
- - ASoC: Fix incorrect kfree in aic3x_probe error path
- We allocated memory for aic3x in aic3x_i2c_probe,
- and will free the memory in either aic3x_i2c_probe error path or
- aic3x_i2c_remove.
- Thus we should not call kfree(aic3x) in aic3x_probe, otherwise
- we have double free of aic3x.
- - ASoC: tlv320aic3x: Add support to shared common reset line
- This is aimed to configurations where multiple aic3x codecs share the same
- reset line and are powered from same supply voltages.
- Currently aic3x_probe will fail if trying to request already requested
- gpio_reset and passing -1 to another aic3x instances cause that those
- instances cannot release reset in aic3x_set_power. That is, another
- instances can work only if primary aic3x instance is powered and reset is
- released.
- Solve this by implementing a list of probed instances that is used for
- checking if other instance shares the same gpio_reset number. If a shared
- reset line exists, then only first instance tries to request and configure
- it and the last instance releases it.
- Runtime modifications are not needed since aic3x_regulator_event with help
- of regulator framework takes already care that reset is pulled down only
- when some or all supplies are disabled meaning that all instances using them
- are idle.
- - ASoC: tlv320aic3x: Use gpio_is_valid in checking for valid gpio_reset
- I promised to convert this at some point.
- - ASoC: tlv320aic3x: Let the codec hit SND_SOC_BIAS_OFF when idle
- Now codec hits the SND_SOC_BIAS_OFF also when it is idle. This is also
- the default state after probing and codec is left unconfigured and
- unpowered by default. Initialization will happen when the bias state changes
- and aic3x_set_power does power-up and cache sync.
- - ASoC: tlv320aic3x: Use regulator notifiers for optimizing the cache sync
- There is no need to reset the codec and perform cache sync if none of the
- supply regulators were not disabled. Patch registers a notifier callback for
- each supply and callback then sets a flag to indicate when cache sync is
- required.
- HW writes are also needless when codec bias is off so cache_only flag is set
- independently of actual supply regulators state.
- - ASoC: tlv320aic3x: Add runtime regulator control to aic3x_set_bias_level
- Now all the regulators are disabled when entering into SND_SOC_BIAS_OFF
- and enabled when coming back to SND_SOC_BIAS_STANDBY state. Currently this
- runtime control happens only with suspend/resume as this patch does not
- change the default idle behavior.
- This patch manages all the regulators and reset since it seems that register
- sync is needed even if only analog supplies AVDD and DRVDD are disabled.
- This was noted when the system was running with idle behavior changed and
- IOVDD and DVDD were on.
- It is not known are all the registers needed to sync or only some subset of
- them. Therefore patch plays safe and does always full shutdown/power-up.
- - ASoC: tlv320aic3x: Move regulator management from i2c to soc domain
- It will be easier to keep regulator enable/disable calls in sync when dynamic
- regulator management is added if regulator management is moved from
- aic3x_i2c_probe/_remove to aic3x_probe/_remove.
- - ASoC: tlv320aic3x: Add virtual output pin Detection
- Purpose of this virtual Detection pin is to keep codec bias on whenever the
- GPIO or jack detection features are needed.
- Jack detection needs a mic bias so machine drivers can construct a following
- route for instance for keeping the path and codec bias on:
- "Input Jack" -> "Mic Bias xV" -> "Detection" -> detection block inside codec.
- For the GPIO the machine driver can force the pin on with
- snd_soc_dapm_force_enable_pin.
- - ASoC: tlv320aic3x: Complete the soc-cache conversion
- Complete the phasing out of aic3x_read_reg_cache, aic3x_write_reg_cache,
- aic3x_read and aic3x_write calls.
- This patch uses in aic3x_read the codec->hw_read that points to a function
- implemented by soc-cache. Only use for aic3x_read is if wanting to read
- volatile bits from those registers that has both read-only and read/write
- bits. All other cases should use snd_soc_read.
- - ASoC: tlv320aic3x: Switch to soc-cache helpers
- Continue phasing out aic3x_read_reg_cache, aic3x_write_reg_cache, aic3x_read
- and aic3x_write calls.
- This patch takes the soc-cache in use and removes aic3x_read_reg_cache and
- aic3x_write.
- - ASoC: tlv320aic3x: Use snd_soc_read and snd_soc_write
- Start phasing out aic3x_read_reg_cache, aic3x_write_reg_cache, aic3x_read and
- aic3x_write calls in order to switch to soc-cache helpers.
- This patch replaces aic3x_read_reg_cache and aic3x_write with snd_soc_read
- and snd_soc_write. This is basically null-op since .read and .write in
- soc_codec_dev_aic3x points to aic3x_read_reg_cache and aic3x_write.
- - ASoC: tlv320aic3x: Optimize PLL programming in aic3x_set_bias_level
- There is only need to enable/disable once the PLL when the bias is going
- between on, prepare, standby and off states.
- - ASoC: tlv320aic3x: Fix null pointer dereference when pdata is not set
- Null pointer dereference will occur from *setup = pdata->setup if pdata
- is not set. Fix this by moving assignments from pdata inside non-null case.
- Thanks to Jiri Slaby <jirislaby@gmail.com> for noticing.
- - ASoC: tlv320aic3x: Sanitize output controls
- Currently output controls are not uniform. Some routes are adjusted by
- mono controls that don't match to associated mixer switch, many routes are
- not covered at all and stereo controls have following variants:
- - L-to-L & R-to-R
- - R-to-L & R-to-R
- - L-to-L & R-to-L
- This patch attempts to fix these issues. First, for the convenience, only
- direct L-to-L, R-to-R and [L | R]-to-Mono routes are controlled by the
- stereo controls. This logic is also used with the output pin mute controls
- so all of them except mono output are controlled by stereo switches.
- Then rest of the swapped L-to-R and R-to-L routes are controlled by the
- mono controls that map to mixer switches with a same name. Mixers can then
- associate these switches and volumes together.
- - ASoC: tlv320aic3x: Reimplement output mixers
- It turned out that the output mixers and their routes were misdefined: They
- are not mixing output pins to internal signals but opposite. This has worked
- for direct left-to-left and right-to-right routes since for those there are
- complete routes. For swapped left-to-right and right-to-left routes this is
- not working since there are no routes defined between them.
- Another consequence is that those misdefined mixers are incorrectly routed
- to several output pins leading unnecessary pin powerings even if there is no
- route active to them.
- Fix these by reimplementing the output mixers and routes as they are in
- hardware. For completeness add also a few missing links between internal
- signals and outputs.
- - ASoC: tlv320aic3x: Sort output pin control registers in header file
- Each output pin has 7 consecutive control registers in tlv320aic3x register
- map. First 6 of them control the signal mixing and one is for output level
- and power control.
- Sort these registers as they are sorted clearly in hardware, it makes also
- definitions more readable and easier to pinpoint missing register
- definitions.
- - ASoC: tlv320aic3x: Fix remaining output pin switch names
- Bit 3 in output pin_CTRL register mutes the whole output pin not just the
- route from DAC so remove misleading DAC from control name. Currently only
- "Line[L | R] Playback Switch" were correct.
- - ASoC: Fix tlv320aic3x GPIO initialization
- aic3x_init does a soft reset first and thus TLV320AIC3x GPIO setup must be
- done after doing the basic init. Before multi-component the init was done
- at i2c probe time and GPIO setup at soc probe time.
- - ASoC: Add support for tlv320aic3007 to tlv320aic3x codec.
- This patch adds support for the tlv320aic3007 codec to the tlv320aic3x
- driver.
- The tlv320aic3007 is similar to the aic31, but has an additional class-D
- speaker amp. The speaker amp control register overlaps with the mono
- output register of other codecs in this family, so we add logic to
- identify the actual codec being registered to set things up accordingly.
- - ASoC: Configure symmetric rates for tlv320aic3x
- The tlv320aic3x codec driver only supports symmetric rates for capture/
- playback. Set the flag in the DAI accordingly.
- - ASoC: tlv320aic3x: Add platform data and reset gpio handling
- Handle the reset GPIO within the codec driver in order to follow
- the startup protocol for the tlv320aic3x codecs.
- - ASoC: tlv320aic3x: Add basic regulator support
- This patch adds the TLV320AIC3x supplies and enables all of them for the
- entire lifetime of the device.
- - ASoC: tlv320aic3x: Change bias management semantics
- Move PLL enable from BIAS_ON state to BIAS_PREPARE to be pair with
- BIAS_STANDBY where PLL is disabled. Remove also old comments about power
- control.
- - ASoC: tlv320aic3x: Remove needless power off from aic3x_set_bias_level
- These ADC, DAC and output pin power off commands are needless in
- aic3x_set_bias_level since they are not enabled in aic3x_init and they are
- defined in aic3x_dapm_widgets so the ASoC DAPM will take care of them
- anyway.
- - ASoC: tlv320aic3x: Remove unused version string
SoC Codec TLV320DAC33
- - ASoC: tlv320dac33: Add DAPM selection for LOM invert
- The L/R LOM line can be invertined side of the
- corresponding DAC, or inverted from the corresponding
- LOP.
- Add control for user space to select the source of the
- LOM inversion.
- When only the analog bypass is enabled, and the LOM
- is inverted from DAC output, we need to power the
- corresponding DAC.
- - ASoC: tlv320dac33: Add 32/24 bit audio support
- Add support for 24 bit audio (with S32_LE msbits 24).
- The reason to limit the msbits to 24, is that the FIFO
- can be configured for 16 or 24 bit layout.
- It is unknown how the codec would downsample from 32 to
- 24 bit, if the interface is configured to receive 32
- bit data.
- - ASoC: tlv320dac33: Some cleanup for 32/24 bit support
- Change the structure of FIFO handling in order to
- pave the way for adding 32/24 bit audio support.
- - ASoC: tlv320dac33: Remove manual FIFO configuration
- The manual FIFO configuration was the first version to enable
- the use of the FIFO in the codec.
- It had served it's purpose as debugging aid, but the automatic
- FIFO configuration is much safer to use.
- The removal of the manual controls, and configuration makes
- it easier to add new features for the codec later, since
- the manual mode neded different ways to calculate, and
- protect against misconfiguration.
- - ASoC: tlv320dac33: Power down digital parts, when not needed
- If the following scenario has been followed:
- 1. Enable analog bypass
- amixer sset 'Analog Left Bypass' on
- amixer sset 'Analog Right Bypass' on
- 2. Start playback
- aplay -fdat -d3 /dev/zero
- After the playback stopped (3 sec), and the soc timeout (5 sec),
- the digital parts of the codec will remain powered up.
- This means that the DAI clocks are continue to run, the
- oscillator remain operational, etc.
- Use the SND_SOC_DAPM_POST_PMD widget to get notification
- about the stopped stream, and power down the digital
- part of the codec.
- If the analog bypass is enabled, than the codec will remain in
- BIAS_ON level, and things will work correctly.
- In case, if the bypass is disabled, than the codec will
- fall to BIAS_STANDBY than to BIAS_OFF level, as it used
- to.
- The digital part of DAC33 is initialized at every stream start
- (DAPM_PRE:PRE_PMU event), so subsequent streams (within 5 sec)
- will have working DAI.
- When the codec is coming out from BIAS_OFF, the full power-up
- sequence followed by the same DAPM_PRE widget event will power up
- the digital part.
- - ASoC: tlv320dac33: Fix compillation error
- Fix the compilation error introduced by patch:
- ASoC: tlv320dac33: Avoid multiple soft power up
- - ASoC: tlv320dac33: Move DAC LR power on to a supply widget
- The power for the DACs need to be enabled, even when only
- the analog bypass is in use with the codec, otherwise
- the audio is going to be distorted.
- Make sure that the DACs are powered all the time, when
- there is audio activity.
- - ASoC: tlv320dac33: Rename outpup amplifier widget
- Use better name for the widget, and remove the 'Power'
- from it's name.
- - ASoC: tlv320dac33: Avoid multiple soft power up
- During playback start the codec has been already powered at
- BIAS_ON event time, so there's no need to enable the codec again.
- - ASoC: tlv320dac33: Do not enable the codec in init_chip
- No need to enable the codec at this time.
- The codec will be enabled later by other events
- - ASoC: tlv320dac33: Mode1 FIFO auto configuration fix
- Do not allow invalid (too big) nSample value, when FIFO Mode1
- and automatic fifo configuration has been selected.
- - ASoC: tlv320dac33: Limit the US_TO_SAMPLES macro
- Limit the time window to maximum 1s in the macro.
- The driver deals with much shorter times (<200ms).
- This will fix a rare division by zero bug in Mode1.
- This could happen, when the work is not executed in
- time (within mode1_latency) after the interrupt.
- In this case the DAC33 will not receive the needed
- nSample command in time, and enters to an unknown
- state, and won't recover.
- In such event the time window will increase, and
- eventually going to be bigger than 1s, resulting
- devision by zero.
- - ASoC: tlv320dac33: Error handling for broken chip
- Correct/Implement handling of broken chip.
- Fail the soc_prope if the communication with the chip
- fails (can not read chip ID).
- - ASoC: tlv320dac33: Use usleep_range for delays
- Switch to use the more precise usleep_range instead of
- msleep().
- Replace the udelay with usleep_range to remove the busy loop
- waiting.
- - ASoC: tlv320dac33: Control for line output gain
- New control to select the line output gain.
- This gain control affects the linein-to-lineout and
- dac-to-loneout gain differently.
- Use enum type to select the desired gain combination.
- - ASoC: Remove needless codec->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: tlv320dac33: Add support for automatic FIFO configuration
- Platform parameter to enable automatic FIFO configuration when
- the codec is in Mode1 or Mode7 FIFO mode.
- When this mode is selected, the controls for changing
- nSample (in Mode1), and UTHR (in Mode7) are not added.
- The driver configures the FIFO configuration based on
- the stream's period size in a way, that every burst will
- read period size of data from the host.
- In Mode7 we need to use a formula, which gives close enough
- aproximation for the burst length from the host point
- of view.
- - ASoC: tlv320dac33: Revisit the FIFO Mode1 handling
- Replace the hardwired latency definition with platform data
- parameter, and simplify the nSample parameter calculation.
- - ASoC: tlv320dac33: Add support for changing upper threshold
- Upper threshold is used in mode7 of DAC33.
- Instead of hard wired UTHR, add control to change the upper threshold
- value.
- Changing upper threshold is not allowed when the playback is already
- running, since wrongly timed change in the UTHR can cause problems
- with the codec.
- With this control the length of the burst in mode7 can be changed.
- - ASoC: tlv320dac33: Avoid powering off while in BIAS_OFF
- Avoid calling the dac33_hard_power when the codec was
- already in BIAS_OFF state.
- This could happen in device suspend and module removal
- time.
- - ASoC: tlv320dac33: Use dev_dbg in dac33_hard_power function
- Since the cases when the same power state would be set again
- handled gracefully, we do not need to use dev_warn.
- - ASoC: tlv320dac33: Use codec defaults for LOM/LOP and DAC power
- Do not change the codec defaults for the following registers:
- 0x40, 0x41: Line output gains, do not use amplification
- 0x42: LOM/LOP Voltage hold, and selection
- 0x44: LOM inversion control
- It has been found, that the values configured to these registers
- can cause amplification, which can make the output of DAC33
- distorted.
- The codec reset values are considered safe in all environmnts.
- - ASoC: tlv320dac33: Support for turning off the codec
- Let the codec to hit OFF instead of STANDBY, when there is no activity.
- When the codec is off, than the associated regulator can be also turned
- off (if the number of users on the regulator is 0).
- After initialization, the codec remains in power off, it is only turned
- on for reading the ID registers (also testing the regulators).
- The codec power is enabled, when the codec is moving from BIAS_OFF
- to BIAS_STANDBY.
- The codec is turned off, when it hits BIAS_OFF.
- There are few scenarios, which has to be taken care::
- 1. Analog bypass caused BIAS_OFF -> BIAS_ON
- We need to power on the codec, and do the chip init, but we does not
- need to execute the playback related configuration
- 2. Playback caused BIAS_OFF -> BIAS_ON
- We need to power on the codec, and do the chip init, and also we need
- to execute the playback related configuration.
- 3. Playback start, while Analog bypass is on (BIAS_ON -> BIAS_ON)
- We need to execute the playback related configuration. The codec is
- already on.
- 4. Analog bypass enable, while playback (BIAS_ON -> BIAS_ON)
- Nothing need to be done.
- 5. Playback start withing soc power down timeout (BIAS_ON -> BIAS_ON)
- We need to execute the playback related configuration. The codec is
- still on.
- Since the power up, and the codec init is optimized, the added overhead
- in stream start is minimal.
- Withing this patch, the hard_power function is now only doing what it
- supposed to: only handle the powers, and GPIO reset line.
- The codec initialization and state restore has been moved out.
- - ASoC: tlv320dac33: Manage a pointer for snd_pcm_substream in private structure
- As a preparation for supporting codec to be turned off,
- when we are in BIAS_STANDBY.
- The substream must be easily available in other places than
- pcm_* callbacks.
- Manage a pointer in _startup, and _shutdown for this.
- - ASoC: tlv320dac33: Revised module loading, and DAC33 ID read
- Optimize the way how tlv320dac33 is powered uppon module and
- soc initialization.
- Also read the DAC33 ID registers, and update the reg_cache
- to reflect it.
- - ASoC: tlv320dac33: Optimize power up, and restore
- On power up we only need to initialize the codec, and
- restore only registers, which are not in either in DAPM
- nor in the playback start sequence.
- These are mostly gain related registers.
- - ASoC: tlv320dac33 - disable regulators at i2c remove()
- - ASoC: tlv320dac33: FIFO caused delay reporting
- Delay reporting for the three implemented DAC33 FIFO modes.
- DAC33 has FIFO depth status register(s), but it can not be used, since
- inside of pcm_pointer we can not send I2C commands.
- Timestamp based estimation need to be used. The method of calculating
- the delay depends on the active FIFO mode.
- Bypass mode: FIFO is bypassed, report 0 as delay
- Mode1: nSample fill mode. In this mode I need to use two timestamp
- ts1: taken when the interrupt has been received
- ts2: taken before writing to nSample register.
- Interrupts are coming when DAC33 FIFO depth goes under alarm threshold.
- Phase1: when we received the alarm threshold, but our workqueue has
- not been executed (safeguard phase). Just count the played out
- samples since ts1 and subtract it from the alarm threshold
- value.
- Phase2: During nSample burst (after writing to nSample register), count
- the played out samples since ts1, count the samples received
- since ts2 (in a burst). Estimate the FIFO depth using these and
- alarm threshold value.
- Phase3: Draining phase (after the burst read), count the played out
- samples since ts1. Estimate the FIFO depth using the nSample
- configuration and the alarm threshold value.
- Mode7: Threshold based fill mode. In this mode one timestamp is enough.
- ts1: taken when the interrupt has been received
- Interrupts are coming when DAC33 FIFO depth reaches upper threshold.
- Phase1: Draining phase (after the burst), counting the played out
- samples since ts1, and subtract it from the upper threshold
- value.
- Phase2: During burst operation. Using the pre calculated time needed to
- play out samples from the buffer during the drain period (from
- upper to lower threshold), move the time window to cover the
- estimated time from the burst start to the current time.
- Calculate the samples played out since lower threshold and also
- the samples received during the same time.
- - ASoC: tlv320dac33: Calculate the interface speed during bursts
- When the DAC33 FIFO is in use the dai interface is running in
- much higher speed than the sampling frequency.
- Calculate the rate based on the internal base frequency and
- the bclk divider.
- - ASoC: tlv320dac33: Change magic numbers used in Mode7
- Upper and Lower threshold values are used as magic
- numbers. Replace them with defines for later use.
- - ASoC: tlv320dac33: Skip calculations in FIFO Bypass mode
- There is no need for calculations for FIFO bypass mode.
- Just in case set the nsample maximum limit, which
- has been done in the calculation phase.
- - ASoC: tlv320dac33: Fix for early interrupt in FIFO Mode1
- Alarm threshold interrupt is triggered right after the
- playback start.
- This interrupt is recieved during the first burst period,
- and caused the state machine to write additional nSample
- command, which has to be avoided.
- To fix this issue move the DAC33 interrupt unmasking
- after we configured the PREFILL register with a small
- delay.
SoC Codec TPA6130A2
- - ASoC: tpa6130a2: Fix compiler warning
- sound/soc/codecs/tpa6130a2.c: In function 'tpa6130a2_add_controls':
- sound/soc/codecs/tpa6130a2.c:342: warning: unused variable 'dapm'
- Introduced by commit 39646871a47fd8808c08de0ce7d7ca8393af2805 ("ASoC:
- tpa6130a2: Replace DAPM code with direct interface").
- The DAPM code has been removed from the driver, but the
- dapm struct remained.
- - ASoC: tpa6130a2: Replace DAPM code with direct interface
- The use of DAPM widgets, and extra routing can cause ordering
- problems in the system.
- Machine drivers should use the exported direct interface with
- SND_SOC_DAPM_HP's event callback to manage the state of the
- amplifier.
- - ASoC: tpa6130a2: Add stereo DAPM path
- New DAPM widgets, and paths to enable both channels at the
- same time (for stereo output).
- With this path the switch time difference can be avoided
- between left and right channels.
- The original DAPM paths can be still used, if only one of
- TPA's output has been connected to a speaker, but for most of
- the cases, switching to the stereo path is better.
- - ASoC: tpa6130a2: Use one event handler for PGA_E
- Reduce the amount of duplicated code by using single
- event handler for PGA_E to enable the needed channel.
- Use the w->shift to pass the channel information to
- the handler function.
- - ASoC: tpa6130a2: Defer SW enable from power enable
- Do not enable the amplifier right after the power has been
- restored to the amplifier.
- The DAPM_SUPPLY widget turns on the amp early in the DAPM
- power walk, and the unmuting of channel happens quite late.
- Keeping the amp in SW reset state ensures better muting.
- In this way the pop noise coming from other components (codec)
- can be filtered out.
- - ASoC: tpa6130a2: Simplify power state management
- Use simpler way to avoid setting the same power state
- for the amplifier.
- Simplifies the check introduced by patch:
- ASoC: tpa6130a2: Fix unbalanced regulator disables
- - ASoC: Do not update the cache if write to hardware failed
- - ASoC: tpa6130a2: Revisit power-up sequence
- There are no known problems with current power-up sequence which first sets
- the /shutdown pin high and then enables the supply. However, swap the order
- so that the device is kept in shutdown/reset mode during the supply voltage
- transition since slowly rising voltages can usually cause problems if the
- device is not kept in reset.
- - ASoC: tpa6130a2: Get rid of compile warning from tpa6130a2_power
- Patch "ASoC: tpa6130a2: Fix unbalanced regulator disables" introduced a
- compiler warning "‘ret’ may be used uninitialized in this function".
- Initialize ret to zero to get rid of it and making sure that the function
- does not return any random error code when the code is falling through.
- - ASoC: tpa6130a2: Fix unbalanced regulator disables
- This driver has unbalanced regulator_disable when doing module loading and
- unloading. This is because tpa6130a2_probe followed by tpa6130a2_remove
- calls twice tpa6130a2_power(0). Fix this by implementing a state checking
- in tpa6130a2_power.
- - ASoC: tpa6130a2: Error handling for broken chip
- Correct/Implement handling of broken chip.
- Fail the i2c_prope if the communication with the chip
- fails.
- - ASoC: tpa6130a2: Remove CPVSS and HPVdd supplies
- These pins are for decoupling capacitors for the internal charge pumps
- in TPA6130A2 and TPA6140A2 and not for connecting external supply.
- Thanks to Eduardo Valentin <eduardo.valentin@nokia.com> for pointing out the
- issue with TPA6130A2 and Ilkka Koskinen <ilkka.koskinen@nokia.com> with
- TPA6140A2.
- Reviewed-by: Ilkka Koskinen <ilkka.koskinen@nokia.com>
- - ASoC: tpa6130a2: Define output pins with SND_SOC_DAPM_OUTPUT
- Codec output pin should be defined with SND_SOC_DAPM_OUTPUT as otherwise
- external widgets doesn't alter the output state.
- - ASoC: tpa6130a2: Fix for the custom kcontrol functions
- Since the functions arre only used for volume register,
- change their name, and also fix them to properly
- handle the cases, when via soc core the volume is
- limited.
- - sound: Revert "ASoC: tpa6130a2: Support for limiting gain"
- This reverts commit 6f3991152f20933b77eff30413e893bf1a15e578.
- Since core has now support for limiting the volume on controls this
- patch is not needed. Furthermore, this patch actually prevents the core
- to set new volume on the TPA.
- - ASoC: tpa6130a2: Support for limiting gain
- Add support for platform dependent gain limiting on the
- tpa6130a2 (and tpa6140a2) Headset amplifier.
- - ASoC: tpa6130a2: TLV mapping for tpa6140a2
- Both tpa6130a2, and tpa6140a2 is supported by the
- same driver, but the gain dB scaling is different on
- the amplifiers.
- Provide different mixer control for the chips with correct
- TLV mapping.
- User space will see:
- "TPA6130A2 Headphone Playback Volume" in case of 6130
- "TPA6140A2 Headphone Playback Volume" in case of 6140
- The way machine drivers are using this amplifier remained
- the same.
SoC Codec TWL4030
- - ASoC: TWL4030: Fix 24bit support
- twl4030 series of codecs supports S32_LE with msbits=24.
- Replace the S24_LE with S32_LE format, and add constraint
- for 24msbit in case of 32 S32_LE format.
- - ASoC: Move kfree(twl4030) to twl4030_soc_remove()
- As we allocate memory for twl4030 in twl4030_codec_probe(),
- twl4030_codec_remove() is a better place to free the memory.
- - ASoC: TWL4030: Use usleep_range when appropriate
- Change the busy loop delays with usleep_range or msleep calls.
- - ASoC: multi-component: TWL4030: Restore registers on removal
- Add back the register restore call, when the codec driver is
- removed.
- This does not affect normal operation, but it is usefull when
- debugging audio through the twl4030 class codecs.
- - ASoC: TWL4030: Capture route runtime DAPM ordering fix
- Fix the ordering problem in DAPM domain, when the user
- changes between digital and analog sources during active
- capture (or loopback) scenario.
- Before this patch, when the user changed from analog source
- to digital there were a short time, when the codec enabled
- analog mic bias (2.2 volts) instead of the correct digital
- mic bias (1.8 volts) to the digital microphones.
- This behaviour caused by the former implementation of
- selecting the correct type of bias. This was done at the
- POST_REG event of the DAPM_MUX_E("TXx Capture Route")
- widget.
- By moving the bias type selection as DAPM_SUPPLY and
- connecting it to the corresponding digimic widget the
- problematic situation can be avoided.
- - ASoC: TWL4030: Capture route DAPM event fix
- There is no need to handle POST_PMU, POST_PMD event with
- the Capture Route widget.
- It is enough to handle POST_REG event, since that will come
- when the user changes the routing, and we will switch the needed
- bits in the registers.
- - ASoC: TWL4030: Add configurable delay after digimic enable
- When digital microphones are connected to twl, delay is
- needed after enabling the digimic interface of the codec.
- Add new parameter for the setup data, which can be used
- to pass the apropriate delay in ms after the digimic
- interface has been enabled.
- Without certain delay (in certain HW configuration) the
- beggining of the recorded sample contains a glitch, which
- is generated by the digital microphones.
- Delaying the micbias1, 2 (which is the bias for the digimic0
- or 1) does not help, since the glitch is coming after
- switching the digimic interface.
- Reversing the micbias and digimic enable order does not
- work either (in that case the wait need to be added after
- the micbias enabled).
- - ASoC: TWL4030: DAC power optimization
- Restructure the DAPM connections in order to enable
- only the needed DAC (out of four in twl4030 series).
- I need to keep the 'AIF Enable' supply connected to
- the L2/R2 digital path, since the digital loopback
- needs AIF and APLL running.
- If no valid route available, than none of the DAC will
- be powered, but the AIF and APLL is going to be enabled.
- Furthermore, if only one audio path have valid route,
- than only the corresponding DAC will be powered.
- - ASoC: TWL4030: Fix for digital loopback gain range
- When the gain is configured using dB value it was
- not possible to use -24dB since the loopback got
- muted instead of -24dB.
- - ASoC: TWL4030: Add functionalty to reset the registers
- Machine driver can instruct the codec driver to reset the
- chip registers to their default values at probe time.
- If machine driver does not provide setup data, then the
- registers are going to be reseted to their defaults, to
- be safe.
- If the developer on the platform confirms that the register
- reset is not needed, than it can be skipped, saving ~20ms
- time in probe.
- As safety measure do the register reset at remove time also.
- - ASoC: TWL4030: Use BIAS_OFF instead of BIAS_STANDBY, when not in use
- Restructure the codec power code in order to be able to hit
- off when the codec is not in use.
- Since the audio registers are accessible while the codec is powered
- down, there is no need for additional safety mechanism.
- - ASoC: TWL4030: Correct the ARXR2_APGA_CTL chip default
- It seams at least on twl5031 that the ARXR2_APGA_CTL register
- does not have the same default value as it is written in
- the TRM.
- Since the codec part of the PM chip has not been actually
- changed according to TI, assuming, that all version has
- the same problem, so writing there the TRM value.
- - ASoC: TWL4030: Helper to check chip default registers
- Since the twl4030 codec driver supports different version
- of the PM chip, a helper function can come handy, which
- can check the driver's default versus the chip values.
- - ASoC: TWL4030: Optimize the power up sequence
- Since the reg cache now contains the chip default values
- for all registers (REG_OPTION is reset to it's default
- within this patch), there is no longer need to rewrite
- _all_ registers.
- Initialize only few selected registers.
- According to the latest information, the offset cancellation
- need to be done only once, when the codec is powered on, so
- there is no need for the power up wrapper.
- Move all chip initialization code under chip_init, and do
- it when the codec is initialized.
- - ASoC: TWL4030: Make offset cancellation path configurable
- Add means for machine drivers to select the path for offset
- cancellation.
- Reset the reg cache value to the chip reset value at the
- same time.
- Machine drivers can specify which path need to be used for
- offset cancellation via the twl4030_setup.offset_cncl_path.
- For paths use the defines from
- include/linux/mfd/twl4030-codec.h:
- TWL4030_OFFSET_CNCL_SEL_*
- - ASoC: TWL4030: Remove wrapper for power down
- There is no need for the power down wrapper.
- - ASoC: TWL4030: Revisit codec defaults
- Reset most of the codec registers to their chip reset
- value.
- - ASoC: TWL4030: Add control for digimic Left Right swap
- The codec has support for swapping the left and right
- channels in the digimic interface.
- New kcontrol to handle this bit.
- - ASoC: TWL4030: Remove OUTL/R outputs
- OUTL/R are leftovers from the original driver, and they
- are no longer needed.
- - ASoC: TWL4030: AIF/APLL fix in DAPM domain
- This patch orders the APLL and AIF power sequence in
- case of HiFi (audio in TWL4030 terms) playback/capture.
- We also need to make sure that the AIF is running during
- playback/capture, when there is no valid DAPM route
- available. For this purpose I introduce these virtual
- widgets:
- /* To have complete playback route all the time */
- DAPM_OUTPUT("Virtual HiFi OUT") /* Will keep AIF/APLL enabled */
- /* To have complete capture route all the time */
- DAPM_INPUT("Virtual HiFi IN") /* Will keep AIF/APLL enabled */
- /* To have complete playback route for the voice module */
- DAPM_OUTPUT("Virtual Voice OUT") /* Will keep APLL enabled */
- The DAPM_SUPPLY widgets for APLL and AIF are placed in a way,
- that during any audio activity the needed configuration of AIF
- and APLL will be enabled (playback, capture, analog loopback,
- digital loopback, and voice activity).
- The apll reference counting code has been lifted,
- and modified from Liam Girdwood's earlier patch.
- - ASoC: missing conversions to snd_soc_codec_*_drvdata()
- Conversions to snd_soc_codec_{get|set}_drvdata() were missing in some files
- in the previous commit.
SoC Codec TWL6040
- - ASoC: twl6040: Convert HF and HS drivers to use DAPM OUT_DRV widget
- Make the phoenix HS and HF drivers use the new DAPM driver
- widget in order to guarantee power ON/OFF order sequence.
- - ASoC: twl6040: Add ramp up/down volume for HS and HF
- Add ramp functions for the headset and handsfree outputs
- in order to reduce the pops during power on/off sequences.
- In order to give more control to volume ramp, step size and delay
- between steps can be specified.
- The patches are based on wm8350 implementation from Liam
- Girdwood.
- - ASoC: twl6040: Set default gains to minimun value
- Updated default values to improve power consumption.
- - ASoC: twl6040: Use correct offset for LineInAmp Right
- Gain for LineInAmp Right uses LINEGAIN[5:3], which means that
- offset for right channel should be 4.
- - ASoC: twl6040: Fix TLV dB step values for gains
- Some gains were incorrectly configured for dB values.
- - ASoC: twl6040: Increase timeout for power up
- After coming back from suspend, the timeout waiting for Phoenix
- chip to complete its power up sequence is not enough, which leaves
- the codec cache value for some registers in an outdated state.
- Increase the timeout value to wait for the power up sequence
- to correclty complete.
- - ASoC: twl6040: Enable plug detection interrupts
- Enable plug detection interrupt mask in order to get headset
- PLUGINT/UNPLUGINT interrupts.
- - ASoC: twl6040: Clear interrupt status at boot time
- On Phoenix 1.1, the INTID register default value is an invalid
- one, causing the interrupt handler to think the phoenix power on
- sequence is ready before it actually finishes.
- This causes some i2c errors when trying to configure twl.
- - ASoC: twl6040: Enable automatic power for phoenix 1.1
- Phoenix 1.1 supports automatic power on sequence, a
- verification is added to use it with new revision of
- the chip.
- - ASoC: twl6040: Fix analog Mic L & R mux controls
- The mux control has 4 elements not 3
- - ASoC: twl6040: Support other sample rates.
- The twl6040 can support more sample rates other than 88.2 and 96k.
- - ASoC: twl6040: Fix PCM error handling ops
- This patch moves all the PCM error handling for clock config
- out of trigger() and startup() and into prepare().
- - ASoC: twl6040: Restore bias level at resume
- This patch restores the CODEC bias level at resume().
- - ASoC: twl6040: Add headset and handset mux controls
- This patch adds support for the twl6040 headset and handset
- MUX controls.
- - ASoC: twl6040: Modify the IRQ handler
- Multiples interrupts can be received. The irq handler is modified
- to attend all of them.
- - ASoC: twl6040: Update twl IO macro
- Update the codec to use the new twl core register macros
- - ASoC: twl6040: Add jack support for headset and handset
- This patch adds support for reporting twl6040 headset and
- handset jack events.
- The machine driver retrieves and report the status through
- twl6040_hs_jack_detect.
- A workq is used to debounce of the irq.
- - ASoC: TWL6040: Correct widget handling for drivers
- In order to reduce pop-noise at powering up/down of the DACs and Drivers,
- these components have to be handled in a specific sequence. Headset,
- Handsfree, and Earphone drivers are now registered as PGA components to
- ensure DACs are enabled first.
- Also, add a delay to leave time for DACs to settle before
- continuing power up/down sequence.
- - ASoC: TWL6040: Fix playback with 19.2 Mhz MCLK
- When using MCLK is configured for 19.2 Mhz, clock slicer should be
- enabled and HPPLL should be bypassed in clock path.
- - ASoC: TWL6040: Enable earphone path in codec
- Add control to enable earphone driver in TWL6040 codec. This driver
- is connected to HSDAC Left.
- - ASoC: missing conversions to snd_soc_codec_*_drvdata()
- Conversions to snd_soc_codec_{get|set}_drvdata() were missing in some files
- in the previous commit.
SoC Codec WL1273
- - ASoC: WL1273 FM radio: Fix breakage with MFD API changes
- 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.
- - ASoC: Do not include soc-dai.h
- There is no need to include soc-dai.h since soc.h includes it. Convert
- drivers to include only soc.h.
- - ASoC: WL1273 FM Radio: Eliminate unnecessary error return value.
- With this change it's not a error to call wl1273_set_audio_route
- when the codec is active if the new routing value is the same
- as the current active setting.
- - ASoC: TI WL1273 FM Radio Codec.
- This is an ALSA codec for the Texas Instruments WL1273 FM Radio.
SoC Codec WM2000
- - ASoC: Default WM2000 ANC and speaker to enabled
- The most useful configuration for the WM2000 is to enable the ANC so turn
- that on by default, and since we're not reflecting chip default state also
- enable the speaker output by default.
- - ASoC: wm2000: remove unused #include <linux/version.h>
- Remove unused #include <linux/version.h>('s) in
- sound/soc/codecs/wm2000.c
SoC Codec WM8350
- - ASoC: Use delayed work to debounce WM8350 jack IRQs
- This avoids blocking the IRQ thread and allows further bounces to extend
- the debounce time.
- - ASoC: Yet more x86 tracepoint workarounds
- - ASoC: ifdef out trace points from modules for x86
- No idea why this works on ARM but not x86.
- - ASoC: Trace Wolfson jack detection IRQs
- Add jack detection interrupt trace to Wolfson CODEC drivers.
- - ASoC: Ensure sane WM835x AIF configuration by default
- Ensure that whatever ran before us leaves the WM835x with a sane default
- audio interface configuration as we do not override the companding,
- loopback or tristate settings and do not reset the chip at startup (as it
- is a PMIC).
- Reported-by: Keiji Mitsuhisa <Keiji.Mitsuhisa@wolfsonmicro.com>
- - ASoC: Remove broken WM8350 direction constants
- The WM8350 driver was using some custom constants to interpret the direction
- of the MCLK signal which had the opposite values to those used as standard
- by the ASoC core, causing confusion in machine drivers such as the 1133-EV1
- board.
- Reported-by: Tommy Zhu <Tommy.Zhu@wolfsonmicro.com>
- - ASoC: Fix dB scales for WM835x
- These should be regular rather than linear scales.
SoC Codec WM8400
- - ASoC: Fix dB scales for WM8400
- These scales should be regular, not linear.
SoC Codec WM8510
- - ASoC: Remove unneeded use of spi_bus_type
- No need to explicitly set the bus type, spi_register_driver does
- that for us.
- - ASoC: Remove unneeded control_data management from Wolfson drivers
- Now soc-cache.c can figure out the I2C and SPI control data from the
- device for the CODEC we don't need to manually assign it in drivers.
- - ASoC: Remove version display from WM8510 driver
SoC Codec WM8523
- - ASoC: Avoid direct register cache access when setting defaults
- Directly accessing the register cache means that we can't use anything
- except a flat register cache so use snd_soc_update_bits().
- - ASoC: Update users of readable_register()/volatile_register()
- - ASoC: codecs: wm8523: Fix register cache incoherency
- The multi-component patch(commit f0fba2ad1) moved the allocation of the
- register cache from the driver to the ASoC core. Most drivers where adjusted to
- this, but the wm8523 driver still uses its own register cache for its
- private functions, while functions from the ASoC core use the generic cache.
- Thus we end up with two from each other incoherent caches, which can lead to
- undefined behaviour.
- This patch fixes the issue by changing the wm8523 driver to use the
- generic register cache in its private functions.
- - ASoC: Fix multi-component mismerge in WM8523
- - ASoC: Remove unneeded control_data management from Wolfson drivers
- Now soc-cache.c can figure out the I2C and SPI control data from the
- device for the CODEC we don't need to manually assign it in drivers.
- - ASoC: wm8523: fix resource reclaim in wm8523_register error path
- This patch includes below fixes:
- 1. If another WM8523 is registered, need to kfree wm8523 before return -EINVAL.
- 2. If snd_soc_register_codec failed, goto error path to properly free resources.
- 3. Instead of using mixed in-line and goto style cleanup, use goto style error
- handling if snd_soc_register_dai failed.
SoC Codec WM8580
- - ASoC: WM8580: Debug interface index
- We want the index of DAI's driver here.
- - ASoC: WM8580: Fix R8 initial value
- Acc to WM8580 manual, the default value for R8 is 0x10, not 0x1c.
- - ASoC: WM8580: Debug BCLK and sample size
- In case of SNDRV_PCM_FORMAT_S32_LE, we need to set WM8580_AIF_LENGTH_32,
- rather than WM8580_AIF_LENGTH_24.
- Also, the BCLK has to be 64fs, for sample size of 20, 24 and 32 bits.
- - ASoC: Remove unneeded use of address-of operator
- There is no need to use '&' in this case. Either way, if a is an array
- of some type, then a == &a == &a[0].
- - ASoC: WM8580: Remove useless assignment
- The variable is not used anyway.
- - ASoC: Fix incorrect register cache size configuration
- The reg_cache_size is the number of elements in the register cache,
- not the size of the cache itself. This is not a problem if the size
- of each element of the cache is 1 byte but it matters in any other
- case.
- - ASoC: Fix argument ordering for snd_soc_update_bits() in WM8580
- Reported-by: Seungwhan Youn <claude.youn@gmail.com>
- - ASoC: Fix WM8580 CLKSEL mask selection
- The RX and TX directions were inverted.
- Reported-by: Seungwhan Youn <claude.youn@gmail.com>
- - ASoC: Automatically manage WM8580 DAC OSR
- The DAC OSR should be selected based on the sample clock ratio.
- - ASoC: Fix inverted WM8580 capture mute control
- - ASoC: Implement BCLK rate selection for WM8580
- Drive a minimal supported number of clocks required for the current
- bit format in master mode. In slave mode this setting has no effect.
- - ASoC: Automatically calculate clock ratio for WM8580
- Implement set_sysclk() and then rather than assuming 256fs use the
- supplied value to calculate and configure the clock ratio for the
- currently used sample rate. As a side effect we also end up
- implementing clock selection for the ADC path.
- In order to avoid confusion remove the existing set_clkdiv() based
- configuration of the clock source for the DAC and update the SMDK64xx
- driver (which is the only in-tree user of the CODEC).
- - ASoC: Remove unused rate selection bitmasks from WM8580
- In the case of the BCLK rate the defines are at best misleading anyway.
- - ASoC: Convert WM8580 hw_params to use snd_soc_update_bits()
- All the cool kids are using snd_soc_update_bits() these days.
- - ASoC: Remove unneeded control_data management from Wolfson drivers
- Now soc-cache.c can figure out the I2C and SPI control data from the
- device for the CODEC we don't need to manually assign it in drivers.
- - ASoC: Correct WM8580 Capture control names
- Should use Capture rather than ADC so the UI tools can identify their
- function more readily.
- - ASoC: Fix inverted mute controls for WM8580
SoC Codec WM8711
- - ASoC: Remove unneeded use of spi_bus_type
- No need to explicitly set the bus type, spi_register_driver does
- that for us.
- - ASoC: Fix incorrect register cache size configuration
- The reg_cache_size is the number of elements in the register cache,
- not the size of the cache itself. This is not a problem if the size
- of each element of the cache is 1 byte but it matters in any other
- case.
- - ASoC: Remove unneeded control_data management from Wolfson drivers
- Now soc-cache.c can figure out the I2C and SPI control data from the
- device for the CODEC we don't need to manually assign it in drivers.
- - ASoC: wm8711: fix a memory leak if another WM8711 is registered
- wm8711 is allocated in either wm8711_spi_probe() or wm8711_i2c_probe() but is
- not freed if wm8711_register() return -EINVAL(if another ad1836 is registered).
SoC Codec WM8727
- - ASoC: Staticise WM8727 codec driver structure
- Nothing should be referencing this any more.
- - ASoC: wm8727: add a missing return in wm8727_platform_probe
- otherwise the error path will always be executed.
SoC Codec WM8728
- - ASoC: Remove unneeded use of spi_bus_type
- No need to explicitly set the bus type, spi_register_driver does
- that for us.
- - ASoC: Fix incorrect register cache size configuration
- The reg_cache_size is the number of elements in the register cache,
- not the size of the cache itself. This is not a problem if the size
- of each element of the cache is 1 byte but it matters in any other
- case.
SoC Codec WM8731
- - ASoC: Automatically manage WM8731 deemphasis
- The deemphasis filter should be selected based on sample rate for
- optimal performance.
- - ASoC: Split WM8731 enumeration array into individual enums
- This is much more maintainable than the array.
- - ASoC: Provide WM8731 microphone boost TLV information
- - ASoC: WM8731: Fix incorrect mask for bypass path disable
- According to the datasheet the bypass path enable/disable is
- bit 3 therefore we need 0x8 and not 0x4.
- - ASoC: Fix incorrect kfree in wm8731_probe error path
- We allocated memory for wm8731 in wm8731_spi_probe / wm8731_i2c_probe,
- and will free the memory in either wm8731_spi_probe / wm8731_i2c_probe
- error path or wm8731_spi_remove / wm8731_i2c_remove.
- Thus we should not call kfree(wm8731) in wm8731_probe, otherwise
- we have double free of wm8731.
- - ASoC: Remove unneeded use of spi_bus_type
- No need to explicitly set the bus type, spi_register_driver does
- that for us.
- - ASoC: Fix incorrect register cache size configuration
- The reg_cache_size is the number of elements in the register cache,
- not the size of the cache itself. This is not a problem if the size
- of each element of the cache is 1 byte but it matters in any other
- case.
- - ASoC: Use more idiomatic driver name for WM8731
- Make dev_() prints much prettier.
- - ASoC: Refactor WM8731 regulator management into bias management
- This allows more flexible integration with subsystem features.
SoC Codec WM8737
- - ASoC: Remove redundant hw_write initialisation in WM8737
- - ASoC: Add WM8737 ALC support
- - ASoC: Add initial WM8737 driver
- The WM8737 is a low power, flexible stereo ADC designed for portable
- applications. This driver supports most of the functionality of the
- WM8737, though some features such as the ALC are not yet implemented.
SoC Codec WM8741
- - ASoC: Avoid direct register cache access when setting defaults
- Directly accessing the register cache means that we can't use anything
- except a flat register cache so use snd_soc_update_bits().
- - ASoC: codecs: wm8741: Fix register cache incoherency
- The multi-component patch(commit f0fba2ad1) moved the allocation of the
- register cache from the driver to the ASoC core. Most drivers where adjusted to
- this, but the wm8741 driver still uses its own register cache for its
- private functions, while functions from the ASoC core use the generic cache.
- Thus we end up with two from each other incoherent caches, which can lead to
- undefined behaviour.
- This patch fixes the issue by changing the wm8741 driver to use the
- generic register cache in its private functions.
- - ASoC: Remove unneeded use of address-of operator
- There is no need to use '&' in this case. Either way, if a is an array
- of some type, then a == &a == &a[0].
- - ASoC: Complete supported clock ratios and rate constraints for wm8741
- - ASoC: Make codec dai naming for WM8741 consistent
- - ASoC: Initial WM8741 CODEC driver
- The WM8741 is a very high performance stereo DAC designed for audio
- applications such as professional recording systems, A/V receivers and
- high specification CD, DVD and home theatre systems. The device supports
- PCM data input word lengths from 16 to 32-bits and sampling rates up to
- 192kHz. The WM8741 also supports DSD bit-stream data format, in both
- direct DSD and PCM-converted DSD modes.
- TODO: Expand wm8741_set_dai_sysclk and rate_constraint members to
- allow for all supported sample rate / Master Clock frequency combinations.
- Fully enable control of supplies.
SoC Codec WM8750
- - ASoC: codec: Add WM8987 device id to WM8750 driver
- The WM8987 codec is register compatible with the WM8750, so just add it to the
- SPI and I²C device table.
SoC Codec WM8753
- - ASoC: codecs: wm8753: Fix register cache incoherency
- The multi-component patch(commit f0fba2ad1) moved the allocation of the
- register cache from the driver to the ASoC core. Most drivers where adjusted to
- this, but the wm8753 driver still uses its own register cache for its
- private functions, while functions from the ASoC core use the generic cache.
- Furthermore the generic cache uses zero-based numbering while the wm8753 cache
- uses one-based numbering.
- Thus we end up with two from each other incoherent caches, which leads to undefined
- behaviour and crashes.
- This patch fixes the issue by changing the wm8753 driver to use the generic
- register cache in its private functions.
- - ASoC: wm8753, remove dead code
- There is adangling code in wm8753_probe which is never executed.
- Remove it.
SoC Codec WM8770
- - ASoC: WM8770: Initial driver
- The WM8770 is a high performance, multi-channel audio
- codec. The WM8770 is ideal for surround sound processing
- applications for home hi-fi, automotive and other audio
- visual equipment.
SoC Codec WM8776
- - ASoC: WM8776: Removed unneeded struct member
- The member reg_cache is not used at all and therefore it should be
- removed. This member was usually needed for older versions of ASoC
- that did not handle caching automatically and had to be done in the
- driver itself.
- - ASoC: Remove DSP mode support for WM8776
- This is not supported by current hardware revisions.
- - ASoC: Remove duplicate AUX definition from WM8776
SoC Codec WM8804
- - ASoC: checking kzalloc() for IS_ERR() instead of NULL
- There is a typo here that got copy and pasted to several probe
- functions. kzalloc() returns NULL on allocation failures and not an
- ERR_PTR.
- - ASoC: WM8804: Retrieve the device revision and print it
- Be verbose and print out the device revision.
- - ASoC: WM8804: Power down the PLL correctly
- The PLL is disabled when the corresponding bit is set not the other
- way around. This commit depends on my other commit with Subject
- "ASoC: WM8804: Refactor set_pll code to avoid GCC warnings".
- - ASoC: WM8804: Refactor set_pll code to avoid GCC warnings
- Ensure that no uninitialised variable warnings are generated by
- GCC.
- - ASoC: WM8804: Use a proper DAI name
- Make sure the DAI name does not include a '/' since we might have
- per DAI debugfs or sysfs entries in the future.
- - ASoC: WM8804: Initial driver
- The WM8804 is a high performance consumer mode S/PDIF transceiver with
- support for 1 received channel and 1 transmitted channel.
SoC Codec WM8900
- - ASoC: Remove volatility from WM8900 POWER1 register
- Not all bits can be read back from POWER1 so avoid corruption when using
- a read/modify/write cycle by marking it non-volatile - the only thing we
- read back from it is the chip revision which has diagnostic value only.
- We can re-add later but that's a more invasive change than is suitable
- for a bugfix.
SoC Codec WM8903
- - ASoC: Fix double comment start
- - ASoC: Remove incorrect WM8903 erratum workaround
- Due to a typographical error in the erratum workaround it was never
- functional so just remove it.
- - ASoC: ifdef out trace points from modules for x86
- No idea why this works on ARM but not x86.
- - ASoC: Trace Wolfson jack detection IRQs
- Add jack detection interrupt trace to Wolfson CODEC drivers.
- - ASoC: Remove some unused defines from WM8903
- These would have been used if we'd done manual clock divider setup,
- but we didn't.
- - ASoC: Automatically manage WM8903 deemphasis rate
- Provide the user with a boolean control then automatically select
- the deemphasis filter most closely matching the sample rate.
- - ASoC: Remove open coded symmetry implementation from WM8903
- We're already flagged as using symmetric rates so we don't need to
- have a custom implementation.
- - ASoC: Implement WM8903 oversampling rate controls
- - ASoC: Implement WM8903 high pass filter support
SoC Codec WM8904
- - ASoC: Avoid direct register cache access when setting defaults
- Directly accessing the register cache means that we can't use anything
- except a flat register cache so use snd_soc_update_bits().
- - ASoC: codecs: wm8904: Fix register cache incoherency
- The multi-component patch(commit f0fba2ad1) moved the allocation of the
- register cache from the driver to the ASoC core. Most drivers where adjusted to
- this, but the wm8904 driver still uses its own register cache for its
- private functions, while functions from the ASoC core use the generic cache.
- Thus we end up with two from each other incoherent caches, which can lead to
- undefined behaviour.
- This patch fixes the issue by changing the wm8904 driver to use the
- generic register cache in its private functions.
- - ASoC: fix deemphasis control in wm8904/55/60 codecs
- Deemphasis control's .get callback should update control's value instead
- of returning it - return value of callback function is used for indicating
- error or success of operation.
- - ASoC: wm8904 - fix memory leaks
- - ASoC: Remove unnecessary semicolons
- - ASoC: wm8904: fix resource reclaim in wm8904_register error path
- This patch includes below fixes:
- 1. wm8904 need to be kfreed in wm8904_register() error path before return.
- 2. fix the error path for snd_soc_register_codec() fail and
- snd_soc_register_dai() fail to properly free resources.
SoC Codec WM8940
- - ASoC: codecs: Add missing control_type initialization
- Some codec drivers do not initialize the control_type field in their private
- device struct, but still use it when calling snd_soc_codec_set_cache_io.
- This patch fixes the issue by properly initializing it in the drivers probe
- functions.
- - ASoC: Remove unnecessary semicolons
- - ASoC: wm8940: fix a memory leak if wm8940_register return error
- This patch adds checking for wm8940_register return value,
- and does kfree(wm8940) if wm8940_register() fail.
SoC Codec WM8955
- - ASoC: Avoid direct register cache access when setting defaults
- Directly accessing the register cache means that we can't use anything
- except a flat register cache so use snd_soc_update_bits().
- - ASoC: codecs: wm8955: Fix register cache incoherency
- The multi-component patch(commit f0fba2ad1) moved the allocation of the
- register cache from the driver to the ASoC core. Most drivers where adjusted to
- this, but the wm8955 driver still uses its own register cache for its
- private functions, while functions from the ASoC core use the generic cache.
- Thus we end up with two from each other incoherent caches, which can lead to
- undefined behaviour.
- This patch fixes the issue by changing the wm8955 driver to use the
- generic register cache in its private functions.
- - ASoC: codecs: Add missing control_type initialization
- Some codec drivers do not initialize the control_type field in their private
- device struct, but still use it when calling snd_soc_codec_set_cache_io.
- This patch fixes the issue by properly initializing it in the drivers probe
- functions.
- - ASoC: fix deemphasis control in wm8904/55/60 codecs
- Deemphasis control's .get callback should update control's value instead
- of returning it - return value of callback function is used for indicating
- error or success of operation.
- - ASoC: wm8955: fix resource reclaim in wm8955_register error path
- This patch fixes the error path in wm8955_register to properly free resources.
SoC Codec WM8960
- - ASoC: Move widgets from DAPM context to snd_soc_card
- Decoupling widgets from DAPM context is required when extending the ASoC
- core to cross-device paths. Even the list of widgets are now kept in
- struct snd_soc_card, the widget listing in sysfs and debugs remain sorted
- per device.
- This patch makes possible to build cross-device paths but does not extend
- yet the DAPM to handle codec bias and widget power changes of an another
- device.
- Cross-device paths are registered by listing the widgets from device A in
- a map for device B. In case of conflicting widget names between the devices,
- a uniform name prefix is needed to separate them. See commit ead9b91
- "ASoC: Add optional name_prefix for kcontrol, widget and route names" for
- help.
- An example below shows a path that connects MONO out of A into Line In of B:
- static const struct snd_soc_dapm_route mapA[] = {
- {"MONO", NULL, "DAC"},
- };
- static const struct snd_soc_dapm_route mapB[] = {
- {"Line In", NULL, "MONO"},
- };
- - ASoC: codecs: Add missing control_type initialization
- Some codec drivers do not initialize the control_type field in their private
- device struct, but still use it when calling snd_soc_codec_set_cache_io.
- This patch fixes the issue by properly initializing it in the drivers probe
- functions.
- - ASoC: fix deemphasis control in wm8904/55/60 codecs
- Deemphasis control's .get callback should update control's value instead
- of returning it - return value of callback function is used for indicating
- error or success of operation.
- - ASoC: Automatically manage ALC coefficients for WM8960
- - ASoC: Automatically manage DAC deemphasis rate for WM8960
- - ASoC: Remove current WM8960 deemphasis control
- It will be replaced with automatic deemphasis rate configuration but since
- we have an enumeration table in this driver this is done in a separate
- commit to make the renumbering of the enumeration items clear.
- - ASoC: Remove redundant WM8960 SYSCLKSEL clkdiv option
- The SYSCLK source is automatically managed when configuring the PLL.
SoC Codec WM8961
- - ASoC: wm8961 - clear WM8961_MCLKDIV bit for freq <= 16500000
- MCLKDIV bit of Register 04h Clocking1:
- 0 : Divide by 1
- 1 : Divide by 2
- Thus in the case of freq <= 16500000, we should clear MCLKDIV bit.
- - ASoC: wm8961 - clear WM8961_DACSLOPE bit for normal mode
- DACSLOPE bit of Register 06h ADC and DAC Control 2:
- 0: Normal mode
- 1: Sloping stop-band mode
- Thus in the case of normal mode, we should clear DACSLOPE bit.
- - ASoC: Remove unused driver data from WM8961 probe
- - ASoC: wm8961: fix resource reclaim in wm8961_register error path
- This patch fixes the error path in wm8961_register to properly free resources.
SoC Codec WM8962
- - ASoC: One more x86 typo fix
- - ASoC: Fix typo in x86 workaround
- - ASoC: ifdef out trace points from modules for x86
- No idea why this works on ARM but not x86.
- - ASoC: Trace Wolfson jack detection IRQs
- Add jack detection interrupt trace to Wolfson CODEC drivers.
- - ASoC: codecs: wm8962: Fix register cache incoherency
- The multi-component patch(commit f0fba2ad1) moved the allocation of the
- register cache from the driver to the ASoC core. Most drivers where adjusted to
- this, but the wm8962 driver still uses its own register cache for its
- private functions, while functions from the ASoC core use the generic cache.
- Thus we end up with two from each other incoherent caches, which can lead to
- undefined behaviour.
- This patch fixes the issue by changing the wm8962 driver to use the
- generic register cache in its private functions.
- - ASoC: Correct WM8962 interrupt mask register read
- Fix mismerge from the out of tree BSP where this support was developed.
- - ASoC: Fix incorrect kfree in wm8962_probe error path
- We allocated memory for wm8962 in wm8962_i2c_probe,
- and will free the memory in either wm8962_i2c_probe error path
- or wm8962_i2c_remove.
- Thus we should not call kfree(wm8962) in wm8962_probe, otherwise
- we have double free of wm8962.
- - ASoC: Reset WM8962 with default ID value
- The value makes no odds and it makes life easier with caches.
- - ASoC: Use pm_wakeup_event() in WM8962 jack detection
- Ensure that the system does not suspend while we process a WM8962 jack
- event by using pm_wakeup_event() to block the suspend while we're waiting
- for the jack to settle. Use a slightly longer timeout than the jack waits
- to allow for other stuff to take over and delays in scheduling.
- - ASoC: Check return value of strict_strtoul() in WM8962
- strict_strtoul() has been made __must_check so do so.
- - ASoC: Add WM8962 microphone bias control
- We unconditionally require SYSCLK since while only microphone detection
- specifically requires SYSCLK any actual use case would enable it via
- some other means but microphone detection may have nothing active other
- than the bias itself.
- - ASoC: Compress WM8962 register access map
- Reduce the source code size still futher by only specifying non-zero
- rows in the WM8962 access map.
- - ASoC: Shrink code size for WM8962 register defaults table
- Dramatically reduce the code size for the WM8962 register defaults table
- by switching to explicitly initialise only defined registers, relying on
- static defaulting to zero for the overwelming bulk of the register map.
- Similar treatement for the register access table will come later and will
- produce a similarly dramatic code size shrink.
- - ASoC: Put WM8962 GPIO2/3 into GPIO mode when configuring platform data too
- GPIO2 and GPIO3 on the WM8962 are MFPs and need to be put into GPIO mode
- before the GPIO block can be used to control them. We're already doing
- this when used via gpiolib, factor out the code for use when setting static
- configurations via platform data as well.
- - ASoC: Implement interrupt based jack detection
- Allow microphone detection on WM8962 to be performed using the interrupt
- signal, allowing the detection of both microphone presence and button
- presses with a signal singal from the CODEC to CPU. Currently a 250ms
- debounce time is applied to both short circuit and presence detection,
- this has not been optimised.
- - ASoC: Add support for WM8962 GPIO outputs
- The WM8962 features five GPIOs, add support for controlling their output
- state via gpiolib.
- - ASoC: Relax restrictions on WM8962 BCLK configuration
- The restrictions on configuring BCLK are overly cautious, other constraints
- in the system should ensure that reconfiguration is not possible when the
- device is sufficiently active to be unable to support reclocking.
- - ASoC: Provide microphone bias configuration for WM8962
- Add the widget for MICBIAS power control and allow configuration of the
- microphone bias setup via the platform data for the WM8962. When
- microphone status signals are brought out to GPIO this should be
- sufficient to enable microphone detection.
- - ASoC: Mark WM8962 Additional Control 4 register as volatile
- There are some status bits for microphone detection in here.
- - ASoC: Initial WM8962 IRQ support
- Provide an initial hookup for interrupts on the WM8962. Currently we simply
- report error status via log messages if an IRQ is provided for the device.
- - ASoC: Lowercase WM8962 CODEC name
- For consistency.
- - ASoC: Fix masking of WM8962 FLL1 register
- When configuring the FLL we preserve the FLL enable configuration in order
- to allow us to reenable the FLL after configuration but we do not clear
- the other bits in the register, causing old configuration to be preserved.
- - ASoC: Fix merge issue with WM8962 control addition
- Let's not add the core controls twice.
- - ASoC: Fix off-by-one bug in WM8962 register cache size configuration
- This is a simple off-by-one bug, the size of the register cache is
- incorrectly set to the maximum register index. Fix it by adding one.
- - ASoC: Update WM8962 to build with multi-component
- No notable changes, currently build tested only.
- - ASoC: Add initial WM8962 CODEC driver
- The WM8962 is a low power, high performance stereo CODEC designed for
- portable digital audio applications.
- This initial driver release supports the key audio paths of the WM8962.
- Extended functionality, such as microphone detection, digital microphones
- and the advanced DSP signal enhancements provided by the device are not
- yet supported.
SoC Codec WM8971
- - ASoC: codecs: Add missing control_type initialization
- Some codec drivers do not initialize the control_type field in their private
- device struct, but still use it when calling snd_soc_codec_set_cache_io.
- This patch fixes the issue by properly initializing it in the drivers probe
- functions.
- - ASoC: Remove version display from WM8971 driver
SoC Codec WM8974
- - ASoC: Remove unused WM8974 private data
- - ASoC: wm8974: fix a memory leak if another WM8974 is registered
- wm8974 is allocated in wm8974_i2c_probe() but is not freed if wm8974_register()
- return -EINVAL (if another WM8974 is registered).
- - ASoC: Correct inversion of speaker mixer PCM switch
- Reported-by: Anti Sullin <anti.sullin@artecdesign.ee>
SoC Codec WM8978
- - ASoC: Fix WM8978/migor driver name conflict
- Standardise on 'wm8978' as the name for the CODEC.
- Reported-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
- - ASoC: wm8978: fix a memory leak if a wm8978_register fail
- There is a memory leak found if wm8978_register() fail.
- This patch moves the buffer allocate and release
- at the same level to prevent the memory leak.
- Reviewed-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
SoC Codec WM8985
- - ASoC: checking kzalloc() for IS_ERR() instead of NULL
- There is a typo here that got copy and pasted to several probe
- functions. kzalloc() returns NULL on allocation failures and not an
- ERR_PTR.
- - ASoC: WM8985: Use the correct macro for the kcontrol defined
- Since we are using custom get/put handlers
- use SOC_ENUM_SINGLE_EXT_DECL instead of the original SOC_ENUM_SINGLE_DECL
- macro.
- - ASoC: Fix a compile warning for printk format
- sound/soc/codecs/wm8985.c: In function 'wm8985_hw_params':
- sound/soc/codecs/wm8985.c:731:2: warning: format '%d' expects type 'int', but argument 4 has type 'size_t'
- Actually the variable is fine as int.
- - ASoC: WM8985: Remove unneeded declaration.
- We are not using the private data in this function, so get rid of it.
- - ASoC: WM8985: Initial driver
- The WM8985 is a low power, high quality, feature-rich stereo
- CODEC designed for portable multimedia applications that
- require low power consumption and high quality audio.
SoC Codec WM8988
- - ASoC:: remove a redundant snd_soc_unregister_codec call in wm8988_register
- snd_soc_unregister_codec is called twice if snd_soc_register_dai fail.
SoC Codec WM8990
- - ASoC: WM8990: msleep() takes milliseconds not jiffies
- - ASoC: Remove version display from WM8990
- It's not needed and the version number never gets updated anyway.
- - ASoC: Fix dB scales for WM8990
- These should be regular, not linear.
SoC Codec WM8991
- - ASoC: WM8991: Add initial WM8991 driver
- The WM8991 is a highly integrated ultra-low power hi-fi CODEC designed for
- handsets rich in multimedia features such as GPS, mobile TV, digital audio
- playback and gaming.
- This driver was originally written by Graeme Gregory and has been maintained
- out of tree by Mark Brown and Dimitris Papastamos.
SoC Codec WM8993/4
- - ASoC: Handle low measured DC offsets for wm_hubs devices
- The DC servo codes are actually signed numbers so need to be treated as
- such.
- - ASoC: Explicitly clear WM8993 ramp controls on power down
- This helps ensure that the ramp logic is reset when powering back up.
- - ASoC: Fix swap of left and right channels for WM8993/4 speaker boost gain
- SPKOUTL_BOOST start from third bit, SPKOUTLR_BOOST start from 0 bit.
- - ASoC: Use DC servo startup mode when not doing DCS correction
- Devices which do not have a DCS correction applied can use the explicit
- DC servo startup mode for optimal startup performance. This most
- immediately affects the WM8958.
- - ASoC: Remove unnecessary semicolons
- - ASoC: Store DC offset correction for wm_hubs devices in class W mode
- Providing the analogue configuration of the output path remains the same
- the DC offset corrected by the DC servo will remain identical so we can
- skip the callibration, reducing the startup time for the headphone output.
- Implement this for the wm_hubs devices as has been done for several other
- CODECs.
- Don't do this if we have any analogue paths enabled since offsets may be
- being introduced by the analogue paths which could vary outside the
- control of the driver.
- - ASoC: Update WARN uses in wm_hubs
- Add missing newlines.
- - ASoC: Explicitly disable DC servo on WM hubs headphone powerdown
- - ASoC: Reorder power down sequence for WM hubs devices
- Disable the output stage prior to the delay stage rather than the
- other way around. Fixes merge issue with previous headphone output
- path corrections.
- - ASoC: Add additional WM hubs DC servo trace
- Log the values we're getting back from the DC servo and the values we
- write to it.
SoC Codec WM8994
- - ASoC: WM8994: fix wrong value in tristate function
- fix wrong value in wm8994_set_tristate func. when updating reg bits,
- it should use "value", not "reg".
- - ASoC: Allow user-specified WM8958 multiband compressor configurations
- The paramters of the WM8958 multiband compressor can be tuned by the
- user for their system using a graphical configuration tool on the host.
- Allow the user to specify a set of such paramters in platform data and
- select between them at runtime.
- - ASoC: Yet more x86 tracepoint workarounds
- - ASoC: Trace Wolfson jack detection IRQs
- Add jack detection interrupt trace to Wolfson CODEC drivers.
- - ASoC: Fix WM8994/58 3D stereo control definitions
- Cut'n'paste in the register names.
- - ASoC: Fix widgets for WM8994/58 AIF2 source control
- The compiler really ought to have been warning about unreferenced
- variables...
- - ASoC: Implement WM8994/58 DAC and ADC oversampling control
- The oversampling rate of the DAC and ADC can be controlled to optimise
- for either low power consumption or maximum performance.
- - ASoC: Add ADC high pass filter support to WM8994
- - ASoC: Support WM8994 mono AIF configurations
- The WM8994 supports mono signals - enable this in the driver. With DSP
- mode an automatic data channel selector is available, activate this
- when in mono mode.
- - ASoC: When disabling WM8994 FLL force a source selection
- When we disable the WM8994 FLL code path sharing means that we end up
- writing out a configuration. Currently this is the currently active
- input and output frequency (which causes snd_soc_update_bits() to
- suppress actual writes both immediately and in the common case where
- we reenable the same configuration later) but we allow machine drivers
- to pass through a source of zero. Since the register values written
- are one less than the source constants this causes corruption of other
- bitfields in the register.
- Fix this by using the most recently configured FLL source when none is
- provided.
- - ASoC: Tune performance of WM8958 revision A
- Update some of the default configuration for the device to improve
- the performance.
- - ASoC: Correct event flags for WM8958 AIF DACs
- We need a post notification as we need to shut down the MBC after the
- data stops flowing rather than before.
- - ASoC: Implement runtime PM for WM8994/58
- This allows us to communicate our power management state back to the
- parent device, allowing it to do a full power down when the device is
- idle.
- - ASoC: Enable rbtree compression for WM8994/58 register cache
- The WM8994 and WM8958 register map is relatively sparse so benefits
- from compression. The rbtree compression gives better results than
- LZO for both memory and CPU consumption on a map as sparse as this.
- - ASoC: Convert WM8994 to use soc-cache.c cache functions
- In the process we convert the driver to read registers one at a time
- when initialising the cache. This has the effect of working around
- limitations in the sizes of I2C transactions which can be done by some
- CPUs. Due to the sparseness of the register map the overhead from this
- should be minimual unless I2C transactions are very expensive to start.
- - ASoC: Add WM8958 microphone detection support
- The WM8958 contains an advanced accessory detection feature which allows
- detection of up to seven different impedence levels on the microphone
- bias output, including detection of video outputs. Since some of the
- more involved accessory interfaces may involve noticable interactions
- with external components a simple detection scheme is provided by
- default with the option to provide custom handling of accessory detect.
- - ASoC: Add WM8958 Multi-band compressor support
- The WM8958 features a multi-band compressor which can be enabled on
- any of the AIF inputs. The MBC allows different gains to be applied to
- differnt audio bands, providing an improvement in perceived loudness
- of the signal by avoiding overdriving the output transducers. This
- patch enables support for the MBC.
- - ASoC: Implement support for enhanced AIF3 on WM8958
- Additional audio routing options are available on the WM8958 audio
- interface 3. Add support for these.
- - ASoC: Initial WM8958 audio configuration
- The WM8958 is a WM8994 derivative. This patch merely ensures that some
- revision specific configuration for WM8994 is not enabled on WM8994,
- additional patches will add support for the new features introduced on
- the WM8958.
- - ASoC: wm8994 - fix memory leaks
- - ASoC: Restore WM8994 volatile and readable register operations
- They went AWOL during the multi-component merge.
- - ASoC: Move WM8994 read/write access data into separate file
- Makes the WM8994 driver file itself substantially smaller.
- - ASoC: Provide ADC left/right channel source selection on WM8994
- Allow the application to choose if the ADC data presented on the left
- and right channels is sourced from the internal left or right channel.
- This allows a mono recording to be presented as stereo on the external
- bus.
- - ASoC: Remove register write trace from WM8994
- We now have trace in the ASoC core so we don't need to our own trace in
- the driver.
- - ASoC: Fix register cache setup WM8994 for multi-component
- During the multi-component conversion the WM8994 register cache init
- got lost.
- - ASoC: Store DC offset correction for wm_hubs devices in class W mode
- Providing the analogue configuration of the output path remains the same
- the DC offset corrected by the DC servo will remain identical so we can
- skip the callibration, reducing the startup time for the headphone output.
- Implement this for the wm_hubs devices as has been done for several other
- CODECs.
- Don't do this if we have any analogue paths enabled since offsets may be
- being introduced by the analogue paths which could vary outside the
- control of the driver.
- - ASoC: Remove unused vol field from WM8994 access mask table
- Remove unused vol from struct access_mask
- Reduces object size ~3kb.
- $ size sound/soc/codecs/wm8994.o*
- text data bss dec hex filename
- 40727 4384 4480 49591 c1b7 sound/soc/codecs/wm8994.o.new
- 43879 4384 4480 52743 ce07 sound/soc/codecs/wm8994.o.old
- - ASoC: Restore DAI ID specification for WM8994
- WM8994 relies on the DAIs having IDs that match the AIF numbers.
- - ALSA: Fix Linux 2.6 merge issues
- - ASoC: Fix cut'n'paste comment in WM8994
- - ASoC: Added a missing 32-bit PCM format, to the wm8994 codec.
- - ASoC: Implement WM8994 DAC data source muxes
- Allow selection of the channel used for input to the AIFnDAC signals.
- This isn't integrated into DAPM since we treat the data as a single
- mono channel until just beyond this selection so it ends up having
- no visible effect on the routing.
- - ASoC: Log WM8994 separate ADC LRCLKs every time we configure
- This makes it that little bit easier to spot the diagnostics in the
- logs.
- - ASoC: Only tweak WM8994 chip configuration on devices up to rev D
- Any subsequent revisions will have these configuration changes applied
- by default.
- - ASoC: Optimise DSP performance for WM8994
- Change the chip defaults to optimise performance of some of the DSP
- functionality.
- - ASoC: Unconditionally enable WM8994 AIF1ADC TDM mode
- AIF1ADC TDM mode has no effect other than causing the ADCDAT line to
- be tristated rather than driven low on clock cycles where there is no
- data to be transmitted. If the clock cycle is idle then there should
- be no devices using the data so tristating should have no adverse
- effects.
- - ASoC: Implement WM8994 AIF1ADC2 paths
- - ASoC: Implement WM8994 OPCLK support
- The WM8994 can output a clock derived from its internal SYSCLK, called
- OPCLK. The rate can be selected as a sysclk, with a division from the
- SYSCLK rate specified (multiplied by 10 since a division of 5.5 is
- supported) and the clock can be disabled by specifying a divisor of
- zero.
- - ASoC: Include WM8994 GPIO and interrupt registers in codec_reg
- Very handy for debug.
- - ASoC: Don't restart unconfigured WM8994 FLLs
- If the FLL is not configured attempting to resume it will produce a
- warning message so skip the resume.
- - ASoC: Add register write logging for WM8994
- - ASoC: Warn on low WM8994 AIFCLK
- - ASoC: Allow unspecified source when stopping WM8994 FLLs
- - ASoC: Tone down debugging for WM8994 class W
- It's a little verbose during path changes.
- - ASoC: Set full range of WM8994 FLL Fratio values
- Use all the available Fratio values when configuring the WM8994 FLL, not
- just 0 and 3, following more complete characterisation of the device
- performance.
- - ASoC: Support FLL input clock selection on WM8994
- The WM8994 FLL can be clocked from one of four inputs, the two MCLKs and
- the LRCLK and BCLK of the AIF associated with the FLL. Allow all four
- inputs to be used rather than defaulting to MCLK1.
SoC Codec WM8995
- - ASoC: WM8995: Fix incorrect use of snd_soc_update_bits()
- In the wm8995_set_tristate() function when updating the register
- bits use the value and not the register index as the value argument.
- - ASoC: WM8995: Add regulator handling code
- - ASoC: WM8995: Remember to flush the cache on resume
- - ASoC: Fix section mismatch in wm8995.c
- __devinitconst can't be used for data referred in driver struct.
- - ASoC: Remove WM8995 write sequencer bitfield definitions
- They're very verbose and extremely repetitive so bulk up the kernel more
- than is ideal. If required we can readd with WRITE_SEQUENCER_n type
- definitions that cover the entire register bank in a few defines.
- - ASoC: Add initial WM8995 driver
- The WM8995 is a digital audio hub CODEC designed for smartphones.
- The current driver supports most of the basic functionality of the
- WM8995.
SoC Codec WM9081
- - ASoC: Optimise WM9081 FLL performance
- Tune the FLL gain for optimal performance according to evaluation
- results.
- - ASoC: wm9081: fix resource reclaim in wm9081_register error path
- This patch fixes the error path in wm9081_register to properly free resources.
SoC Codec WM9090
- - ASoC: codecs: wm9090: Fix register cache incoherency
- The multi-component patch(commit f0fba2ad1) moved the allocation of the
- register cache from the driver to the ASoC core. Most drivers where adjusted to
- this, but the wm9090 driver still uses its own register cache for its
- private functions, while functions from the ASoC core use the generic cache.
- Thus we end up with two from each other incoherent caches, which can lead to
- undefined behaviour.
- This patch fixes the issue by changing the wm9090 driver to use the
- generic register cache in its private functions.
- - ASoC: sound/wm9090: add missing __devexit marker
- This fixes the following warning:
- sound/soc/codecs/wm9090.c:668:12: warning: 'wm9090_i2c_remove' defined but not used
- - ASoC: Add WM9090 amplifier driver
- The WM9090 is a high performance low power audio subsystem, including
- headphone and class D speaker drivers.
- Note that this driver is a standalone CODEC driver and so is only
- immediately suitable for use with the WM9090 as a standalone sound card
- taking line inputs, or with a DAC with no software control. The pending
- ASoC multi-CODEC support will expand the range of systems that can use
- the driver, or system-specific adaptations can be made.
SoC Codec WM9712
- - ASoC: Staticise WM9712 DAI list
SoC Codec alc5621/2/3
- - ASoC: Fix inconsistent meaning of default case while checking alc5623->id
- In alc5623_i2c_probe(),
- the default case for checking alc5623->id behaves the same as case 0x23.
- However, In alc5623_probe() the default case for checking alc5623->id
- becomes to be the same as case 0x21.
- This makes the meaning of default case inconsistent.
- Since we have checked codec id in alc5623_i2c_probe() by comparing
- vid2 with id->driver_data, it is not possible to run into the default case now.
- In case we may add more supported devices to alc5623_i2c_table in the future,
- this patch changes the default case return -EINVAL to let people know that
- they should not run into this case. They should also add a new case accordingly
- for the new id.
- - ASoC: Fix a memory leak in alc5623_i2c_probe error path
- - ASoC: add support for alc562[123] codecs
- This patch is adding support for alc562[123] codecs. It's based
- on the source code available in HP source code and other places.
SoC DaVinci
- - ASoC: da8xx/omap-l1xx: match codec_name with i2c ids
- The codec_name entry for da8xx evm in sound/soc/davinci/davinci-evm.c
- is not matching with the i2c ids in the board file. Without this fix the
- soundcard does not get detected on da850/omap-l138/am18x evm.
- Tested-by: Dan Sharon <dansharon@nanometrics.ca>
- - ASoC: Remove needless inclusion of tlv320aic3x.h from machine drivers
- After multi-component conversion these machine drivers don't actually need
- anything from sound/soc/codecs/tlv320aic3x.h so don't include it.
- - ASoC: davinci-vcif - fix a memory leak
- - ASoC: davinci: fixes for multi-component
- Multi-component commit f0fba2ad broke a few things which this patch should
- fix. Tested on the DM355 EVM. I've been as careful as I can, but it would be
- good if those with access to other Davinci boards could test.
- --
- The multi-component commit put the initialisation of
- snd_soc_dai.[capture|playback]_dma_data into snd_soc_dai_ops.hw_params of the
- McBSP, McASP & VCIF drivers (davinci-i2s.c, davinci-mcasp.c & davinci-vcif.c).
- The initialisation had to be moved from the probe function in these drivers
- because davinci_*_dai changed from snd_soc_dai to snd_soc_dai_driver.
- Unfortunately, the DMA params pointer is needed by davinci_pcm_open (in
- davinci-pcm.c) before hw_params is called. I have moved the initialisation to
- a new snd_soc_dai_ops.startup function in each of these drivers. This fix
- indicates that all platforms that use davinci-pcm must have been broken and
- need to test with this fix.
- --
- The multi-component commit also changed the McBSP driver name from
- "davinci-asp" to "davinci-i2s" in davinci-i2s.c without updating the board
- level references to the driver name. This change is understandable, as there
- is a similarly named "davinci-mcasp" driver in davinci-mcasp.c.
- There is probably no 'correct' name for this driver. The DM6446 datasheet
- calls it the "ASP" and describes it as a "specialised McBSP". The DM355
- datasheet calls it the "ASP" and describes it as a "specialised ASP". The
- DM365 datasheet calls it the "McBSP". Rather than fix this problem by
- reverting to "davinci-asp", I've elected to avoid future confusion with the
- "davinci-mcasp" driver by changing it to "davinci-mcbsp", which is also
- consistent with the names of the functions in the driver. There are other
- fixes required, so it was never going to be as simple as a revert anyway.
- --
- The DM365 only has one McBSP port (of the McBSP platforms, only the DM355 has
- 2 ports), so I've changed the the id of the platform_device from 0 to -1.
- --
- In davinci-evm.c, the DM6446 EVM can no longer share a snd_soc_dai_link
- structure with the DM355 EVM as they use different cpu DAI names (the DM355
- has 2 ports and the EVM uses the second port, but the DM6446 only has 1 port).
- This also means that the 2 boards need different snd_soc_card structures.
- --
- The codec_name entries in davinci-evm.c didn't match the i2c ids in the board
- files. I have only checked and fixed the details of the names used for the
- McBSP based platforms. Someone with a McASP based platform (eg DA8xx) should
- check the others.
- - sound: fixed typos
- - ASoC: davinci-mcasp.c: Return error code in failure
- In this code, 0 is returned on failure, even though other
- failures return -ENOMEM or other similar values.
- A simplified version of the semantic match that finds this problem is as
- follows: (http://coccinelle.lip6.fr/)
- // <smpl>
- @a@
- identifier alloc;
- identifier ret;
- constant C;
- expression x;
- @@
- x = alloc(...);
- if (x == NULL) { <+... \(ret = -C; \| return -C; \) ...+> }
- @@
- identifier f, a.alloc;
- expression ret;
- expression x,e1,e2,e3;
- @@
- ret = 0
- ... when != ret = e1
- *x = alloc(...)
- ... when != ret = e2
- if (x == NULL) { ... when != ret = e3
- return ret;
- }
- // </smpl>
- - ALSA: ASoc: DaVinci Delay start of ASP to trigger
- Since only 4 mainline ASoC codecs support the trigger
- callback, we cannot rely upon them stopping the frame clock
- if they are master and must assume it is running even if the
- sound is paused. Thus we cannot start the ASP until the trigger
- method.
- - ASoC: davinci: let platform data define edma queue numbers
- Currently the EDMA queue to be used by for servicing ASP through
- internal RAM is fixed to EDMAQ_0 and that to service internal RAM
- from external RAM is fixed to EDMAQ_1.
- This may not be the desirable configuration on all platforms. For
- example, on DM365, queue 0 has large fifo size and is more suitable
- for video transfers. Having audio and video transfers on the same
- queue may lead to starvation on audio side.
- platform data as defined currently passes a queue number to the driver
- but that remains unused inside the driver.
- Fix this by defining one queue each for ASP and RAM transfers in the
- platform data and using it inside the driver.
- Since EDMAQ_0 maps to 0, thats the queue that will be used if
- the asp queue number is not initialized. None of the platforms
- currently utilize ping-pong transfers through internal RAM so that
- functionality remains unchanged too.
- This patch has been tested on DM644x and OMAP-L138 EVMs.
- - ASoC: davinci: check kzalloc() result (typo)
- The code checks 'davinci_vc' after kzalloc() and do not checks
- 'davinci_vcif_dev' that kzalloc() result is assigned to. It seems that
- it is a typo (autocompletion?).
- - ASoC: Remove unnecessary casts of private_data
- - ASoC: DaVinci: More accurate continuous serial clock for McBSP (I2S)
- i2s_accurate_sck switch can be used to have a better approximate
- sampling frequency.
- The clock is an externally visible bit clock and it is named
- i2s continuous serial clock (I2S_SCK).
- The trade off is between more accurate clock (fast clock)
- and less accurate clock (slow clock).
- The waveform will be not symmetric.
- Probably it is possible to get a better algorithm for calculating
- the divider, trying to keep a slower clock as possible.
- This patch has been developed against the
- http://git.kernel.org/pub/scm/linux/kernel/git/khilman/linux-davinci.git
- git tree and has been tested on bmx board (similar to dm365 evm, but using
- uda1345 as external audio codec).
- - ASoC: DaVinci: Added selection of clk input pin for McBSP
- When McBSP peripheral gets the clock from an external pin,
- there are three possible chooses, MCBSP_CLKX, MCBSP_CLKR
- and MCBSP_CLKS.
- evm-dm365 uses MCBSP_CLKR, instead in bmx board I have a different
- hardware connection and I use MCBSP_CLKS, so I have added
- this possibility.
- This patch has been developed against the:
- http://git.kernel.org/pub/scm/linux/kernel/git/khilman/linux-davinci.git
- git tree and has been tested on bmx board (similar to dm365 evm)
- - ASoC: DaVinci: Added two clocking possibilities to McBSP (I2S)
- Added two clocking options for dm365 McBSP peripheral when used
- with I2S timings, that are SND_SOC_DAIFMT_CBS_CFS (the cpu generates
- clock and frame sync) and SND_SOC_DAIFMT_CBS_CFM (the cpu gets clock
- from external pin and generates frame sync).
- A slave clock management can be important when the external codec needs
- the system clock and the bit clock synchronized (tested with uda1345).
- This patch has been developed against the:
- http://git.kernel.org/pub/scm/linux/kernel/git/khilman/linux-davinci.git
- git tree and has been tested on bmx board (similar to dm365 evm, but using
- uda1345 as external audio codec).
- - ASoC: DaVinci: Fix McASP hardware FIFO configuration
- On DA830/OMAP-L137 and DA850/OMAP-L138 SoCs, the McASP peripheral
- has FIFO support. This FIFO provides additional data buffering. It
- also provides tolerance to variation in host/DMA controller response
- times. More details of the FIFO operation can be found at
- http://focus.ti.com/general/docs/lit/getliterature.tsp?literatureNumber=sprufm1&fileType=pdf
- Existing sequence of steps for audio playback/capture are:
- a. DMA configuration
- b. McASP configuration (configures and enables FIFO)
- c. Start DMA
- d. Start McASP (enables FIFO)
- During McASP configuration, while FIFO was being configured, FIFO
- was being enabled in davinci_hw_common_param() function of
- sound/soc/davinci/davinci-mcasp.c file. This generated a transmit
- DMA event, which gets serviced when DMA is started.
- https://patchwork.kernel.org/patch/84611/ patch clears the DMA
- events before starting DMA, which is the right thing to do. But
- this resulted in a state where DMA was waiting for an event from
- McASP (after step c above), but the event which was already there,
- has got cleared (because of step b above).
- The fix is not to enable the FIFO during McASP configuration as
- FIFO was being enabled as part of McASP start.
SoC Dynamic Audio Power Management
- - ASoC: don't pass the string as the format arguemtn for dev_info()
- - ASoC: soc-dapm: Introduce the new snd_soc_dapm_virt_mux type
- This new type is a virtual version of snd_soc_dapm_mux. It is used
- when a backing register value is not necessary for deciding which
- input path to connect. A simple virtual enumeration control e.g.
- SOC_DAPM_ENUM_VIRT() can be exposed to userspace which will be used
- to choose which path to connect.
- The snd_soc_dapm_virt_mux type ensures that during the initial
- path setup, the first (which is also the default) input path will
- be connected.
- - ASoC: Do DAPM control updates in the middle of DAPM sequences
- Attempt to minimise audible effects from mixer and mux updates by
- implementing the actual register changes between powering down widgets
- that have become unused and powering up widgets that are newly used.
- This means that we're making the change with the minimum set of widgets
- powered, that the input path is connected when we're powering up widgets
- (so things like DC offset correction can run with their signal active)
- and that we bring things down to cold before switching away. Since
- hardware tends to be designed for the power on/off case more than for
- dynamic reconfiguration this should minimise pops and clicks during
- reconfiguration while active.
- Tested-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
- - ASoC: Extend DAPM to handle power changes on cross-device paths
- Power change event like stream start/stop or kcontrol change in a
- cross-device path originates from one device but codec bias and widget power
- changes must be populated to another devices on that path as well.
- This patch modifies the dapm_power_widgets so that all the widgets on a
- sound card are checked for a power change, not just those that are specific
- to originating device. Also bias management is extended to check all the
- devices. Only exception in bias management are widgetless codecs whose bias
- state is changed only if power change is originating from that context.
- DAPM context test is added to dapm_seq_run to take care of if power sequence
- extends to an another device which requires separate register writes.
- - ASoC: Move widgets from DAPM context to snd_soc_card
- Decoupling widgets from DAPM context is required when extending the ASoC
- core to cross-device paths. Even the list of widgets are now kept in
- struct snd_soc_card, the widget listing in sysfs and debugs remain sorted
- per device.
- This patch makes possible to build cross-device paths but does not extend
- yet the DAPM to handle codec bias and widget power changes of an another
- device.
- Cross-device paths are registered by listing the widgets from device A in
- a map for device B. In case of conflicting widget names between the devices,
- a uniform name prefix is needed to separate them. See commit ead9b91
- "ASoC: Add optional name_prefix for kcontrol, widget and route names" for
- help.
- An example below shows a path that connects MONO out of A into Line In of B:
- static const struct snd_soc_dapm_route mapA[] = {
- {"MONO", NULL, "DAC"},
- };
- static const struct snd_soc_dapm_route mapB[] = {
- {"Line In", NULL, "MONO"},
- };
- - ASoC: Move DAPM paths from DAPM context to snd_soc_card
- Decoupling DAPM paths from DAPM context is a first prerequisite when
- extending ASoC core to cross-device paths. This patch is almost a nullop and
- does not allow to construct cross-device setup but the path clean-up part in
- dapm_free_widgets is prepared to remove cross-device paths between a device
- being removed and others.
- - ASoC: Remove unused DAPM_DOUBLE control types
- There are no users of these and it's not clear what they would do given
- the mono flow modelling which DAPM does. If need arises we can add them
- again.
- - ASoC: dapm: Add output driver widget
- In some cases it was not possible to follow the appropiate power
- ON/OFF sequence like in cases where the PGA needs to be enabled
- before the driver and disabled before the PGA for pop reduction.
- Add a widget to support output driver (speaker, haptic, vibra, etc)
- drivers where power ON/OFF ordering is important.
- - ASoC: Fix build error caused by merging a fix for 2.6.37 into 2.6.38
- Fix "ASoC: Fix bias power down of non-DAPM codec" for 3.6.37 will cause a
- build error when merging into ASoC for-2.6.38. Fix the issue by doing a
- change that commit ce6120c "ASoC: Decouple DAPM from CODECs" would do.
- - ASoC: Add post-CODEC bias level callback for machine driver
- Currently the machine driver can only do bias level configuration before
- the CODEC bias level is brought up. This means that the machine cannot do
- any configuration which depends on the CODEC bias level being maintained.
- Provide a post-CODEC callback which allows the machine driver to do things
- like enable the FLL on a CODEC which is brought down to BIAS_OFF when idle.
- - ASoC: Fix bias power down of non-DAPM codec
- Currently bias of non-DAPM codec will be powered down (standby/off) whenever
- there is a stream stop. This is wrong in simultaneous playback/capture since
- the bias is put down immediately after stopping the first stream.
- Fix this by using the codec->active count when figuring out the needed bias
- level after stream stop.
- - ASoC: Remove cyclic dependency between soc.h and soc-dapm.h/soc-dai.h
- There is no need anymore to include soc.h in soc-dapm.h and soc-dai.h as
- drivers are converted to include only soc.h.
- Thanks to Lars-Peter Clausen <lars@metafoo.de> for pointing out the issue.
- - ASoC: Use DAPM context rather than CODEC when constructing sequences
- DAPM widgets may be associated with non-CODEC devices so compare based
- on the DAPM context rather than the CODEC pointer.
- - ASoC: Add optional name_prefix for codec kcontrol, widget and route names
- There is a need to prefix codec kcontrol, widget and internal route names in
- an ASoC machine that has multiple codecs with conflicting names. The name
- collision would occur when codec drivers try to registering kcontrols with
- the same name or when building audio paths.
- This patch introduces optional prefix_map into struct snd_soc_card. With it
- machine drivers can specify a unique name prefix to each codec that have
- conflicting names with anothers. Prefix to codec is matched with codec
- name.
- Following example illustrates a machine that has two same codec instances.
- Name collision from kcontrol registration is avoided by specifying a name
- prefix "foo" for the second codec. As the codec widget names are prefixed
- then second audio map for that codec shows a prefixed widget name.
- static const struct snd_soc_dapm_route map0[] = {
- {"Spk", NULL, "MONO"},
- };
- static const struct snd_soc_dapm_route map1[] = {
- {"Vibra", NULL, "foo MONO"},
- };
- static struct snd_soc_prefix_map codec_prefix[] = {
- {
- .dev_name = "codec.2",
- .name_prefix = "foo",
- },
- };
- static struct snd_soc_card card = {
- ...
- .prefix_map = codec_prefix,
- .num_prefixes = ARRAY_SIZE(codec_prefix),
- };
- - ASoC: Add DAPM trace events
- Trace events for DAPM allow us to monitor the performance and behaviour
- of DAPM with logging which can be built into the kernel permanantly, is
- more suited to automated analysis and display and less likely to suffer
- interference from other logging activity.
- Currently trace events are generated for:
- - Start and stop of DAPM processing
- - Start and stop of bias level changes
- - Power decisions for widgets
- - Widget event execution start and stop
- giving some view as to what is happening and where latencies occur.
- Actual changes in widget power can be seen via the register write trace in
- soc-core.
- - ASoC: Factor out boiler plate for DAPM event generation
- Make the DAPM sequence execution look a bit nicer by factoring out the
- code to invoke an event into a single function since it's all the same
- pretty much.
- - ASoC: Convert pop_dbg to use dev_info
- Prints from pop_dbg are enabled when dapm_pop_time != 0. Convert it to
- use dev_info so that parent device of DAPM context is printed.
- - ASoC: Update DAPM debug and error prints
- Switch printk and pr_ prints to dev_ variants. It is helpful to see
- parent device of DAPM context especially when there are multiple DAPM
- contexts (codecs currently).
- This is mostly simple conversion. Exceptions are in snd_soc_dapm_set_pin
- that prints also pin state, uniform "dapm: unknown pin" error prints from
- snd_soc_dapm_set_pin, snd_soc_dapm_force_enable_pin and
- snd_soc_dapm_ignore_suspend, and pop_dbg which is converted by an another
- patch.
- - ASoC: Move pop time from DAPM context to sound card
- Based on discussion the dapm_pop_time in debugsfs should be per card rather
- than per device. Single pop time value for entire card is cleaner when the
- DAPM sequencing is extended to cross-device paths.
- debugfs/asoc/{card->name}/{codec dir}/dapm_pop_time
- ->
- debugfs/asoc/{card->name}/dapm_pop_time
- - ASoC: Decouple DAPM from CODECs
- Decoupling Dynamic Audio Power Management (DAPM) from codec devices is
- required when developing ASoC further. Such as for other ASoC components to
- have DAPM widgets or when extending DAPM to handle cross-device paths.
- This patch decouples DAPM related variables from struct snd_soc_codec and
- moves them to new struct snd_soc_dapm_context that is used to encapsulate
- DAPM context of a device. ASoC core and API of DAPM functions are modified
- to use DAPM context instead of codec.
- This patch does not change current functionality and a large part of changes
- come because of structure and internal API changes.
- Core implementation is from Liam Girdwood <lrg@slimlogic.co.uk> with some
- minor core changes, codecs and machine driver conversions from
- Jarkko Nikula <jhnikula@gmail.com>.
- - ASoC: Fix dapm_seq_compare() for multi-component
- Ensure that we keep all widget powerups in DAPM sequence by making
- the CODEC the last thing we compare on rather than the first thing.
- Also fix the fact that we're currently comparing the widget pointers
- rather than the CODEC pointers when we do the substraction so we
- won't get stable results.
- - ASoC: Add event variants of the AIF widgets
- - ASoC: multi-component - ASoC Multi-Component Support
- This patch extends the ASoC API to allow sound cards to have more than one
- CODEC and more than one platform DMA controller. This is achieved by dividing
- some current ASoC structures that contain both driver data and device data into
- structures that only either contain device data or driver data. i.e.
- struct snd_soc_codec ---> struct snd_soc_codec (device data)
- +-> struct snd_soc_codec_driver (driver data)
- struct snd_soc_platform ---> struct snd_soc_platform (device data)
- +-> struct snd_soc_platform_driver (driver data)
- struct snd_soc_dai ---> struct snd_soc_dai (device data)
- +-> struct snd_soc_dai_driver (driver data)
- struct snd_soc_device ---> deleted
- This now allows ASoC to be more tightly aligned with the Linux driver model and
- also means that every ASoC codec, platform and (platform) DAI is a kernel
- device. ASoC component private data is now stored as device private data.
- The ASoC sound card struct snd_soc_card has also been updated to store lists
- of it's components rather than a pointer to a codec and platform. The PCM
- runtime struct soc_pcm_runtime now has pointers to all its components.
- This patch adds DAPM support for ASoC multi-component and removes struct
- snd_soc_socdev from DAPM core. All DAPM calls are now made on a card, codec
- or runtime PCM level basis rather than using snd_soc_socdev.
- Other notable multi-component changes:-
- * Stream operations now de-reference less structures.
- * close_delayed work() now runs on a DAI basis rather than looping all DAIs
- in a card.
- * PM suspend()/resume() operations can now handle N CODECs and Platforms
- per sound card.
- * Added soc_bind_dai_link() to bind the component devices to the sound card.
- * Added soc_dai_link_probe() and soc_dai_link_remove() to probe and remove
- DAI link components.
- * sysfs entries can now be registered per component per card.
- * snd_soc_new_pcms() functionailty rolled into dai_link_probe().
- * snd_soc_register_codec() now does all the codec list and mutex init.
- This patch changes the probe() and remove() of the CODEC drivers as follows:-
- o Make CODEC driver a platform driver
- o Moved all struct snd_soc_codec list, mutex, etc initialiasation to core.
- o Removed all static codec pointers (drivers now support > 1 codec dev)
- o snd_soc_register_pcms() now done by core.
- o snd_soc_register_dai() folded into snd_soc_register_codec().
- CS4270 portions:
- Some TLV320aic23 and Cirrus platform fixes.
- TI CODEC and OMAP fixes
- Samsung platform and misc fixes :-
- Reviewed-by: Jassi Brar <jassi.brar@samsung.com>
- MPC8610 and PPC fixes.
- i.MX fixes and some core fixes.
- J4740 platform fixes:-
- - ASoC: Add SND_SOC_DAPM_PRE_POST_PMD event
- Some systems codecs need to configure some registers before and after
- powering down some of their part. As a convenience add a macro for that.
- - ASoC: Support leaving paths enabled over system suspend
- Some devices can usefully run audio while the Linux system is suspended.
- One of the most common examples is smartphone systems, which are normally
- designed to allow audio to be run between the baseband and the CODEC
- without passing through the CPU and so can suspend the CPU when on a
- voice call for additional power savings.
- Support such systems by providing an API snd_soc_dapm_ignore_suspend().
- This can be used to mark DAPM endpoints as not being sensitive to
- system suspend. When the system is being suspended paths between
- endpoints which are marked as ignoring suspend will be kept active.
- Both source and sink must be marked, and there must already be an
- active path between the two endpoints prior to suspend.
- When paths are active over suspend the bias management will hold the
- device bias in the ON state. This is used to avoid suspending the
- CODEC while it is still in use.
- Tested-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
- - ASoC: Refactor DAPM suspend handling
- Instead of using stream events to handle power down during suspend
- integrate the handling with the normal widget path checking by
- replacing all cases where we report a connected endpoint in a path
- with a function snd_soc_dapm_suspend_check() which looks at the ALSA
- power state for the card and reports false if we are in a D3 state.
- Since the core moves us into D3 prior to initating the suspend all
- power checks during suspend will cause the widgets to be powered
- down. In order to ensure that widgets are powered up on resume set
- the card to D2 at the start of resume handling (ALSA API calls
- require D0 so we are still protected against userspace access).
- Tested-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
- - ASoC: Remove unused DAPM suspend flag
- We now manage suspend within the main power analysis rather than by
- flipping the state of widgets.
- Tested-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
SoC EP93XX
- - Add the build-stub for soc/ep93xx
- - ASoC: EP93xx: fixed LRCLK rate and DMA oper. in I2S code
- Changelog:
- 1. I2S module of EP93xx should be feed by 32bit DMA transfers. This is
- hardware limitation and that's the way original Cirrus's driver worked.
- This will fix distorted sound playback and make capture actually work in
- present ep93xx drivers.
- I've found, that author of code, on which modern ep93xx-i2s.c and
- ep93xx-pcm.c are based, had faced this problem also in 2007:
- http://blog.gmane.org/gmane.linux.ports.arm.cirrus/month=20070101/page=3
- Now SoC code uses his developments, but not overcomes the hardware
- issues. Some details from EP93xx users guide:
- Both I2S transmitter and receiver have similar 16x32bit FIFO, where they
- store 8 samples for both left and right channels. The FIFO is always
- 32bit wide and should be properly aligned if you use samples of other
- width. Transmitter and receiver have configuration registers for
- selection of I2S word length (16, 24, 32). They are I2STXWrdLen and
- I2SRXWrdLen.
- Yes, EP93xx DMA can do byte, word and quad-word transfers. The width for
- transfers to and from peripherals is selected by particular module
- configuration. Lucky AC97 module has such configuration: AC97RXCRx
- registers, bit CM (Compact mode enable) switches between 16 and 32 bit
- samples. AC97TXCRx registers have the same bits for transmitters.
- ep93xx-ac97.c enables this compact mode and so has all the rights to use
- S16_LE format.
- No one has found such a configuration in I2S module until now in any
- Cirrus manuals. I2S module always feeds it's 32bit wide FIFO with 32bit
- samples consecutively for left and right channels. You cannot use 32-bit
- DMA transfers to transfer two 16-bit samples.
- So we can use two formats for AC97, but should remove all but S32_LE for
- I2S. Always using 32 bit chunks is not a problem for I2S, the codec I
- use uses less bits too (24), it's permitted by I2S standard.
- In proposed patch formats list shortened to just S32_LE, this makes all
- the DMA transactions right, while ALSA will do all sample format
- translation for us.
- 2. Incorrect setting of LRCLK (2 times slower) in original ep93xx-i2s.c
- masks the first problem.
- DMA takes two 16 bit samples instead of one, overall sound speed seems
- to be normal, but you get actually 4000 sampling rate instead of
- requested 8000 and therefore some noise... This is also the reason why
- the capture function not worked at all in this driver...
- If we take a look into I2S specification, we will figure that LRCLK MUST
- be equal to sample rate, if we are talking about stereo (in mono too,
- but it's not our case at all).
- In proposed patch SCLK and LRCLK rates are corrected, assuming we always
- send 32 bits * 2 channels to codec.
- - ASoC: EP93xx: sampling rate range extended
- Changes to both I2S and PCM code:
- - Rates list extended up to 96kHz, it's tested on EDB9302 and works for both capture and
- playback.
- - ASoC: simone: fix resource leak in simone_init error path
- Fix the error path to properly free allocated resources.
- - ASoC: ep93xx: add Simplemachines Sim.One AC97 audio support
- Add AC97 audio support for Simplemachines Sim.One board.
- - ASoC: add ep93xx AC97 audio driver
- Add support for AC97 controllers found in Cirrus Logic EP93xx family SoCs.
- - ASoC: EP93xx: Add Snapper CL15 i2s audio support
- Add support for i2s audio on Bluewater Systems Snapper CL15 module
- - ASoC: ep93xx i2s audio driver
- Add ep93xx i2s audio driver
SoC FSI SH7724
- - ARM: mach-shmobile: ap4evb: FSI clock use proper process for HDMI
- Current AP4 FSI set_rate function used bogus clock process
- which didn't care enable/disable and clk->usecound.
- To solve this issue, this patch also modify FSI driver to call
- set_rate with enough options.
- This patch modify it.
- - ASoC: fsi: modify compile error
- - ASoC: multi-component - ASoC Multi-Component Support
- This patch extends the ASoC API to allow sound cards to have more than one
- CODEC and more than one platform DMA controller. This is achieved by dividing
- some current ASoC structures that contain both driver data and device data into
- structures that only either contain device data or driver data. i.e.
- struct snd_soc_codec ---> struct snd_soc_codec (device data)
- +-> struct snd_soc_codec_driver (driver data)
- struct snd_soc_platform ---> struct snd_soc_platform (device data)
- +-> struct snd_soc_platform_driver (driver data)
- struct snd_soc_dai ---> struct snd_soc_dai (device data)
- +-> struct snd_soc_dai_driver (driver data)
- struct snd_soc_device ---> deleted
- This now allows ASoC to be more tightly aligned with the Linux driver model and
- also means that every ASoC codec, platform and (platform) DAI is a kernel
- device. ASoC component private data is now stored as device private data.
- The ASoC sound card struct snd_soc_card has also been updated to store lists
- of it's components rather than a pointer to a codec and platform. The PCM
- runtime struct soc_pcm_runtime now has pointers to all its components.
- This patch adds DAPM support for ASoC multi-component and removes struct
- snd_soc_socdev from DAPM core. All DAPM calls are now made on a card, codec
- or runtime PCM level basis rather than using snd_soc_socdev.
- Other notable multi-component changes:-
- * Stream operations now de-reference less structures.
- * close_delayed work() now runs on a DAI basis rather than looping all DAIs
- in a card.
- * PM suspend()/resume() operations can now handle N CODECs and Platforms
- per sound card.
- * Added soc_bind_dai_link() to bind the component devices to the sound card.
- * Added soc_dai_link_probe() and soc_dai_link_remove() to probe and remove
- DAI link components.
- * sysfs entries can now be registered per component per card.
- * snd_soc_new_pcms() functionailty rolled into dai_link_probe().
- * snd_soc_register_codec() now does all the codec list and mutex init.
- This patch changes the probe() and remove() of the CODEC drivers as follows:-
- o Make CODEC driver a platform driver
- o Moved all struct snd_soc_codec list, mutex, etc initialiasation to core.
- o Removed all static codec pointers (drivers now support > 1 codec dev)
- o snd_soc_register_pcms() now done by core.
- o snd_soc_register_dai() folded into snd_soc_register_codec().
- CS4270 portions:
- Some TLV320aic23 and Cirrus platform fixes.
- TI CODEC and OMAP fixes
- Samsung platform and misc fixes :-
- Reviewed-by: Jassi Brar <jassi.brar@samsung.com>
- MPC8610 and PPC fixes.
- i.MX fixes and some core fixes.
- J4740 platform fixes:-
- - ASoC: fsi: Add new funtion for SPDIF
- - ASoC: fsi: Add specified ID for soc-audio
- Specified ID is necessary, when some codecs are used with FSI.
- - ASoC: fsi: Fixup for master mode
- This patch add hw_params to snd_soc_dai_ops,
- because board specific set_rate is needed
- when FSI was used as master mode.
- This patch remove fsi_clk_ctrl from fsi_dai_startup,
- because clock should be disabled before set_rate.
- - ASoC: fsi: modify format area definition on flags
- There is no necessity that each bit in this area has the meaning.
- This patch modify it to sequence number
SoC Freescale
- - ASoC: Add missing dev_set_drvdata in p1022_ds_probe
- Otherwise, calling dev_get_drvdata in p1022_ds_remove returns NULL.
- - ASoC: Add missing dev_set_drvdata in mpc8610_hpcd_probe
- Otherwise, calling dev_get_drvdata in mpc8610_hpcd_remove returns NULL.
- - ASoC: pcm030-audio-fabric: fix resource leak in pcm030_fabric_init error path
- Add missing platform_device_put() if platform_device_add() failed.
- - ASoC: efika-audio-fabric: fix resource leak in efika_fabric_init error path
- Add missing platform_device_put() if platform_device_add() failed.
- - ASoC: MPC5200: Eliminate duplicate include of of_device.h
- Eliminate duplicate #include <linux/of_device.h> from
- sound/soc/fsl/mpc5200_dma.c
- - ASoC: Return proper error if snd_soc_register_dais fails in psc_i2s_of_probe
- - ASoC: fsl - fix build error in pcm030-audio-fabric.c
- Fix build error:-
- sound/soc/fsl/pcm030-audio-fabric.c:27:33: fatal error:
- sound/soc-of-simple.h: No such file or directory
- - ASoC: pl022_ds.c: Add of_node_put to avoid memory leak
- Add a call to of_node_put in the error handling code following a call to
- of_parse_phandle.
- This patch also moves the existing call to of_node_put tothe end of the
- error handling code, to make it possible to jump to of_node_put without
- doing the other cleanup operations. These appear to be disjoint
- operations, so the ordering doesn't matter.
- The semantic match that finds this problem is as follows:
- (http://coccinelle.lip6.fr/)
- // <smpl>
- @r exists@
- local idexpression x;
- expression E,E1,E2;
- statement S;
- @@
- *x =
- (of_find_node_by_path
- |of_find_node_by_name
- |of_find_node_by_phandle
- |of_get_parent
- |of_get_next_parent
- |of_get_next_child
- |of_find_compatible_node
- |of_match_node
- |of_find_node_by_type
- |of_find_node_with_property
- |of_find_matching_node
- |of_parse_phandle
- )(...);
- ...
- if (x == NULL) S
- <... when != x = E
- *if (...) {
- ... when != of_node_put(x)
- when != if (...) { ... of_node_put(x); ... }
- (
- return <+...x...+>;
- |
- * return ...;
- )
- }
- ...>
- (
- E2 = x;
- |
- of_node_put(x);
- )
- // </smpl>
- - ASoC: mpc8610: replace of_device with platform_device
- 'struct of_device' no longer exists, and its functionality has been merged
- into platform_device. Update the MPC8610 HPCD audio drivers (fsl_ssi, fsl_dma,
- and mpc8610_hpcd) accordingly.
- Also add a #include for slab.h, which is now needed for kmalloc and kfree.
- - ASoC: add support for the Freescale P1022 DS reference board
- The Freescale P1022 is a dual-core e500-based SOC with multimedia capabilities,
- specifically the same SSI audio controller on the MPC8610. The P1022 DS
- reference board includes a P1022 and a Wolfson Microelectronics WM8776
- codec.
- - ASoC: add support for separate codec DAIs to the fsl_dma driver
- Some codecs have separate DAIs for playback and capture, so the DMA driver
- should allocate a DMA buffer only for the streams that are valid when the
- driver is opened.
- - sound: asoc/multi-component: fsl: add support for variable SSI FIFO depth
- Add code that programs the DMA and SSI controllers differently based on the
- FIFO depth of the SSI.
- The SSI devices on the MPC8610 and the P1022 are identical in every way except
- one: the transmit and receive FIFO depth. On the MPC8610, the depth is eight.
- On the P1022, it's fifteen. The device tree nodes for the SSI include a
- "fsl,fifo-depth" property that specifies the FIFO depth.
- - sound: asoc/multi-component: fsl: add support for disabled SSI nodes
- Add support for adding "status = disabled" to an SSI node to incidate that it
- is not wired on the board. This replaces the not-so-intuitive previous method
- of omitting a codec-handle property.
- - sound: asoc/multi-component: fsl: fix exit and error paths in DMA and SSI drivers
- The error handling code in the OF probe function of the SSI driver is not
- freeing all resources correctly.
- Since the machine driver no longer calls the DMA driver to provide information
- about the SSI, we don't need to keep a list of DMA objects any more. In
- addition, the fsl_soc_dma_remove() function is incorrectly removing *all*
- DMA objects when it should only remove one.
- - sound: asoc/multi-component: fsl: add support for 36-bit physical addresses
- Update the DMA driver used by the Freescale MPC8610 HPCD audio driver to
- support 36-bit physical addresses, for both DMA buffers and the SSI registers.
- The DMA driver calls snd_dma_alloc_pages() to allocate the DMA buffers for
- playback and capture. This function is just a front-end for
- dma_alloc_coherent(). Currently, dma_alloc_coherent() only allocates buffers
- in low memory (it ignores GFP_HIGHMEM), so we never actually get a DMA buffer
- with a real 36-bit physical address.
- - sound: powerpc: rename immap_86xx.h to fsl_guts.h, and add 85xx support
- The immap_86xx.h header file only defines one data structure: the "global
- utilities" register set found on Freescale PowerPC SOCs. Rename this file
- to fsl_guts.h to reflect its true purpose, and extend it to cover the "GUTS"
- register set on 85xx chips.
- - sound/soc: mpc5200_psc_ac97: Use gpio pins for cold reset
- Call the gpio reset platform function instead of using the flawed
- ac97 functionality of the MPC5200(b)
- From MPC5200B User's Manual:
- "Some AC97 devices goes to a test mode, if the Sync line is high
- during the Res line is low (reset phase). To avoid this behavior the
- Sync line must be also forced to zero during the reset phase. To do
- that, the pin muxing should switch to GPIO mode and the GPIO control
- register should be used to control the output lines."
- - of/device: Replace struct of_device with struct platform_device
- of_device is just an alias for platform_device, so remove it entirely. Also
- replace to_of_device() with to_platform_device() and update comment blocks.
- This patch was initially generated from the following semantic patch, and then
- edited by hand to pick up the bits that coccinelle didn't catch.
- @@
- @@
- -struct of_device
- +struct platform_device
- Reviewed-by: David S. Miller <davem@davemloft.net>
- - fix typos concerning "initiali[zs]e"
- - powerpc/5200: Fix build error in sound code.
- Compiling in the MPC5200 sound drivers results in the following build error:
- sound/soc/fsl/mpc5200_psc_ac97.o: In function `to_psc_dma_stream':
- mpc5200_psc_ac97.c:(.text+0x0): multiple definition of `to_psc_dma_stream'
- sound/soc/fsl/mpc5200_dma.o:mpc5200_dma.c:(.text+0x0): first defined here
- sound/soc/fsl/efika-audio-fabric.o: In function `to_psc_dma_stream':
- efika-audio-fabric.c:(.text+0x0): multiple definition of `to_psc_dma_stream'
- sound/soc/fsl/mpc5200_dma.o:mpc5200_dma.c:(.text+0x0): first defined here
- make[3]: *** [sound/soc/fsl/built-in.o] Error 1
- make[2]: *** [sound/soc/fsl] Error 2
- make[1]: *** [sound/soc] Error 2
- make: *** [sound] Error 2
- This patch fixes it by declaring the inline function in the header file to
- also be a static.
- Tested-by: John Hilmar Linkhorst <John.Linkhorst@rwth-aachen.de>
- - ASoC: Remove unused header from MPC5200 PSC driver
- The header contains an extern that isn't used by anything. Remove.
- - of: Remove duplicate fields from of_platform_driver
- .name, .match_table and .owner are duplicated in both of_platform_driver
- and device_driver. This patch is a removes the extra copies from struct
- of_platform_driver and converts all users to the device_driver members.
- This patch is a pretty mechanical change. The usage model doesn't change
- and if any drivers have been missed, or if anything has been fixed up
- incorrectly, then it will fail with a compile time error, and the fixup
- will be trivial. This patch looks big and scary because it touches so
- many files, but it should be pretty safe.
- - of: Always use 'struct device.of_node' to get device node pointer.
- The following structure elements duplicate the information in
- 'struct device.of_node' and so are being eliminated. This patch
- makes all readers of these elements use device.of_node instead.
- (struct of_device *)->node
- (struct dev_archdata *)->prom_node (sparc)
- (struct dev_archdata *)->of_node (powerpc & microblaze)
SoC Ingenic JZ4740
- - Add soc/jz4740 build stub
- - ASoC: Fix compile breakage in jz4740.c and smartq_wm8987.c
- Commit ce6120c require that soc-dapm.h cannot be included before soc.h but
- these two drivers were not checked. Fix them by including only soc.h as it
- includes soc-dapm.h.
- - ASoC: Multi-component: JZ4740: QI_LB60 board fixes
- This patch contains two small fixes for the sound board driver for the qi_lb60
- introduced by the multi-component patches:
- * Remove unnecessary includes: Those includes where only used to get the
- definitions for the DAI devices and are thus not needed anymore.
- * Fix a typo.
- - ASoC: JZ4740: Add qi_lb60 board driver
- This patch adds ASoC support for the qi_lb60 board.
- - ASoC: Add JZ4740 codec driver
- This patch adds support for the JZ4740 internal codec.
- - ASoC: Add JZ4740 ASoC support
- This patch adds ASoC support for JZ4740 SoCs I2S module.
SoC Intel Medfield MID platform
- - add missing files for soc/mid-x86 and soc/tegra
- - Add build stubs for tegra and mid-x86 ASoC drivers
- - sound: ASoC sst v2: Add medfield machine driver
- This patch adds the medfield machine driver
- Machine driver glues the sn95031 codec driver and sst_platform driver to form the asoc sound driver
- - ASoC: sst_platform porting sst dsp driver interface as per latest in Greg's staging tree
- The interface between sst platform driver and intel sst dsp driver
- have been changed in Greg's staging tree - next branch
- This patch adds the interface changes compatible with the new interface
- in Greg's staging tree
- - ASoC: sst_platform created helper functions
- Few funtions can be modularized in this driver to make them look cleaner
- like managing the stream status with locks and filling pcm parameters.
- This patch adds helper functions to do the same.
- - ASoC: sst platform - fix the style inconsistency
- this patch fixes the style inconsistency by removing empty space in MODULE_ALIAS
- also removes a redundant return statement
- - ASoC: sst v2: Add mid platform driver
- This patch adds the platform driver for mid asoc drivers. This platfrom
- driver sends commands to sst dsp engine driver for the dai operations.
- For this purpose it depends on intel_sst driver which is currently in
- staging tree
- - ASoC: Add dependency on INTEL_SCU_IPC for Intel MID drivers
- - ASoC: mid-x86 - remove the flag in makefile
- previous commit e62255f2adf2 introduced DDEBUG flag in Makefile
- This causes all debug statemenets to be ON.
- This patch removes this flag
- - ASoC: sst v2: Add makefiles and kconfigs changes
- This patch adds the makefile and kconfig changes for mid asoc drivers:
- platform and machine driver which are introduced in 2 preceeding patches
SoC Layer
- - Regenerated soc-core.patch
- - Fix soc-core build with 2.6.26 or older kernels
- - ASoC: Update name of debugfs root symbol to snd_soc_
- Everything else is using snd_soc_ so we should use it here too.
- - ASoC: core: Remove dapm_sync call from soc_post_component_init
- snd_soc_dapm_new_widgets will call dapm_power_widgets at
- the end, so there is no need to call snd_soc_dapm_sync
- after snd_soc_dapm_new_widgets.
- Reviewed-by: Jarkko Nikula <jhnikula@gmail.com>
- - ASoC: WM8991: Add initial WM8991 driver
- The WM8991 is a highly integrated ultra-low power hi-fi CODEC designed for
- handsets rich in multimedia features such as GPS, mobile TV, digital audio
- playback and gaming.
- This driver was originally written by Graeme Gregory and has been maintained
- out of tree by Mark Brown and Dimitris Papastamos.
- - ASoC: soc core allow machine driver to register the card
- The machine driver can't register the card directly and need to do this thru
- soc-audio device creation
- This patch allows the register and unregister card to be directly called by
- machine drivers
- - ASoC: soc core add inline to handle card list initialzation
- Currently the soc_probe initializes the card hence it does the card list
- initialzation. But if machines directly register the card they would need to
- do these steps, so putting them as inline would save lot of code
- This patch adds an inline to do list initialzation
- - ASoC: soc core move the card debugfs initialization
- The card debugfs initialization is done in soc_probe but would be better if it
- is done when the card in registered
- This patch moves the debugfs initialization to register_card()
- - ASoC: soc core move card cleanup from soc_remove()
- In soc_remove() the card resources are cleaned up.
- This can also be done in card_unregister()
- This patch move this cleanup into a new function and calls it from
- card_unregister. This paves way for further work to allow card registartion
- from machine.
- - ASoC: Automatically assign the default readable()/volatile() functions
- Ensure that all calls to readable_register()/volatile_register() go via
- the snd_soc_codec function pointers.
- If the default register access table has been given but no functions
- for handling readable()/volatile() registers, use the default ones provided
- by soc-cache.
- - ASoC: Update users of readable_register()/volatile_register()
- - ASoC: soc-cache: Add support for default readable()/volatile() functions
- For common scenarios, device drivers can provide a table of all the
- registers that are at least either readable/writable/volatile. The idea
- is that if a register lookup fails, all of its read/write/vol members
- will be zero and will be treated as default. This also reduces the
- size of the register access array.
- - ASoC: soc-cache: Add reg_size as a member to snd_soc_codec
- Simplify the use of reg_size, by calculating it once and storing it in
- the codec structure for later reference. The value of reg_size is
- reg_cache_size * reg_word_size.
- - ASoC: soc-cache: Ensure flat compression uses a copy of the defaults cache
- With the addition of the cache fallback functionality, it is necessary
- to ensure that if the register defaults cache was marked as __devinitconst
- and the LZO compression is not compiled in the kernel, the fallback to
- flat compression will still use a copy of the defaults cache.
- - ASoC: Fix indentation in soc_remove()
- - ASoC: soc-core: Simplify compress_type overriding functionality
- - ASoC: soc-cache: Clean up the cache manipulation code
- Use Takashi's clean up code to make the cache manipulation code more
- readable.
- - ASoC: let snd_soc_update_bits() return an error code
- Update snd_soc_update_bits() so that it returns a negative error code if the
- the read or write operation fails.
- Note that currently, a lot of the lower-level read functions have an unsigned
- integer return type (and some of them even try to return a negative number),
- but this code still appears to work in those cases.
- An examination of the code shows that all current callers are compatible with
- this change.
- - ASoC: tegra: Kconfig and Makefile
- - ASoC: Export debugfs root dentry
- A couple Tegra ASoC drivers will create debugfs entries. Mark requested
- these by under debugfs/asoc/ not just debugfs/. To enable this, export
- the dentry representing debugfs/asoc/.
- Also, rename debugfs_root -> asoc_debugfs_root now it's exported to
- prevent potential symbol name clashes.
- - ASoC: soc-core: Add support for NULL default register caches
- The infrastructure for handling NULL default register maps is already
- included in the soc-cache code, just ensure that we don't try to dereference
- a NULL pointer while accessing a NULL register cache.
- - ASoC: Taint the kernel if debugfs is used to write directly to CODECs
- Since direct register writes may confuse the drivers and are supposed
- to be used only in diagnostic situations discourage their use in
- production by tainting the kernel when we do a write.
- - ASoC: sst v2: Add makefiles and kconfigs changes
- This patch adds the makefile and kconfig changes for mid asoc drivers:
- platform and machine driver which are introduced in 2 preceeding patches
- - ASoC: sst v2: Add sn95031 codec driver
- This patch adds the sn95031 asoc codec driver. This driver currently
- supports only playback. Capture and jack detection to be added later
- - ASoC: WL1273 FM radio: Fix breakage with MFD API changes
- 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.
- - ASoC: DMIC codec: Adding a generic DMIC codec
- This codec is to be used by the DMIC driver to
- control the DMIC codec. This driver will be used on future
- implementations of the DMIC driver to support codec specific
- features.
- At this time, the codec driver just registers the codec DAI.
- - ASoC: soc-cache: Fix invalid memory access during snd_soc_lzo_cache_sync()
- The size of the lzo syncing bitmap was incorrectly set to the size
- of the cache times the word size, however, the correct size is the
- size of the cache.
- - ASoC: Fix the device references to codec and platform drivers
- The soc-core takes the platform and codec driver reference during probe. Few of
- these references are not released during remove. This cause the platform and
- codec driver module unload to fail.
- This patch fixes by the taking only one reference to platform and codec module
- during probe and releases them correctly during remove. This allows load/unload
- properly
- - ASoC: Fix AC'97 registration unwind
- soc_unregister_ac97_dai_link() takes a CODEC as an argument, not a
- rtd like the registration function, so give it what it's looking for.
- - ASoC: Fix snd_soc_instantiate_card error path
- Properly free the resources in the case of snd_card_register failure
- and soc_register_ac97_dai_link failure.
- - ASoC: Add initial WM8995 driver
- The WM8995 is a digital audio hub CODEC designed for smartphones.
- The current driver supports most of the basic functionality of the
- WM8995.
- - ASoC: Make LZO cache compression optional
- Make LZO cache compression optional as it pulls in the kernel wide LZO
- implementation and rbtree compression is generally more efficient for
- typical register maps, especially in terms of CPU performance.
- - ASoC: If we can't find a cache compression type default to flat
- This makes it easier to make cache types build time configurable as we
- don't have a hard dependency on a given cache being built in.
- - ASoC: Extend DAPM to handle power changes on cross-device paths
- Power change event like stream start/stop or kcontrol change in a
- cross-device path originates from one device but codec bias and widget power
- changes must be populated to another devices on that path as well.
- This patch modifies the dapm_power_widgets so that all the widgets on a
- sound card are checked for a power change, not just those that are specific
- to originating device. Also bias management is extended to check all the
- devices. Only exception in bias management are widgetless codecs whose bias
- state is changed only if power change is originating from that context.
- DAPM context test is added to dapm_seq_run to take care of if power sequence
- extends to an another device which requires separate register writes.
- - ASoC: Move widgets from DAPM context to snd_soc_card
- Decoupling widgets from DAPM context is required when extending the ASoC
- core to cross-device paths. Even the list of widgets are now kept in
- struct snd_soc_card, the widget listing in sysfs and debugs remain sorted
- per device.
- This patch makes possible to build cross-device paths but does not extend
- yet the DAPM to handle codec bias and widget power changes of an another
- device.
- Cross-device paths are registered by listing the widgets from device A in
- a map for device B. In case of conflicting widget names between the devices,
- a uniform name prefix is needed to separate them. See commit ead9b91
- "ASoC: Add optional name_prefix for kcontrol, widget and route names" for
- help.
- An example below shows a path that connects MONO out of A into Line In of B:
- static const struct snd_soc_dapm_route mapA[] = {
- {"MONO", NULL, "DAC"},
- };
- static const struct snd_soc_dapm_route mapB[] = {
- {"Line In", NULL, "MONO"},
- };
- - ASoC: Move DAPM paths from DAPM context to snd_soc_card
- Decoupling DAPM paths from DAPM context is a first prerequisite when
- extending ASoC core to cross-device paths. This patch is almost a nullop and
- does not allow to construct cross-device setup but the path clean-up part in
- dapm_free_widgets is prepared to remove cross-device paths between a device
- being removed and others.
- - ASoC: soc-cache: A few minor stylistic changes
- Remove redundant parentheses/spaces in the use of the sizeof
- operator.
- - ASoC: Remove unnecessary structure definitions
- This patch removes some legacy structure definitions which are not using
- in current ASoC drivers.
- - ASoC: soc-core: Fix null pointer dereference
- In case the codec driver did not provide a read/write function,
- codec->driver->read|write will be NULL. Ensure that we use the one
- specified in codec->read|write to avoid oopsing when we access
- the debugfs entries. This is achieved by using snd_soc_read() and
- snd_soc_write().
- - ASoC: soc-core: Remove useless inline function construct
- There is no need to mark this function as inline. Inline functions
- usually are small and concise functions that benefit from not needing
- to set up a stack frame and undergo a call/ret sequence upon each
- invocation.
- - ASoC: soc-core: Replace use of strncpy() with strlcpy()
- By using strncpy() if the source string does not have a null byte in the
- first n bytes, then the destination string is not null-terminated.
- This can be fixed in a two-step process by manually null-terminating the
- array after the use of strncpy() or by using strlcpy().
- - ASoC: Merge common code in DAI link and auxiliary codec probing/removal
- Commit 2eea392 "ASoC: Add support for optional auxiliary dailess codecs"
- added much of code that can be shared with DAI link codec probing/removal.
- Merge now this common code into new soc_probe_codec, soc_remove_codec and
- soc_post_component_init functions.
- Error prints in these functions are converted to use dev_err and to print
- the error code.
- - ASoC: soc-cache: Add optional cache name member to snd_soc_cache_ops
- Added an optional name member to snd_soc_cache_ops to enable more
- sensible diagnostic messages during cache init, exit and sync.
- Remove redundant newline in source code.
- - ASoC: Add trace events for jack detection
- As jack detection can trigger DAPM and the latency in debouncing can create
- confusing windows in operation provide some trace events which will hopefully
- help in diagnostics. The soc-jack core traces all reports that it gets and
- the resulting notifications to upper layers. An event for jack IRQs is also
- provided for instrumentation of debounce, and used in the GPIO jack code.
- - ASoC: Add post-CODEC bias level callback for machine driver
- Currently the machine driver can only do bias level configuration before
- the CODEC bias level is brought up. This means that the machine cannot do
- any configuration which depends on the CODEC bias level being maintained.
- Provide a post-CODEC callback which allows the machine driver to do things
- like enable the FLL on a CODEC which is brought down to BIAS_OFF when idle.
- - ASoC: Constify struct snd_soc_codec_driver
- Allow the CODEC driver structure to be marked const by making all
- the APIs that use it do so.
- - ASoC: soc-core: Allow machine drivers to override compress_type
- This patch allows machine drivers to override the compression type
- provided by the codec driver.
- - ASoC: soc-cache: Use reg_def_copy instead of reg_cache_default
- Make sure to use codec->reg_def_copy instead of codec_drv->reg_cache_default
- wherever necessary. This change is necessary because in the next patch we
- move the cache initialization code outside snd_soc_register_codec() and by that
- time any data marked as __devinitconst such as the original reg_cache_default
- array might have already been freed by the kernel.
- - ASoC: soc-core: Generalize snd_soc_prefix_map and rename to snd_soc_codec_conf
- The snd_soc_codec_conf struct now holds codec specific configuration
- information.
- A new configuration option has been added to allow machine drivers to
- override the compression type set by the codec driver.
- In the absence of providing an snd_soc_codec_conf struct or when providing
- one but not setting the compress_type member to anything, the one supplied
- by the codec driver will be used instead. In all other cases the one
- set in the snd_soc_codec_conf struct takes effect.
- - ASoC: Change the base value of compress_type
- Ensure that the base value of compress_type starts at 1 so that
- we know whether the machine driver has provided a compress_type
- for overriding the codec supplied one.
- - ASoC: Add compress_type as a member to snd_soc_codec
- We need to keep a copy of the compress_type supplied by the codec driver
- so that we can override it if necessary with whatever the machine driver
- has provided us with. The reason for not modifying the codec->driver
- struct directly is that ideally we'd like to keep it const.
- Adjust the code in soc-cache and soc-core to make use of the compress_type
- member in the snd_soc_codec struct.
- - ASoC: Don't oops in soc_probe_aux_dev in case of missing codec
- Blind copy of codec finding algorithm from soc_bind_dai_link does not work
- in soc_probe_aux_dev if matching codec name is not found. In that case the
- code falls through and tries to start the probing procedure with invalid
- codec pointer.
- Fix this and add an error print showing the codec name that cannot be found.
- - ASoC: Move active copy of CODEC read and write into runtime structure
- We shouldn't be assigning to the driver structure (which really ought
- to be const, further patch to follow) though there's unlikely to be any
- actual problem except in the unlikely case that two devices with the
- same driver but different bus types appear in the same system.
- - ASoC: Make the DAI ops constant in the DAI structure
- Neither drivers nor the core should be fiddling with the actual ops
- structure at runtime.
- - ASoC: Apostrophe patrol in soc-core.c
- Silly little grammar nit but it bugs the hell out of me.
- - ASoC: Fix build failure in soc-core.c
- Commit 2eea392 "ASoC: Add support for optional auxiliary dailess codecs"
- causes a build failure in soc-core.c: soc_probe_aux_dev since code tries to
- access non-existing struct snd_soc_dapm_context and struct snd_soc_card
- members.
- Root cause for this was a double accident. Author sent the RFC patch from
- top of another patch set and the RFC got committed. Fix the build failure
- by removing the code line that depends on that another patch set.
- - ASoC: Add support for optional auxiliary dailess codecs
- This makes possible to register auxiliary dailess codecs in a machine
- driver. Term dailess is used here for amplifiers and codecs without DAI or
- DAI being unused.
- Dailess auxiliary codecs are kept in struct snd_soc_aux_dev and those codecs
- are probed after initializing the DAI links. There are no major differences
- between DAI link codecs and dailess codecs in ASoC core point of view. DAPM
- handles them equally and sysfs and debugfs directories for dailess codecs
- are similar except the pmdown_time node is not created.
- Only suspend and resume functions are modified to traverse all probed codecs
- instead of DAI link codecs.
- Example below shows a dailess codec registration.
- struct snd_soc_aux_dev foo_aux_dev[] = {
- {
- .name = "Amp",
- .codec_name = "codec.2",
- .init = foo_init2,
- },
- };
- static struct snd_soc_card card = {
- ...
- .aux_dev = foo_aux_dev,
- .num_aux_devs = ARRAY_SIZE(foo_aux_dev),
- };
- - ASoC: soc-cache: Fix memory overflow in LZO initialization
- The bitmap_zero() nbits argument was improperly set to reg_size
- but the underlying buffer was bmp_size long. This caused the memset
- to zero past the end of the allocated buffer and into the kernel heap
- causing strange kernel crashes sometimes by overwriting critical
- kernel structures.
- - ASoC: Fix resource leak if soc_register_ac97_dai_link failed
- Properly free the resources in the case of soc_register_ac97_dai_link failure.
- - ASoC: Hold client_mutex while calling snd_soc_instantiate_cards()
- As the comments of snd_soc_instantiate_cards() said,
- snd_soc_instantiate_cards() must be called with client_mutex.
- - ASoC: Samsung: Rename from s3c24xx to samsung
- Finally, move the 's3c24xx' directory to 'samsung'
- - ASoC: soc-cache: Ensure consistent cache naming
- - ASoC: soc-cache: Add error checking in the *_cache_sync functions
- Ensure that we report any errors encountered during reads/writes
- in the cache syncing functions.
- Remove redundant newline in the source code.
- - ASoC: Add initial WM8737 driver
- The WM8737 is a low power, flexible stereo ADC designed for portable
- applications. This driver supports most of the functionality of the
- WM8737, though some features such as the ALC are not yet implemented.
- - ASoC: Remove cyclic dependency between soc.h and soc-dapm.h/soc-dai.h
- There is no need anymore to include soc.h in soc-dapm.h and soc-dai.h as
- drivers are converted to include only soc.h.
- Thanks to Lars-Peter Clausen <lars@metafoo.de> for pointing out the issue.
- - ASoC: Add optional name_prefix for codec kcontrol, widget and route names
- There is a need to prefix codec kcontrol, widget and internal route names in
- an ASoC machine that has multiple codecs with conflicting names. The name
- collision would occur when codec drivers try to registering kcontrols with
- the same name or when building audio paths.
- This patch introduces optional prefix_map into struct snd_soc_card. With it
- machine drivers can specify a unique name prefix to each codec that have
- conflicting names with anothers. Prefix to codec is matched with codec
- name.
- Following example illustrates a machine that has two same codec instances.
- Name collision from kcontrol registration is avoided by specifying a name
- prefix "foo" for the second codec. As the codec widget names are prefixed
- then second audio map for that codec shows a prefixed widget name.
- static const struct snd_soc_dapm_route map0[] = {
- {"Spk", NULL, "MONO"},
- };
- static const struct snd_soc_dapm_route map1[] = {
- {"Vibra", NULL, "foo MONO"},
- };
- static struct snd_soc_prefix_map codec_prefix[] = {
- {
- .dev_name = "codec.2",
- .name_prefix = "foo",
- },
- };
- static struct snd_soc_card card = {
- ...
- .prefix_map = codec_prefix,
- .num_prefixes = ARRAY_SIZE(codec_prefix),
- };
- - ASoC: Prevent system suspend while debouncing wakeup capable GPIO jacks
- If the device associated with a GPIO jack is wakeup capable then disable
- suspend while we're debouncing the jack so that we skip suspends that race
- with the jack.
- Note that currently the GPIO based jack has a CODEC associated with it
- which we're using right now. These jacks should be reparented against the
- card itself and this code adjusted.
- - ASoC: soc-cache: Add support for rbtree based register caching
- This patch adds support for rbtree compression when storing the
- register cache. It does this by not adding any uninitialized registers
- (those whose value is 0). If any of those registers is written
- with a nonzero value they get added into the rbtree.
- Consider a sample device with a large sparse register map. The
- register indices are between [0, 0x31ff]. An array of 12800 registers
- is thus created each of which is 2 bytes. This results in a 25kB
- region. This array normally lives outside soc-core, normally in the
- driver itself. The original soc-core code would kmemdup this region
- resulting in 50kB total memory. When using the rbtree compression
- technique and __devinitconst on the original array the figures are
- as follows. For this typical device, you might have 100 initialized
- registers, that is registers that are nonzero by default. We build
- an rbtree with 100 nodes, each of which is 24 bytes. This results
- in ~2kB of memory. Assuming that the target arch can freeup the
- memory used by the initial __devinitconst array, we end up using
- about ~2kB bytes of actual memory. The memory footprint will increase
- as uninitialized registers get written and thus new nodes created in
- the rbtree. In practice, most of those registers are never changed.
- If the target arch can't freeup the __devinitconst array, we end up
- using a total of ~27kB. The difference between the rbtree and the LZO
- caching techniques, is that if using the LZO technique the size of
- the cache will increase slower as more uninitialized registers get
- changed.
- - ASoC: soc-cache: Add support for LZO register caching
- This patch adds support for LZO compression when storing the register
- cache. The initial register defaults cache is marked as __devinitconst
- and the only change required for a driver to use LZO compression is
- to set the compress_type member in codec->driver to SND_SOC_LZO_COMPRESSION.
- For a typical device whose register map would normally occupy 25kB or 50kB
- by using the LZO compression technique, one can get down to ~5-7kB. There
- might be a performance penalty associated with each individual read/write
- due to decompressing/compressing the underlying cache, however that should not
- be noticeable. These memory benefits depend on whether the target architecture
- can get rid of the memory occupied by the original register defaults cache
- which is marked as __devinitconst. Nevertheless there will be some memory
- gain even if the target architecture can't get rid of the original register
- map, this should be around ~30-32kB instead of 50kB.
- - ASoC: soc-cache: Add support for flat register caching
- This patch introduces the new caching API and migrates the
- old caching interface into the new one. The flat register caching
- technique does not use compression at all and it is equivalent to
- the old caching technique. One can still access codec->reg_cache
- directly but this is not advised as that will not be portable
- across different caching strategies.
- None of the existing drivers need to be changed to adapt to this
- caching technique. There should be no noticeable overhead associated
- with using the new caching API.
- - ASoC: Add trace events for ASoC register read/write
- The trace subsystem provides a convenient way of instrumenting the kernel
- which can be left on all the time with extremely low impact on the system
- unlike prints to the kernel log which can be very spammy. Begin adding
- support for instrumenting ASoC via this interface by adding trace for the
- register access primitives.
- - ASoC: Fix compile error if CONFIG_DEBUG_FS is not configured
- Add soc_init_card_debugfs and soc_cleanup_card_debugfs functions to fix below error.
- CC sound/soc/soc-core.o
- sound/soc/soc-core.c: In function 'soc_probe':
- sound/soc/soc-core.c:1689: error: implicit declaration of function 'soc_init_card_debugfs'
- sound/soc/soc-core.c: In function 'soc_remove':
- sound/soc/soc-core.c:1718: error: implicit declaration of function 'soc_cleanup_card_debugfs'
- make[2]: *** [sound/soc/soc-core.o] Error 1
- make[1]: *** [sound/soc] Error 2
- make: *** [sound] Error 2
- - ASoC: soc-cache: Use BUG_ON() for unsupported hw_read() calls
- Instead of dereferencing a NULL function pointer and falling apart
- use BUG_ON() for any unimplemented hw_read() calls.
- - ASoC: WM8770: Initial driver
- The WM8770 is a high performance, multi-channel audio
- codec. The WM8770 is ideal for surround sound processing
- applications for home hi-fi, automotive and other audio
- visual equipment.
- - ASoC: Move pop time from DAPM context to sound card
- Based on discussion the dapm_pop_time in debugsfs should be per card rather
- than per device. Single pop time value for entire card is cleaner when the
- DAPM sequencing is extended to cross-device paths.
- debugfs/asoc/{card->name}/{codec dir}/dapm_pop_time
- ->
- debugfs/asoc/{card->name}/dapm_pop_time
- - ASoC: Move codec debugfs directories under parent card directory
- Make use of sound card debugfs directory and move codec directories under
- the parent card debugfs directory.
- debugfs/asoc/{codec dir} -> debugfs/asoc/{card->name}/{codec dir}.
- - ASoC: Add sound card directory under debugfs/asoc/
- There will be need to have sound card specific debugfs entries. This patch
- introduces a new debugfs/asoc/{card->name}/ directory but does not add yet
- any entries there.
- - ASoC: Decouple DAPM from CODECs
- Decoupling Dynamic Audio Power Management (DAPM) from codec devices is
- required when developing ASoC further. Such as for other ASoC components to
- have DAPM widgets or when extending DAPM to handle cross-device paths.
- This patch decouples DAPM related variables from struct snd_soc_codec and
- moves them to new struct snd_soc_dapm_context that is used to encapsulate
- DAPM context of a device. ASoC core and API of DAPM functions are modified
- to use DAPM context instead of codec.
- This patch does not change current functionality and a large part of changes
- come because of structure and internal API changes.
- Core implementation is from Liam Girdwood <lrg@slimlogic.co.uk> with some
- minor core changes, codecs and machine driver conversions from
- Jarkko Nikula <jhnikula@gmail.com>.
- - ASoC: soc-cache: Remove unnecessary debugging info
- No need to print the register-value pair again, as we've already hooked
- snd_soc_write() for that matter.
- - ASoC: Push snd_soc_write() and snd_soc_read() into the source file
- Facilitating adding trace type stuff. For a first pass add some dev_dbg()
- statements into them.
- - ASoC: Convert soc-jack code to use request_any_context_irq()
- Allow the standard soc-jack GPIO based jack handling to handle the use of
- GPIOs which may sleep (such as those on GPIO expanders) by converting the
- code to use request_any_context_irq().
- - ASoC: Fix snd_soc_register_dais error handling
- kzalloc for dai may fail at any iteration of the for loop,
- thus properly unregister already registered DAIs before return error.
- The error handling code in snd_soc_register_dais() already ensure all the DAIs
- are unregistered before return error, we can remove the error handling code
- to unregister DAIs in snd_soc_register_codec().
- - ASoC: Fix SND_SOC_ALL_CODECS typo for alc5623
- Include alc5623.c in SND_SOC_ALL_CODECS when dependencies are met.
- - ASoC: add support for alc562[123] codecs
- This patch is adding support for alc562[123] codecs. It's based
- on the source code available in HP source code and other places.
- - ASoC: Include cx20442 to SND_SOC_ALL_CODECS
- - ASoC: Fix SND_SOC_ALL_CODECS typo for jz4740
- Include jz4740.c to SND_SOC_ALL_CODECS when the dependencies are met.
- - ASoC: Check return value of struct_strtoul() in pmdown_time_set()
- strict_strtoul() has just been made must check so do so.
- - ASoC: soc-core: Fix codec->name memory leak
- Ensure that the codec->name is freed when unregistering the codec.
- - ASoC: Fix I2C component device id number creation
- Use bitwise AND instead of logical AND when masking.
- - ASoC: Restore MAX98088 CODEC driver
- This reverts commit f6765502f8daae3d237a394889276c8987f3e299 and adds
- the missing include file.
- - Revert "ASoC: Add max98088 CODEC driver"
- This reverts commit e65d255a5a610ce9e185e0df855250706aca7c21 since it
- does not build.
- - llseek: automatically add .llseek fop
- All file_operations should get a .llseek operation so we can make
- nonseekable_open the default for future file operations without a
- .llseek pointer.
- The three cases that we can automatically detect are no_llseek, seq_lseek
- and default_llseek. For cases where we can we can automatically prove that
- the file offset is always ignored, we use noop_llseek, which maintains
- the current behavior of not returning an error from a seek.
- New drivers should normally not use noop_llseek but instead use no_llseek
- and call nonseekable_open at open time. Existing drivers can be converted
- to do the same when the maintainer knows for certain that no user code
- relies on calling seek on the device file.
- The generated code is often incorrectly indented and right now contains
- comments that clarify for each added line why a specific variant was
- chosen. In the version that gets submitted upstream, the comments will
- be gone and I will manually fix the indentation, because there does not
- seem to be a way to do that using coccinelle.
- Some amount of new code is currently sitting in linux-next that should get
- the same modifications, which I will do at the end of the merge window.
- Many thanks to Julia Lawall for helping me learn to write a semantic
- patch that does all this.
- ===== begin semantic patch =====
- // This adds an llseek= method to all file operations,
- // as a preparation for making no_llseek the default.
- //
- // The rules are
- // - use no_llseek explicitly if we do nonseekable_open
- // - use seq_lseek for sequential files
- // - use default_llseek if we know we access f_pos
- // - use noop_llseek if we know we don't access f_pos,
- // but we still want to allow users to call lseek
- //
- @ open1 exists @
- identifier nested_open;
- @@
- nested_open(...)
- {
- <+...
- nonseekable_open(...)
- ...+>
- }
- @ open exists@
- identifier open_f;
- identifier i, f;
- identifier open1.nested_open;
- @@
- int open_f(struct inode *i, struct file *f)
- {
- <+...
- (
- nonseekable_open(...)
- |
- nested_open(...)
- )
- ...+>
- }
- @ read disable optional_qualifier exists @
- identifier read_f;
- identifier f, p, s, off;
- type ssize_t, size_t, loff_t;
- expression E;
- identifier func;
- @@
- ssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)
- {
- <+...
- (
- *off = E
- |
- *off += E
- |
- func(..., off, ...)
- |
- E = *off
- )
- ...+>
- }
- @ read_no_fpos disable optional_qualifier exists @
- identifier read_f;
- identifier f, p, s, off;
- type ssize_t, size_t, loff_t;
- @@
- ssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)
- {
- ... when != off
- }
- @ write @
- identifier write_f;
- identifier f, p, s, off;
- type ssize_t, size_t, loff_t;
- expression E;
- identifier func;
- @@
- ssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)
- {
- <+...
- (
- *off = E
- |
- *off += E
- |
- func(..., off, ...)
- |
- E = *off
- )
- ...+>
- }
- @ write_no_fpos @
- identifier write_f;
- identifier f, p, s, off;
- type ssize_t, size_t, loff_t;
- @@
- ssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)
- {
- ... when != off
- }
- @ fops0 @
- identifier fops;
- @@
- struct file_operations fops = {
- ...
- };
- @ has_llseek depends on fops0 @
- identifier fops0.fops;
- identifier llseek_f;
- @@
- struct file_operations fops = {
- ...
- .llseek = llseek_f,
- ...
- };
- @ has_read depends on fops0 @
- identifier fops0.fops;
- identifier read_f;
- @@
- struct file_operations fops = {
- ...
- .read = read_f,
- ...
- };
- @ has_write depends on fops0 @
- identifier fops0.fops;
- identifier write_f;
- @@
- struct file_operations fops = {
- ...
- .write = write_f,
- ...
- };
- @ has_open depends on fops0 @
- identifier fops0.fops;
- identifier open_f;
- @@
- struct file_operations fops = {
- ...
- .open = open_f,
- ...
- };
- // use no_llseek if we call nonseekable_open
- ////////////////////////////////////////////
- @ nonseekable1 depends on !has_llseek && has_open @
- identifier fops0.fops;
- identifier nso ~= "nonseekable_open";
- @@
- struct file_operations fops = {
- ... .open = nso, ...
- +.llseek = no_llseek, /* nonseekable */
- };
- @ nonseekable2 depends on !has_llseek @
- identifier fops0.fops;
- identifier open.open_f;
- @@
- struct file_operations fops = {
- ... .open = open_f, ...
- +.llseek = no_llseek, /* open uses nonseekable */
- };
- // use seq_lseek for sequential files
- /////////////////////////////////////
- @ seq depends on !has_llseek @
- identifier fops0.fops;
- identifier sr ~= "seq_read";
- @@
- struct file_operations fops = {
- ... .read = sr, ...
- +.llseek = seq_lseek, /* we have seq_read */
- };
- // use default_llseek if there is a readdir
- ///////////////////////////////////////////
- @ fops1 depends on !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
- identifier fops0.fops;
- identifier readdir_e;
- @@
- // any other fop is used that changes pos
- struct file_operations fops = {
- ... .readdir = readdir_e, ...
- +.llseek = default_llseek, /* readdir is present */
- };
- // use default_llseek if at least one of read/write touches f_pos
- /////////////////////////////////////////////////////////////////
- @ fops2 depends on !fops1 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
- identifier fops0.fops;
- identifier read.read_f;
- @@
- // read fops use offset
- struct file_operations fops = {
- ... .read = read_f, ...
- +.llseek = default_llseek, /* read accesses f_pos */
- };
- @ fops3 depends on !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
- identifier fops0.fops;
- identifier write.write_f;
- @@
- // write fops use offset
- struct file_operations fops = {
- ... .write = write_f, ...
- + .llseek = default_llseek, /* write accesses f_pos */
- };
- // Use noop_llseek if neither read nor write accesses f_pos
- ///////////////////////////////////////////////////////////
- @ fops4 depends on !fops1 && !fops2 && !fops3 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
- identifier fops0.fops;
- identifier read_no_fpos.read_f;
- identifier write_no_fpos.write_f;
- @@
- // write fops use offset
- struct file_operations fops = {
- ...
- .write = write_f,
- .read = read_f,
- ...
- +.llseek = noop_llseek, /* read and write both use no f_pos */
- };
- @ depends on has_write && !has_read && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
- identifier fops0.fops;
- identifier write_no_fpos.write_f;
- @@
- struct file_operations fops = {
- ... .write = write_f, ...
- +.llseek = noop_llseek, /* write uses no f_pos */
- };
- @ depends on has_read && !has_write && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
- identifier fops0.fops;
- identifier read_no_fpos.read_f;
- @@
- struct file_operations fops = {
- ... .read = read_f, ...
- +.llseek = noop_llseek, /* read uses no f_pos */
- };
- @ depends on !has_read && !has_write && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
- identifier fops0.fops;
- @@
- struct file_operations fops = {
- ...
- +.llseek = noop_llseek, /* no read or write fn */
- };
- ===== End semantic patch =====
- - ASoC: Add max98088 CODEC driver
- This patch adds the MAX98088 CODEC driver.
- - ASoC: Pay attention to driver supplied DAI IDs
- The driver can specify a DAI ID number so use that.
- - ASoC: Check list debugfs files for PAGE_SIZE overflow
- - ASoC: Move soc-core module init next to functon definition
- - ASoC: don't register AC97 devices twice
- With generic AC97 ASoC glue driver (codec/ac97.c), we get following warning when
- the device is registered (slightly stripped the backtrace):
- kobject (c5a863e8): tried to init an initialized object, something is seriously
- wrong.
- [<c00254fc>] (unwind_backtrace+0x0/0xec)
- [<c014fad0>] (kobject_init+0x38/0x70)
- [<c0171e94>] (device_initialize+0x20/0x70)
- [<c017267c>] (device_register+0xc/0x18)
- [<bf20db70>] (snd_soc_instantiate_cards+0x924/0xacc [snd_soc_core])
- [<bf20e0d0>] (snd_soc_register_platform+0x16c/0x198 [snd_soc_core])
- [<c0175304>] (platform_drv_probe+0x18/0x1c)
- [<c0174454>] (driver_probe_device+0xb0/0x16c)
- [<c017456c>] (__driver_attach+0x5c/0x7c)
- [<c0173cec>] (bus_for_each_dev+0x48/0x78)
- [<c0173600>] (bus_add_driver+0x98/0x214)
- [<c0174834>] (driver_register+0xa4/0x130)
- [<c001f410>] (do_one_initcall+0xd0/0x1a4)
- [<c0062ddc>] (sys_init_module+0x12b0/0x1454)
- This happens because the generic AC97 glue driver creates its codec->ac97 via
- calling snd_ac97_mixer(). snd_ac97_mixer() provides own version of
- snd_device.register which handles the device registration when
- snd_card_register() is called.
- To avoid registering the AC97 device twice, we add a new flag to the
- snd_soc_codec: ac97_created which tells whether the AC97 device was created by
- SoC subsystem.
- - ASoC: Use delayed work for debounce of GPIO based jacks
- Rather than block the workqueue by sleeping to do the debounce use delayed
- work to implement the debounce time. This should also means that we extend
- the debounce time on each new bounce, potentially allowing shorter debounce
- times for clean insertions.
- - ASoC: soc-cache: Add spi_write support for all I/O types
- Ensure that all drivers that use SPI and I2C will work properly
- by providing SPI write functions for all different I/O types.
- - ASoC: WM8804: Initial driver
- The WM8804 is a high performance consumer mode S/PDIF transceiver with
- support for 1 received channel and 1 transmitted channel.
- - ASoC: Fix incorrect parameter to snd_soc_codec_volatile_register
- We need to pass the register index and not the register value.
- This patch depends on my previous patch "ASoC: Delegate to hw
- specific read for volatile registers".
- - ASoC: Delegate to hw specific read for volatile registers
- Ensure that reads on volatile registers will correctly delegate
- to the bus specific read function.
- - ASoC: adapt multi-componentism again
- Go back to the new world order.
- (Also fixed indentation.)
- - ASoC: Return -1 instead of -EINVAL to ensure consistency
- The code can't really cope with I/O errors, so it would be better
- to be consistent throughout all cache functions and return -1 instead
- of -EINVAL.
- The return value of snd_soc_read(...) is mostly checked in the probe
- function and nowhere else.
- - ASoC: Report error codes for card DAI instantiation failures
- Also clean up the error print a bit.
- - ASoC: Remove extra rtd->dev.init_name assignment in soc_probe_dai_link
- rtd->dev.init_name is set twice in soc_probe_dai_link. I removed the first
- assignement from dai_link->stream_name since then there won't be sysfs name
- changes and usually dai_link->name seems to fit anyway better for a sysfs
- directory name.
- - ASoC: Report error code when failing to add controls
- Helps with diagnostics.
- - ASoC: Add platform listing to debugfs
- List registered platforms in debugfs to improve debugability of machine
- drivers.
- - ASoC: Add DAI list to debugfs
- Allow the user to inspect the list of registered DAIs at runtime to
- improve diagnostics for machine driver setup.
- - ASoC: Add debugfs listing of registered CODECs
- Help with diagnostics for machine driver setup by listing all the
- registered CODECs in debugfs.
- - ASoC: WM8985: Initial driver
- The WM8985 is a low power, high quality, feature-rich stereo
- CODEC designed for portable multimedia applications that
- require low power consumption and high quality audio.
- - ASoC: Swap bias level enumeration
- Swapping the bias level enumeration is only meant to help debugging. It is
- easier if number 0 means bias off and bigger number means bigger bias level.
- - ASoC: Add build infrastructure for WL1273
- The Makefile and Kconfig updates for WL1273 appear to have been mising
- from the patch posted, add them.
- - ASoC: Don't call DAI registration for CODECs with no DAI
- Otherwise we generate worrying (but benign) warnings for amps.
- - ASoC: add 88pm860x codec driver
- Add 88PM860x codec driver. 88PM860x codec supports two interfaces. And it
- also supports headset/mic/hook/short detection.
- - ASoC: core - fix build warning on x86_64
- Output size_t type as a "%Zu" to avoid warnings.
- - ASoC: Remove redundant device name from debugfs directory
- Since the core now includes deduplication in the name of CODEC
- devices there's no need to add extra for the debugfs directory name.
- - ASoC: Set up debugfs only once per CODEC
- Since the debugfs directory is current per CODEC we should only init
- it when the CODEC is initialised, otherwise we end up with errors
- being generated when an attempt is made to add duplicate debugfs
- entries.
- Since most of this stuff is actually for the card we should refactor
- but this can come later.
- - ASoC: Automatically determine control_data for soc-cache users
- Since the provision of a struct device for the CODEC is now mandatory
- we can use container_of() to locate the struct i2c_client and struct
- spi_device for relevant devices, removing the need to manually set it
- in each driver.
- A further patch will automate selection of the control type based on
- the bus_type of the struct device, further reducing the amount of
- driver code required.
- - ASoC: multi-component - ASoC Multi-Component Support
- This patch extends the ASoC API to allow sound cards to have more than one
- CODEC and more than one platform DMA controller. This is achieved by dividing
- some current ASoC structures that contain both driver data and device data into
- structures that only either contain device data or driver data. i.e.
- struct snd_soc_codec ---> struct snd_soc_codec (device data)
- +-> struct snd_soc_codec_driver (driver data)
- struct snd_soc_platform ---> struct snd_soc_platform (device data)
- +-> struct snd_soc_platform_driver (driver data)
- struct snd_soc_dai ---> struct snd_soc_dai (device data)
- +-> struct snd_soc_dai_driver (driver data)
- struct snd_soc_device ---> deleted
- This now allows ASoC to be more tightly aligned with the Linux driver model and
- also means that every ASoC codec, platform and (platform) DAI is a kernel
- device. ASoC component private data is now stored as device private data.
- The ASoC sound card struct snd_soc_card has also been updated to store lists
- of it's components rather than a pointer to a codec and platform. The PCM
- runtime struct soc_pcm_runtime now has pointers to all its components.
- This patch adds DAPM support for ASoC multi-component and removes struct
- snd_soc_socdev from DAPM core. All DAPM calls are now made on a card, codec
- or runtime PCM level basis rather than using snd_soc_socdev.
- Other notable multi-component changes:-
- * Stream operations now de-reference less structures.
- * close_delayed work() now runs on a DAI basis rather than looping all DAIs
- in a card.
- * PM suspend()/resume() operations can now handle N CODECs and Platforms
- per sound card.
- * Added soc_bind_dai_link() to bind the component devices to the sound card.
- * Added soc_dai_link_probe() and soc_dai_link_remove() to probe and remove
- DAI link components.
- * sysfs entries can now be registered per component per card.
- * snd_soc_new_pcms() functionailty rolled into dai_link_probe().
- * snd_soc_register_codec() now does all the codec list and mutex init.
- This patch changes the probe() and remove() of the CODEC drivers as follows:-
- o Make CODEC driver a platform driver
- o Moved all struct snd_soc_codec list, mutex, etc initialiasation to core.
- o Removed all static codec pointers (drivers now support > 1 codec dev)
- o snd_soc_register_pcms() now done by core.
- o snd_soc_register_dai() folded into snd_soc_register_codec().
- CS4270 portions:
- Some TLV320aic23 and Cirrus platform fixes.
- TI CODEC and OMAP fixes
- Samsung platform and misc fixes :-
- Reviewed-by: Jassi Brar <jassi.brar@samsung.com>
- MPC8610 and PPC fixes.
- i.MX fixes and some core fixes.
- J4740 platform fixes:-
- - ASoC: Add initial WM8962 CODEC driver
- The WM8962 is a low power, high performance stereo CODEC designed for
- portable digital audio applications.
- This initial driver release supports the key audio paths of the WM8962.
- Extended functionality, such as microphone detection, digital microphones
- and the advanced DSP signal enhancements provided by the device are not
- yet supported.
- - ASoC: Fix multi-componentism
- Spot the build testing.
- - ASoC: Fix soc-cache buffer overflow bug
- Make sure we stay within the cache boundaries when updating the
- register cache.
- - ASoC: soc-core: fix debugfs_pop_time file permissions
- I think this is a typo, debugfs_pop_time should not be executable.
- - ASoC: register cache should be 1 byte aligned for 1 byte long register
- - ASoC: Initial WM8741 CODEC driver
- The WM8741 is a very high performance stereo DAC designed for audio
- applications such as professional recording systems, A/V receivers and
- high specification CD, DVD and home theatre systems. The device supports
- PCM data input word lengths from 16 to 32-bits and sampling rates up to
- 192kHz. The WM8741 also supports DSD bit-stream data format, in both
- direct DSD and PCM-converted DSD modes.
- TODO: Expand wm8741_set_dai_sysclk and rate_constraint members to
- allow for all supported sample rate / Master Clock frequency combinations.
- Fully enable control of supplies.
- - fix typos concerning "initiali[zs]e"
- - ASoC: Select wm_hubs automatically for WM8994
- Otherwise all machine drivers need to do so.
- - ASoC: Handle read failures in codec_reg
- When a device is powered down volatile registers can't be read so
- attempts to display codec_reg will show error values, and obviously
- it is also possible for there to be hardware errors too. Check for
- errors from reads and display them more clearly when formatting
- codec_reg.
- - ASoC: Fix sorting of Makefile and Kconfig
- - ASoC: Add JZ4740 codec driver
- This patch adds support for the JZ4740 internal codec.
- - ASoC: Add JZ4740 ASoC support
- This patch adds ASoC support for JZ4740 SoCs I2S module.
- - ASoC: Fix sorting of DA7210 entries in Kconfig
- - ASoC: Fix overflow bug in SOC_DOUBLE_R_SX_TLV
- When SX_TLV widgets are read, if the gain is set to a value below 0dB,
- the mixer control is erroniously read as being at maximum volume.
- The value read out of the CODEC register is never sign-extended, and
- when the minimum value is subtracted (read; added, since the minimum is
- negative) the result is a number greater than the maximum allowed value
- for the control, and hence it saturates.
- Solution: Mask the result so that it "wraps around", emulating
- sign-extension.
- - ASoC: Pay attention to write errors in volsw_2r_sx
- - ASoC: ep93xx i2s audio driver
- Add ep93xx i2s audio driver
- - ASoC: kirkwood: Add i2s support
- This patch enables support for the i2s controller available on kirkwood
- platforms
- - ASoC: Add driver for cs42l51
- This patch is adding a ASoC driver for the cs42l51 from Cirrus Logic.
- Master mode and spi mode are not supported.
- - ASoC: NUC900/audio: add nuc900 audio driver support
- Add support for NUC900 AC97
- - ASoC: Add SOC_DOUBLE_R_SX_TLV control
- This patch is adding a new control which has the following capabilities:
- - tlv
- - variable data size (for instance, 7 ou 8 bit)
- - double mixer
- - data range centered around 0
- - ASoC: core: Fix for the volume limiting when invert is in use
- If the register for the volume needs invert, than the inversion
- need to be done from the chip maximum, and not from the platform
- dependent limit.
- Introduce soc_mixer_control.platform_max value, which initially
- equals to chip maximum.
- The snd_soc_limit_volume function only modify the platform_max,
- all volsw_info call returns this as well.
- The .max value holds the chip default (maximum), and it is used
- for the inversion, if it is needed.
- Additional check in the volsw_info call has been added to check
- the validity of the platform_max in case, when custom macros
- used by codec drivers are not initializing it correctly.
- - ASoC: Allow DAI links to be kept active over suspend
- As well as allowing DAPM pins to be marked as ignoring suspend allow DAI
- links to be similarly marked. This is primarily intended for digital
- links between CODECs and non-CPU devices such as basebands in mobile
- phones and will suppress all suspend calls for the DAI link. It is
- likely that this will need to be revisited if used with devices which
- are part of the SoC CPU.
- Tested-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
- - ASoC: Support leaving paths enabled over system suspend
- Some devices can usefully run audio while the Linux system is suspended.
- One of the most common examples is smartphone systems, which are normally
- designed to allow audio to be run between the baseband and the CODEC
- without passing through the CPU and so can suspend the CPU when on a
- voice call for additional power savings.
- Support such systems by providing an API snd_soc_dapm_ignore_suspend().
- This can be used to mark DAPM endpoints as not being sensitive to
- system suspend. When the system is being suspended paths between
- endpoints which are marked as ignoring suspend will be kept active.
- Both source and sink must be marked, and there must already be an
- active path between the two endpoints prior to suspend.
- When paths are active over suspend the bias management will hold the
- device bias in the ON state. This is used to avoid suspending the
- CODEC while it is still in use.
- Tested-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
- - ASoC: Refactor DAPM suspend handling
- Instead of using stream events to handle power down during suspend
- integrate the handling with the normal widget path checking by
- replacing all cases where we report a connected endpoint in a path
- with a function snd_soc_dapm_suspend_check() which looks at the ALSA
- power state for the card and reports false if we are in a D3 state.
- Since the core moves us into D3 prior to initating the suspend all
- power checks during suspend will cause the widgets to be powered
- down. In order to ensure that widgets are powered up on resume set
- the card to D2 at the start of resume handling (ALSA API calls
- require D0 so we are still protected against userspace access).
- Tested-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
- - ASoC: core: Support for limiting the volume
- Add support for the core to limit the maximum volume on an
- existing control.
- The function will modify the soc_mixer_control.max value
- of the given control.
- The new value must be lower than the original one (chip maximum)
- If there is a need for limiting a gain on a given control,
- than machine drivers can do the following in their
- snd_soc_dai_link.init function:
- snd_soc_limit_volume(codec, "TPA6140A2 Headphone Playback Volume", 21);
- This will modify the original 31 (chip maximum) to 21, so user
- space will not be able to set the gain higher than this.
- - ASoC: Add debug output tracing all cache register writes
- - ASoC: Add WM9090 amplifier driver
- The WM9090 is a high performance low power audio subsystem, including
- headphone and class D speaker drivers.
- Note that this driver is a standalone CODEC driver and so is only
- immediately suitable for use with the WM9090 as a standalone sound card
- taking line inputs, or with a DAC with no software control. The pending
- ASoC multi-CODEC support will expand the range of systems that can use
- the driver, or system-specific adaptations can be made.
- - ASoC: Allow reporting of NULL jacks
- Follow the core jack implementation and allow reporting on the status
- of NULL jacks, avoiding the need to check in detection implementations.
- - ASoC: Add indirection for CODEC private data
- One of the features of the multi CODEC work is that it embeds a struct
- device in the CODEC to provide diagnostics via a sysfs class rather than
- via the device tree, at which point it's much better to use the struct
- device private data rather than having two places to store it. Provide
- an accessor function to allow this change to be made more easily, and
- update all the CODEC drivers are updated.
- To ensure use of the accessor the private data structure member is
- renamed, meaning that if code developed with older an older core that
- still uses private_data is merged it will fail to build.
SoC Marvell Kirkwood
- - Add kirkwood and nuc900 build stubs
- - ASoC: Add support for OpenRD Ultimate
- OpenRD Ultimate & Client are similar machines so enable OpenRD client sound
- support on Ultimate too
- Tested-by: Robas Teodor <teodor.robas@gmail.com>
- - ASoC: kirkwood: Add audio support to hp t5325 thin clients
- This patch is adding support for hp t5325 thin clients.
- There's a alc5623 codec connected to the i2s interface.
- - ASoC: Change my mail address
- Like other coworkers, I'm about leave Mandriva/Edge-It so I'm changing
- my mail address to use my personal one.
- - ASoC: kirkwood: add alias to pcm module
- Allow snd-soc-kirkwood autoloading by adding an alias.
- - ASoC: OpenRD Client : Fix naming breakage due to multicomponent support
- multicomponent support added/changed some device name but added some typos,
- breaking existing OpenRD Client support.
- - ASoC: kirkwood-i2s: Handle mute/unmute playback/record
- The controller has mute/unmute capability and some bootloader may mute
- them at boot. If it's not handled, all things will seem to be working
- but no sound will come out of the speaker/headphone.
- - ASoC: Fix kirkwood i2s mono playback
- Kirkwood controller needs to be informed if the audio stream is mono
- or not. Failing to do so will result in playing at the wrong speed.
- - ASoC: patch for the useless 'break' removal in kirkwood
- This patch to remove the 'break;', when the 'switch' jumps to
- the 'default' branch, the 'return -EINVAL' will be return with
- a error number, so the 'break;' code never be run, it is unuseful
- and should be removed here.
- - ASoC: kirkwood: Add audio support to openrd client platforms
- This patch is adding support for openrd client platforms. It's using
- the cs42l51 codec and has one mic and one speaker plugs.
- - ASoC: kirkwood: Add i2s support
- This patch enables support for the i2s controller available on kirkwood
- platforms
SoC NVIDIA Tegra
- - add missing files for soc/mid-x86 and soc/tegra
- - Add build stubs for tegra and mid-x86 ASoC drivers
- - ASoC: tegra: Add DAPM widgets/routes for Harmony
- With this change, I can capture from a microphone plugged into the
- mic jack on Harmony (after unmuting Left Input PGA, and maybe turning
- up the gain there too).
- - ASoC: tegra: Harmony machine support
- - ASoC: tegra: Add tegra-pcm driver
- This provides an ASoC platform driver that manages Tegra's APB DMA
- controller.
- - ASoC: tegra: s/IS_ERR_OR_NULL/IS_ERR/ for clk_get_sys
- A recent discussion on linux-arm-kernel noted that the value returned by
- clk_get_sys is an opaque token, and not strictly a pointer; it is
- meaningful only to the clock API, clients should not dereference the value,
- and the clock API must accept any non-IS_ERR value it returned.
- Hence, only IS_ERR is appropriate to interpret the result, not
- IS_ERR_OR_NULL.
- I checked that clk_get_sys in both ASoC's for-next and Tegra's for-next
- do behave as described; NULL is not returned in the case of error.
- - ASoC: tegra: Machine utility code
- Many portions of Tegra ASoC machine drivers will be similar or identical.
- To avoid cut/paste, this file will act as a repository for all that common
- code. For now, it solely includes code to reprogram the audio PLL for
- 44.1KHz- vs. 48KHz-based sample rates.
- - ASoC: Update name of debugfs root symbol to snd_soc_
- Everything else is using snd_soc_ so we should use it here too.
- - ASoC: tegra: Add tegra-i2s driver
- This provides an ASoC DAI interface for Tegra's I2S controller.
- - ASoC: tegra: Add tegra-das driver
- The DAS (Digital Audio Switch) is a mux/crossbar which sits between
- the DACs (Digital Audio Controllers) and the DAPs (Digital Audio
- Ports). Audio data may be routed between DACs and DAPs in various
- combinations as required by board design/application.
- - ASoC: tegra: Remove TEGRA_I2S_AUDIO from Kconfig
- That config variable doesn't exist in the mainline kernel, and hence
- the dependency shouldn't either.
- In linux-tegra-2.6.36, the dependency did exist to avoid a conflict with
- the old non-ALSA Tegra I2S driver. However, this isn't and won't be
- upstreamed.
- - ASoC: tegra: Kconfig and Makefile
SoC Nuvoton NUC900
- - Add kirkwood and nuc900 build stubs
- - ASoC: Fix missing spin_unlock_irqrestore
- In nuc900_dma_hw_params(), if snd_pcm_lib_malloc_pages failed
- it returns without calling spin_unlock_irqrestore().
- Since snd_pcm_lib_malloc_pages() does not touch struct nuc900_audio,
- we don't need to hold the lock while calling snd_pcm_lib_malloc_pages().
- Fix it by moving spin_lock_irqsave() down to after snd_pcm_lib_malloc_pages().
- In nuc900_dma_prepare(), spin_unlock_irqrestore() is missing in the error path.
- Fix it by removing the return in default case.
- - ASoC: Remove unneeded !! operations while checking return value of nuc900_checkready
- I think this unneededd !! operations just reduce the readability.
- - ASoC: Fix compile error for nuc900-pcm.c
- This patch fixes below error:
- CC sound/soc/nuc900/nuc900-pcm.o
- sound/soc/nuc900/nuc900-pcm.c: In function 'nuc900_dma_open':
- sound/soc/nuc900/nuc900-pcm.c:267: error: 'nuc900_ac97_data' undeclared (first use in this function)
- sound/soc/nuc900/nuc900-pcm.c:267: error: (Each undeclared identifier is reported only once
- sound/soc/nuc900/nuc900-pcm.c:267: error: for each function it appears in.)
- sound/soc/nuc900/nuc900-pcm.c: At top level:
- sound/soc/nuc900/nuc900-pcm.c:337: error: expected ',' or ';' before 'static'
- sound/soc/nuc900/nuc900-pcm.c:354: error: 'nuc900_soc_platform_probe' undeclared here (not in a function)
- make[3]: *** [sound/soc/nuc900/nuc900-pcm.o] Error 1
- make[2]: *** [sound/soc/nuc900] Error 2
- make[1]: *** [sound/soc] Error 2
- make: *** [sound] Error 2
- - ASoC: Fix prototype for nuc900_ac97_probe and nuc900_ac97_remove
- This patch fixes below compile warning:
- CC sound/soc/nuc900/nuc900-ac97.o
- sound/soc/nuc900/nuc900-ac97.c:300: warning: initialization from incompatible pointer type
- sound/soc/nuc900/nuc900-ac97.c:301: warning: initialization from incompatible pointer type
- - ASoC: Fix compile error for nuc900-ac97.c
- Fix below compile error by add a missing ';'.
- CC sound/soc/nuc900/nuc900-ac97.o
- sound/soc/nuc900/nuc900-ac97.c:300: warning: initialization from incompatible pointer type
- sound/soc/nuc900/nuc900-ac97.c:301: warning: initialization from incompatible pointer type
- sound/soc/nuc900/nuc900-ac97.c:318: error: expected ',' or ';' before 'static'
- sound/soc/nuc900/nuc900-ac97.c:405: error: 'nuc900_ac97_drvprobe' undeclared here (not in a function)
- make[3]: *** [sound/soc/nuc900/nuc900-ac97.o] Error 1
- make[2]: *** [sound/soc/nuc900] Error 2
- make[1]: *** [sound/soc] Error 2
- make: *** [sound] Error 2
- - ASoC: nuc900-ac97: fix a memory leak
- - ASoC: remove duplicated include for nuc900
- Remove duplicated include.
- - ASoC: NUC900: patch for fix build error
- This patch is to change 'auido.h' to 'audio.h' for
- fixing nuc900 alsa driver build error.
- - ASoC: nuc900: patch for modifing the ac97 delays to minimum
- This patch is to modify the ac97 delays to minimum, all these 1000 micro
- seconds delays seem over spec for the AC97 interface.
- I deleted some unnecessary delays here and changed the AC97 cold and warm reset
- delays from 1000us to 100us.
- - ASoC: nuc900: fix a typo and rename the header file
- Fix a '#include "nuc900-audio.h' typo, I think it should be 'audio'.
- At the same time, this patch renames the 'nuc900-auido.h' file to
- 'nuc900-audio.h'.
- - ASoC: nuc900: fix a wait loop bug
- The current implement meant ACTL_ACCON was only accessed once when read or write
- proceeding, which is not right, if so,we have to wait the 'timeout=0x10000' to end
- every times.
- We need to polling the bit AC_R_FINISH and AC_W_FINISH of ACTL_ACCON
- register to identify whether read or write is finished or not,so I make
- the patch to fix the issue.
- - ASoC: nuc900: patch for SUBSTREAM_TYPE', 'PCM_TX' and 'PCM_RX' removal
- This patch is to remove the 'SUBSTREAM_TYPE','PCM_TX' and 'PCM_RX' definition.
- There is no need to redefine SNDRV_PCM_STREAM_PLAYBACK as PCM_TX,
- the SUBSTREAM_TYPE(substream) can be deleted too, the playback or record can be
- judged by 'if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)' directly rather
- than 'if (PCM_TX == stype)', which makes the codes easy to read.
- - ASoC: NUC900/audio: add nuc900 audio driver support
- Add support for NUC900 AC97
SoC PXA2xx 88PM860x Tavor EVB3
- - ASoC: add tavorevb3 machine driver for 88pm860x
SoC PXA2xx Aeronix Zipit Z2
- - ASoC: PXA: Fix codec address on Zipit Z2
- WM8750 address is 0x1b, not 0x1a. Without this fix ALSA detects no sound
- cards on Zipit
- - ASoC: PXA: Fix jack detection on Zipit Z2
- Fix jack detection on Zipit Z2, otherwise it
- disables headphones output when jack is connected
SoC PXA2xx Corgi
- - ASoC: correct link specifications for corgi, poodle and spitz
- ASoC DAI link descriptions for Corgi, Poodle and Spitz platforms
- contained incorrect names for cpu_dai and codec, which effectievly disabled sound
- on theese platforms. Fix that errors.
- - ASoC: Lock the CODEC in PXA external jack controls
- When doing anything with the system, especially DAPM, we need to hold the
- CODEC mutex.
- - ASoC: Fix a few more PXA build errors
- Dead pxa2xx-pcm.h includes and a missing ,
SoC PXA2xx E740
- - ASoC: e740_wm9705 - free gpio in e740_exit()
- In e740_init(), we call gpio_request() for
- GPIO_E740_MIC_ON, GPIO_E740_AMP_ON and GPIO_E740_WM9705_nAVDD2.
- We should free the these gpio accordingly in e740_exit().
SoC PXA2xx EM-X270
- - ASoC: Fix a few more PXA build errors
- Dead pxa2xx-pcm.h includes and a missing ,
SoC PXA2xx Poodle
- - ASoC: correct link specifications for corgi, poodle and spitz
- ASoC DAI link descriptions for Corgi, Poodle and Spitz platforms
- contained incorrect names for cpu_dai and codec, which effectievly disabled sound
- on theese platforms. Fix that errors.
- - ASoC: Lock the CODEC in PXA external jack controls
- When doing anything with the system, especially DAPM, we need to hold the
- CODEC mutex.
- - ASoC: pxa2xx-i2s is the proper name of the I2S DAI, not pxa-i2s.
- - ASoC: Fix a few more PXA build errors
- Dead pxa2xx-pcm.h includes and a missing ,
SoC PXA2xx Spitz
- - ASoC: correct link specifications for corgi, poodle and spitz
- ASoC DAI link descriptions for Corgi, Poodle and Spitz platforms
- contained incorrect names for cpu_dai and codec, which effectievly disabled sound
- on theese platforms. Fix that errors.
- - ASoC: Lock the CODEC in PXA external jack controls
- When doing anything with the system, especially DAPM, we need to hold the
- CODEC mutex.
- - ALSA: Fix Linux 2.6 merge issues
- - [ARM] pxa/spitz: Correctly register WM8750
- This patch registers the WM8750 codec on a proper place on the SPITZ machine
- after the WM8750 driver was converted to new API.
SoC PXA2xx Tosa
- - ASoC: fix the building issue of missing codec field in 'struct snd_soc_card'
SoC PXA2xx saarb
- - ASoC: add saarb machine driver for 88pm860x
- 88PM860x codec is used in Marvell saarb development board. 88PM860x codec
- is used as master mode for SSP communication. Only I2S format is supported.
SoC S6000
- - ASoC: Remove needless inclusion of tlv320aic3x.h from machine drivers
- After multi-component conversion these machine drivers don't actually need
- anything from sound/soc/codecs/tlv320aic3x.h so don't include it.
- - s6105-ipcam: fix compilation
- When the s6105-ipcam ASoC driver had been converted to the
- multi-component API, a single reference to a former structure
- element remained, blocking successful compilation.
- - s6000-pcm: fix compilation
- s6000_soc_platform has lost its forward declaration and there no
- longer is a name element in it, so use a string constant when
- calling request_irq.
- - s6000-i2s: fix compilation
- A semicolon was missing.
- - ASoC: s6000: use resource_size for {request/release}_mem_region and ioremap
- The size calculation is end - start + 1. But,sometimes, the '1' can
- be forgotten carelessly, witch will have potential risk, so use resource_size
- for {request/release}_mem_region and ioremap here should be good habit.
SoC SH7760 AC97
- - ASoC: sh: fsi-ak4642: fixup platform device id
- - ASoC: fix migor audio build
- Commit 6d803ba736abb5e122dede70a4720e4843dd6df4 "ARM: 6483/1: arm & sh:
- factorised duplicated clkdev.c" broke compilation of migor audio. Use the
- correct header to fix the problem.
- - ASoC: sh: fsi-da7210: remove unnecessary format settings
- - ASoC: sh: fsi: remove runtime register check from fsi_master_xxx
- Current FSI driver was checking register range on fsi_master_xxx function.
- This runtime check was added to avoid an illegal access
- from wrong/mistake implementation.
- But it is useless check under the correct implementation.
- This patch escape runtime check by using macro technique.
- If there is wrong implementation, it will be compile error.
- - ASoC: sh: fsi: change fsi->mst_ctrl to master->a/b_mclk
- There was a strange part where fsi->xxx had been used
- for fsi_master_xxx function instead of master->xxx in current FSI.
- This patch modify it.
- - ASoC: sh: fsi: modify improper dependent
- FSI-AK4642 and FSI-DA7210 are depend on I2C, not I2C_SH_MOBILE
- - ASoC: sh: fsi: Add over/under run counter
- Current FSI driver had printed under/over run error
- if status register have its error bit.
- But runtime print cause the next error
- because print out is slow.
- This patch add error counter and print error when sound stop
- - ASoC: sh: fsi: move fsi_irq_enable function to fsi_dai_trigger
- - ASoC: sh: fsi: remove runtime register check from fsi_reg_xxx
- Current FSI driver was checking register range on fsi_reg_xxx function.
- This runtime check was added to avoid an illegal access
- from wrong/mistake implementation.
- But it is useless check under the correct implementation.
- This patch escape runtime check by using macro technique.
- If there is wrong implementation, it will be compile error.
- - ASoC: sh: fsi: remove fsi_master_write
- - ASoC: sh: fsi: clean up SPDIF defines
- - ASoC: sh: fsi-ak4642: midify card name
- - ASoC: sh: fsi-ak4642: tidyup unnecessary variables
- - ASoC: sh: fsi-ak4642: Add FSI port and ak464x selection
- Current FSI-Ak4642 device had niche settings which were
- FSI2-A-AK4643 and FSI-A-AK4642.
- This patch add platform_device_id which can control
- FSI/FSI2, PortA/PortB, AK4642/AK4643 from platform data.
- - ASoC: Do not include soc-dai.h
- There is no need to include soc-dai.h since soc.h includes it. Convert
- drivers to include only soc.h.
- - ASoC: Call snd_soc_unregister_dais instead of snd_soc_unregister_dai in sh4_soc_dai_remove
- We call snd_soc_register_dais() in sh4_soc_dai_probe(),
- thus we should call snd_soc_unregister_dais() in sh4_soc_dai_remove().
- Otherwise, we got "too many arguments to function 'snd_soc_unregister_dai'"
- error message.
- - ARM: mach-shmobile: ap4evb: FSI clock use proper process for ak4642
- Current AP4 FSI didn't use set_rate for ak4642,
- and used dummy rate when init.
- And FSI driver was modified to always call set_rate.
- The user which are using FSI set_rate is only AP4 now.
- - ARM: mach-shmobile: ap4evb: FSI clock use proper process for HDMI
- Current AP4 FSI set_rate function used bogus clock process
- which didn't care enable/disable and clk->usecound.
- To solve this issue, this patch also modify FSI driver to call
- set_rate with enough options.
- This patch modify it.
- - sound: sh: ctrl_in/outX to __raw_read/writeX conversion.
- The ctrl_xxx routines are deprecated, switch over to the __raw_xxx
- versions.
- - ASoC: fsi: simultaneous playback/recorde support
- Current FSI driver had not cared about simultaneous
- playback/capture on same port.
- This patch add new fsi_stream struct to care it,
- - ASoC: Add fsi_is_play function
- - ASoC: fsi: Add new macro and shift for PortA/B In/Out
- Some FSI register have similar bit array for PortA/B and In/Out.
- This patch add new macro and shift for it
- - ASoC: fsi: avoid un-necessary status read
- - ASoC: fsi: remove un-necessary variable from fsi_dai_startup
- - ASoC: fsi: Add fsi_get_frame_width function
- It is not so important for now.
- But will be used in future.
- - sound/soc/sh/siu: Fixed undefined dma_length of scatter gather list
- Without this patch, an undefined/random sg->dma_length is used and
- the sound will be played/captured wrongly.
- - ASoC: fsi-hdmi: remove unneeded header
- This patch solve below report from Guennadi.
- But I didn't remove #include <sound/sh_fsi.h>.
- Because it have FSI_PORT_B define which is used on this file.
- > +#include <linux/platform_device.h>
- > +#include <sound/sh_fsi.h>
- > +#include <video/sh_mobile_hdmi.h>
- Now that everything is done with strings - do you still need these
- headers?
- Reported-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
- Reviewed-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
- - ASoC: sh: fix build error: terminate the platform device ID list
- Platform driver ID table must be zero-element terminated.
- - ASoC: fsi: merge fsi_data_push/pop to fsi_fifo_data_ctrl
- Current FSI driver had data push/pop functions.
- But the main operation of these 2 were very similar.
- This mean it is possible to merge these to 1 function.
- - ASoC: fsi: modify variable name to easy to understand
- Current FSI driver is using
- data-length / width / number / offset for variables.
- But it was a very confusing name.
- This patch rename them to easy to understand,
- and add new functions for it.
- - ASoC: Fix WM8978/migor driver name conflict
- Standardise on 'wm8978' as the name for the CODEC.
- Reported-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
- - ASoC: fsi: Add fsi_dma_soft_push/pop function
- - ASoC: fsi: modify noisy comment out
- - ASoC: fsi: Add fsi_dma_get_area
- - ASoC: fix SIU driver breakage, occurred during the multi-component transition
- This patch fixes multiple bugs and a typo, occurred during the multi-
- component transition.
- - ASoC: fix compile breakage of the sh/siu driver
- The sh/siu ASoC driver doesn't compile because of a function defined static in
- the source and extern in a header. Remove the unneeded declaration in the
- header.
- - ASoC: Add device table to SH FSI driver
- [Modified to move the location of the table]
- - ASoC: fsi codecs: Update card name field
- - ASoC: fsi codecs: modify menu attribute on Kconfig
- Current SND_FSI_xxx menu attributes were bool,
- but it should be tristate.
- This patch solve below report from Guennadi
- "bool" means, if someone is linking the whole ASoC into the kernel, they
- will not be able to build this as a module. Not a big deal, but you're
- stealing some freedom from the user.
- Reported-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
- - ASoC: fsi-ak4642: modify platform_name
- - ASoC: fsi-codec: Add FSI - HDMI support
- - ASoC: fsi-ak4642/fsi-da7210: modify dai link settings for card detect
- This patch modify dai link
- - platform_name: sh_fsi/sh_fsi2 are used for FSI driver
- - codec_name: ak4642/ak4643 are used for ak4642 driver
- This is quick hack. I should modify it more wisely in future
- - ASoC: fix clkdev API usage in sh/migor.c
- The clkdev API doesn't use .name and .id members of struct clk for clock
- lookup. Instead clocks should be added to a lookup list. Without this patch
- audio om the Migo-R board fails silently.
- - ASoC: fsi: Add new funtion for SPDIF
- - ASoC: fsi: remove device id check
- Current FSI driver id is not only 0
- - ASoC: fsi: remove unnecessary clock processing
- - ASoC: fsi: Add specified ID for soc-audio
- Specified ID is necessary, when some codecs are used with FSI.
- - ASoC: fsi: Fixup for master mode
- This patch add hw_params to snd_soc_dai_ops,
- because board specific set_rate is needed
- when FSI was used as master mode.
- This patch remove fsi_clk_ctrl from fsi_dai_startup,
- because clock should be disabled before set_rate.
- - ASoC: fsi: Add pr_err for noticing unsupported access
- This patch didn't use dev_err,
- because it is difficult to get struct device here.
- - ASoC: fsi: Change struct fsi_regs to fsi_core
- Many registers which were grouped by category were added in FSI2.
- To make easy to switch FSI/FSI2, fsi_core was added instead of fsi_regs.
- - ASoC: fsi: remove noisy CR_FMT macro
- - ASoC: fsi: remove un-used variable on fsi_dai_startup
- - ASoC: fsi: fixup wrong value setting order of TDM
- channel size should be set before setting register value
- - ASoC: fsi: fixup clock inversion operation
- Clock inversion should be specified by each flags bit.
- - ASoC: Fix I2C dependency for SND_FSI_AK4642 and SND_FSI_DA7210
- The config option SND_FSI_AK4642 selects SND_SOC_AK4642 which in turn
- enables the compilation of ak4642.c - however this codec uses I2C to
- communicate with the HW.
- Same applies to DA7210.
- Consequently when I2C is not set, the compilation fails [1]
- This patch fixes this issues, by adding a depencdency on the related HW-
- controller.
- - ASoC: header cleanup for FSI-DA7210
- - ASoC: header cleanup for FSI-AK4642
- - ASoC: header cleanup for FSI
- - ASoC: fix uninitialised variable in siu_dai.c
- - sh: define DMA slaves per CPU type, remove now redundant header
- Now that DMA slave IDs are only used used in platform specific code and have
- become opaque cookies for the rest of the code, we can make the, CPU specific
- too.
SoC Texas Instruments OMAP
- - ASoC: Remove needless inclusion of tlv320aic3x.h from machine drivers
- After multi-component conversion these machine drivers don't actually need
- anything from sound/soc/codecs/tlv320aic3x.h so don't include it.
- - ASoC: mcbsp: Add McBSP support for OMAP4
- This patch adds McBSP support for the OMAP4 CPU
- - ASoC: sdp4430: Add Jack support
- Use jack framework to enable detection for the headset microphone
- and stereo output in the sdp4430.
- - ASoC: sdp4430: Enable FM stereo pins
- Add FM stereo pins to the machine driver and add them as a
- dapm widget.
- - ASoC: omap: N810: Don't select CONFIG_OMAP_MUX but make it as dependency
- Not all omap boards use kernel based pin multiplexing so
- CONFIG_SND_OMAP_SOC_N810 should not select it by default as it can make
- harm to other boards in multi-board kernels.
- Therefore put CONFIG_OMAP_MUX as a dependency to N810 ASoC machine driver.
- Thanks to Tony Lindgren <tony@atomide.com> for noticing.
- - ASoC: Fix resource reclaim for osk5912
- In current implementation, there are resources leak in the error path.
- This patch properly reclaims the allocated resources in the error path.
- Also adds a missing clk_put in osk_soc_exit.
- - ASoC: Return proper error for omap3pandora_soc_init
- Return PTR_ERR(omap3pandora_dac_reg) instead of 0 if regulator_get failed.
- - ASoC: OMAP: fix OMAP1 compilation problem
- In the new code introduced with commit cf4c87abe238ec17cd0255b4e21abd949d7f811e,
- "OMAP: McBSP: implement McBSP CLKR and FSR signal muxing via mach-omap2/mcbsp.c",
- the way omap1 build is supposed to bypass omap2 specific functionality doesn't
- optimize out all omap2 specific stuff. This breaks linking phase for omap1
- machines, giving "undefined reference to `omap2_mcbsp1_mux_clkr_src'"
- and "undefined reference to `omap2_mcbsp1_mux_fsr_src'" errors. Fix it.
- Created and tested against linux-2.6.37-rc1.
- - OMAP: McBSP: implement functional clock switching via clock framework
- Previously the OMAP McBSP ASoC driver implemented CLKS switching by
- using omap_ctrl_{read,write}l() directly. This is against policy; the OMAP
- System Control Module functions are not intended to be exported to drivers.
- These symbols are no longer exported, so as a result, the OMAP McBSP ASoC
- driver does not build as a module.
- Resolve the CLKS clock changing portion of this problem by creating a
- clock parent changing function that lives in
- arch/arm/mach-omap2/mcbsp.c, and modify the ASoC driver to use it.
- Due to the unfortunate way that McBSP support is implemented in ASoC
- and the OMAP tree, this symbol must be exported for use by
- sound/soc/omap/omap-mcbsp.c.
- Going forward, the McBSP device driver should be moved from
- arch/arm/*omap* into drivers/ or sound/soc/* and the CPU DAI driver
- should be implemented as a platform_driver as many other ASoC CPU DAI
- drivers are. These two steps should resolve many of the layering
- problems, which will rapidly reappear during a McBSP hwmod/PM runtime
- conversions.
- - OMAP: McBSP: implement McBSP CLKR and FSR signal muxing via mach-omap2/mcbsp.c
- The OMAP ASoC McBSP code implemented CLKR and FSR signal muxing via
- direct System Control Module writes on OMAP2+. This required the
- omap_ctrl_{read,write}l() functions to be exported, which is against
- policy: the only code that should call those functions directly is
- OMAP core code, not device drivers. omap_ctrl_{read,write}*() are no
- longer exported, so the driver no longer builds as a module.
- Fix the pinmuxing part of the problem by removing calls to
- omap_ctrl_{read,write}l() from the OMAP ASoC McBSP code and
- implementing signal muxing functions in arch/arm/mach-omap2/mcbsp.c.
- Due to the unfortunate way that McBSP support is implemented in ASoC
- and the OMAP tree, these symbols must be exported for use by
- sound/soc/omap/omap-mcbsp.c.
- Going forward, the McBSP device driver should be moved from
- arch/arm/*omap* into drivers/ or sound/soc/*, and the CPU DAI driver
- should be implemented as a platform_driver as many other ASoC CPU DAI
- drivers are. These two steps should resolve many of the layering
- problems, which will rapidly reappear during a McBSP hwmod/PM runtime
- conversion.
- - ASoC: OMAP4: MCPDM: Remove unnecessary include of plat/control.h
- Commit 346a5c890 (OMAP: control: move plat-omap/control.h
- to mach-omap2/control.h) in the linux-omap tree removed
- plat/control.h and most of its callers. This one slipped
- through - breaking the build as below when
- CONFIG_SND_OMAP_SOC_MCPDM is defined. Fix this.
- CC sound/soc/omap/omap-mcpdm.o
- sound/soc/omap/omap-mcpdm.c:35: fatal error: plat/control.h: No such file or directory
- compilation terminated.
- make[3]: *** [sound/soc/omap/omap-mcpdm.o] Error 1
- make[2]: *** [sound/soc/omap] Error 2
- make[1]: *** [sound/soc] Error 2
- make: *** [sound] Error 2
- - ASoC: omap: Remove needless prints from machine drivers
- It is currently completely normal to execute these machine drivers code on
- different boards if the kernel includes support for multiple boards so no
- error message should be printed if the machine_is_xxx does not match with
- the machine driver.
- Therefore remove these pr_err and pr_debug prints in those cases.
- - sound: OMAP: McBSP: Fix static function warning
- This patch fixes sparse warning due non declaration of static function
- sound/soc/omap/omap-mcbsp.c:783:5: warning: symbol 'omap_mcbsp_st_info_volsw' was not declared. Should it be static?
- - ASoC: omap: rx51: Use gpio_set_value_cansleep for speaker amp control
- Speaker amplifier is controlled by TWL4030 GPIO which may sleep. Therefore
- use gpio_set_value_cansleep to get rid of runtime warning that is introduced
- after the commit 9c4ba94 and to get a stack trace if ever executing this
- code in atomic context.
- - ASoC: Use a more adequate name for the CX20442 codec DAI
- In the process of unification of codec DAI names while implementing
- multi-component, the CX20442 codec DAI has been renamed to "cx20442-hifi".
- This new name seems not adequate for a 8kHz voice codec.
- Use a better name, "cx20442-voice", as suggested by Liam Girdwood.
- - ASoC: omap-mcbsp: Remove period size constraint in THRESHOLD mode
- The use of sDMA packet mode in THRESHOLD mode removes the restriction on the
- period size.
- With the extended THRESHOLD mode user space can ask for any
- period size it wishes, and the driver will configure the
- sDMA and McBSP FIFO accordingly.
- Replace the hw_rule for the period size with static constraint,
- which will make sure that the period size will be always
- even (to avoid prime period size, which could be possible in
- mono stream)
- - ASoC: omap-mcbsp: Support for sDMA packet mode
- Utilize the sDMA controller's packet syncronization mode, when
- the McBSP FIFO is in use (by extending the THRESHOLD mode).
- When the sDMA is configured for packet mode, the sDMA frame size
- does not need to match with the McBSP threshold configuration.
- Uppon DMA request the sDMA will transfer packet size number of
- words, and still trigger interrupt on frame boundary.
- The patch extends the original THRESHOLD mode by doing the
- following:
- if (period_words <= max_threshold)
- Current THRESHOLD mode configuration
- Otherwise (period_words > max_threshold)
- McBSP threshold = sDMA packet size
- sDMA frame size = period size
- With the extended THRESHOLD mode we can remove the constraint
- for the maximum period size, since if the period size is
- bigger than the maximum allowed threshold, than the driver
- will switch to packet mode, and picks the best (biggest)
- threshold value, which can divide evenly the period size.
- - ASoC: omap-mcbsp: Code cleanup in omap_mcbsp_dai_hw_params
- To make the code a bit more readable, change the indexed
- references to the omap_mcbsp_dai_dma_params elements with
- pointer.
- - ASoC: omap-mcbsp: Restructure the code within omap_mcbsp_dai_hw_params
- In preparation for the extended threshold mode (sDMA packet mode
- support), the code need to be restructured.
- - ASoC: RX-51: Add basic jack detection
- This patch adds GPIO jack detection to Nokia N900/RX-51. At the moment only
- SND_JACK_VIDEOOUT type is reported. More types could be reported after
- getting more audio features supported and necessary drivers integrated for
- implementing automated accessory detection.
- - ASoC: RX-51: Add Jack Function kcontrol
- Nokia RX-51/N900 has multifunction 4-pole audio-video jack that can be used
- as headphone, headset or audio-video connector. This patch implements the
- control 'Jack Function' which is used to select the desired function.
- At the moment only TV-out without audio is supported.
- - ASoC: pandora: fix CLKX polarity
- After mass production started it was found that several boards exhibit
- noise problems during sound playback. After some investigation it was
- determined that CLKX polarity is set incorrectly, and even if most boards
- can tolerate the wrong setting, there are some that don't.
- Fix polarity setup in the board file. As the clock settings for input and
- output now match, merge in and out functions and structures to simplify
- code.
- - ASoC: omap-mcbsp: Place correct constraints for streams
- OMAP McBSP FIFO is word structured:
- McBSP2 has 1024 + 256 = 1280 word long buffer,
- McBSP1,3,4,5 has 128 word long buffer
- This means, that the size of the FIFO
- depends on the McBSP word size configuration.
- For example on McBSP3:
- 16bit samples: size is 128 * 2 = 256 bytes
- 32bit samples: size is 128 * 4 = 512 bytes
- It is simpler to place constraint for buffer and period based on channels.
- McBSP3 as example again (16 or 32 bit samples):
- 1 channel (mono): size is 128 frames (128 words)
- 2 channels (stereo): size is 128 / 2 = 64 frames (2 * 64 words)
- 4 channels: size is 128 / 4 = 32 frames (4 * 32 words)
- Use the second method to place hw_rule on buffer size, and in threshold
- mode to period size.
- - ASoC: omap-mcbsp: Save, and use wlen for threshold configuration
- Save the word length configuration of McBSP, and use that information
- to calculate, and configure the threshold in McBSP.
- Previously the calculation was only correct when the stream had 16bit
- audio.
- - ASoC: sdp4430 - add sdp4430 pcm ops to DAI.
- Fix build warning about unused ops and add ops
- to the sdp4430 DAI link.
- - ASoC: SDP4430: Add support for Earphone speaker
- Enable earphone speaker in sdp4430 machine driver.
- - ASoC: SDP4430: Add sdp4430 machine driver
- Add ASoC support for TI SDP4430.
- - OMAP: McBSP: Add 32-bit mode support
- This patchs should allow to use 32-bit samples on e.g. TLV320AIC3x codec,
- or others.
- - ASoC: omap: Add basic audio support for Nokia RX-51/N900
- This patch adds support for integrated stereo speakers and digital
- microphone found on Nokia RX-51 hardware. This is a cut down version based
- on Maemo kernel sources and earlier patchset by Eduardo Valentin et al.
- http://mailman.alsa-project.org/pipermail/alsa-devel/2009-October/022033.html
- - ASoC: zoom2 - update DAPM pins
- Remove bogus twl4030 pins
- - ASoC: pandora - update DAPM pins
- Remove bogus TWL4030 pins.
Soc PXA2xx Imote 2
- - ASoC: pxa2xx-i2s is the proper name of the I2S DAI, not pxa-i2s.
Soc PXA2xx Magician
- - ASoC: Lock the CODEC in PXA external jack controls
- When doing anything with the system, especially DAPM, we need to hold the
- CODEC mutex.
- - ASoC: pxa2xx-i2s is the proper name of the I2S DAI, not pxa-i2s.