summaryrefslogtreecommitdiffstats
path: root/target/linux/omap/patches-3.12/901-wlcore-set-irq_flags-in-the-board-files.patch
diff options
context:
space:
mode:
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.patch237
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);