wl12xx: set the irq polarity before loading the fw
authorYoni Divinsky <yoni.divinsky@ti.com>
Tue, 8 May 2012 11:02:12 +0000 (14:02 +0300)
committerLuciano Coelho <coelho@ti.com>
Tue, 5 Jun 2012 17:24:31 +0000 (20:24 +0300)
The polarity should be set before the firmware is loaded
since the firmware touches the same register. Access
of the firmware and driver to the same register will
cause a collision since there is no exclusion scheme.

Signed-off-by: Yoni Divinsky <yoni.divinsky@ti.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
drivers/net/wireless/ti/wl12xx/main.c

index 774a1b71e84e8e01e92f8d1ea0307f61c316da88..a5af2b1ec863e3b77b19abcb810bdc390a65dacc 100644 (file)
@@ -995,7 +995,7 @@ out:
 
 static void wl12xx_pre_upload(struct wl1271 *wl)
 {
-       u32 tmp;
+       u32 tmp, polarity;
 
        /* write firmware's last address (ie. it's length) to
         * ACX_EEPROMLESS_IND_REG */
@@ -1015,18 +1015,18 @@ static void wl12xx_pre_upload(struct wl1271 *wl)
 
        if (wl->chip.id == CHIP_ID_1283_PG20)
                wl12xx_top_reg_write(wl, SDIO_IO_DS, HCI_IO_DS_6MA);
-}
-
-static void wl12xx_enable_interrupts(struct wl1271 *wl)
-{
-       u32 polarity;
 
+       /* polarity must be set before the firmware is loaded */
        polarity = wl12xx_top_reg_read(wl, OCP_REG_POLARITY);
 
        /* We use HIGH polarity, so unset the LOW bit */
        polarity &= ~POLARITY_LOW;
        wl12xx_top_reg_write(wl, OCP_REG_POLARITY, polarity);
 
+}
+
+static void wl12xx_enable_interrupts(struct wl1271 *wl)
+{
        wlcore_write_reg(wl, REG_INTERRUPT_MASK, WL1271_ACX_ALL_EVENTS_VECTOR);
 
        wlcore_enable_interrupts(wl);