diff options
4 files changed, 48 insertions, 98 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c index fc5c628e76a5..f6bb148c5ad3 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c | |||
@@ -87,15 +87,13 @@ int brcmf_sdio_intr_register(struct brcmf_sdio_dev *sdiodev) | |||
87 | /* must configure SDIO_CCCR_IENx to enable irq */ | 87 | /* must configure SDIO_CCCR_IENx to enable irq */ |
88 | data = brcmf_sdio_regrb(sdiodev, SDIO_CCCR_IENx, &ret); | 88 | data = brcmf_sdio_regrb(sdiodev, SDIO_CCCR_IENx, &ret); |
89 | data |= 1 << SDIO_FUNC_1 | 1 << SDIO_FUNC_2 | 1; | 89 | data |= 1 << SDIO_FUNC_1 | 1 << SDIO_FUNC_2 | 1; |
90 | brcmf_sdcard_cfg_write(sdiodev, SDIO_FUNC_0, SDIO_CCCR_IENx, | 90 | brcmf_sdio_regwb(sdiodev, SDIO_CCCR_IENx, data, &ret); |
91 | data, &ret); | ||
92 | 91 | ||
93 | /* redirect, configure ane enable io for interrupt signal */ | 92 | /* redirect, configure ane enable io for interrupt signal */ |
94 | data = SDIO_SEPINT_MASK | SDIO_SEPINT_OE; | 93 | data = SDIO_SEPINT_MASK | SDIO_SEPINT_OE; |
95 | if (sdiodev->irq_flags | IRQF_TRIGGER_HIGH) | 94 | if (sdiodev->irq_flags | IRQF_TRIGGER_HIGH) |
96 | data |= SDIO_SEPINT_ACT_HI; | 95 | data |= SDIO_SEPINT_ACT_HI; |
97 | brcmf_sdcard_cfg_write(sdiodev, SDIO_FUNC_0, SDIO_CCCR_BRCM_SEPINT, | 96 | brcmf_sdio_regwb(sdiodev, SDIO_CCCR_BRCM_SEPINT, data, &ret); |
98 | data, &ret); | ||
99 | 97 | ||
100 | return 0; | 98 | return 0; |
101 | } | 99 | } |
@@ -104,9 +102,8 @@ int brcmf_sdio_intr_unregister(struct brcmf_sdio_dev *sdiodev) | |||
104 | { | 102 | { |
105 | brcmf_dbg(TRACE, "Entering\n"); | 103 | brcmf_dbg(TRACE, "Entering\n"); |
106 | 104 | ||
107 | brcmf_sdcard_cfg_write(sdiodev, SDIO_FUNC_0, SDIO_CCCR_BRCM_SEPINT, | 105 | brcmf_sdio_regwb(sdiodev, SDIO_CCCR_BRCM_SEPINT, 0, NULL); |
108 | 0, NULL); | 106 | brcmf_sdio_regwb(sdiodev, SDIO_CCCR_IENx, 0, NULL); |
109 | brcmf_sdcard_cfg_write(sdiodev, SDIO_FUNC_0, SDIO_CCCR_IENx, 0, NULL); | ||
110 | 107 | ||
111 | if (sdiodev->irq_wake) { | 108 | if (sdiodev->irq_wake) { |
112 | disable_irq_wake(sdiodev->irq); | 109 | disable_irq_wake(sdiodev->irq); |
@@ -157,27 +154,6 @@ int brcmf_sdio_intr_unregister(struct brcmf_sdio_dev *sdiodev) | |||
157 | } | 154 | } |
158 | #endif /* CONFIG_BRCMFMAC_SDIO_OOB */ | 155 | #endif /* CONFIG_BRCMFMAC_SDIO_OOB */ |
159 | 156 | ||
160 | void | ||
161 | brcmf_sdcard_cfg_write(struct brcmf_sdio_dev *sdiodev, uint fnc_num, u32 addr, | ||
162 | u8 data, int *err) | ||
163 | { | ||
164 | int status; | ||
165 | s32 retry = 0; | ||
166 | |||
167 | do { | ||
168 | if (retry) /* wait for 1 ms till bus get settled down */ | ||
169 | udelay(1000); | ||
170 | status = brcmf_sdioh_request_byte(sdiodev, SDIOH_WRITE, fnc_num, | ||
171 | addr, (u8 *) &data); | ||
172 | } while (status != 0 | ||
173 | && (retry++ < SDIOH_API_ACCESS_RETRY_LIMIT)); | ||
174 | if (err) | ||
175 | *err = status; | ||
176 | |||
177 | brcmf_dbg(INFO, "fun = %d, addr = 0x%x, u8data = 0x%x\n", | ||
178 | fnc_num, addr, data); | ||
179 | } | ||
180 | |||
181 | int | 157 | int |
182 | brcmf_sdcard_set_sbaddr_window(struct brcmf_sdio_dev *sdiodev, u32 address) | 158 | brcmf_sdcard_set_sbaddr_window(struct brcmf_sdio_dev *sdiodev, u32 address) |
183 | { | 159 | { |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c b/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c index 85f277c2efab..1e35a3de9595 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c | |||
@@ -696,8 +696,8 @@ static int brcmf_sdbrcm_htclk(struct brcmf_sdio *bus, bool on, bool pendok) | |||
696 | clkreq = | 696 | clkreq = |
697 | bus->alp_only ? SBSDIO_ALP_AVAIL_REQ : SBSDIO_HT_AVAIL_REQ; | 697 | bus->alp_only ? SBSDIO_ALP_AVAIL_REQ : SBSDIO_HT_AVAIL_REQ; |
698 | 698 | ||
699 | brcmf_sdcard_cfg_write(bus->sdiodev, SDIO_FUNC_1, | 699 | brcmf_sdio_regwb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, |
700 | SBSDIO_FUNC1_CHIPCLKCSR, clkreq, &err); | 700 | clkreq, &err); |
701 | if (err) { | 701 | if (err) { |
702 | brcmf_dbg(ERROR, "HT Avail request error: %d\n", err); | 702 | brcmf_dbg(ERROR, "HT Avail request error: %d\n", err); |
703 | return -EBADE; | 703 | return -EBADE; |
@@ -723,8 +723,8 @@ static int brcmf_sdbrcm_htclk(struct brcmf_sdio *bus, bool on, bool pendok) | |||
723 | } | 723 | } |
724 | 724 | ||
725 | devctl |= SBSDIO_DEVCTL_CA_INT_ONLY; | 725 | devctl |= SBSDIO_DEVCTL_CA_INT_ONLY; |
726 | brcmf_sdcard_cfg_write(bus->sdiodev, SDIO_FUNC_1, | 726 | brcmf_sdio_regwb(bus->sdiodev, SBSDIO_DEVICE_CTL, |
727 | SBSDIO_DEVICE_CTL, devctl, &err); | 727 | devctl, &err); |
728 | brcmf_dbg(INFO, "CLKCTL: set PENDING\n"); | 728 | brcmf_dbg(INFO, "CLKCTL: set PENDING\n"); |
729 | bus->clkstate = CLK_PENDING; | 729 | bus->clkstate = CLK_PENDING; |
730 | 730 | ||
@@ -734,8 +734,8 @@ static int brcmf_sdbrcm_htclk(struct brcmf_sdio *bus, bool on, bool pendok) | |||
734 | devctl = brcmf_sdio_regrb(bus->sdiodev, | 734 | devctl = brcmf_sdio_regrb(bus->sdiodev, |
735 | SBSDIO_DEVICE_CTL, &err); | 735 | SBSDIO_DEVICE_CTL, &err); |
736 | devctl &= ~SBSDIO_DEVCTL_CA_INT_ONLY; | 736 | devctl &= ~SBSDIO_DEVCTL_CA_INT_ONLY; |
737 | brcmf_sdcard_cfg_write(bus->sdiodev, SDIO_FUNC_1, | 737 | brcmf_sdio_regwb(bus->sdiodev, SBSDIO_DEVICE_CTL, |
738 | SBSDIO_DEVICE_CTL, devctl, &err); | 738 | devctl, &err); |
739 | } | 739 | } |
740 | 740 | ||
741 | /* Otherwise, wait here (polling) for HT Avail */ | 741 | /* Otherwise, wait here (polling) for HT Avail */ |
@@ -780,13 +780,13 @@ static int brcmf_sdbrcm_htclk(struct brcmf_sdio *bus, bool on, bool pendok) | |||
780 | devctl = brcmf_sdio_regrb(bus->sdiodev, | 780 | devctl = brcmf_sdio_regrb(bus->sdiodev, |
781 | SBSDIO_DEVICE_CTL, &err); | 781 | SBSDIO_DEVICE_CTL, &err); |
782 | devctl &= ~SBSDIO_DEVCTL_CA_INT_ONLY; | 782 | devctl &= ~SBSDIO_DEVCTL_CA_INT_ONLY; |
783 | brcmf_sdcard_cfg_write(bus->sdiodev, SDIO_FUNC_1, | 783 | brcmf_sdio_regwb(bus->sdiodev, SBSDIO_DEVICE_CTL, |
784 | SBSDIO_DEVICE_CTL, devctl, &err); | 784 | devctl, &err); |
785 | } | 785 | } |
786 | 786 | ||
787 | bus->clkstate = CLK_SDONLY; | 787 | bus->clkstate = CLK_SDONLY; |
788 | brcmf_sdcard_cfg_write(bus->sdiodev, SDIO_FUNC_1, | 788 | brcmf_sdio_regwb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, |
789 | SBSDIO_FUNC1_CHIPCLKCSR, clkreq, &err); | 789 | clkreq, &err); |
790 | brcmf_dbg(INFO, "CLKCTL: turned OFF\n"); | 790 | brcmf_dbg(INFO, "CLKCTL: turned OFF\n"); |
791 | if (err) { | 791 | if (err) { |
792 | brcmf_dbg(ERROR, "Failed access turning clock off: %d\n", | 792 | brcmf_dbg(ERROR, "Failed access turning clock off: %d\n", |
@@ -897,14 +897,12 @@ static int brcmf_sdbrcm_bussleep(struct brcmf_sdio *bus, bool sleep) | |||
897 | /* Turn off our contribution to the HT clock request */ | 897 | /* Turn off our contribution to the HT clock request */ |
898 | brcmf_sdbrcm_clkctl(bus, CLK_SDONLY, false); | 898 | brcmf_sdbrcm_clkctl(bus, CLK_SDONLY, false); |
899 | 899 | ||
900 | brcmf_sdcard_cfg_write(bus->sdiodev, SDIO_FUNC_1, | 900 | brcmf_sdio_regwb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, |
901 | SBSDIO_FUNC1_CHIPCLKCSR, | 901 | SBSDIO_FORCE_HW_CLKREQ_OFF, NULL); |
902 | SBSDIO_FORCE_HW_CLKREQ_OFF, NULL); | ||
903 | 902 | ||
904 | /* Isolate the bus */ | 903 | /* Isolate the bus */ |
905 | brcmf_sdcard_cfg_write(bus->sdiodev, SDIO_FUNC_1, | 904 | brcmf_sdio_regwb(bus->sdiodev, SBSDIO_DEVICE_CTL, |
906 | SBSDIO_DEVICE_CTL, | 905 | SBSDIO_DEVCTL_PADS_ISO, NULL); |
907 | SBSDIO_DEVCTL_PADS_ISO, NULL); | ||
908 | 906 | ||
909 | /* Change state */ | 907 | /* Change state */ |
910 | bus->sleeping = true; | 908 | bus->sleeping = true; |
@@ -912,8 +910,8 @@ static int brcmf_sdbrcm_bussleep(struct brcmf_sdio *bus, bool sleep) | |||
912 | } else { | 910 | } else { |
913 | /* Waking up: bus power up is ok, set local state */ | 911 | /* Waking up: bus power up is ok, set local state */ |
914 | 912 | ||
915 | brcmf_sdcard_cfg_write(bus->sdiodev, SDIO_FUNC_1, | 913 | brcmf_sdio_regwb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, |
916 | SBSDIO_FUNC1_CHIPCLKCSR, 0, NULL); | 914 | 0, NULL); |
917 | 915 | ||
918 | /* Make sure the controller has the bus up */ | 916 | /* Make sure the controller has the bus up */ |
919 | brcmf_sdbrcm_clkctl(bus, CLK_AVAIL, false); | 917 | brcmf_sdbrcm_clkctl(bus, CLK_AVAIL, false); |
@@ -1035,9 +1033,8 @@ static void brcmf_sdbrcm_rxfail(struct brcmf_sdio *bus, bool abort, bool rtx) | |||
1035 | if (abort) | 1033 | if (abort) |
1036 | brcmf_sdcard_abort(bus->sdiodev, SDIO_FUNC_2); | 1034 | brcmf_sdcard_abort(bus->sdiodev, SDIO_FUNC_2); |
1037 | 1035 | ||
1038 | brcmf_sdcard_cfg_write(bus->sdiodev, SDIO_FUNC_1, | 1036 | brcmf_sdio_regwb(bus->sdiodev, SBSDIO_FUNC1_FRAMECTRL, |
1039 | SBSDIO_FUNC1_FRAMECTRL, | 1037 | SFC_RF_TERM, &err); |
1040 | SFC_RF_TERM, &err); | ||
1041 | bus->f1regdata++; | 1038 | bus->f1regdata++; |
1042 | 1039 | ||
1043 | /* Wait until the packet has been flushed (device/FIFO stable) */ | 1040 | /* Wait until the packet has been flushed (device/FIFO stable) */ |
@@ -2173,9 +2170,8 @@ static int brcmf_sdbrcm_txpkt(struct brcmf_sdio *bus, struct sk_buff *pkt, | |||
2173 | bus->tx_sderrs++; | 2170 | bus->tx_sderrs++; |
2174 | 2171 | ||
2175 | brcmf_sdcard_abort(bus->sdiodev, SDIO_FUNC_2); | 2172 | brcmf_sdcard_abort(bus->sdiodev, SDIO_FUNC_2); |
2176 | brcmf_sdcard_cfg_write(bus->sdiodev, SDIO_FUNC_1, | 2173 | brcmf_sdio_regwb(bus->sdiodev, SBSDIO_FUNC1_FRAMECTRL, |
2177 | SBSDIO_FUNC1_FRAMECTRL, SFC_WF_TERM, | 2174 | SFC_WF_TERM, NULL); |
2178 | NULL); | ||
2179 | bus->f1regdata++; | 2175 | bus->f1regdata++; |
2180 | 2176 | ||
2181 | for (i = 0; i < 3; i++) { | 2177 | for (i = 0; i < 3; i++) { |
@@ -2305,17 +2301,16 @@ static void brcmf_sdbrcm_bus_stop(struct device *dev) | |||
2305 | saveclk = brcmf_sdio_regrb(bus->sdiodev, | 2301 | saveclk = brcmf_sdio_regrb(bus->sdiodev, |
2306 | SBSDIO_FUNC1_CHIPCLKCSR, &err); | 2302 | SBSDIO_FUNC1_CHIPCLKCSR, &err); |
2307 | if (!err) { | 2303 | if (!err) { |
2308 | brcmf_sdcard_cfg_write(bus->sdiodev, SDIO_FUNC_1, | 2304 | brcmf_sdio_regwb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, |
2309 | SBSDIO_FUNC1_CHIPCLKCSR, | 2305 | (saveclk | SBSDIO_FORCE_HT), &err); |
2310 | (saveclk | SBSDIO_FORCE_HT), &err); | ||
2311 | } | 2306 | } |
2312 | if (err) | 2307 | if (err) |
2313 | brcmf_dbg(ERROR, "Failed to force clock for F2: err %d\n", err); | 2308 | brcmf_dbg(ERROR, "Failed to force clock for F2: err %d\n", err); |
2314 | 2309 | ||
2315 | /* Turn off the bus (F2), free any pending packets */ | 2310 | /* Turn off the bus (F2), free any pending packets */ |
2316 | brcmf_dbg(INTR, "disable SDIO interrupts\n"); | 2311 | brcmf_dbg(INTR, "disable SDIO interrupts\n"); |
2317 | brcmf_sdcard_cfg_write(bus->sdiodev, SDIO_FUNC_0, SDIO_CCCR_IOEx, | 2312 | brcmf_sdio_regwb(bus->sdiodev, SDIO_CCCR_IOEx, SDIO_FUNC_ENABLE_1, |
2318 | SDIO_FUNC_ENABLE_1, NULL); | 2313 | NULL); |
2319 | 2314 | ||
2320 | /* Clear any pending interrupts now that F2 is disabled */ | 2315 | /* Clear any pending interrupts now that F2 is disabled */ |
2321 | w_sdreg32(bus, local_hostintmask, | 2316 | w_sdreg32(bus, local_hostintmask, |
@@ -2414,8 +2409,8 @@ static bool brcmf_sdbrcm_dpc(struct brcmf_sdio *bus) | |||
2414 | bus->sdiodev->bus_if->state = BRCMF_BUS_DOWN; | 2409 | bus->sdiodev->bus_if->state = BRCMF_BUS_DOWN; |
2415 | } | 2410 | } |
2416 | devctl &= ~SBSDIO_DEVCTL_CA_INT_ONLY; | 2411 | devctl &= ~SBSDIO_DEVCTL_CA_INT_ONLY; |
2417 | brcmf_sdcard_cfg_write(bus->sdiodev, SDIO_FUNC_1, | 2412 | brcmf_sdio_regwb(bus->sdiodev, SBSDIO_DEVICE_CTL, |
2418 | SBSDIO_DEVICE_CTL, devctl, &err); | 2413 | devctl, &err); |
2419 | if (err) { | 2414 | if (err) { |
2420 | brcmf_dbg(ERROR, "error writing DEVCTL: %d\n", | 2415 | brcmf_dbg(ERROR, "error writing DEVCTL: %d\n", |
2421 | err); | 2416 | err); |
@@ -2536,9 +2531,8 @@ clkwait: | |||
2536 | 2531 | ||
2537 | brcmf_sdcard_abort(bus->sdiodev, SDIO_FUNC_2); | 2532 | brcmf_sdcard_abort(bus->sdiodev, SDIO_FUNC_2); |
2538 | 2533 | ||
2539 | brcmf_sdcard_cfg_write(bus->sdiodev, SDIO_FUNC_1, | 2534 | brcmf_sdio_regwb(bus->sdiodev, SBSDIO_FUNC1_FRAMECTRL, |
2540 | SBSDIO_FUNC1_FRAMECTRL, SFC_WF_TERM, | 2535 | SFC_WF_TERM, NULL); |
2541 | NULL); | ||
2542 | bus->f1regdata++; | 2536 | bus->f1regdata++; |
2543 | 2537 | ||
2544 | for (i = 0; i < 3; i++) { | 2538 | for (i = 0; i < 3; i++) { |
@@ -2874,9 +2868,8 @@ static int brcmf_tx_frame(struct brcmf_sdio *bus, u8 *frame, u16 len) | |||
2874 | 2868 | ||
2875 | brcmf_sdcard_abort(bus->sdiodev, SDIO_FUNC_2); | 2869 | brcmf_sdcard_abort(bus->sdiodev, SDIO_FUNC_2); |
2876 | 2870 | ||
2877 | brcmf_sdcard_cfg_write(bus->sdiodev, SDIO_FUNC_1, | 2871 | brcmf_sdio_regwb(bus->sdiodev, SBSDIO_FUNC1_FRAMECTRL, |
2878 | SBSDIO_FUNC1_FRAMECTRL, | 2872 | SFC_WF_TERM, NULL); |
2879 | SFC_WF_TERM, NULL); | ||
2880 | bus->f1regdata++; | 2873 | bus->f1regdata++; |
2881 | 2874 | ||
2882 | for (i = 0; i < 3; i++) { | 2875 | for (i = 0; i < 3; i++) { |
@@ -3461,9 +3454,8 @@ static int brcmf_sdbrcm_bus_init(struct device *dev) | |||
3461 | saveclk = brcmf_sdio_regrb(bus->sdiodev, | 3454 | saveclk = brcmf_sdio_regrb(bus->sdiodev, |
3462 | SBSDIO_FUNC1_CHIPCLKCSR, &err); | 3455 | SBSDIO_FUNC1_CHIPCLKCSR, &err); |
3463 | if (!err) { | 3456 | if (!err) { |
3464 | brcmf_sdcard_cfg_write(bus->sdiodev, SDIO_FUNC_1, | 3457 | brcmf_sdio_regwb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, |
3465 | SBSDIO_FUNC1_CHIPCLKCSR, | 3458 | (saveclk | SBSDIO_FORCE_HT), &err); |
3466 | (saveclk | SBSDIO_FORCE_HT), &err); | ||
3467 | } | 3459 | } |
3468 | if (err) { | 3460 | if (err) { |
3469 | brcmf_dbg(ERROR, "Failed to force clock for F2: err %d\n", err); | 3461 | brcmf_dbg(ERROR, "Failed to force clock for F2: err %d\n", err); |
@@ -3475,8 +3467,7 @@ static int brcmf_sdbrcm_bus_init(struct device *dev) | |||
3475 | offsetof(struct sdpcmd_regs, tosbmailboxdata), &retries); | 3467 | offsetof(struct sdpcmd_regs, tosbmailboxdata), &retries); |
3476 | enable = (SDIO_FUNC_ENABLE_1 | SDIO_FUNC_ENABLE_2); | 3468 | enable = (SDIO_FUNC_ENABLE_1 | SDIO_FUNC_ENABLE_2); |
3477 | 3469 | ||
3478 | brcmf_sdcard_cfg_write(bus->sdiodev, SDIO_FUNC_0, SDIO_CCCR_IOEx, | 3470 | brcmf_sdio_regwb(bus->sdiodev, SDIO_CCCR_IOEx, enable, NULL); |
3479 | enable, NULL); | ||
3480 | 3471 | ||
3481 | timeout = jiffies + msecs_to_jiffies(BRCMF_WAIT_F2RDY); | 3472 | timeout = jiffies + msecs_to_jiffies(BRCMF_WAIT_F2RDY); |
3482 | ready = 0; | 3473 | ready = 0; |
@@ -3499,19 +3490,16 @@ static int brcmf_sdbrcm_bus_init(struct device *dev) | |||
3499 | w_sdreg32(bus, bus->hostintmask, | 3490 | w_sdreg32(bus, bus->hostintmask, |
3500 | offsetof(struct sdpcmd_regs, hostintmask), &retries); | 3491 | offsetof(struct sdpcmd_regs, hostintmask), &retries); |
3501 | 3492 | ||
3502 | brcmf_sdcard_cfg_write(bus->sdiodev, SDIO_FUNC_1, | 3493 | brcmf_sdio_regwb(bus->sdiodev, SBSDIO_WATERMARK, 8, &err); |
3503 | SBSDIO_WATERMARK, 8, &err); | ||
3504 | } else { | 3494 | } else { |
3505 | /* Disable F2 again */ | 3495 | /* Disable F2 again */ |
3506 | enable = SDIO_FUNC_ENABLE_1; | 3496 | enable = SDIO_FUNC_ENABLE_1; |
3507 | brcmf_sdcard_cfg_write(bus->sdiodev, SDIO_FUNC_0, | 3497 | brcmf_sdio_regwb(bus->sdiodev, SDIO_CCCR_IOEx, enable, NULL); |
3508 | SDIO_CCCR_IOEx, enable, NULL); | ||
3509 | ret = -ENODEV; | 3498 | ret = -ENODEV; |
3510 | } | 3499 | } |
3511 | 3500 | ||
3512 | /* Restore previous clock setting */ | 3501 | /* Restore previous clock setting */ |
3513 | brcmf_sdcard_cfg_write(bus->sdiodev, SDIO_FUNC_1, | 3502 | brcmf_sdio_regwb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, saveclk, &err); |
3514 | SBSDIO_FUNC1_CHIPCLKCSR, saveclk, &err); | ||
3515 | 3503 | ||
3516 | if (ret == 0) { | 3504 | if (ret == 0) { |
3517 | ret = brcmf_sdio_intr_register(bus->sdiodev); | 3505 | ret = brcmf_sdio_intr_register(bus->sdiodev); |
@@ -3729,9 +3717,8 @@ brcmf_sdbrcm_probe_attach(struct brcmf_sdio *bus, u32 regsva) | |||
3729 | * programs PLL control regs | 3717 | * programs PLL control regs |
3730 | */ | 3718 | */ |
3731 | 3719 | ||
3732 | brcmf_sdcard_cfg_write(bus->sdiodev, SDIO_FUNC_1, | 3720 | brcmf_sdio_regwb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, |
3733 | SBSDIO_FUNC1_CHIPCLKCSR, | 3721 | BRCMF_INIT_CLKCTL1, &err); |
3734 | BRCMF_INIT_CLKCTL1, &err); | ||
3735 | if (!err) | 3722 | if (!err) |
3736 | clkctl = brcmf_sdio_regrb(bus->sdiodev, | 3723 | clkctl = brcmf_sdio_regrb(bus->sdiodev, |
3737 | SBSDIO_FUNC1_CHIPCLKCSR, &err); | 3724 | SBSDIO_FUNC1_CHIPCLKCSR, &err); |
@@ -3792,16 +3779,15 @@ static bool brcmf_sdbrcm_probe_init(struct brcmf_sdio *bus) | |||
3792 | brcmf_dbg(TRACE, "Enter\n"); | 3779 | brcmf_dbg(TRACE, "Enter\n"); |
3793 | 3780 | ||
3794 | /* Disable F2 to clear any intermediate frame state on the dongle */ | 3781 | /* Disable F2 to clear any intermediate frame state on the dongle */ |
3795 | brcmf_sdcard_cfg_write(bus->sdiodev, SDIO_FUNC_0, SDIO_CCCR_IOEx, | 3782 | brcmf_sdio_regwb(bus->sdiodev, SDIO_CCCR_IOEx, |
3796 | SDIO_FUNC_ENABLE_1, NULL); | 3783 | SDIO_FUNC_ENABLE_1, NULL); |
3797 | 3784 | ||
3798 | bus->sdiodev->bus_if->state = BRCMF_BUS_DOWN; | 3785 | bus->sdiodev->bus_if->state = BRCMF_BUS_DOWN; |
3799 | bus->sleeping = false; | 3786 | bus->sleeping = false; |
3800 | bus->rxflow = false; | 3787 | bus->rxflow = false; |
3801 | 3788 | ||
3802 | /* Done with backplane-dependent accesses, can drop clock... */ | 3789 | /* Done with backplane-dependent accesses, can drop clock... */ |
3803 | brcmf_sdcard_cfg_write(bus->sdiodev, SDIO_FUNC_1, | 3790 | brcmf_sdio_regwb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, 0, NULL); |
3804 | SBSDIO_FUNC1_CHIPCLKCSR, 0, NULL); | ||
3805 | 3791 | ||
3806 | /* ...and initialize clock/power states */ | 3792 | /* ...and initialize clock/power states */ |
3807 | bus->clkstate = CLK_SDONLY; | 3793 | bus->clkstate = CLK_SDONLY; |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c b/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c index 654b7e032b27..d4b390c2acfd 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c | |||
@@ -425,8 +425,7 @@ brcmf_sdio_chip_buscoreprep(struct brcmf_sdio_dev *sdiodev) | |||
425 | 425 | ||
426 | /* Try forcing SDIO core to do ALPAvail request only */ | 426 | /* Try forcing SDIO core to do ALPAvail request only */ |
427 | clkset = SBSDIO_FORCE_HW_CLKREQ_OFF | SBSDIO_ALP_AVAIL_REQ; | 427 | clkset = SBSDIO_FORCE_HW_CLKREQ_OFF | SBSDIO_ALP_AVAIL_REQ; |
428 | brcmf_sdcard_cfg_write(sdiodev, SDIO_FUNC_1, | 428 | brcmf_sdio_regwb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, clkset, &err); |
429 | SBSDIO_FUNC1_CHIPCLKCSR, clkset, &err); | ||
430 | if (err) { | 429 | if (err) { |
431 | brcmf_dbg(ERROR, "error writing for HT off\n"); | 430 | brcmf_dbg(ERROR, "error writing for HT off\n"); |
432 | return err; | 431 | return err; |
@@ -454,13 +453,11 @@ brcmf_sdio_chip_buscoreprep(struct brcmf_sdio_dev *sdiodev) | |||
454 | } | 453 | } |
455 | 454 | ||
456 | clkset = SBSDIO_FORCE_HW_CLKREQ_OFF | SBSDIO_FORCE_ALP; | 455 | clkset = SBSDIO_FORCE_HW_CLKREQ_OFF | SBSDIO_FORCE_ALP; |
457 | brcmf_sdcard_cfg_write(sdiodev, SDIO_FUNC_1, | 456 | brcmf_sdio_regwb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, clkset, &err); |
458 | SBSDIO_FUNC1_CHIPCLKCSR, clkset, &err); | ||
459 | udelay(65); | 457 | udelay(65); |
460 | 458 | ||
461 | /* Also, disable the extra SDIO pull-ups */ | 459 | /* Also, disable the extra SDIO pull-ups */ |
462 | brcmf_sdcard_cfg_write(sdiodev, SDIO_FUNC_1, | 460 | brcmf_sdio_regwb(sdiodev, SBSDIO_FUNC1_SDIOPULLUP, 0, NULL); |
463 | SBSDIO_FUNC1_SDIOPULLUP, 0, NULL); | ||
464 | 461 | ||
465 | return 0; | 462 | return 0; |
466 | } | 463 | } |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/sdio_host.h b/drivers/net/wireless/brcm80211/brcmfmac/sdio_host.h index decfe0d14bad..7a97cb50f13d 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/sdio_host.h +++ b/drivers/net/wireless/brcm80211/brcmfmac/sdio_host.h | |||
@@ -168,15 +168,6 @@ struct brcmf_sdio_dev { | |||
168 | extern int brcmf_sdio_intr_register(struct brcmf_sdio_dev *sdiodev); | 168 | extern int brcmf_sdio_intr_register(struct brcmf_sdio_dev *sdiodev); |
169 | extern int brcmf_sdio_intr_unregister(struct brcmf_sdio_dev *sdiodev); | 169 | extern int brcmf_sdio_intr_unregister(struct brcmf_sdio_dev *sdiodev); |
170 | 170 | ||
171 | /* Access SDIO address space (e.g. CCCR) using CMD52 (single-byte interface). | ||
172 | * fn: function number | ||
173 | * addr: unmodified SDIO-space address | ||
174 | * data: data byte to write | ||
175 | * err: pointer to error code (or NULL) | ||
176 | */ | ||
177 | extern void brcmf_sdcard_cfg_write(struct brcmf_sdio_dev *sdiodev, uint func, | ||
178 | u32 addr, u8 data, int *err); | ||
179 | |||
180 | /* Synchronous access to device (client) core registers via CMD53 to F1. | 171 | /* Synchronous access to device (client) core registers via CMD53 to F1. |
181 | * addr: backplane address (i.e. >= regsva from attach) | 172 | * addr: backplane address (i.e. >= regsva from attach) |
182 | * size: register width in bytes (2 or 4) | 173 | * size: register width in bytes (2 or 4) |