[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4E64F74C.1010606@metafoo.de>
Date: Mon, 05 Sep 2011 18:22:36 +0200
From: Lars-Peter Clausen <lars@...afoo.de>
To: Dimitris Papastamos <dp@...nsource.wolfsonmicro.com>
CC: linux-kernel@...r.kernel.org,
Mark Brown <broonie@...nsource.wolfsonmicro.com>,
Liam Girdwood <lrg@...com>,
Graeme Gregory <gg@...mlogic.co.uk>,
Samuel Oritz <sameo@...ux.intel.com>
Subject: Re: [PATCH 6/6] regmap: Incorporate the regcache core into regmap
On 09/05/2011 03:51 PM, Dimitris Papastamos wrote:
> 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@...nsource.wolfsonmicro.com>
> ---
> drivers/base/regmap/regmap.c | 56 ++++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 56 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
> index fa2bd89..df4e00a 100644
> --- a/drivers/base/regmap/regmap.c
> +++ b/drivers/base/regmap/regmap.c
> @@ -146,6 +146,13 @@ 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->cache_defaults = config->cache_defaults;
> + map->num_cache_defaults = config->num_cache_defaults;
> + map->num_cache_defaults_raw = config->num_cache_defaults_raw;
> + 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 +208,12 @@ struct regmap *regmap_init(struct device *dev,
> goto err_bus;
> }
>
> +#ifdef CONFIG_REGCACHE
CONFIG_REGCACHE is not defined, so we'll end up with no regcache support.
> + ret = regcache_init(map);
> + if (ret < 0)
> + goto err_bus;
> +#endif
> +
> regmap_debugfs_init(map);
>
> return map;
> @@ -219,6 +232,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 +337,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 +452,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;
> + }
> + }
I think this will need tighter integration. For example do we want to fallback
to a hw read when the cached read fails? And also regcache_read will return for
REGCACHE_NONE, which means we neither do a cached read nor a hw read.
> +#endif
> +
> ret = _regmap_read(map, reg, val);
>
> mutex_unlock(&map->lock);
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists