aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c')
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c b/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c
index 002157f0ce29..10befbfa7e1f 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c
@@ -252,17 +252,25 @@ brcmf_sdio_chip_buscoresetup(struct brcmf_sdio_dev *sdiodev,
252} 252}
253 253
254int brcmf_sdio_chip_attach(struct brcmf_sdio_dev *sdiodev, 254int brcmf_sdio_chip_attach(struct brcmf_sdio_dev *sdiodev,
255 struct chip_info *ci, u32 regs) 255 struct chip_info **ci_ptr, u32 regs)
256{ 256{
257 int ret = 0; 257 int ret;
258 struct chip_info *ci;
259
260 brcmf_dbg(TRACE, "Enter\n");
261
262 /* alloc chip_info_t */
263 ci = kzalloc(sizeof(struct chip_info), GFP_ATOMIC);
264 if (!ci)
265 return -ENOMEM;
258 266
259 ret = brcmf_sdio_chip_buscoreprep(sdiodev); 267 ret = brcmf_sdio_chip_buscoreprep(sdiodev);
260 if (ret != 0) 268 if (ret != 0)
261 return ret; 269 goto err;
262 270
263 ret = brcmf_sdio_chip_recognition(sdiodev, ci, regs); 271 ret = brcmf_sdio_chip_recognition(sdiodev, ci, regs);
264 if (ret != 0) 272 if (ret != 0)
265 return ret; 273 goto err;
266 274
267 brcmf_sdio_chip_buscoresetup(sdiodev, ci); 275 brcmf_sdio_chip_buscoresetup(sdiodev, ci);
268 276
@@ -271,5 +279,10 @@ int brcmf_sdio_chip_attach(struct brcmf_sdio_dev *sdiodev,
271 brcmf_sdcard_reg_write(sdiodev, 279 brcmf_sdcard_reg_write(sdiodev,
272 CORE_CC_REG(ci->cccorebase, gpiopulldown), 4, 0); 280 CORE_CC_REG(ci->cccorebase, gpiopulldown), 4, 0);
273 281
282 *ci_ptr = ci;
283 return 0;
284
285err:
286 kfree(ci);
274 return ret; 287 return ret;
275} 288}