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: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
@@ -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 {
|
|||||||
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,
|
|||||||
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)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user