aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c31
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c21
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.h3
3 files changed, 21 insertions, 34 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c b/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c
index 5e7b70e0f4ea..868cb9deacaa 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c
@@ -3867,31 +3867,6 @@ static void brcmf_sdbrcm_sdiod_drive_strength_init(struct brcmf_bus *bus,
3867 } 3867 }
3868} 3868}
3869 3869
3870static int
3871brcmf_sdbrcm_chip_attach(struct brcmf_bus *bus, u32 regs)
3872{
3873 struct chip_info *ci;
3874 int err;
3875
3876 brcmf_dbg(TRACE, "Enter\n");
3877
3878 /* alloc chip_info_t */
3879 ci = kzalloc(sizeof(struct chip_info), GFP_ATOMIC);
3880 if (NULL == ci)
3881 return -ENOMEM;
3882
3883 err = brcmf_sdio_chip_attach(bus->sdiodev, ci, regs);
3884 if (err)
3885 goto fail;
3886
3887 bus->ci = ci;
3888 return 0;
3889fail:
3890 bus->ci = NULL;
3891 kfree(ci);
3892 return err;
3893}
3894
3895static bool 3870static bool
3896brcmf_sdbrcm_probe_attach(struct brcmf_bus *bus, u32 regsva) 3871brcmf_sdbrcm_probe_attach(struct brcmf_bus *bus, u32 regsva)
3897{ 3872{
@@ -3913,7 +3888,7 @@ brcmf_sdbrcm_probe_attach(struct brcmf_bus *bus, u32 regsva)
3913#endif /* BCMDBG */ 3888#endif /* BCMDBG */
3914 3889
3915 /* 3890 /*
3916 * Force PLL off until brcmf_sdbrcm_chip_attach() 3891 * Force PLL off until brcmf_sdio_chip_attach()
3917 * programs PLL control regs 3892 * programs PLL control regs
3918 */ 3893 */
3919 3894
@@ -3931,8 +3906,8 @@ brcmf_sdbrcm_probe_attach(struct brcmf_bus *bus, u32 regsva)
3931 goto fail; 3906 goto fail;
3932 } 3907 }
3933 3908
3934 if (brcmf_sdbrcm_chip_attach(bus, regsva)) { 3909 if (brcmf_sdio_chip_attach(bus->sdiodev, &bus->ci, regsva)) {
3935 brcmf_dbg(ERROR, "brcmf_sdbrcm_chip_attach failed!\n"); 3910 brcmf_dbg(ERROR, "brcmf_sdio_chip_attach failed!\n");
3936 goto fail; 3911 goto fail;
3937 } 3912 }
3938 3913
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}
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.h b/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.h
index 17007bdad564..25ac3857039e 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.h
+++ b/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.h
@@ -137,7 +137,6 @@ struct sbconfig {
137extern void brcmf_sdio_chip_coredisable(struct brcmf_sdio_dev *sdiodev, 137extern void brcmf_sdio_chip_coredisable(struct brcmf_sdio_dev *sdiodev,
138 u32 corebase); 138 u32 corebase);
139extern int brcmf_sdio_chip_attach(struct brcmf_sdio_dev *sdiodev, 139extern int brcmf_sdio_chip_attach(struct brcmf_sdio_dev *sdiodev,
140 struct chip_info *ci, u32 regs); 140 struct chip_info **ci_ptr, u32 regs);
141
142 141
143#endif /* _BRCMFMAC_SDIO_CHIP_H_ */ 142#endif /* _BRCMFMAC_SDIO_CHIP_H_ */