summaryrefslogtreecommitdiffstats
path: root/sound/soc/soc-cache.c
Commit message (Collapse)AuthorAgeFilesLines
* ASoC: Move name and id from CODEC/platform to componentLars-Peter Clausen2014-06-211-4/+3
| | | | | | | | | | The component struct already has a name and id field which are initialized to the same values as the same fields in the CODEC and platform structs. So remove them from the CODEC and platform structs and used the ones from the component struct instead. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Mark Brown <broonie@linaro.org>
* ASoC: cache: Fix error code when not using ASoC level cacheMark Brown2014-06-021-1/+1
| | | | | | | | | | It is not an error to have no cache so we shouldn't return an error code and cause our callers to fail, just silently do nothing instead. Thanks to Jarkko for identify the problematic commit. Reported-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Reported-by: Fabio Estevam <festevam@gmail.com> Signed-off-by: Mark Brown <broonie@linaro.org>
* ASoC: cache: Fix possible ZERO_SIZE_PTR pointer dereferencing error.Xiubo Li2014-06-011-0/+3
| | | | | | | | | | | | Since we cannot make sure the 'reg_size' will always be none zero here, and then if 'reg_size' equals to zero, the kzalloc() will return ZERO_SIZE_PTR, which equals to ((void *)16). So this patch fix this with just doing the 'reg_size' zero check before calling kzalloc(). Signed-off-by: Xiubo Li <Li.Xiubo@freescale.com> Signed-off-by: Mark Brown <broonie@linaro.org>
* ASoC: Remove IO register modifier callbacksLars-Peter Clausen2014-04-141-2/+0
| | | | | | | | There are no ASoC drivers left that use them and new drivers are supposed to use regmap for this. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Mark Brown <broonie@linaro.org>
* ASoC: cache: Do the codec->reg_cache zero pionter checkXiubo Li2014-03-041-6/+7
| | | | | | | | | | | | For the snd_soc_cache_init(), the reg_size maybe zero and then the value of codec->reg_cache, which is alloced via kzalloc, maybe equal to ZERO_SIZE_PTR. If the reg parameter of snd_soc_cache_write() is large enough, the cache[idx] = val maybe cause the kernel crash... So this patch fix this via doing the zero pionter check of it. Signed-off-by: Xiubo Li <Li.Xiubo@freescale.com> Signed-off-by: Mark Brown <broonie@linaro.org>
* Merge remote-tracking branch 'asoc/topic/warn' into asoc-nextMark Brown2013-11-081-2/+4
|\
| * ASoC: Replace BUG() with WARN()Takashi Iwai2013-11-071-2/+4
| | | | | | | | | | | | | | | | | | | | BUG() used in the driver is just to spit the stack trace on buggy points, not really needed to stop the whole operation. For that purpose, it'd be more convenient to use WARN() instead with more error information. Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Mark Brown <broonie@linaro.org>
* | ASoC: Remove infrastructure for supporting multiple cache typesLars-Peter Clausen2013-09-171-139/+56
| | | | | | | | | | | | | | | | | | | | | | The only cache type left is the flat cache and new other cache types won't be added since new drivers are supposed to use regmap directly for IO and caching. This patch removes the snd_soc_cache_ops indirection that was added to support multiple cache types and modifies the code to always use the flat cache directly. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Mark Brown <broonie@linaro.org>
* | ASoC: Remove 'reg_size' field from snd_soc_codec structLars-Peter Clausen2013-09-171-2/+5
| | | | | | | | | | | | | | | | | | | | The reg_size field is calculated in snd_soc_register_codec() and then used exactly once in snd_soc_flat_cache_init(). Since it is calculated based on other fields from the codec struct just move the calculation to snd_soc_flat_cache_init() and remove the 'reg_size' field from the codec struct. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Mark Brown <broonie@linaro.org>
* | ASoC: Remove reg_def_copyLars-Peter Clausen2013-09-171-4/+6
| | | | | | | | | | | | | | | | | | | | | | | | reg_def_copy was introduced in commit 3335ddca ("ASoC: soc-cache: Use reg_def_copy instead of reg_cache_default") to keep a copy of the register defaults around in case the register defaults where placed in the __devinitdata section. With the __devinitdata section gone we effectivly keep the same data around twice. This patch removes reg_def_copy and uses reg_cache_default directly instead. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Mark Brown <broonie@linaro.org>
* | ASoC: Remove support for reg_access_defaultsLars-Peter Clausen2013-09-171-63/+0
|/ | | | | | | | No users of reg_access_defaults are left and new drivers are going to use regmap for this, so support for it can be removed. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Mark Brown <broonie@linaro.org>
* ASoC: cache: Standardise ASoC cache messagesLiam Girdwood2012-11-211-5/+5
| | | | | | | | | | | | Currently ASoC has a mixture of message prefixes e.g. "ASoC", "asoc" or none and message types e.g. pr_debug or dev_dbg. Make sure all ASoC core messages use the same "ASoC" prefix and convert any component device specific messages to use dev_dbg instead of pr_debug. Signed-off-by: Liam Girdwood <lrg@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
* ASoC: Remove rbtree register cacheMark Brown2011-12-131-381/+0
| | | | | | All users now use regmap directly so delete the ASoC version of the code. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
* ASoC: Remove LZO cache typeMark Brown2011-11-101-384/+0
| | | | | | | There are no current users and new drivers ought to be using the regmap API and its cache implementation directly so just delete the ASoC copy. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
* sound: Add export.h for THIS_MODULE/EXPORT_SYMBOL where neededPaul Gortmaker2011-10-311-0/+1
| | | | | | | | These aren't modules, but they do make use of these macros, so they will need export.h to get that definition. Previously, they got it via the implicit module.h inclusion. Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
* Merge branch 'for-3.1' into for-3.2Mark Brown2011-08-311-6/+6
|\
| * ASoC: Fix register cache sync register_writable WARN_ONsLars-Peter Clausen2011-08-311-6/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently the condition for these WARN_ONs is reversed and they are placed before the actual check whether we are going to write to that register. So if the codec implements the register_writable callback we'll get a warning for each writable register when syncing the register cache. While we are at it change the check to use snd_soc_codec_writable_register instead of open-coding it. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Acked-by: Liam Girdwood <lrg@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
* | ASoC: soc-cache: Remove unneeded codec_drv pointer variable in ↵Axel Lin2011-08-151-3/+0
| | | | | | | | | | | | | | | | | | | | | | snd_soc_lzo_get_blksize Since commit aea170a099793abcd0e6de46b947458073204241 "ASoC: soc-cache: Add reg_size as a member to snd_soc_codec", the codec_drv pointer variable is not used in snd_soc_lzo_get_blksize. Signed-off-by: Axel Lin <axel.lin@gmail.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
* | ASoC: soc-cache: Remove unneeded codec_drv pointer variable in ↵Axel Lin2011-08-151-4/+0
|/ | | | | | | | | | | snd_soc_flat_cache_init Since commit d779fce5d79525d66269c8f6e430e1515d697f3d "ASoC: soc-cache: Ensure flat compression uses a copy of the defaults cache", the codec_drv pointer variable is not used any more. Signed-off-by: Axel Lin <axel.lin@gmail.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
* ASoC: Move register I/O code into a separate fileMark Brown2011-06-131-380/+0
| | | | | | | | | For clarity and to help ongoing refactoring in this area create a new file to contain the physical I/O functions, separating them out from the cache operations. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@ti.com>
* ASoC: Factor out redundant read() functionsMark Brown2011-06-131-44/+8
| | | | | | | | | We've got a whole bunch of functions which just call straight through to do_hw_read(). Simplify this situation by removing them and using hw_read() directly. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@ti.com>
* ASoC: Suppress restore of default register values for rbtree cache syncMark Brown2011-06-081-1/+6
| | | | | | | | | | | | | | Currently the rbtree code will write out the entire register map when doing a cache sync which is wasteful and will slow things down. Check to see if the value we're about to write is the default and don't bother restoring it if it is, either the value will have been retained or the device will have been reset and holds the value already. We should really store the defaults in the nodes but this resolves the immediate issue. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@ti.com>
* Merge branch 'for-3.0' into for-3.1Mark Brown2011-06-061-0/+3
|\
| * ASoC: Check for NULL register bank in snd_soc_get_cache_val()Mark Brown2011-06-061-0/+3
| | | | | | | | | | Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@ti.com>
* | Merge branch 'for-2.6.40' into for-2.6.41Mark Brown2011-05-301-126/+14
|\|
| * ASoC: Reintroduce do_spi_write()Mark Brown2011-05-151-1/+15
| | | | | | | | | | | | | | | | | | There is an unfortunate difference in return values between spi_write() and i2c_master_send() so we need an adaptor function to translate. Reported-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@ti.com>
| * ASoC: Use spi_write() for SPI writesMark Brown2011-05-111-128/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | do_spi_write() is just an open coded copy of do_spi_write() so we can delete it and just call spi_write() directly. Indeed, as a result of recent refactoring all the SPI write functions are just very long wrappers around spi_write() which don't add anything except for some pointless copies so we can just use spi_write() as the hw_write operation directly. It should be as type safe to do this as it is to do the same thing with I2C and it saves us a bunch of code. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@ti.com>
| * ASoC: Remove byte swap in 4x12 SPI writeMark Brown2011-05-111-6/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | snd_soc_4_12_spi_write() contains a byte swap. Since this code was written for an Analog CODEC on a Blackfin reference board it appears that this is done because while Blackfin is little endian the CODEC is big endian (as are most CODECs). Push this up into the generic 4x12 write function and use cpu_to_be16() to do the byte swap so things are more regular and things work on both CPU endiannesses. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@ti.com>
| * ASoC: Don't squash 16x8 registers down to 8 bitsMark Brown2011-05-111-1/+0
| | | | | | | | | | | | | | | | Currently we'll force all registers to fit in 8 bits before passing down to the I/O function. Looks like a cut'n'paste bug. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@ti.com>
* | ASoC: Use explicit endianness conversion in snd_soc_16_8_write()Mark Brown2011-05-271-2/+2
| | | | | | | | | | Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@ti.com>
* | ASoC: Use cpu_to_be16() in 8x16 writeMark Brown2011-05-271-2/+2
| | | | | | | | | | Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@ti.com>
* | ASoC: Convert 7x9 write to use cpu_to_be16()Mark Brown2011-05-271-4/+3
| | | | | | | | | | | | | | Run the data through cpu_to_be16() so it's at least clear what we're up to. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@ti.com>
* | ASoC: Convert 16x16 write to use cpu_to_be16()Mark Brown2011-05-241-6/+4
| | | | | | | | | | | | | | Make it clear what we're doing. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@ti.com>
* | ASoC: soc-cache: Cache a pointer to the last accessed rbnodeDimitris Papastamos2011-05-201-0/+37
| | | | | | | | | | | | | | | | | | | | | | | | Whenever we are doing a read or a write through the rbtree code, we'll cache a pointer to the rbnode. To avoid looking up the register everytime we do a read or a write, we first check if it can be found in the cached register block, otherwise we traverse the rbtree and finally cache the rbnode for future use. Signed-off-by: Dimitris Papastamos <dp@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
* | ASoC: soc-cache: Block based rbtree compressionDimitris Papastamos2011-05-201-55/+177
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch prepares the ground for the actual rbtree optimization patch which will save a pointer to the last accessed rbnode that was used in either the read() or write() functions. Each rbnode manages a variable length block of registers. There can be no two nodes with overlapping blocks. Each block has a base register and a currently top register, all the other registers, if any, lie in between these two and in ascending order. The reasoning behind the construction of this rbtree is simple. In the snd_soc_rbtree_cache_init() function, we iterate over the register defaults provided by the driver. For each register value that is non-zero we insert it in the rbtree. In order to determine in which rbnode we need to add the register, we first look if there is another register already added that is adjacent to the one we are about to add. If that is the case we append it in that rbnode block, otherwise we create a new rbnode with a single register in its block and add it to the tree. In the next patch, where a cached rbnode is used by both the write() and the read() functions, we also check if the register we are about to add is in the cached rbnode (the least recently accessed one) and if so we append it in that rbnode block. Signed-off-by: Dimitris Papastamos <dp@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
* ASoC: soc-cache: Allow codec->cache_bypass to be used with ↵Dimitris Papastamos2011-05-081-5/+6
| | | | | | | | | | | snd_soc_hw_bulk_write_raw() If we specifically want to write a block of data to the hw bypassing the cache, then allow this to happen inside snd_soc_hw_bulk_write_raw(). Signed-off-by: Dimitris Papastamos <dp@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
* ASoC: remove unused commentLu Guanqun2011-04-201-1/+0
| | | | | | | | | `type` parameter is not longer used in `snd_soc_codec_set_cache_io`, so remove this line. Signed-off-by: Lu Guanqun <guanqun.lu@intel.com> Acked-by: Liam Girdwood <lrg@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
* ASoC: Fix comment width in soc-cache.cMark Brown2011-04-051-4/+5
| | | | | | Lines should be less than 80 columns. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
* ASoC: Remove excessively verbose logging on I2C writeMark Brown2011-04-051-1/+0
| | | | | | We don't need to log every I2C transfer, and certainly not at error level. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
* ASoC: Fix to avoid compile errorSeungwhan Youn2011-04-051-0/+4
| | | | | | | | This patch fixes to avoid compile error when ASoC codec doesn't use I2C nor SPI on snd_soc_hw_bulk_write_raw(). Signed-off-by: Seungwhan Youn <sw.youn@samsung.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
* ASoC: soc-cache: Warn on syncing any non-writable registersDimitris Papastamos2011-03-311-0/+6
| | | | | | | | | | When syncing the cache, if the driver has given us a writable_register() callback, use it to check if we are syncing a non-writable register and if so warn the user. Signed-off-by: Dimitris Papastamos <dp@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
* ASoC: soc-cache: Fix indentation issuesDimitris Papastamos2011-03-311-9/+9
| | | | | | Signed-off-by: Dimitris Papastamos <dp@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
* ASoC: Add default snd_soc_default_writable_register() callbackDimitris Papastamos2011-03-261-0/+14
| | | | | | | | | | By using struct snd_soc_reg_access for the read/write/vol attributes of the registers, we provide callbacks that automatically determine whether a given register is readable/writable or volatile. Signed-off-by: Dimitris Papastamos <dp@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
* ASoC: soc-cache: Return -ENOSYS instead of -EINVALDimitris Papastamos2011-03-261-5/+5
| | | | | | | | | | These functions fail with -EINVAL if the corresponding callbacks are not implemented. Change them to return -ENOSYS as it is more appropriate for unimplemented callbacks. Signed-off-by: Dimitris Papastamos <dp@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
* ASoC: soc-cache: Factor-out the SPI write codeDimitris Papastamos2011-03-261-96/+30
| | | | | | | | | The handling of all snd_soc_x_y_spi_write() functions is similar. Create a separate function and update all callers to use it. Signed-off-by: Dimitris Papastamos <dp@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
* ASoC: soc-cache: Factor-out the hw_read() specific codeDimitris Papastamos2011-03-261-96/+18
| | | | | | | | | The handling of all snd_soc_x_y_read() functions is similar. Factor it out into a separate function and update all callers. Signed-off-by: Dimitris Papastamos <dp@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
* ASoC: soc-cache: Factor-out the hw_write() specific codeDimitris Papastamos2011-03-261-120/+33
| | | | | | | | | | The handling of all snd_soc_x_y_write() functions is similar. Factor it out into a separate function and update all functions to use it. Signed-off-by: Dimitris Papastamos <dp@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
* ASoC: soc-cache: Introduce raw bulk write supportDimitris Papastamos2011-03-261-0/+39
| | | | | | | | | | | | As it has become more common to have to write firmware or similar large chunks of data to the hardware, add a function to perform raw bulk writes that bypass the cache. This only handles volatile registers as we should avoid getting out of sync with the actual cache. Signed-off-by: Dimitris Papastamos <dp@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
* ASoC: soc-cache: Factor-out the I2C read codeDimitris Papastamos2011-03-261-68/+32
| | | | | | | | | The handling of all snd_soc_x_y_read_i2c() functions is similar. Make a generic I2C read function and update all callers to use it. Signed-off-by: Dimitris Papastamos <dp@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
* ASoC: soc-cache: dereferencing before checkingDan Carpenter2011-02-081-13/+12
| | | | | | | | | | | | | The patch c358e640a66 "ASoC: soc-cache: Add trace event for snd_soc_cache_sync()" introduced a dereference of "codec->cache_ops" before we had checked it for NULL. I pulled the check forward, and then pulled everything in an indent level. Signed-off-by: Dan Carpenter <error27@gmail.com> Acked-by: Liam Girdwood <lrg@slimlogic.co.uk> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>