Commit 30a69ef7 authored by Tony Lindgren's avatar Tony Lindgren

ARM: OMAP: Move DT wake-up event handling over to use pinctrl-single-omap

Now pinctrl-single-omap can handle the wake-up events for us now
as long as the events are configured in the .dts files.

Done in collaboration with Roger Quadros <rogerq@ti.com>.

Cc: Peter Ujfalusi <peter.ujfalusi@ti.com>
Cc: Grygorii Strashko <grygorii.strashko@ti.com>
Cc: Prakash Manjunathappa <prakash.pm@ti.com>
Cc: Roger Quadros <rogerq@ti.com>
Cc: Haojian Zhuang <haojian.zhuang@linaro.org>
Cc: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: default avatarKevin Hilman <khilman@linaro.org>
Tested-by: default avatarKevin Hilman <khilman@linaro.org>
Signed-off-by: default avatarRoger Quadros <rogerq@ti.com>
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
parent 8651bd8c
...@@ -107,6 +107,8 @@ omap3_pmx_core: pinmux@48002030 { ...@@ -107,6 +107,8 @@ omap3_pmx_core: pinmux@48002030 {
reg = <0x48002030 0x05cc>; reg = <0x48002030 0x05cc>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
#interrupt-cells = <1>;
interrupt-controller;
pinctrl-single,register-width = <16>; pinctrl-single,register-width = <16>;
pinctrl-single,function-mask = <0x7f1f>; pinctrl-single,function-mask = <0x7f1f>;
}; };
...@@ -116,6 +118,8 @@ omap3_pmx_wkup: pinmux@0x48002a00 { ...@@ -116,6 +118,8 @@ omap3_pmx_wkup: pinmux@0x48002a00 {
reg = <0x48002a00 0x5c>; reg = <0x48002a00 0x5c>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
#interrupt-cells = <1>;
interrupt-controller;
pinctrl-single,register-width = <16>; pinctrl-single,register-width = <16>;
pinctrl-single,function-mask = <0x7f1f>; pinctrl-single,function-mask = <0x7f1f>;
}; };
......
...@@ -114,6 +114,8 @@ omap4_pmx_core: pinmux@4a100040 { ...@@ -114,6 +114,8 @@ omap4_pmx_core: pinmux@4a100040 {
reg = <0x4a100040 0x0196>; reg = <0x4a100040 0x0196>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
#interrupt-cells = <1>;
interrupt-controller;
pinctrl-single,register-width = <16>; pinctrl-single,register-width = <16>;
pinctrl-single,function-mask = <0x7fff>; pinctrl-single,function-mask = <0x7fff>;
}; };
...@@ -122,6 +124,8 @@ omap4_pmx_wkup: pinmux@4a31e040 { ...@@ -122,6 +124,8 @@ omap4_pmx_wkup: pinmux@4a31e040 {
reg = <0x4a31e040 0x0038>; reg = <0x4a31e040 0x0038>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
#interrupt-cells = <1>;
interrupt-controller;
pinctrl-single,register-width = <16>; pinctrl-single,register-width = <16>;
pinctrl-single,function-mask = <0x7fff>; pinctrl-single,function-mask = <0x7fff>;
}; };
......
...@@ -811,6 +811,12 @@ int __init omap_mux_late_init(void) ...@@ -811,6 +811,12 @@ int __init omap_mux_late_init(void)
} }
} }
omap_mux_dbg_init();
/* see pinctrl-single-omap for the wake-up interrupt handling */
if (of_have_populated_dt())
return 0;
ret = request_irq(omap_prcm_event_to_irq("io"), ret = request_irq(omap_prcm_event_to_irq("io"),
omap_hwmod_mux_handle_irq, IRQF_SHARED | IRQF_NO_SUSPEND, omap_hwmod_mux_handle_irq, IRQF_SHARED | IRQF_NO_SUSPEND,
"hwmod_io", omap_mux_late_init); "hwmod_io", omap_mux_late_init);
...@@ -818,8 +824,6 @@ int __init omap_mux_late_init(void) ...@@ -818,8 +824,6 @@ int __init omap_mux_late_init(void)
if (ret) if (ret)
pr_warning("mux: Failed to setup hwmod io irq %d\n", ret); pr_warning("mux: Failed to setup hwmod io irq %d\n", ret);
omap_mux_dbg_init();
return 0; return 0;
} }
......
...@@ -14,6 +14,8 @@ ...@@ -14,6 +14,8 @@
#include <linux/of_platform.h> #include <linux/of_platform.h>
#include <linux/wl12xx.h> #include <linux/wl12xx.h>
#include <linux/platform_data/pinctrl-single.h>
#include "common.h" #include "common.h"
#include "common-board-devices.h" #include "common-board-devices.h"
#include "dss-common.h" #include "dss-common.h"
...@@ -105,7 +107,23 @@ static void __init omap5_uevm_legacy_init(void) ...@@ -105,7 +107,23 @@ static void __init omap5_uevm_legacy_init(void)
} }
#endif #endif
static struct pcs_pdata pcs_pdata;
void omap_pcs_legacy_init(int irq, void (*rearm)(void))
{
pcs_pdata.irq = irq;
pcs_pdata.rearm = rearm;
}
struct of_dev_auxdata omap_auxdata_lookup[] __initdata = { struct of_dev_auxdata omap_auxdata_lookup[] __initdata = {
#ifdef CONFIG_ARCH_OMAP3
OF_DEV_AUXDATA("ti,omap3-padconf", 0x48002030, "48002030.pinmux", &pcs_pdata),
OF_DEV_AUXDATA("ti,omap3-padconf", 0x48002a00, "48002a00.pinmux", &pcs_pdata),
#endif
#ifdef CONFIG_ARCH_OMAP4
OF_DEV_AUXDATA("ti,omap4-padconf", 0x4a100040, "4a100040.pinmux", &pcs_pdata),
OF_DEV_AUXDATA("ti,omap4-padconf", 0x4a31e040, "4a31e040.pinmux", &pcs_pdata),
#endif
{ /* sentinel */ }, { /* sentinel */ },
}; };
......
...@@ -144,7 +144,13 @@ extern u32 omap3_prm_vcvp_read(u8 offset); ...@@ -144,7 +144,13 @@ extern u32 omap3_prm_vcvp_read(u8 offset);
extern void omap3_prm_vcvp_write(u32 val, u8 offset); extern void omap3_prm_vcvp_write(u32 val, u8 offset);
extern u32 omap3_prm_vcvp_rmw(u32 mask, u32 bits, u8 offset); extern u32 omap3_prm_vcvp_rmw(u32 mask, u32 bits, u8 offset);
extern void omap3xxx_prm_reconfigure_io_chain(void); #ifdef CONFIG_ARCH_OMAP3
void omap3xxx_prm_reconfigure_io_chain(void);
#else
static inline void omap3xxx_prm_reconfigure_io_chain(void)
{
}
#endif
/* PRM interrupt-related functions */ /* PRM interrupt-related functions */
extern void omap3xxx_prm_read_pending_irqs(unsigned long *events); extern void omap3xxx_prm_read_pending_irqs(unsigned long *events);
......
...@@ -42,7 +42,13 @@ extern u32 omap4_prm_vcvp_read(u8 offset); ...@@ -42,7 +42,13 @@ extern u32 omap4_prm_vcvp_read(u8 offset);
extern void omap4_prm_vcvp_write(u32 val, u8 offset); extern void omap4_prm_vcvp_write(u32 val, u8 offset);
extern u32 omap4_prm_vcvp_rmw(u32 mask, u32 bits, u8 offset); extern u32 omap4_prm_vcvp_rmw(u32 mask, u32 bits, u8 offset);
extern void omap44xx_prm_reconfigure_io_chain(void); #if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5)
void omap44xx_prm_reconfigure_io_chain(void);
#else
static inline void omap44xx_prm_reconfigure_io_chain(void)
{
}
#endif
/* PRM interrupt-related functions */ /* PRM interrupt-related functions */
extern void omap44xx_prm_read_pending_irqs(unsigned long *events); extern void omap44xx_prm_read_pending_irqs(unsigned long *events);
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/slab.h> #include <linux/slab.h>
#include "soc.h"
#include "prm2xxx_3xxx.h" #include "prm2xxx_3xxx.h"
#include "prm2xxx.h" #include "prm2xxx.h"
#include "prm3xxx.h" #include "prm3xxx.h"
...@@ -322,6 +323,16 @@ int omap_prcm_register_chain_handler(struct omap_prcm_irq_setup *irq_setup) ...@@ -322,6 +323,16 @@ int omap_prcm_register_chain_handler(struct omap_prcm_irq_setup *irq_setup)
prcm_irq_chips[i] = gc; prcm_irq_chips[i] = gc;
} }
if (of_have_populated_dt()) {
int irq = omap_prcm_event_to_irq("io");
if (cpu_is_omap34xx())
omap_pcs_legacy_init(irq,
omap3xxx_prm_reconfigure_io_chain);
else
omap_pcs_legacy_init(irq,
omap44xx_prm_reconfigure_io_chain);
}
return 0; return 0;
err: err:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment