diff options
author | Lars-Peter Clausen <lars@metafoo.de> | 2011-11-16 10:28:19 -0500 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2011-11-16 12:34:53 -0500 |
commit | 19254411db4e69d90958244c5017e7e4a38547b0 (patch) | |
tree | fd45ca553cb7aef1c4665b6a28df92818d8ce507 /drivers/base | |
parent | 720e4616e8fd85284ef1addd8b8d93d8415e8dbc (diff) |
regmap: Try cached read before checking if a hardware read is possible
For some register format types we do not provide a parse_val so we can not do a
hardware read. But a cached read is still possible, so try to read from the
cache first, before checking whether a hardware read is possible. Otherwise the
cache becomes pretty useless for these register types.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'drivers/base')
-rw-r--r-- | drivers/base/regmap/regmap.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c index 3cf4785c3afe..b96cf7202860 100644 --- a/drivers/base/regmap/regmap.c +++ b/drivers/base/regmap/regmap.c | |||
@@ -434,15 +434,15 @@ static int _regmap_read(struct regmap *map, unsigned int reg, | |||
434 | { | 434 | { |
435 | int ret; | 435 | int ret; |
436 | 436 | ||
437 | if (!map->format.parse_val) | ||
438 | return -EINVAL; | ||
439 | |||
440 | if (!map->cache_bypass) { | 437 | if (!map->cache_bypass) { |
441 | ret = regcache_read(map, reg, val); | 438 | ret = regcache_read(map, reg, val); |
442 | if (ret == 0) | 439 | if (ret == 0) |
443 | return 0; | 440 | return 0; |
444 | } | 441 | } |
445 | 442 | ||
443 | if (!map->format.parse_val) | ||
444 | return -EINVAL; | ||
445 | |||
446 | if (map->cache_only) | 446 | if (map->cache_only) |
447 | return -EBUSY; | 447 | return -EBUSY; |
448 | 448 | ||