diff options
Diffstat (limited to 'sound/soc')
-rw-r--r-- | sound/soc/soc-core.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index 8b79d90efdc1..5299932db0b6 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c | |||
@@ -84,7 +84,7 @@ static int run_delayed_work(struct delayed_work *dwork) | |||
84 | /* codec register dump */ | 84 | /* codec register dump */ |
85 | static ssize_t soc_codec_reg_show(struct snd_soc_codec *codec, char *buf) | 85 | static ssize_t soc_codec_reg_show(struct snd_soc_codec *codec, char *buf) |
86 | { | 86 | { |
87 | int i, step = 1, count = 0; | 87 | int ret, i, step = 1, count = 0; |
88 | 88 | ||
89 | if (!codec->reg_cache_size) | 89 | if (!codec->reg_cache_size) |
90 | return 0; | 90 | return 0; |
@@ -101,12 +101,24 @@ static ssize_t soc_codec_reg_show(struct snd_soc_codec *codec, char *buf) | |||
101 | if (count >= PAGE_SIZE - 1) | 101 | if (count >= PAGE_SIZE - 1) |
102 | break; | 102 | break; |
103 | 103 | ||
104 | if (codec->display_register) | 104 | if (codec->display_register) { |
105 | count += codec->display_register(codec, buf + count, | 105 | count += codec->display_register(codec, buf + count, |
106 | PAGE_SIZE - count, i); | 106 | PAGE_SIZE - count, i); |
107 | else | 107 | } else { |
108 | count += snprintf(buf + count, PAGE_SIZE - count, | 108 | /* If the read fails it's almost certainly due to |
109 | "%4x", codec->read(codec, i)); | 109 | * the register being volatile and the device being |
110 | * powered off. | ||
111 | */ | ||
112 | ret = codec->read(codec, i); | ||
113 | if (ret >= 0) | ||
114 | count += snprintf(buf + count, | ||
115 | PAGE_SIZE - count, | ||
116 | "%4x", ret); | ||
117 | else | ||
118 | count += snprintf(buf + count, | ||
119 | PAGE_SIZE - count, | ||
120 | "<no data: %d>", ret); | ||
121 | } | ||
110 | 122 | ||
111 | if (count >= PAGE_SIZE - 1) | 123 | if (count >= PAGE_SIZE - 1) |
112 | break; | 124 | break; |