Merge remote-tracking branches 'regmap/topic/debugfs' and 'regmap/topic/mmio-clk' into regmap-next

This commit is contained in:
Mark Brown 2018-03-12 09:50:42 -07:00
commit 2889312616
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0
4 changed files with 47 additions and 2 deletions

View File

@ -25,6 +25,7 @@ struct regmap_debugfs_node {
struct list_head link; struct list_head link;
}; };
static unsigned int dummy_index;
static struct dentry *regmap_debugfs_root; static struct dentry *regmap_debugfs_root;
static LIST_HEAD(regmap_debugfs_early_list); static LIST_HEAD(regmap_debugfs_early_list);
static DEFINE_MUTEX(regmap_debugfs_early_lock); static DEFINE_MUTEX(regmap_debugfs_early_lock);
@ -40,6 +41,7 @@ static ssize_t regmap_name_read_file(struct file *file,
loff_t *ppos) loff_t *ppos)
{ {
struct regmap *map = file->private_data; struct regmap *map = file->private_data;
const char *name = "nodev";
int ret; int ret;
char *buf; char *buf;
@ -47,7 +49,10 @@ static ssize_t regmap_name_read_file(struct file *file,
if (!buf) if (!buf)
return -ENOMEM; return -ENOMEM;
ret = snprintf(buf, PAGE_SIZE, "%s\n", map->dev->driver->name); if (map->dev && map->dev->driver)
name = map->dev->driver->name;
ret = snprintf(buf, PAGE_SIZE, "%s\n", name);
if (ret < 0) { if (ret < 0) {
kfree(buf); kfree(buf);
return ret; return ret;
@ -569,9 +574,20 @@ void regmap_debugfs_init(struct regmap *map, const char *name)
name = devname; name = devname;
} }
if (!strcmp(name, "dummy")) {
map->debugfs_name = kasprintf(GFP_KERNEL, "dummy%d",
dummy_index);
name = map->debugfs_name;
dummy_index++;
}
map->debugfs = debugfs_create_dir(name, regmap_debugfs_root); map->debugfs = debugfs_create_dir(name, regmap_debugfs_root);
if (!map->debugfs) { if (!map->debugfs) {
dev_warn(map->dev, "Failed to create debugfs directory\n"); dev_warn(map->dev,
"Failed to create %s debugfs directory\n", name);
kfree(map->debugfs_name);
map->debugfs_name = NULL;
return; return;
} }

View File

@ -28,6 +28,8 @@
struct regmap_mmio_context { struct regmap_mmio_context {
void __iomem *regs; void __iomem *regs;
unsigned val_bytes; unsigned val_bytes;
bool attached_clk;
struct clk *clk; struct clk *clk;
void (*reg_write)(struct regmap_mmio_context *ctx, void (*reg_write)(struct regmap_mmio_context *ctx,
@ -363,4 +365,26 @@ struct regmap *__devm_regmap_init_mmio_clk(struct device *dev,
} }
EXPORT_SYMBOL_GPL(__devm_regmap_init_mmio_clk); EXPORT_SYMBOL_GPL(__devm_regmap_init_mmio_clk);
int regmap_mmio_attach_clk(struct regmap *map, struct clk *clk)
{
struct regmap_mmio_context *ctx = map->bus_context;
ctx->clk = clk;
ctx->attached_clk = true;
return clk_prepare(ctx->clk);
}
EXPORT_SYMBOL_GPL(regmap_mmio_attach_clk);
void regmap_mmio_detach_clk(struct regmap *map)
{
struct regmap_mmio_context *ctx = map->bus_context;
clk_unprepare(ctx->clk);
ctx->attached_clk = false;
ctx->clk = NULL;
}
EXPORT_SYMBOL_GPL(regmap_mmio_detach_clk);
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");

View File

@ -1116,6 +1116,8 @@ skip_format_initialization:
ret = regmap_attach_dev(dev, map, config); ret = regmap_attach_dev(dev, map, config);
if (ret != 0) if (ret != 0)
goto err_regcache; goto err_regcache;
} else {
regmap_debugfs_init(map, config->name);
} }
return map; return map;

View File

@ -21,6 +21,7 @@
#include <linux/lockdep.h> #include <linux/lockdep.h>
struct module; struct module;
struct clk;
struct device; struct device;
struct i2c_client; struct i2c_client;
struct irq_domain; struct irq_domain;
@ -905,6 +906,8 @@ bool regmap_ac97_default_volatile(struct device *dev, unsigned int reg);
__regmap_lockdep_wrapper(__devm_regmap_init_sdw, #config, \ __regmap_lockdep_wrapper(__devm_regmap_init_sdw, #config, \
sdw, config) sdw, config)
int regmap_mmio_attach_clk(struct regmap *map, struct clk *clk);
void regmap_mmio_detach_clk(struct regmap *map);
void regmap_exit(struct regmap *map); void regmap_exit(struct regmap *map);
int regmap_reinit_cache(struct regmap *map, int regmap_reinit_cache(struct regmap *map,
const struct regmap_config *config); const struct regmap_config *config);