All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dimitris Papastamos <dp@opensource.wolfsonmicro.com>
To: linux-kernel@vger.kernel.org
Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>,
	Liam Girdwood <lrg@ti.com>, Graeme Gregory <gg@slimlogic.co.uk>,
	Samuel Oritz <sameo@linux.intel.com>,
	Lars-Peter Clausen <lars@metafoo.de>
Subject: [PATCH 6/8] regmap: Incorporate the regcache core into regmap
Date: Fri,  2 Sep 2011 16:46:13 +0100	[thread overview]
Message-ID: <1314978375-11539-7-git-send-email-dp@opensource.wolfsonmicro.com> (raw)
In-Reply-To: <1314978375-11539-1-git-send-email-dp@opensource.wolfsonmicro.com>

This patch incorporates the regcache core code into regmap.  All previous
patches have been no-ops essentially up to this point.

The bulk read operation is not supported by regcache at the moment.  This
will be implemented incrementally.

Signed-off-by: Dimitris Papastamos <dp@opensource.wolfsonmicro.com>
---
 drivers/base/regmap/regmap.c |   55 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 55 insertions(+), 0 deletions(-)

diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
index fa2bd89..fdc4266 100644
--- a/drivers/base/regmap/regmap.c
+++ b/drivers/base/regmap/regmap.c
@@ -146,6 +146,12 @@ struct regmap *regmap_init(struct device *dev,
 	map->readable_reg = config->readable_reg;
 	map->volatile_reg = config->volatile_reg;
 	map->precious_reg = config->precious_reg;
+	map->cache_type = config->cache_type;
+	map->num_cache_defaults_raw = config->num_cache_defaults_raw;
+	map->cache_defaults = NULL;
+	map->cache_defaults_raw = config->cache_defaults_raw;
+	map->cache_size_raw = (config->val_bits / 8) * config->num_cache_defaults_raw;
+	map->cache_word_size = config->val_bits / 8;
 
 	switch (config->reg_bits) {
 	case 4:
@@ -201,6 +207,12 @@ struct regmap *regmap_init(struct device *dev,
 		goto err_bus;
 	}
 
+#ifdef CONFIG_REGCACHE
+	ret = regcache_init(map);
+	if (ret < 0)
+		goto err_bus;
+#endif
+
 	regmap_debugfs_init(map);
 
 	return map;
@@ -219,6 +231,9 @@ EXPORT_SYMBOL_GPL(regmap_init);
  */
 void regmap_exit(struct regmap *map)
 {
+#ifdef CONFIG_REGCACHE
+	regcache_exit(map);
+#endif
 	regmap_debugfs_exit(map);
 	kfree(map->work_buf);
 	module_put(map->bus->owner);
@@ -321,6 +336,20 @@ int regmap_write(struct regmap *map, unsigned int reg, unsigned int val)
 
 	mutex_lock(&map->lock);
 
+#ifdef CONFIG_REGCACHE
+	if (!map->cache_bypass) {
+		ret = regcache_write(map, reg, val);
+		if (ret < 0) {
+			mutex_unlock(&map->lock);
+			return ret;
+		}
+		if (map->cache_only) {
+			mutex_unlock(&map->lock);
+			return 0;
+		}
+	}
+#endif
+
 	ret = _regmap_write(map, reg, val);
 
 	mutex_unlock(&map->lock);
@@ -422,6 +451,16 @@ int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val)
 
 	mutex_lock(&map->lock);
 
+#ifdef CONFIG_REGCACHE
+	if (!map->cache_bypass) {
+		ret = regcache_read(map, reg, val);
+		if (!ret) {
+			mutex_unlock(&map->lock);
+			return 0;
+		}
+	}
+#endif
+
 	ret = _regmap_read(map, reg, val);
 
 	mutex_unlock(&map->lock);
@@ -473,6 +512,8 @@ int regmap_bulk_read(struct regmap *map, unsigned int reg, void *val,
 	int ret, i;
 	size_t val_bytes = map->format.val_bytes;
 
+	WARN_ON(map->cache_type != REGCACHE_NONE);
+
 	if (!map->format.parse_val)
 		return -EINVAL;
 
@@ -512,6 +553,20 @@ int regmap_update_bits(struct regmap *map, unsigned int reg,
 	tmp &= ~mask;
 	tmp |= val & mask;
 
+#ifdef CONFIG_REGCACHE
+	if (!map->cache_bypass) {
+		ret = regcache_write(map, reg, tmp);
+		if (ret < 0) {
+			mutex_unlock(&map->lock);
+			return ret;
+		}
+		if (map->cache_only) {
+			mutex_unlock(&map->lock);
+			return 0;
+		}
+	}
+#endif
+
 	ret = _regmap_write(map, reg, tmp);
 
 out:
-- 
1.7.6.1


  parent reply	other threads:[~2011-09-02 15:46 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-02 15:46 [PATCH 0/8] Introduce caching support for regmap Dimitris Papastamos
2011-09-02 15:46 ` [PATCH 1/8] regmap: Introduce caching support Dimitris Papastamos
2011-09-02 20:02   ` Lars-Peter Clausen
2011-09-02 23:48     ` Mark Brown
2011-09-03  1:10       ` Dimitris Papastamos
2011-09-04 15:57         ` Mark Brown
2011-09-05  9:44       ` Dimitris Papastamos
2011-09-05  9:43     ` Dimitris Papastamos
2011-09-05  9:55       ` Lars-Peter Clausen
2011-09-05 10:00         ` Dimitris Papastamos
2011-09-02 15:46 ` [PATCH 2/8] regmap: Add the indexed cache support Dimitris Papastamos
2011-09-02 20:16   ` Lars-Peter Clausen
2011-09-05  9:55     ` Dimitris Papastamos
2011-09-05 10:14       ` Lars-Peter Clausen
2011-09-05 18:22         ` Mark Brown
2012-07-17 11:16     ` Mark Brown
2012-07-17 14:24       ` Lars-Peter Clausen
2011-09-02 15:46 ` [PATCH 3/8] regmap: Add the rbtree " Dimitris Papastamos
2011-09-02 20:22   ` Lars-Peter Clausen
2011-09-05  9:58     ` Dimitris Papastamos
2011-09-02 15:46 ` [PATCH 4/8] regmap: Add the LZO " Dimitris Papastamos
2011-09-05 21:40   ` Matthieu CASTET
2011-09-07 19:19     ` Mark Brown
2011-09-02 15:46 ` [PATCH 5/8] regmap: Add the regcache_sync trace event Dimitris Papastamos
2011-09-02 15:46 ` Dimitris Papastamos [this message]
2011-09-02 15:46 ` [PATCH 7/8] regmap: It is impossible to be given a NULL defaults cache Dimitris Papastamos
2011-09-02 15:46 ` [PATCH 8/8] regmap: Support NULL cache_defaults_raw Dimitris Papastamos

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1314978375-11539-7-git-send-email-dp@opensource.wolfsonmicro.com \
    --to=dp@opensource.wolfsonmicro.com \
    --cc=broonie@opensource.wolfsonmicro.com \
    --cc=gg@slimlogic.co.uk \
    --cc=lars@metafoo.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lrg@ti.com \
    --cc=sameo@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.