[PATCH] arm: vt8500: Fix gpio mux setup in vt8500_init()
Tony Prisk
linux at prisktech.co.nz
Thu Jan 23 01:28:47 EST 2014
With the switch to a pinctrl driver, and the dropping of the gpio driver,
the code in vt8500_init now always fails, and drops back to LEGACY mode.
Update the gpio mux init code, and removing the #ifdef's and the LEGACY
mode fallback.
Signed-off-by: Tony Prisk <linux at prisktech.co.nz>
---
arch/arm/mach-vt8500/vt8500.c | 91 ++++++++++++++---------------------------
1 file changed, 30 insertions(+), 61 deletions(-)
diff --git a/arch/arm/mach-vt8500/vt8500.c b/arch/arm/mach-vt8500/vt8500.c
index 4a73464..fe5243e 100644
--- a/arch/arm/mach-vt8500/vt8500.c
+++ b/arch/arm/mach-vt8500/vt8500.c
@@ -32,9 +32,6 @@
#include <linux/of_irq.h>
#include <linux/of_platform.h>
-#define LEGACY_GPIO_BASE 0xD8110000
-#define LEGACY_PMC_BASE 0xD8130000
-
/* Registers in GPIO Controller */
#define VT8500_GPIO_MUX_REG 0x200
@@ -75,89 +72,61 @@ static void vt8500_power_off(void)
void __init vt8500_init(void)
{
struct device_node *np;
-#if defined(CONFIG_FB_VT8500) || defined(CONFIG_FB_WM8505)
struct device_node *fb;
- void __iomem *gpio_base;
-#endif
+ void __iomem *base;
-#ifdef CONFIG_FB_VT8500
fb = of_find_compatible_node(NULL, NULL, "via,vt8500-fb");
if (fb) {
- np = of_find_compatible_node(NULL, NULL, "via,vt8500-gpio");
- if (np) {
- gpio_base = of_iomap(np, 0);
-
- if (!gpio_base)
- pr_err("%s: of_iomap(gpio_mux) failed\n",
- __func__);
+ np = of_find_compatible_node(NULL, NULL, "via,vt8500-pinctrl");
+ if (!np) {
+ pr_err("pinctrl node required for framebuffer\n");
+ BUG();
+ }
- of_node_put(np);
+ base = of_iomap(np, 0);
+ if (base) {
+ writel(readl(base + VT8500_GPIO_MUX_REG) | 1,
+ base + VT8500_GPIO_MUX_REG);
+ iounmap(base);
} else {
- gpio_base = ioremap(LEGACY_GPIO_BASE, 0x1000);
- if (!gpio_base)
- pr_err("%s: ioremap(legacy_gpio_mux) failed\n",
- __func__);
+ pr_err("%s: of_iomap(gpio_mux) failed\n", __func__);
}
- if (gpio_base) {
- writel(readl(gpio_base + VT8500_GPIO_MUX_REG) | 1,
- gpio_base + VT8500_GPIO_MUX_REG);
- iounmap(gpio_base);
- } else
- pr_err("%s: Could not remap GPIO mux\n", __func__);
+ of_node_put(np);
of_node_put(fb);
}
-#endif
-#ifdef CONFIG_FB_WM8505
fb = of_find_compatible_node(NULL, NULL, "wm,wm8505-fb");
if (fb) {
- np = of_find_compatible_node(NULL, NULL, "wm,wm8505-gpio");
- if (!np)
- np = of_find_compatible_node(NULL, NULL,
- "wm,wm8650-gpio");
- if (np) {
- gpio_base = of_iomap(np, 0);
-
- if (!gpio_base)
- pr_err("%s: of_iomap(gpio_mux) failed\n",
- __func__);
-
- of_node_put(np);
+ np = of_find_compatible_node(NULL, NULL, "wm,prizm-pinctrl");
+ if (!np) {
+ pr_err("pinctrl node required for framebuffer\n");
+ BUG();
+ }
+
+ base = of_iomap(np, 0);
+ if (base) {
+ writel(readl(base + VT8500_GPIO_MUX_REG) |
+ 0x80000000, base + VT8500_GPIO_MUX_REG);
+ iounmap(base);
} else {
- gpio_base = ioremap(LEGACY_GPIO_BASE, 0x1000);
- if (!gpio_base)
- pr_err("%s: ioremap(legacy_gpio_mux) failed\n",
- __func__);
+ pr_err("%s: of_iomap(gpio_mux) failed\n", __func__);
}
- if (gpio_base) {
- writel(readl(gpio_base + VT8500_GPIO_MUX_REG) |
- 0x80000000, gpio_base + VT8500_GPIO_MUX_REG);
- iounmap(gpio_base);
- } else
- pr_err("%s: Could not remap GPIO mux\n", __func__);
+ of_node_put(np);
of_node_put(fb);
}
-#endif
np = of_find_compatible_node(NULL, NULL, "via,vt8500-pmc");
if (np) {
pmc_base = of_iomap(np, 0);
-
- if (!pmc_base)
- pr_err("%s:of_iomap(pmc) failed\n", __func__);
+ if (pmc_base)
+ pm_power_off = &vt8500_power_off;
+ else
+ pr_err("%s: of_iomap(pmc) failed\n", __func__);
of_node_put(np);
- } else {
- pmc_base = ioremap(LEGACY_PMC_BASE, 0x1000);
- if (!pmc_base)
- pr_err("%s:ioremap(power_off) failed\n", __func__);
}
- if (pmc_base)
- pm_power_off = &vt8500_power_off;
- else
- pr_err("%s: PMC Hibernation register could not be remapped, not enabling power off!\n", __func__);
of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
}
--
1.7.9.5
More information about the linux-arm-kernel
mailing list