diff options
Diffstat (limited to 'arch/arm/mach-u300/regulator.c')
-rw-r--r-- | arch/arm/mach-u300/regulator.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/arch/arm/mach-u300/regulator.c b/arch/arm/mach-u300/regulator.c index 273fceb..bf40cd4 100644 --- a/arch/arm/mach-u300/regulator.c +++ b/arch/arm/mach-u300/regulator.c @@ -15,9 +15,8 @@ #include <linux/platform_device.h> #include <linux/regulator/machine.h> #include <linux/regulator/consumer.h> -/* Those are just for writing in syscon */ -#include <linux/of_address.h> -#include <linux/io.h> +#include <linux/mfd/syscon.h> +#include <linux/regmap.h> /* Power Management Control 16bit (R/W) */ #define U300_SYSCON_PMCR (0x50) @@ -59,9 +58,8 @@ static int __init __u300_init_boardpower(struct platform_device *pdev) { struct device_node *np = pdev->dev.of_node; struct device_node *syscon_np; - static void __iomem *syscon_base; + struct regmap *regmap; int err; - u32 val; pr_info("U300: setting up board power\n"); @@ -70,9 +68,9 @@ static int __init __u300_init_boardpower(struct platform_device *pdev) pr_crit("U300: no syscon node\n"); return -ENODEV; } - syscon_base = of_iomap(syscon_np, 0); - if (!syscon_base) { - pr_crit("U300: could not remap syscon\n"); + regmap = syscon_node_to_regmap(syscon_np); + if (!regmap) { + pr_crit("U300: could not locate syscon regmap\n"); return -ENODEV; } @@ -96,9 +94,8 @@ static int __init __u300_init_boardpower(struct platform_device *pdev) * the rest of the U300 power management is implemented. */ pr_info("U300: disable system controller pull-up\n"); - val = readw(syscon_base + U300_SYSCON_PMCR); - val &= ~U300_SYSCON_PMCR_DCON_ENABLE; - writew(val, syscon_base + U300_SYSCON_PMCR); + regmap_update_bits(regmap, U300_SYSCON_PMCR, + U300_SYSCON_PMCR_DCON_ENABLE, 0); /* Register globally exported PM poweroff hook */ pm_power_off = u300_pm_poweroff; |