diff options
author | Dimitris Papastamos <dp@opensource.wolfsonmicro.com> | 2010-11-29 05:24:54 -0500 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2010-11-29 07:43:49 -0500 |
commit | 7a33d4ce8231f789548ce6e25f75894a6c8508a5 (patch) | |
tree | 638fea252cd45864275a2068f545d1418f838d34 /sound/soc | |
parent | d482337eaba627348ffb8b7c0752d65e16667cd9 (diff) |
ASoC: soc-cache: Add error checking in the *_cache_sync functions
Ensure that we report any errors encountered during reads/writes
in the cache syncing functions.
Remove redundant newline in the source code.
Signed-off-by: Dimitris Papastamos <dp@opensource.wolfsonmicro.com>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc')
-rw-r--r-- | sound/soc/soc-cache.c | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/sound/soc/soc-cache.c b/sound/soc/soc-cache.c index 6c0589e3fefb..e5b18889a493 100644 --- a/sound/soc/soc-cache.c +++ b/sound/soc/soc-cache.c | |||
@@ -792,7 +792,6 @@ static struct snd_soc_rbtree_node *snd_soc_rbtree_lookup( | |||
792 | return NULL; | 792 | return NULL; |
793 | } | 793 | } |
794 | 794 | ||
795 | |||
796 | static int snd_soc_rbtree_insert(struct rb_root *root, | 795 | static int snd_soc_rbtree_insert(struct rb_root *root, |
797 | struct snd_soc_rbtree_node *rbnode) | 796 | struct snd_soc_rbtree_node *rbnode) |
798 | { | 797 | { |
@@ -826,14 +825,19 @@ static int snd_soc_rbtree_cache_sync(struct snd_soc_codec *codec) | |||
826 | struct rb_node *node; | 825 | struct rb_node *node; |
827 | struct snd_soc_rbtree_node *rbnode; | 826 | struct snd_soc_rbtree_node *rbnode; |
828 | unsigned int val; | 827 | unsigned int val; |
828 | int ret; | ||
829 | 829 | ||
830 | rbtree_ctx = codec->reg_cache; | 830 | rbtree_ctx = codec->reg_cache; |
831 | for (node = rb_first(&rbtree_ctx->root); node; node = rb_next(node)) { | 831 | for (node = rb_first(&rbtree_ctx->root); node; node = rb_next(node)) { |
832 | rbnode = rb_entry(node, struct snd_soc_rbtree_node, node); | 832 | rbnode = rb_entry(node, struct snd_soc_rbtree_node, node); |
833 | if (rbnode->value == rbnode->defval) | 833 | if (rbnode->value == rbnode->defval) |
834 | continue; | 834 | continue; |
835 | snd_soc_cache_read(codec, rbnode->reg, &val); | 835 | ret = snd_soc_cache_read(codec, rbnode->reg, &val); |
836 | snd_soc_write(codec, rbnode->reg, val); | 836 | if (ret) |
837 | return ret; | ||
838 | ret = snd_soc_write(codec, rbnode->reg, val); | ||
839 | if (ret) | ||
840 | return ret; | ||
837 | dev_dbg(codec->dev, "Synced register %#x, value = %#x\n", | 841 | dev_dbg(codec->dev, "Synced register %#x, value = %#x\n", |
838 | rbnode->reg, val); | 842 | rbnode->reg, val); |
839 | } | 843 | } |
@@ -1110,11 +1114,16 @@ static int snd_soc_lzo_cache_sync(struct snd_soc_codec *codec) | |||
1110 | struct snd_soc_lzo_ctx **lzo_blocks; | 1114 | struct snd_soc_lzo_ctx **lzo_blocks; |
1111 | unsigned int val; | 1115 | unsigned int val; |
1112 | int i; | 1116 | int i; |
1117 | int ret; | ||
1113 | 1118 | ||
1114 | lzo_blocks = codec->reg_cache; | 1119 | lzo_blocks = codec->reg_cache; |
1115 | for_each_set_bit(i, lzo_blocks[0]->sync_bmp, lzo_blocks[0]->sync_bmp_nbits) { | 1120 | for_each_set_bit(i, lzo_blocks[0]->sync_bmp, lzo_blocks[0]->sync_bmp_nbits) { |
1116 | snd_soc_cache_read(codec, i, &val); | 1121 | ret = snd_soc_cache_read(codec, i, &val); |
1117 | snd_soc_write(codec, i, val); | 1122 | if (ret) |
1123 | return ret; | ||
1124 | ret = snd_soc_write(codec, i, val); | ||
1125 | if (ret) | ||
1126 | return ret; | ||
1118 | dev_dbg(codec->dev, "Synced register %#x, value = %#x\n", | 1127 | dev_dbg(codec->dev, "Synced register %#x, value = %#x\n", |
1119 | i, val); | 1128 | i, val); |
1120 | } | 1129 | } |
@@ -1390,12 +1399,15 @@ err_tofree: | |||
1390 | static int snd_soc_flat_cache_sync(struct snd_soc_codec *codec) | 1399 | static int snd_soc_flat_cache_sync(struct snd_soc_codec *codec) |
1391 | { | 1400 | { |
1392 | int i; | 1401 | int i; |
1402 | int ret; | ||
1393 | struct snd_soc_codec_driver *codec_drv; | 1403 | struct snd_soc_codec_driver *codec_drv; |
1394 | unsigned int val; | 1404 | unsigned int val; |
1395 | 1405 | ||
1396 | codec_drv = codec->driver; | 1406 | codec_drv = codec->driver; |
1397 | for (i = 0; i < codec_drv->reg_cache_size; ++i) { | 1407 | for (i = 0; i < codec_drv->reg_cache_size; ++i) { |
1398 | snd_soc_cache_read(codec, i, &val); | 1408 | ret = snd_soc_cache_read(codec, i, &val); |
1409 | if (ret) | ||
1410 | return ret; | ||
1399 | if (codec_drv->reg_cache_default) { | 1411 | if (codec_drv->reg_cache_default) { |
1400 | switch (codec_drv->reg_word_size) { | 1412 | switch (codec_drv->reg_word_size) { |
1401 | case 1: { | 1413 | case 1: { |
@@ -1418,7 +1430,9 @@ static int snd_soc_flat_cache_sync(struct snd_soc_codec *codec) | |||
1418 | BUG(); | 1430 | BUG(); |
1419 | } | 1431 | } |
1420 | } | 1432 | } |
1421 | snd_soc_write(codec, i, val); | 1433 | ret = snd_soc_write(codec, i, val); |
1434 | if (ret) | ||
1435 | return ret; | ||
1422 | dev_dbg(codec->dev, "Synced register %#x, value = %#x\n", | 1436 | dev_dbg(codec->dev, "Synced register %#x, value = %#x\n", |
1423 | i, val); | 1437 | i, val); |
1424 | } | 1438 | } |