Re: [PATCH v2 2/9] wlcore: use irq_flags in pdata instead of hiding it behind a quirk
On Tue, 2013-07-02 at 18:26 +0300, Felipe Balbi wrote: > Hi, > > On Tue, Jul 02, 2013 at 05:55:41PM +0300, Luciano Coelho wrote: > > The platform_quirk element in the platform data was used to change the > > way the IRQ is triggered. When set, the EDGE_IRQ quirk would change > > the irqflags used and treat edge trigger differently from the rest. > > > > Instead of hiding this irq flag setting behind the quirk, export the > > whole irq_flags element and let the board file define what to use. > > This will be more meaningful than driver-specific quirks when we > > switch to DT. > > > > Cc: Tony Lindgren > > Cc: Sekhar Nori > > Signed-off-by: Luciano Coelho > > Acked-by: Tony Lindgren > > --- > > arch/arm/mach-davinci/board-da850-evm.c |2 +- > > arch/arm/mach-omap2/board-4430sdp.c |1 + > > arch/arm/mach-omap2/board-omap3evm.c |1 + > > arch/arm/mach-omap2/board-omap4panda.c |1 + > > arch/arm/mach-omap2/board-zoom-peripherals.c |1 + > > drivers/net/wireless/ti/wlcore/debugfs.c |2 +- > > drivers/net/wireless/ti/wlcore/main.c| 13 +++-- > > drivers/net/wireless/ti/wlcore/wlcore.h |5 ++--- > > include/linux/wl12xx.h |5 + > > 9 files changed, 12 insertions(+), 19 deletions(-) > > > > diff --git a/arch/arm/mach-davinci/board-da850-evm.c > > b/arch/arm/mach-davinci/board-da850-evm.c > > index 8a24b6c..d2a2a98 100644 > > --- a/arch/arm/mach-davinci/board-da850-evm.c > > +++ b/arch/arm/mach-davinci/board-da850-evm.c > > @@ -1377,8 +1377,8 @@ static const short da850_wl12xx_pins[] __initconst = { > > > > static struct wl12xx_platform_data da850_wl12xx_wlan_data __initdata = { > > .irq= -1, > > + .irq_flags = IRQF_TRIGGER_RISING, > > .board_ref_clock= WL12XX_REFCLOCK_38, > > - .platform_quirks= WL12XX_PLATFORM_QUIRK_EDGE_IRQ, > > }; > > > > static __init int da850_wl12xx_init(void) > > diff --git a/arch/arm/mach-omap2/board-4430sdp.c > > b/arch/arm/mach-omap2/board-4430sdp.c > > index 56a9a4f..c2334aa 100644 > > --- a/arch/arm/mach-omap2/board-4430sdp.c > > +++ b/arch/arm/mach-omap2/board-4430sdp.c > > @@ -693,6 +693,7 @@ static void __init omap4_sdp4430_wifi_mux_init(void) > > } > > > > static struct wl12xx_platform_data omap4_sdp4430_wlan_data __initdata = { > > + .irq_flags = IRQF_TRIGGER_HIGH | IRQF_ONESHOT, > > couldn't you just call irq_set_irq_type() from the board-file itself ? > Then on your driver you can just pass IRQF_ONESHOT (to make sure heh) to > your request_threaded_irq_handler() Good point. This is an oldish patch from the time I still thought I'd have to pass the flags in the device tree. It turned out that I don't need it anymore, so this can be totally removed from pdata and be set by the board file itself. As you saw in a later patch, I do make sure the driver sets IRQF_ONESHOT. ;) -- Cheers, Luca. -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 2/9] wlcore: use irq_flags in pdata instead of hiding it behind a quirk
Hi, On Tue, Jul 02, 2013 at 05:55:41PM +0300, Luciano Coelho wrote: > The platform_quirk element in the platform data was used to change the > way the IRQ is triggered. When set, the EDGE_IRQ quirk would change > the irqflags used and treat edge trigger differently from the rest. > > Instead of hiding this irq flag setting behind the quirk, export the > whole irq_flags element and let the board file define what to use. > This will be more meaningful than driver-specific quirks when we > switch to DT. > > Cc: Tony Lindgren > Cc: Sekhar Nori > Signed-off-by: Luciano Coelho > Acked-by: Tony Lindgren > --- > arch/arm/mach-davinci/board-da850-evm.c |2 +- > arch/arm/mach-omap2/board-4430sdp.c |1 + > arch/arm/mach-omap2/board-omap3evm.c |1 + > arch/arm/mach-omap2/board-omap4panda.c |1 + > arch/arm/mach-omap2/board-zoom-peripherals.c |1 + > drivers/net/wireless/ti/wlcore/debugfs.c |2 +- > drivers/net/wireless/ti/wlcore/main.c| 13 +++-- > drivers/net/wireless/ti/wlcore/wlcore.h |5 ++--- > include/linux/wl12xx.h |5 + > 9 files changed, 12 insertions(+), 19 deletions(-) > > diff --git a/arch/arm/mach-davinci/board-da850-evm.c > b/arch/arm/mach-davinci/board-da850-evm.c > index 8a24b6c..d2a2a98 100644 > --- a/arch/arm/mach-davinci/board-da850-evm.c > +++ b/arch/arm/mach-davinci/board-da850-evm.c > @@ -1377,8 +1377,8 @@ static const short da850_wl12xx_pins[] __initconst = { > > static struct wl12xx_platform_data da850_wl12xx_wlan_data __initdata = { > .irq= -1, > + .irq_flags = IRQF_TRIGGER_RISING, > .board_ref_clock= WL12XX_REFCLOCK_38, > - .platform_quirks= WL12XX_PLATFORM_QUIRK_EDGE_IRQ, > }; > > static __init int da850_wl12xx_init(void) > diff --git a/arch/arm/mach-omap2/board-4430sdp.c > b/arch/arm/mach-omap2/board-4430sdp.c > index 56a9a4f..c2334aa 100644 > --- a/arch/arm/mach-omap2/board-4430sdp.c > +++ b/arch/arm/mach-omap2/board-4430sdp.c > @@ -693,6 +693,7 @@ static void __init omap4_sdp4430_wifi_mux_init(void) > } > > static struct wl12xx_platform_data omap4_sdp4430_wlan_data __initdata = { > + .irq_flags = IRQF_TRIGGER_HIGH | IRQF_ONESHOT, couldn't you just call irq_set_irq_type() from the board-file itself ? Then on your driver you can just pass IRQF_ONESHOT (to make sure heh) to your request_threaded_irq_handler() -- balbi signature.asc Description: Digital signature
[PATCH v2 2/9] wlcore: use irq_flags in pdata instead of hiding it behind a quirk
The platform_quirk element in the platform data was used to change the way the IRQ is triggered. When set, the EDGE_IRQ quirk would change the irqflags used and treat edge trigger differently from the rest. Instead of hiding this irq flag setting behind the quirk, export the whole irq_flags element and let the board file define what to use. This will be more meaningful than driver-specific quirks when we switch to DT. Cc: Tony Lindgren Cc: Sekhar Nori Signed-off-by: Luciano Coelho Acked-by: Tony Lindgren --- arch/arm/mach-davinci/board-da850-evm.c |2 +- arch/arm/mach-omap2/board-4430sdp.c |1 + arch/arm/mach-omap2/board-omap3evm.c |1 + arch/arm/mach-omap2/board-omap4panda.c |1 + arch/arm/mach-omap2/board-zoom-peripherals.c |1 + drivers/net/wireless/ti/wlcore/debugfs.c |2 +- drivers/net/wireless/ti/wlcore/main.c| 13 +++-- drivers/net/wireless/ti/wlcore/wlcore.h |5 ++--- include/linux/wl12xx.h |5 + 9 files changed, 12 insertions(+), 19 deletions(-) diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c index 8a24b6c..d2a2a98 100644 --- a/arch/arm/mach-davinci/board-da850-evm.c +++ b/arch/arm/mach-davinci/board-da850-evm.c @@ -1377,8 +1377,8 @@ static const short da850_wl12xx_pins[] __initconst = { static struct wl12xx_platform_data da850_wl12xx_wlan_data __initdata = { .irq= -1, + .irq_flags = IRQF_TRIGGER_RISING, .board_ref_clock= WL12XX_REFCLOCK_38, - .platform_quirks= WL12XX_PLATFORM_QUIRK_EDGE_IRQ, }; static __init int da850_wl12xx_init(void) diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c index 56a9a4f..c2334aa 100644 --- a/arch/arm/mach-omap2/board-4430sdp.c +++ b/arch/arm/mach-omap2/board-4430sdp.c @@ -693,6 +693,7 @@ static void __init omap4_sdp4430_wifi_mux_init(void) } static struct wl12xx_platform_data omap4_sdp4430_wlan_data __initdata = { + .irq_flags = IRQF_TRIGGER_HIGH | IRQF_ONESHOT, .board_ref_clock = WL12XX_REFCLOCK_26, .board_tcxo_clock = WL12XX_TCXOCLOCK_26, }; diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c index f76d0de..a0c0adf 100644 --- a/arch/arm/mach-omap2/board-omap3evm.c +++ b/arch/arm/mach-omap2/board-omap3evm.c @@ -458,6 +458,7 @@ static struct platform_device omap3evm_wlan_regulator = { }; struct wl12xx_platform_data omap3evm_wlan_data __initdata = { + .irq_flags = IRQF_TRIGGER_HIGH | IRQF_ONESHOT, .board_ref_clock = WL12XX_REFCLOCK_38, /* 38.4 MHz */ }; #endif diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c index 1e2c75e..ba00862 100644 --- a/arch/arm/mach-omap2/board-omap4panda.c +++ b/arch/arm/mach-omap2/board-omap4panda.c @@ -230,6 +230,7 @@ static struct platform_device omap_vwlan_device = { }; static struct wl12xx_platform_data omap_panda_wlan_data __initdata = { + .irq_flags = IRQF_TRIGGER_HIGH | IRQF_ONESHOT, .board_ref_clock = WL12XX_REFCLOCK_38, /* 38.4 MHz */ }; diff --git a/arch/arm/mach-omap2/board-zoom-peripherals.c b/arch/arm/mach-omap2/board-zoom-peripherals.c index a90375d..ced012c 100644 --- a/arch/arm/mach-omap2/board-zoom-peripherals.c +++ b/arch/arm/mach-omap2/board-zoom-peripherals.c @@ -244,6 +244,7 @@ static struct platform_device *zoom_devices[] __initdata = { }; static struct wl12xx_platform_data omap_zoom_wlan_data __initdata = { + .irq_flags = IRQF_TRIGGER_HIGH | IRQF_ONESHOT, .board_ref_clock = WL12XX_REFCLOCK_26, /* 26 MHz */ }; diff --git a/drivers/net/wireless/ti/wlcore/debugfs.c b/drivers/net/wireless/ti/wlcore/debugfs.c index c3e1f79..5eff663 100644 --- a/drivers/net/wireless/ti/wlcore/debugfs.c +++ b/drivers/net/wireless/ti/wlcore/debugfs.c @@ -486,7 +486,7 @@ static ssize_t driver_state_read(struct file *file, char __user *user_buf, DRIVER_STATE_PRINT_HEX(irq); /* TODO: ref_clock and tcxo_clock were moved to wl12xx priv */ DRIVER_STATE_PRINT_HEX(hw_pg_ver); - DRIVER_STATE_PRINT_HEX(platform_quirks); + DRIVER_STATE_PRINT_HEX(irq_flags); DRIVER_STATE_PRINT_HEX(chip.id); DRIVER_STATE_PRINT_STR(chip.fw_ver_str); DRIVER_STATE_PRINT_STR(chip.phy_fw_ver_str); diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c index b8db55c..e7294b8 100644 --- a/drivers/net/wireless/ti/wlcore/main.c +++ b/drivers/net/wireless/ti/wlcore/main.c @@ -516,7 +516,7 @@ static int wlcore_irq_locked(struct wl1271 *wl) * In case edge triggered interrupt must be used, we cannot iterate * more than once without introducing race conditions with the hardirq. */ - if (wl->platform_quirks & WL12XX_PLATFORM_QUIRK_EDGE_IRQ) + if (wl->irq_flags & IRQF_TRIGGER_RISING)