Merge tag 'regmap-v4.18' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie...
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 4 Jun 2018 18:38:16 +0000 (11:38 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 4 Jun 2018 18:38:16 +0000 (11:38 -0700)
Pull regmap updates from Mark Brown:
 "This is another quiet release for regmap, there's one minor feature
  improvement for the recently added slimbus support and a few minor
  fixes and cleanups"

* tag 'regmap-v4.18' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap:
  regmap: slimbus: allow register offsets up to 16 bits
  regmap: add missing prototype for devm_init_slimbus
  regmap: Skip clk_put for attached clocks when freeing context
  regmap: include <linux/ktime.h> from include/linux/regmap.h

drivers/base/regmap/regmap-mmio.c
drivers/base/regmap/regmap-slimbus.c
include/linux/regmap.h

index 5cadfd3394d8a31e726eaacd5166e1c83bf8875d..8741fb5f8f5459c8e856262fee8e2cb77e67aff2 100644 (file)
@@ -206,7 +206,8 @@ static void regmap_mmio_free_context(void *context)
 
        if (!IS_ERR(ctx->clk)) {
                clk_unprepare(ctx->clk);
-               clk_put(ctx->clk);
+               if (!ctx->attached_clk)
+                       clk_put(ctx->clk);
        }
        kfree(context);
 }
index c90bee81d954bf2d4cdcc04c73709413e4bcfa63..91d501eda8a9d82338339ee03b3ae0c862935e39 100644 (file)
@@ -41,7 +41,7 @@ static struct regmap_bus regmap_slimbus_bus = {
 static const struct regmap_bus *regmap_get_slimbus(struct slim_device *slim,
                                        const struct regmap_config *config)
 {
-       if (config->val_bits == 8 && config->reg_bits == 8)
+       if (config->val_bits == 8 && config->reg_bits == 16)
                return &regmap_slimbus_bus;
 
        return ERR_PTR(-ENOTSUPP);
index 5f7ad0552c0381e9ffe4136cf77cdb050200231f..4f38068ffb71f6206bc756f786a47728d53658a3 100644 (file)
@@ -15,6 +15,7 @@
 
 #include <linux/list.h>
 #include <linux/rbtree.h>
+#include <linux/ktime.h>
 #include <linux/delay.h>
 #include <linux/err.h>
 #include <linux/bug.h>
@@ -587,7 +588,10 @@ struct regmap *__devm_regmap_init_sdw(struct sdw_slave *sdw,
                                 const struct regmap_config *config,
                                 struct lock_class_key *lock_key,
                                 const char *lock_name);
-
+struct regmap *__devm_regmap_init_slimbus(struct slim_device *slimbus,
+                                const struct regmap_config *config,
+                                struct lock_class_key *lock_key,
+                                const char *lock_name);
 /*
  * Wrapper for regmap_init macros to include a unique lockdep key and name
  * for each call. No-op if CONFIG_LOCKDEP is not set.
@@ -906,6 +910,19 @@ bool regmap_ac97_default_volatile(struct device *dev, unsigned int reg);
        __regmap_lockdep_wrapper(__devm_regmap_init_sdw, #config,       \
                                sdw, config)
 
+/**
+ * devm_regmap_init_slimbus() - Initialise managed register map
+ *
+ * @slimbus: Device that will be interacted with
+ * @config: Configuration for register map
+ *
+ * The return value will be an ERR_PTR() on error or a valid pointer
+ * to a struct regmap. The regmap will be automatically freed by the
+ * device management code.
+ */
+#define devm_regmap_init_slimbus(slimbus, config)                      \
+       __regmap_lockdep_wrapper(__devm_regmap_init_slimbus, #config,   \
+                               slimbus, 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);