Commit a00406b7 authored by Fabrice Gasnier's avatar Fabrice Gasnier Committed by Lee Jones
Browse files

mfd: syscon: Add optional clock support



Some system control registers need to be clocked, so the registers can
be accessed. Add an optional clock and attach it to regmap.

Signed-off-by: default avatarFabrice Gasnier <fabrice.gasnier@st.com>
Acked-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
parent c6ba0881
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@
 * (at your option) any later version.
 */

#include <linux/clk.h>
#include <linux/err.h>
#include <linux/hwspinlock.h>
#include <linux/io.h>
@@ -45,6 +46,7 @@ static const struct regmap_config syscon_regmap_config = {

static struct syscon *of_syscon_register(struct device_node *np)
{
	struct clk *clk;
	struct syscon *syscon;
	struct regmap *regmap;
	void __iomem *base;
@@ -119,6 +121,18 @@ static struct syscon *of_syscon_register(struct device_node *np)
		goto err_regmap;
	}

	clk = of_clk_get(np, 0);
	if (IS_ERR(clk)) {
		ret = PTR_ERR(clk);
		/* clock is optional */
		if (ret != -ENOENT)
			goto err_clk;
	} else {
		ret = regmap_mmio_attach_clk(regmap, clk);
		if (ret)
			goto err_attach;
	}

	syscon->regmap = regmap;
	syscon->np = np;

@@ -128,6 +142,11 @@ static struct syscon *of_syscon_register(struct device_node *np)

	return syscon;

err_attach:
	if (!IS_ERR(clk))
		clk_put(clk);
err_clk:
	regmap_exit(regmap);
err_regmap:
	iounmap(base);
err_map: