Commit 096e49d5 authored by Mark Brown's avatar Mark Brown

ASoC: Add CODEC volatile register operation

Add a volatile_register() operation to the CODEC structure providing a
standard operation to query if a register is volatile. This will be used
to factor out the register cache I/O operations for the CODECs.
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent af0adf3e
...@@ -191,6 +191,7 @@ int snd_soc_register_platform(struct snd_soc_platform *platform); ...@@ -191,6 +191,7 @@ int snd_soc_register_platform(struct snd_soc_platform *platform);
void snd_soc_unregister_platform(struct snd_soc_platform *platform); void snd_soc_unregister_platform(struct snd_soc_platform *platform);
int snd_soc_register_codec(struct snd_soc_codec *codec); int snd_soc_register_codec(struct snd_soc_codec *codec);
void snd_soc_unregister_codec(struct snd_soc_codec *codec); void snd_soc_unregister_codec(struct snd_soc_codec *codec);
int snd_soc_codec_volatile_register(struct snd_soc_codec *codec, int reg);
#ifdef CONFIG_PM #ifdef CONFIG_PM
int snd_soc_suspend_device(struct device *dev); int snd_soc_suspend_device(struct device *dev);
...@@ -361,6 +362,7 @@ struct snd_soc_codec { ...@@ -361,6 +362,7 @@ struct snd_soc_codec {
int (*write)(struct snd_soc_codec *, unsigned int, unsigned int); int (*write)(struct snd_soc_codec *, unsigned int, unsigned int);
int (*display_register)(struct snd_soc_codec *, char *, int (*display_register)(struct snd_soc_codec *, char *,
size_t, unsigned int); size_t, unsigned int);
int (*volatile_register)(unsigned int);
hw_write_t hw_write; hw_write_t hw_write;
hw_read_t hw_read; hw_read_t hw_read;
void *reg_cache; void *reg_cache;
......
...@@ -1125,6 +1125,23 @@ static int soc_new_pcm(struct snd_soc_device *socdev, ...@@ -1125,6 +1125,23 @@ static int soc_new_pcm(struct snd_soc_device *socdev,
return ret; return ret;
} }
/**
* snd_soc_codec_volatile_register: Report if a register is volatile.
*
* @codec: CODEC to query.
* @reg: Register to query.
*
* Boolean function indiciating if a CODEC register is volatile.
*/
int snd_soc_codec_volatile_register(struct snd_soc_codec *codec, int reg)
{
if (codec->volatile_register)
return codec->volatile_register(reg);
else
return 0;
}
EXPORT_SYMBOL_GPL(snd_soc_codec_volatile_register);
/* codec register dump */ /* codec register dump */
static ssize_t soc_codec_reg_show(struct snd_soc_codec *codec, char *buf) static ssize_t soc_codec_reg_show(struct snd_soc_codec *codec, char *buf)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment