From 2da765f1b8aaca8dfddcc6e767806a3ff56b3e2b Mon Sep 17 00:00:00 2001 From: Mark Brown Date: Wed, 14 Jul 2010 16:14:33 +0100 Subject: [PATCH] --- yaml --- r: 206604 b: refs/heads/master c: 5164d74d74447895aaa31c094a1b9e666acaa656 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/sound/soc/soc-core.c | 22 +++++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 4fbdb81ddb61..8b90cad432b8 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 03b0dc02cf54a79d6bc2f49c0005bc07db5120a4 +refs/heads/master: 5164d74d74447895aaa31c094a1b9e666acaa656 diff --git a/trunk/sound/soc/soc-core.c b/trunk/sound/soc/soc-core.c index 8b79d90efdc1..5299932db0b6 100644 --- a/trunk/sound/soc/soc-core.c +++ b/trunk/sound/soc/soc-core.c @@ -84,7 +84,7 @@ static int run_delayed_work(struct delayed_work *dwork) /* codec register dump */ static ssize_t soc_codec_reg_show(struct snd_soc_codec *codec, char *buf) { - int i, step = 1, count = 0; + int ret, i, step = 1, count = 0; if (!codec->reg_cache_size) return 0; @@ -101,12 +101,24 @@ static ssize_t soc_codec_reg_show(struct snd_soc_codec *codec, char *buf) if (count >= PAGE_SIZE - 1) break; - if (codec->display_register) + if (codec->display_register) { count += codec->display_register(codec, buf + count, PAGE_SIZE - count, i); - else - count += snprintf(buf + count, PAGE_SIZE - count, - "%4x", codec->read(codec, i)); + } else { + /* If the read fails it's almost certainly due to + * the register being volatile and the device being + * powered off. + */ + ret = codec->read(codec, i); + if (ret >= 0) + count += snprintf(buf + count, + PAGE_SIZE - count, + "%4x", ret); + else + count += snprintf(buf + count, + PAGE_SIZE - count, + "", ret); + } if (count >= PAGE_SIZE - 1) break;