struct regmap_mmio_context {
        void __iomem *regs;
        unsigned val_bytes;
+
+       bool attached_clk;
        struct clk *clk;
 
        void (*reg_write)(struct regmap_mmio_context *ctx,
 }
 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");
 
 #include <linux/lockdep.h>
 
 struct module;
+struct clk;
 struct device;
 struct i2c_client;
 struct irq_domain;
        __regmap_lockdep_wrapper(__devm_regmap_init_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);
 int regmap_reinit_cache(struct regmap *map,
                        const struct regmap_config *config);