aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs/uda134x.c
diff options
context:
space:
mode:
authorLars-Peter Clausen <lars@metafoo.de>2015-07-13 06:26:46 -0400
committerMark Brown <broonie@kernel.org>2015-07-13 06:51:35 -0400
commit82c7b531f3328dbbb7a53d0f1dc53b92846c411c (patch)
tree2714567c6ed06e42bf5272b880c8993dc5c260c7 /sound/soc/codecs/uda134x.c
parentf15c444e58ed5b5dfc6056249ef8a74d00118be3 (diff)
ASoC: uda134x: Explicitly handle in-data addresses
The UDA134X family extends the rather limited L3 register set by using part of the register value as additional address bits. These extra address bits are currently stored in the default register cache and rely on them remaining constant. While this works it is rather idiomatic and slightly confusing. Change it so that the additional address bits are explicitly added when writing a register. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/codecs/uda134x.c')
-rw-r--r--sound/soc/codecs/uda134x.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/sound/soc/codecs/uda134x.c b/sound/soc/codecs/uda134x.c
index a89f98a773d6..d47da0ec8f47 100644
--- a/sound/soc/codecs/uda134x.c
+++ b/sound/soc/codecs/uda134x.c
@@ -39,12 +39,11 @@ struct uda134x_priv {
39 struct snd_pcm_substream *slave_substream; 39 struct snd_pcm_substream *slave_substream;
40}; 40};
41 41
42/* In-data addresses are hard-coded into the reg-cache values */
43static const char uda134x_reg[UDA134X_REGS_NUM] = { 42static const char uda134x_reg[UDA134X_REGS_NUM] = {
44 /* Extended address registers */ 43 /* Extended address registers */
45 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 44 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
46 /* Status, data regs */ 45 /* Status, data regs */
47 0x00, 0x83, 0x00, 0x40, 0x80, 0xC0, 0x00, 46 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
48}; 47};
49 48
50/* 49/*
@@ -99,12 +98,14 @@ static int uda134x_write(struct snd_soc_codec *codec, unsigned int reg,
99 case UDA134X_STATUS0: 98 case UDA134X_STATUS0:
100 case UDA134X_STATUS1: 99 case UDA134X_STATUS1:
101 addr = UDA134X_STATUS_ADDR; 100 addr = UDA134X_STATUS_ADDR;
101 data |= (reg - UDA134X_STATUS0) << 7;
102 break; 102 break;
103 case UDA134X_DATA000: 103 case UDA134X_DATA000:
104 case UDA134X_DATA001: 104 case UDA134X_DATA001:
105 case UDA134X_DATA010: 105 case UDA134X_DATA010:
106 case UDA134X_DATA011: 106 case UDA134X_DATA011:
107 addr = UDA134X_DATA0_ADDR; 107 addr = UDA134X_DATA0_ADDR;
108 data |= (reg - UDA134X_DATA000) << 6;
108 break; 109 break;
109 case UDA134X_DATA1: 110 case UDA134X_DATA1:
110 addr = UDA134X_DATA1_ADDR; 111 addr = UDA134X_DATA1_ADDR;