diff options
| -rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c | 38 | ||||
| -rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/sdio_host.h | 2 | ||||
| -rw-r--r-- | include/linux/bcma/bcma_driver_chipcommon.h | 3 |
3 files changed, 36 insertions, 7 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c b/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c index d24eb66d324d..c06bb083c459 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c | |||
| @@ -3635,7 +3635,6 @@ brcmf_sdbrcm_probe_attach(struct brcmf_sdio *bus, u32 regsva) | |||
| 3635 | int err = 0; | 3635 | int err = 0; |
| 3636 | int reg_addr; | 3636 | int reg_addr; |
| 3637 | u32 reg_val; | 3637 | u32 reg_val; |
| 3638 | u8 idx; | ||
| 3639 | 3638 | ||
| 3640 | bus->alp_only = true; | 3639 | bus->alp_only = true; |
| 3641 | 3640 | ||
| @@ -3686,12 +3685,37 @@ brcmf_sdbrcm_probe_attach(struct brcmf_sdio *bus, u32 regsva) | |||
| 3686 | goto fail; | 3685 | goto fail; |
| 3687 | } | 3686 | } |
| 3688 | 3687 | ||
| 3689 | /* Set core control so an SDIO reset does a backplane reset */ | 3688 | /* Set card control so an SDIO card reset does a WLAN backplane reset */ |
| 3690 | idx = brcmf_sdio_chip_getinfidx(bus->ci, BCMA_CORE_SDIO_DEV); | 3689 | reg_val = brcmf_sdio_regrb(bus->sdiodev, |
| 3691 | reg_addr = bus->ci->c_inf[idx].base + | 3690 | SDIO_CCCR_BRCM_CARDCTRL, &err); |
| 3692 | offsetof(struct sdpcmd_regs, corecontrol); | 3691 | if (err) |
| 3693 | reg_val = brcmf_sdio_regrl(bus->sdiodev, reg_addr, NULL); | 3692 | goto fail; |
| 3694 | brcmf_sdio_regwl(bus->sdiodev, reg_addr, reg_val | CC_BPRESEN, NULL); | 3693 | |
| 3694 | reg_val |= SDIO_CCCR_BRCM_CARDCTRL_WLANRESET; | ||
| 3695 | |||
| 3696 | brcmf_sdio_regwb(bus->sdiodev, | ||
| 3697 | SDIO_CCCR_BRCM_CARDCTRL, reg_val, &err); | ||
| 3698 | if (err) | ||
| 3699 | goto fail; | ||
| 3700 | |||
| 3701 | /* set PMUControl so a backplane reset does PMU state reload */ | ||
| 3702 | reg_addr = CORE_CC_REG(bus->ci->c_inf[0].base, | ||
| 3703 | pmucontrol); | ||
| 3704 | reg_val = brcmf_sdio_regrl(bus->sdiodev, | ||
| 3705 | reg_addr, | ||
| 3706 | &err); | ||
| 3707 | if (err) | ||
| 3708 | goto fail; | ||
| 3709 | |||
| 3710 | reg_val |= (BCMA_CC_PMU_CTL_RES_RELOAD << BCMA_CC_PMU_CTL_RES_SHIFT); | ||
| 3711 | |||
| 3712 | brcmf_sdio_regwl(bus->sdiodev, | ||
| 3713 | reg_addr, | ||
| 3714 | reg_val, | ||
| 3715 | &err); | ||
| 3716 | if (err) | ||
| 3717 | goto fail; | ||
| 3718 | |||
| 3695 | 3719 | ||
| 3696 | sdio_release_host(bus->sdiodev->func[1]); | 3720 | sdio_release_host(bus->sdiodev->func[1]); |
| 3697 | 3721 | ||
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/sdio_host.h b/drivers/net/wireless/brcm80211/brcmfmac/sdio_host.h index b9b397b59965..28ed3cc9f35a 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/sdio_host.h +++ b/drivers/net/wireless/brcm80211/brcmfmac/sdio_host.h | |||
| @@ -52,6 +52,8 @@ | |||
| 52 | #define SDIO_CCCR_BRCM_CARDCAP_CMD14_SUPPORT 0x02 | 52 | #define SDIO_CCCR_BRCM_CARDCAP_CMD14_SUPPORT 0x02 |
| 53 | #define SDIO_CCCR_BRCM_CARDCAP_CMD14_EXT 0x04 | 53 | #define SDIO_CCCR_BRCM_CARDCAP_CMD14_EXT 0x04 |
| 54 | #define SDIO_CCCR_BRCM_CARDCAP_CMD_NODEC 0x08 | 54 | #define SDIO_CCCR_BRCM_CARDCAP_CMD_NODEC 0x08 |
| 55 | #define SDIO_CCCR_BRCM_CARDCTRL 0xf1 | ||
| 56 | #define SDIO_CCCR_BRCM_CARDCTRL_WLANRESET 0x02 | ||
| 55 | #define SDIO_CCCR_BRCM_SEPINT 0xf2 | 57 | #define SDIO_CCCR_BRCM_SEPINT 0xf2 |
| 56 | 58 | ||
| 57 | #define SDIO_SEPINT_MASK 0x01 | 59 | #define SDIO_SEPINT_MASK 0x01 |
diff --git a/include/linux/bcma/bcma_driver_chipcommon.h b/include/linux/bcma/bcma_driver_chipcommon.h index 453fcc914683..b8b09eac60a4 100644 --- a/include/linux/bcma/bcma_driver_chipcommon.h +++ b/include/linux/bcma/bcma_driver_chipcommon.h | |||
| @@ -316,6 +316,9 @@ | |||
| 316 | #define BCMA_CC_PMU_CTL 0x0600 /* PMU control */ | 316 | #define BCMA_CC_PMU_CTL 0x0600 /* PMU control */ |
| 317 | #define BCMA_CC_PMU_CTL_ILP_DIV 0xFFFF0000 /* ILP div mask */ | 317 | #define BCMA_CC_PMU_CTL_ILP_DIV 0xFFFF0000 /* ILP div mask */ |
| 318 | #define BCMA_CC_PMU_CTL_ILP_DIV_SHIFT 16 | 318 | #define BCMA_CC_PMU_CTL_ILP_DIV_SHIFT 16 |
| 319 | #define BCMA_CC_PMU_CTL_RES 0x00006000 /* reset control mask */ | ||
| 320 | #define BCMA_CC_PMU_CTL_RES_SHIFT 13 | ||
| 321 | #define BCMA_CC_PMU_CTL_RES_RELOAD 0x2 /* reload POR values */ | ||
| 319 | #define BCMA_CC_PMU_CTL_PLL_UPD 0x00000400 | 322 | #define BCMA_CC_PMU_CTL_PLL_UPD 0x00000400 |
| 320 | #define BCMA_CC_PMU_CTL_NOILPONW 0x00000200 /* No ILP on wait */ | 323 | #define BCMA_CC_PMU_CTL_NOILPONW 0x00000200 /* No ILP on wait */ |
| 321 | #define BCMA_CC_PMU_CTL_HTREQEN 0x00000100 /* HT req enable */ | 324 | #define BCMA_CC_PMU_CTL_HTREQEN 0x00000100 /* HT req enable */ |
