diff options
Diffstat (limited to 'target/linux/omap/patches-3.12/901-wlcore-set-irq_flags-in-the-board-files.patch')
-rw-r--r-- | target/linux/omap/patches-3.12/901-wlcore-set-irq_flags-in-the-board-files.patch | 237 |
1 files changed, 0 insertions, 237 deletions
diff --git a/target/linux/omap/patches-3.12/901-wlcore-set-irq_flags-in-the-board-files.patch b/target/linux/omap/patches-3.12/901-wlcore-set-irq_flags-in-the-board-files.patch deleted file mode 100644 index f090735c65..0000000000 --- a/target/linux/omap/patches-3.12/901-wlcore-set-irq_flags-in-the-board-files.patch +++ /dev/null @@ -1,237 +0,0 @@ -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, have the -board files set the flags during initialization. This will be more -meaningful than driver-specific quirks when we switch to DT. - -Additionally, fix missing gpio_request() calls in the boarding files -(so that setting the flags actually works). - -Cc: Tony Lindgren <tony@atomide.com> -Cc: Sekhar Nori <nsekhar@ti.com> -Signed-off-by: Luciano Coelho <coelho@ti.com> -Reviewed-by: Felipe Balbi <balbi@ti.com> -Acked-by: Sekhar Nori <nsekhar@ti.com> - ---- - arch/arm/mach-davinci/board-da850-evm.c | 8 +++++++- - arch/arm/mach-omap2/board-omap3evm.c | 19 ++++++++++++++++++ - arch/arm/mach-omap2/board-zoom-peripherals.c | 30 +++++++++++++++++++++++++--- - drivers/net/wireless/ti/wlcore/debugfs.c | 2 +- - drivers/net/wireless/ti/wlcore/main.c | 17 ++++++++-------- - drivers/net/wireless/ti/wlcore/wlcore.h | 5 ++--- - include/linux/wl12xx.h | 4 ---- - 7 files changed, 64 insertions(+), 21 deletions(-) - ---- a/arch/arm/mach-davinci/board-da850-evm.c -+++ b/arch/arm/mach-davinci/board-da850-evm.c -@@ -1371,7 +1371,6 @@ static const short da850_wl12xx_pins[] _ - static struct wl12xx_platform_data da850_wl12xx_wlan_data __initdata = { - .irq = -1, - .board_ref_clock = WL12XX_REFCLOCK_38, -- .platform_quirks = WL12XX_PLATFORM_QUIRK_EDGE_IRQ, - }; - - static __init int da850_wl12xx_init(void) -@@ -1402,6 +1401,13 @@ static __init int da850_wl12xx_init(void - goto free_wlan_en; - } - -+ ret = irq_set_irq_type(gpio_to_irq(DA850_WLAN_IRQ), -+ IRQ_TYPE_EDGE_RISING); -+ if (ret) { -+ pr_err("Could not set wl12xx irq type: %d\n", ret); -+ goto free; -+ } -+ - da850_wl12xx_wlan_data.irq = gpio_to_irq(DA850_WLAN_IRQ); - - ret = wl12xx_set_platform_data(&da850_wl12xx_wlan_data); ---- a/arch/arm/mach-omap2/board-omap3evm.c -+++ b/arch/arm/mach-omap2/board-omap3evm.c -@@ -627,12 +627,31 @@ static void __init omap3_evm_wl12xx_init - - /* WL12xx WLAN Init */ - omap3evm_wlan_data.irq = gpio_to_irq(OMAP3EVM_WLAN_IRQ_GPIO); -+ -+ ret = gpio_request_one(OMAP3EVM_WLAN_IRQ_GPIO, GPIOF_IN, -+ "OMAP3EVM_WLAN_IRQ_GPIO"); -+ if (ret) { -+ pr_err("error requesting wl12xx gpio: %d\n", ret); -+ goto out; -+ } -+ -+ ret = irq_set_irq_type(gpio_to_irq(OMAP3EVM_WLAN_IRQ_GPIO), -+ IRQ_TYPE_LEVEL_HIGH); -+ if (ret) { -+ pr_err("error setting wl12xx irq type: %d\n", ret); -+ goto free; -+ } -+ - ret = wl12xx_set_platform_data(&omap3evm_wlan_data); - if (ret) - pr_err("error setting wl12xx data: %d\n", ret); - ret = platform_device_register(&omap3evm_wlan_regulator); - if (ret) - pr_err("error registering wl12xx device: %d\n", ret); -+out: -+ return; -+free: -+ gpio_free(OMAP3EVM_WLAN_IRQ_GPIO); - #endif - } - ---- a/arch/arm/mach-omap2/board-zoom-peripherals.c -+++ b/arch/arm/mach-omap2/board-zoom-peripherals.c -@@ -339,16 +339,40 @@ static void enable_board_wakeup_source(v - OMAP_WAKEUP_EN | OMAP_PIN_INPUT_PULLUP); - } - --void __init zoom_peripherals_init(void) -+static void __init zoom_wilink_init(void) - { - int ret; - - omap_zoom_wlan_data.irq = gpio_to_irq(OMAP_ZOOM_WLAN_IRQ_GPIO); -- ret = wl12xx_set_platform_data(&omap_zoom_wlan_data); - -- if (ret) -+ ret = gpio_request_one(OMAP_ZOOM_WLAN_IRQ_GPIO, GPIOF_IN, -+ "OMAP_ZOOM_WLAN_IRQ_GPIO"); -+ if (ret) { -+ pr_err("error requesting wl12xx gpio: %d\n", ret); -+ goto out; -+ } -+ -+ ret = irq_set_irq_type(gpio_to_irq(OMAP_ZOOM_WLAN_IRQ_GPIO), -+ IRQ_TYPE_LEVEL_HIGH); -+ if (ret) { -+ pr_err("error setting wl12xx irq type: %d\n", ret); -+ goto free; -+ } -+ -+ ret = wl12xx_set_platform_data(&omap_zoom_wlan_data); -+ if (ret) { - pr_err("error setting wl12xx data: %d\n", ret); -+ goto free; -+ } -+out: -+ return; -+free: -+ gpio_free(OMAP_ZOOM_WLAN_IRQ_GPIO); -+} - -+void __init zoom_peripherals_init(void) -+{ -+ zoom_wilink_init(); - omap_hsmmc_init(mmc); - omap_i2c_init(); - pwm_add_table(zoom_pwm_lookup, ARRAY_SIZE(zoom_pwm_lookup)); ---- 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 - 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); ---- a/drivers/net/wireless/ti/wlcore/main.c -+++ b/drivers/net/wireless/ti/wlcore/main.c -@@ -27,6 +27,7 @@ - #include <linux/vmalloc.h> - #include <linux/wl12xx.h> - #include <linux/interrupt.h> -+#include <linux/irq.h> - - #include "wlcore.h" - #include "debug.h" -@@ -516,7 +517,7 @@ static int wlcore_irq_locked(struct wl12 - * 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) - loopcount = 1; - - wl1271_debug(DEBUG_IRQ, "IRQ work"); -@@ -5766,7 +5767,6 @@ struct ieee80211_hw *wlcore_alloc_hw(siz - wl->ap_ps_map = 0; - wl->ap_fw_ps_map = 0; - wl->quirks = 0; -- wl->platform_quirks = 0; - wl->system_hlid = WL12XX_SYSTEM_HLID; - wl->active_sta_count = 0; - wl->active_link_count = 0; -@@ -5902,7 +5902,7 @@ static void wlcore_nvs_cb(const struct f - struct platform_device *pdev = wl->pdev; - struct wlcore_platdev_data *pdev_data = pdev->dev.platform_data; - struct wl12xx_platform_data *pdata = pdev_data->pdata; -- unsigned long irqflags; -+ - int ret; - - if (fw) { -@@ -5929,16 +5929,15 @@ static void wlcore_nvs_cb(const struct f - wlcore_adjust_conf(wl); - - wl->irq = platform_get_irq(pdev, 0); -- wl->platform_quirks = pdata->platform_quirks; - wl->if_ops = pdev_data->if_ops; - -- if (wl->platform_quirks & WL12XX_PLATFORM_QUIRK_EDGE_IRQ) -- irqflags = IRQF_TRIGGER_RISING; -- else -- irqflags = IRQF_TRIGGER_HIGH | IRQF_ONESHOT; -+ wl->irq_flags = irq_get_trigger_type(wl->irq); -+ -+ /* Since we don't use the primary handler, we must set ONESHOT */ -+ wl->irq_flags |= IRQF_ONESHOT; - - ret = request_threaded_irq(wl->irq, NULL, wlcore_irq, -- irqflags, pdev->name, wl); -+ wl->irq_flags, pdev->name, wl); - if (ret < 0) { - wl1271_error("request_irq() failed: %d", ret); - goto out_free_nvs; ---- a/drivers/net/wireless/ti/wlcore/wlcore.h -+++ b/drivers/net/wireless/ti/wlcore/wlcore.h -@@ -185,6 +185,8 @@ struct wl1271 { - - int irq; - -+ int irq_flags; -+ - spinlock_t wl_lock; - - enum wlcore_state state; -@@ -384,9 +386,6 @@ struct wl1271 { - /* Quirks of specific hardware revisions */ - unsigned int quirks; - -- /* Platform limitations */ -- unsigned int platform_quirks; -- - /* number of currently active RX BA sessions */ - int ba_rx_session_count; - ---- a/include/linux/wl12xx.h -+++ b/include/linux/wl12xx.h -@@ -59,13 +59,9 @@ struct wl12xx_platform_data { - int irq; - int board_ref_clock; - int board_tcxo_clock; -- unsigned long platform_quirks; - bool pwr_in_suspend; - }; - --/* Platform does not support level trigger interrupts */ --#define WL12XX_PLATFORM_QUIRK_EDGE_IRQ BIT(0) -- - #ifdef CONFIG_WILINK_PLATFORM_DATA - - int wl12xx_set_platform_data(const struct wl12xx_platform_data *data); |