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);
 
 #include <linux/vmalloc.h>
 #include <linux/wl12xx.h>
 #include <linux/interrupt.h>
+#include <linux/irq.h>
 
 #include "wlcore.h"
 #include "debug.h"
         * 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 | IRQF_TRIGGER_FALLING))
                loopcount = 1;
 
        wl1271_debug(DEBUG_IRQ, "IRQ work");
        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;
        struct platform_device *pdev = wl->pdev;
        struct wlcore_platdev_data *pdev_data = dev_get_platdata(&pdev->dev);
        struct wl12xx_platform_data *pdata = pdev_data->pdata;
-       unsigned long irqflags;
+       struct resource *res;
+
        int ret;
        irq_handler_t hardirq_fn = NULL;
 
        /* adjust some runtime configuration parameters */
        wlcore_adjust_conf(wl);
 
-       wl->irq = platform_get_irq(pdev, 0);
-       wl->platform_quirks = pdata->platform_quirks;
+       res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
+       if (!res) {
+               wl1271_error("Could not get IRQ resource");
+               goto out_free_nvs;
+       }
+
+       wl->irq = res->start;
+       wl->irq_flags = res->flags & IRQF_TRIGGER_MASK;
        wl->if_ops = pdev_data->if_ops;
 
-       if (wl->platform_quirks & WL12XX_PLATFORM_QUIRK_EDGE_IRQ) {
-               irqflags = IRQF_TRIGGER_RISING;
+       if (wl->irq_flags & (IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING))
                hardirq_fn = wlcore_hardirq;
-       } else {
-               irqflags = IRQF_TRIGGER_HIGH | IRQF_ONESHOT;
-       }
+       else
+               wl->irq_flags |= IRQF_ONESHOT;
 
        ret = request_threaded_irq(wl->irq, hardirq_fn, 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;