staging: brcm80211: Add dhdsdio_chip_detach in dhd_sdio.c
authorFranky Lin <frankyl@broadcom.com>
Tue, 26 Apr 2011 02:34:06 +0000 (19:34 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 26 Apr 2011 22:36:49 +0000 (15:36 -0700)
Add dhdsdio_chip_detach to replace si_detach for si/sb utils removal

Signed-off-by: Franky Lin <frankyl@broadcom.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/brcm80211/brcmfmac/dhd_sdio.c

index e2d5aa5..74d7935 100644 (file)
@@ -487,6 +487,7 @@ static int dhdsdio_chip_attach(struct dhd_bus *bus, void *regs);
 static void dhdsdio_chip_resetcore(bcmsdh_info_t *sdh, u32 corebase);
 static void dhdsdio_sdiod_drive_strength_init(struct dhd_bus *bus,
                                        u32 drivestrength);
+static void dhdsdio_chip_detach(struct dhd_bus *bus);
 
 static void dhd_dongle_setmemsize(struct dhd_bus *bus, int mem_size)
 {
@@ -5484,10 +5485,8 @@ static void dhdsdio_release(dhd_bus_t *bus)
                bcmsdh_intr_dereg(bus->sdh);
 
                if (bus->dhd) {
-
-                       dhdsdio_release_dongle(bus);
-
                        dhd_detach(bus->dhd);
+                       dhdsdio_release_dongle(bus);
                        bus->dhd = NULL;
                }
 
@@ -5530,6 +5529,7 @@ static void dhdsdio_release_dongle(dhd_bus_t *bus)
 #endif                         /* !defined(BCMLXSDMMC) */
                dhdsdio_clkctl(bus, CLK_NONE, false);
                si_detach(bus->sih);
+               dhdsdio_chip_detach(bus);
                if (bus->vars && bus->varsz)
                        kfree(bus->vars);
                bus->vars = NULL;
@@ -6426,3 +6426,12 @@ dhdsdio_sdiod_drive_strength_init(struct dhd_bus *bus, u32 drivestrength) {
                        drivestrength, cc_data_temp));
        }
 }
+
+static void
+dhdsdio_chip_detach(struct dhd_bus *bus)
+{
+       DHD_TRACE(("%s: Enter\n", __func__));
+
+       kfree(bus->ci);
+       bus->ci = NULL;
+}