Index: compat-wireless-2010-06-19/drivers/net/wireless/wl12xx/wl1251_sdio.c =================================================================== --- compat-wireless-2010-06-19.orig/drivers/net/wireless/wl12xx/wl1251_sdio.c 2010-06-20 22:04:12.776553632 +0200 +++ compat-wireless-2010-06-19/drivers/net/wireless/wl12xx/wl1251_sdio.c 2010-06-20 22:06:30.375232047 +0200 @@ -131,6 +131,20 @@ static void wl1251_sdio_reset(struct wl1251 *wl) { + extern int sdio_reset_comm(struct mmc_card *card); + struct sdio_func *func = wl_to_func(wl); + int ret; + + sdio_claim_host(func); + sdio_reset_comm(func->card); + ret = sdio_enable_func(func); + if (ret) + goto release; + + sdio_set_block_size(func, 512); + +release: + sdio_release_host(func); } static void wl1251_sdio_enable_irq(struct wl1251 *wl) @@ -271,6 +285,9 @@ ret = wl1251_init_ieee80211(wl); if (ret) goto out_free_irq; + + /* we can power it down now until it's started */ + wl->set_power(0); sdio_set_drvdata(func, wl); return ret;