diff options
author | Franky Lin <frankyl@broadcom.com> | 2011-11-10 14:30:22 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-11-11 14:28:34 -0500 |
commit | 523894f2672b9832da9f9fcce3043f1720ca42f4 (patch) | |
tree | 69e092a0e62d714d9f9bcd7a458dd9afe5ee25eb /drivers/net/wireless | |
parent | 6ca687d9461b25ce2339ba1809ec13ef459d4661 (diff) |
brcm80211: fmac: add corerev function for bcm4330 chip
This patch is part of the series adding new backplane support
Reviewed-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Franky Lin <frankyl@broadcom.com>
Signed-off-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c | 31 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.h | 3 |
2 files changed, 28 insertions, 6 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c b/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c index 263ad0cb6223..85b665eb238c 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c | |||
@@ -49,6 +49,10 @@ | |||
49 | #define SOCI_SB 0 | 49 | #define SOCI_SB 0 |
50 | #define SOCI_AI 1 | 50 | #define SOCI_AI 1 |
51 | 51 | ||
52 | /* EROM CompIdentB */ | ||
53 | #define CIB_REV_MASK 0xff000000 | ||
54 | #define CIB_REV_SHIFT 24 | ||
55 | |||
52 | #define SDIOD_DRVSTR_KEY(chip, pmu) (((chip) << 16) | (pmu)) | 56 | #define SDIOD_DRVSTR_KEY(chip, pmu) (((chip) << 16) | (pmu)) |
53 | /* SDIO Pad drive strength to select value mappings */ | 57 | /* SDIO Pad drive strength to select value mappings */ |
54 | struct sdiod_drive_str { | 58 | struct sdiod_drive_str { |
@@ -100,16 +104,30 @@ brcmf_sdio_chip_getinfidx(struct chip_info *ci, u16 coreid) | |||
100 | } | 104 | } |
101 | 105 | ||
102 | static u32 | 106 | static u32 |
103 | brcmf_sdio_chip_corerev(struct brcmf_sdio_dev *sdiodev, | 107 | brcmf_sdio_sb_corerev(struct brcmf_sdio_dev *sdiodev, |
104 | u32 corebase) | 108 | struct chip_info *ci, u16 coreid) |
105 | { | 109 | { |
106 | u32 regdata; | 110 | u32 regdata; |
111 | u8 idx; | ||
112 | |||
113 | idx = brcmf_sdio_chip_getinfidx(ci, coreid); | ||
107 | 114 | ||
108 | regdata = brcmf_sdcard_reg_read(sdiodev, | 115 | regdata = brcmf_sdcard_reg_read(sdiodev, |
109 | CORE_SB(corebase, sbidhigh), 4); | 116 | CORE_SB(ci->c_inf[idx].base, sbidhigh), 4); |
110 | return SBCOREREV(regdata); | 117 | return SBCOREREV(regdata); |
111 | } | 118 | } |
112 | 119 | ||
120 | static u32 | ||
121 | brcmf_sdio_ai_corerev(struct brcmf_sdio_dev *sdiodev, | ||
122 | struct chip_info *ci, u16 coreid) | ||
123 | { | ||
124 | u8 idx; | ||
125 | |||
126 | idx = brcmf_sdio_chip_getinfidx(ci, coreid); | ||
127 | |||
128 | return (ci->c_inf[idx].cib & CIB_REV_MASK) >> CIB_REV_SHIFT; | ||
129 | } | ||
130 | |||
113 | static bool | 131 | static bool |
114 | brcmf_sdio_sb_iscoreup(struct brcmf_sdio_dev *sdiodev, | 132 | brcmf_sdio_sb_iscoreup(struct brcmf_sdio_dev *sdiodev, |
115 | struct chip_info *ci, u16 coreid) | 133 | struct chip_info *ci, u16 coreid) |
@@ -310,9 +328,11 @@ static int brcmf_sdio_chip_recognition(struct brcmf_sdio_dev *sdiodev, | |||
310 | switch (ci->socitype) { | 328 | switch (ci->socitype) { |
311 | case SOCI_SB: | 329 | case SOCI_SB: |
312 | ci->iscoreup = brcmf_sdio_sb_iscoreup; | 330 | ci->iscoreup = brcmf_sdio_sb_iscoreup; |
331 | ci->corerev = brcmf_sdio_sb_corerev; | ||
313 | break; | 332 | break; |
314 | case SOCI_AI: | 333 | case SOCI_AI: |
315 | ci->iscoreup = brcmf_sdio_ai_iscoreup; | 334 | ci->iscoreup = brcmf_sdio_ai_iscoreup; |
335 | ci->corerev = brcmf_sdio_ai_corerev; | ||
316 | break; | 336 | break; |
317 | default: | 337 | default: |
318 | brcmf_dbg(ERROR, "socitype %u not supported\n", ci->socitype); | 338 | brcmf_dbg(ERROR, "socitype %u not supported\n", ci->socitype); |
@@ -378,8 +398,7 @@ brcmf_sdio_chip_buscoresetup(struct brcmf_sdio_dev *sdiodev, | |||
378 | u8 idx; | 398 | u8 idx; |
379 | 399 | ||
380 | /* get chipcommon rev */ | 400 | /* get chipcommon rev */ |
381 | ci->c_inf[0].rev = | 401 | ci->c_inf[0].rev = ci->corerev(sdiodev, ci, ci->c_inf[0].id); |
382 | brcmf_sdio_chip_corerev(sdiodev, ci->c_inf[0].base); | ||
383 | 402 | ||
384 | /* get chipcommon capabilites */ | 403 | /* get chipcommon capabilites */ |
385 | ci->c_inf[0].caps = | 404 | ci->c_inf[0].caps = |
@@ -393,7 +412,7 @@ brcmf_sdio_chip_buscoresetup(struct brcmf_sdio_dev *sdiodev, | |||
393 | ci->pmurev = ci->pmucaps & PCAP_REV_MASK; | 412 | ci->pmurev = ci->pmucaps & PCAP_REV_MASK; |
394 | } | 413 | } |
395 | 414 | ||
396 | ci->c_inf[1].rev = brcmf_sdio_chip_corerev(sdiodev, ci->c_inf[1].base); | 415 | ci->c_inf[1].rev = ci->corerev(sdiodev, ci, ci->c_inf[1].id); |
397 | regdata = brcmf_sdcard_reg_read(sdiodev, | 416 | regdata = brcmf_sdcard_reg_read(sdiodev, |
398 | CORE_SB(ci->c_inf[1].base, sbidhigh), 4); | 417 | CORE_SB(ci->c_inf[1].base, sbidhigh), 4); |
399 | ci->c_inf[1].id = (regdata & SSB_IDHIGH_CC) >> SSB_IDHIGH_CC_SHIFT; | 418 | ci->c_inf[1].id = (regdata & SSB_IDHIGH_CC) >> SSB_IDHIGH_CC_SHIFT; |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.h b/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.h index 557c80df3f7d..ea91e60f1d44 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.h +++ b/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.h | |||
@@ -60,6 +60,7 @@ struct chip_core_info { | |||
60 | u32 base; | 60 | u32 base; |
61 | u32 wrapbase; | 61 | u32 wrapbase; |
62 | u32 caps; | 62 | u32 caps; |
63 | u32 cib; | ||
63 | }; | 64 | }; |
64 | 65 | ||
65 | struct chip_info { | 66 | struct chip_info { |
@@ -75,6 +76,8 @@ struct chip_info { | |||
75 | 76 | ||
76 | bool (*iscoreup)(struct brcmf_sdio_dev *sdiodev, struct chip_info *ci, | 77 | bool (*iscoreup)(struct brcmf_sdio_dev *sdiodev, struct chip_info *ci, |
77 | u16 coreid); | 78 | u16 coreid); |
79 | u32 (*corerev)(struct brcmf_sdio_dev *sdiodev, struct chip_info *ci, | ||
80 | u16 coreid); | ||
78 | }; | 81 | }; |
79 | 82 | ||
80 | struct sbconfig { | 83 | struct sbconfig { |