aboutsummaryrefslogtreecommitdiffstats
path: root/include/sound
diff options
context:
space:
mode:
authorDimitris Papastamos <dp@opensource.wolfsonmicro.com>2010-11-11 05:04:57 -0500
committerMark Brown <broonie@opensource.wolfsonmicro.com>2010-11-11 10:58:41 -0500
commit7a30a3db34cc7b2180a1a6c4a51d19d93c8a8b80 (patch)
tree0a5effd9cc63055d49f837ba4751573f2cb70ef7 /include/sound
parent84e909303dbd3c8d882f152c17d1319f2873e147 (diff)
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. Signed-off-by: Dimitris Papastamos <dp@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@slimlogic.co.uk> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'include/sound')
-rw-r--r--include/sound/soc.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/include/sound/soc.h b/include/sound/soc.h
index 5d3954774ade..275e41133468 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -238,6 +238,7 @@ struct soc_enum;
238struct snd_soc_ac97_ops; 238struct snd_soc_ac97_ops;
239struct snd_soc_jack; 239struct snd_soc_jack;
240struct snd_soc_jack_pin; 240struct snd_soc_jack_pin;
241struct snd_soc_cache_ops;
241#include <sound/soc-dapm.h> 242#include <sound/soc-dapm.h>
242 243
243#ifdef CONFIG_GPIOLIB 244#ifdef CONFIG_GPIOLIB
@@ -254,6 +255,10 @@ enum snd_soc_control_type {
254 SND_SOC_SPI, 255 SND_SOC_SPI,
255}; 256};
256 257
258enum snd_soc_compress_type {
259 SND_SOC_NO_COMPRESSION
260};
261
257int snd_soc_register_platform(struct device *dev, 262int snd_soc_register_platform(struct device *dev,
258 struct snd_soc_platform_driver *platform_drv); 263 struct snd_soc_platform_driver *platform_drv);
259void snd_soc_unregister_platform(struct device *dev); 264void snd_soc_unregister_platform(struct device *dev);
@@ -265,6 +270,13 @@ int snd_soc_codec_volatile_register(struct snd_soc_codec *codec, int reg);
265int snd_soc_codec_set_cache_io(struct snd_soc_codec *codec, 270int snd_soc_codec_set_cache_io(struct snd_soc_codec *codec,
266 int addr_bits, int data_bits, 271 int addr_bits, int data_bits,
267 enum snd_soc_control_type control); 272 enum snd_soc_control_type control);
273int snd_soc_cache_sync(struct snd_soc_codec *codec);
274int snd_soc_cache_init(struct snd_soc_codec *codec);
275int snd_soc_cache_exit(struct snd_soc_codec *codec);
276int snd_soc_cache_write(struct snd_soc_codec *codec,
277 unsigned int reg, unsigned int value);
278int snd_soc_cache_read(struct snd_soc_codec *codec,
279 unsigned int reg, unsigned int *value);
268 280
269/* Utility functions to get clock rates from various things */ 281/* Utility functions to get clock rates from various things */
270int snd_soc_calc_frame_size(int sample_size, int channels, int tdm_slots); 282int snd_soc_calc_frame_size(int sample_size, int channels, int tdm_slots);
@@ -421,6 +433,18 @@ struct snd_soc_ops {
421 int (*trigger)(struct snd_pcm_substream *, int); 433 int (*trigger)(struct snd_pcm_substream *, int);
422}; 434};
423 435
436/* SoC cache ops */
437struct snd_soc_cache_ops {
438 enum snd_soc_compress_type id;
439 int (*init)(struct snd_soc_codec *codec);
440 int (*exit)(struct snd_soc_codec *codec);
441 int (*read)(struct snd_soc_codec *codec, unsigned int reg,
442 unsigned int *value);
443 int (*write)(struct snd_soc_codec *codec, unsigned int reg,
444 unsigned int value);
445 int (*sync)(struct snd_soc_codec *codec);
446};
447
424/* SoC Audio Codec device */ 448/* SoC Audio Codec device */
425struct snd_soc_codec { 449struct snd_soc_codec {
426 const char *name; 450 const char *name;
@@ -450,6 +474,8 @@ struct snd_soc_codec {
450 hw_write_t hw_write; 474 hw_write_t hw_write;
451 unsigned int (*hw_read)(struct snd_soc_codec *, unsigned int); 475 unsigned int (*hw_read)(struct snd_soc_codec *, unsigned int);
452 void *reg_cache; 476 void *reg_cache;
477 const struct snd_soc_cache_ops *cache_ops;
478 struct mutex cache_rw_mutex;
453 479
454 /* dapm */ 480 /* dapm */
455 struct snd_soc_dapm_context dapm; 481 struct snd_soc_dapm_context dapm;
@@ -482,6 +508,7 @@ struct snd_soc_codec_driver {
482 short reg_cache_step; 508 short reg_cache_step;
483 short reg_word_size; 509 short reg_word_size;
484 const void *reg_cache_default; 510 const void *reg_cache_default;
511 enum snd_soc_compress_type compress_type;
485 512
486 /* codec bias level */ 513 /* codec bias level */
487 int (*set_bias_level)(struct snd_soc_codec *, 514 int (*set_bias_level)(struct snd_soc_codec *,