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: Fabrice Gasnier <fabrice.gasnier@st.com> Acked-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Lee Jones <lee.jones@linaro.org>
This commit is contained in:
parent
c6ba08819b
commit
a00406b71c
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue