diff options
| -rw-r--r-- | sound/soc/codecs/tlv320aic3x.c | 25 |
1 files changed, 9 insertions, 16 deletions
diff --git a/sound/soc/codecs/tlv320aic3x.c b/sound/soc/codecs/tlv320aic3x.c index 86e5a5868c3c..7b5f159cfaf1 100644 --- a/sound/soc/codecs/tlv320aic3x.c +++ b/sound/soc/codecs/tlv320aic3x.c | |||
| @@ -112,28 +112,21 @@ static const u8 aic3x_reg[AIC3X_CACHEREGNUM] = { | |||
| 112 | }; | 112 | }; |
| 113 | 113 | ||
| 114 | /* | 114 | /* |
| 115 | * write aic3x register cache | 115 | * read from the aic3x register space. Only use for this function is if |
| 116 | */ | 116 | * wanting to read volatile bits from those registers that has both read-only |
| 117 | static inline void aic3x_write_reg_cache(struct snd_soc_codec *codec, | 117 | * and read/write bits. All other cases should use snd_soc_read. |
| 118 | u8 reg, u8 value) | ||
| 119 | { | ||
| 120 | u8 *cache = codec->reg_cache; | ||
| 121 | if (reg >= AIC3X_CACHEREGNUM) | ||
| 122 | return; | ||
| 123 | cache[reg] = value; | ||
| 124 | } | ||
| 125 | |||
| 126 | /* | ||
| 127 | * read from the aic3x register space | ||
| 128 | */ | 118 | */ |
| 129 | static int aic3x_read(struct snd_soc_codec *codec, unsigned int reg, | 119 | static int aic3x_read(struct snd_soc_codec *codec, unsigned int reg, |
| 130 | u8 *value) | 120 | u8 *value) |
| 131 | { | 121 | { |
| 132 | *value = reg & 0xff; | 122 | u8 *cache = codec->reg_cache; |
| 123 | |||
| 124 | if (reg >= AIC3X_CACHEREGNUM) | ||
| 125 | return -1; | ||
| 133 | 126 | ||
| 134 | value[0] = i2c_smbus_read_byte_data(codec->control_data, value[0]); | 127 | *value = codec->hw_read(codec, reg); |
| 128 | cache[reg] = *value; | ||
| 135 | 129 | ||
| 136 | aic3x_write_reg_cache(codec, reg, *value); | ||
| 137 | return 0; | 130 | return 0; |
| 138 | } | 131 | } |
| 139 | 132 | ||
