[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAP=VYLpfssjmREbEcGMQ8P4N7wpKgv=vC++ho+UugtOsx5SxOQ@mail.gmail.com>
Date: Thu, 5 Apr 2012 23:44:43 -0400
From: Paul Gortmaker <paul.gortmaker@...driver.com>
To: Stephen Warren <swarren@...dotorg.org>
Cc: Mark Brown <broonie@...nsource.wolfsonmicro.com>,
linux-kernel@...r.kernel.org, Stephen Warren <swarren@...dia.com>,
linux-next@...r.kernel.org
Subject: Re: [PATCH 2/6] regmap: allow regmap instances to be named
On Wed, Apr 4, 2012 at 5:48 PM, Stephen Warren <swarren@...dotorg.org> wrote:
> From: Stephen Warren <swarren@...dia.com>
>
> Some devices have multiple separate register regions. Logically, one
> regmap would be created per region. One issue that prevents this is that
> each instance will attempt to create the same debugfs files. Avoid this
> by allowing regmaps to be named, and use the name to construct the
> debugfs directory name.
>
> Signed-off-by: Stephen Warren <swarren@...dia.com>
> ---
> drivers/base/regmap/internal.h | 3 ++-
> drivers/base/regmap/regmap-debugfs.c | 14 +++++++++++---
> drivers/base/regmap/regmap.c | 4 ++--
> include/linux/regmap.h | 5 +++++
> 4 files changed, 20 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/base/regmap/internal.h b/drivers/base/regmap/internal.h
> index 6ee4dc5..d9ea8f5 100644
> --- a/drivers/base/regmap/internal.h
> +++ b/drivers/base/regmap/internal.h
> @@ -47,6 +47,7 @@ struct regmap {
>
> #ifdef CONFIG_DEBUG_FS
> struct dentry *debugfs;
> + const char *debugfs_name;
> #endif
>
> unsigned int max_register;
> @@ -110,7 +111,7 @@ int _regmap_write(struct regmap *map, unsigned int reg,
>
> #ifdef CONFIG_DEBUG_FS
> extern void regmap_debugfs_initcall(void);
> -extern void regmap_debugfs_init(struct regmap *map);
> +extern void regmap_debugfs_init(struct regmap *map, const char *name);
Hi Stephen,
Can you take a look at these linux-next fails?
drivers/base/regmap/regmap.c:349:2: error: too many arguments to
function 'regmap_debugfs_init'
drivers/base/regmap/regmap.c:434:2: error: too many arguments to
function 'regmap_debugfs_init'
make[4]: *** [drivers/base/regmap/regmap.o] Error 1
I'm assuming it is somehow related to the above commit (or family
of commits) -- since it complains about arg #s and you are changing
the arg #. (I didn't bisect to 100% confirm this.)
http://kisskb.ellerman.id.au/kisskb/buildresult/6039717/
http://kisskb.ellerman.id.au/kisskb/buildresult/6040074/
http://kisskb.ellerman.id.au/kisskb/buildresult/6040070/
Thanks,
Paul.
> extern void regmap_debugfs_exit(struct regmap *map);
> #else
> static inline void regmap_debugfs_initcall(void) { }
> diff --git a/drivers/base/regmap/regmap-debugfs.c b/drivers/base/regmap/regmap-debugfs.c
> index 251eb70..df97c93 100644
> --- a/drivers/base/regmap/regmap-debugfs.c
> +++ b/drivers/base/regmap/regmap-debugfs.c
> @@ -242,10 +242,17 @@ static const struct file_operations regmap_access_fops = {
> .llseek = default_llseek,
> };
>
> -void regmap_debugfs_init(struct regmap *map)
> +void regmap_debugfs_init(struct regmap *map, const char *name)
> {
> - map->debugfs = debugfs_create_dir(dev_name(map->dev),
> - regmap_debugfs_root);
> + if (name) {
> + map->debugfs_name = kasprintf(GFP_KERNEL, "%s-%s",
> + dev_name(map->dev), name);
> + name = map->debugfs_name;
> + } else {
> + name = dev_name(map->dev);
> + }
> +
> + map->debugfs = debugfs_create_dir(name, regmap_debugfs_root);
> if (!map->debugfs) {
> dev_warn(map->dev, "Failed to create debugfs directory\n");
> return;
> @@ -274,6 +281,7 @@ void regmap_debugfs_init(struct regmap *map)
> void regmap_debugfs_exit(struct regmap *map)
> {
> debugfs_remove_recursive(map->debugfs);
> + kfree(map->debugfs_name);
> }
>
> void regmap_debugfs_initcall(void)
> diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
> index 831ec42..339b2c8 100644
> --- a/drivers/base/regmap/regmap.c
> +++ b/drivers/base/regmap/regmap.c
> @@ -343,7 +343,7 @@ struct regmap *regmap_init(struct device *dev,
> goto err_map;
> }
>
> - regmap_debugfs_init(map);
> + regmap_debugfs_init(map, config->name);
>
> ret = regcache_init(map, config);
> if (ret < 0)
> @@ -426,7 +426,7 @@ int regmap_reinit_cache(struct regmap *map, const struct regmap_config *config)
> map->precious_reg = config->precious_reg;
> map->cache_type = config->cache_type;
>
> - regmap_debugfs_init(map);
> + regmap_debugfs_init(map, config->name);
>
> map->cache_bypass = false;
> map->cache_only = false;
> diff --git a/include/linux/regmap.h b/include/linux/regmap.h
> index 48e9b86..2fd41e3 100644
> --- a/include/linux/regmap.h
> +++ b/include/linux/regmap.h
> @@ -46,6 +46,9 @@ struct reg_default {
> /**
> * Configuration for the register map of a device.
> *
> + * @name: Optional name of the regmap. Useful when a device has multiple
> + * register regions.
> + *
> * @reg_bits: Number of bits in a register address, mandatory.
> * @pad_bits: Number of bits of padding between register and value.
> * @val_bits: Number of bits in a register value, mandatory.
> @@ -77,6 +80,8 @@ struct reg_default {
> * @num_reg_defaults_raw: Number of elements in reg_defaults_raw.
> */
> struct regmap_config {
> + const char *name;
> +
> int reg_bits;
> int pad_bits;
> int val_bits;
> --
> 1.7.0.4
>
> --
> 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/
--
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