diff options
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9003_mci.c | 21 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9003_mci.h | 8 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/mci.c | 11 |
3 files changed, 23 insertions, 17 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_mci.c b/drivers/net/wireless/ath/ath9k/ar9003_mci.c index 8dbb60b53f1a..44c202ce6c66 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_mci.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_mci.c | |||
@@ -813,8 +813,8 @@ static void ar9003_mci_osla_setup(struct ath_hw *ah, bool enable) | |||
813 | AR_BTCOEX_CTRL_ONE_STEP_LOOK_AHEAD_EN, 1); | 813 | AR_BTCOEX_CTRL_ONE_STEP_LOOK_AHEAD_EN, 1); |
814 | } | 814 | } |
815 | 815 | ||
816 | void ar9003_mci_reset(struct ath_hw *ah, bool en_int, bool is_2g, | 816 | int ar9003_mci_reset(struct ath_hw *ah, bool en_int, bool is_2g, |
817 | bool is_full_sleep) | 817 | bool is_full_sleep) |
818 | { | 818 | { |
819 | struct ath_common *common = ath9k_hw_common(ah); | 819 | struct ath_common *common = ath9k_hw_common(ah); |
820 | struct ath9k_hw_mci *mci = &ah->btcoex_hw.mci; | 820 | struct ath9k_hw_mci *mci = &ah->btcoex_hw.mci; |
@@ -824,14 +824,13 @@ void ar9003_mci_reset(struct ath_hw *ah, bool en_int, bool is_2g, | |||
824 | is_full_sleep, is_2g); | 824 | is_full_sleep, is_2g); |
825 | 825 | ||
826 | if (!mci->gpm_addr && !mci->sched_addr) { | 826 | if (!mci->gpm_addr && !mci->sched_addr) { |
827 | ath_dbg(common, MCI, | 827 | ath_err(common, "MCI GPM and schedule buffers are not allocated\n"); |
828 | "MCI GPM and schedule buffers are not allocated\n"); | 828 | return -ENOMEM; |
829 | return; | ||
830 | } | 829 | } |
831 | 830 | ||
832 | if (REG_READ(ah, AR_BTCOEX_CTRL) == 0xdeadbeef) { | 831 | if (REG_READ(ah, AR_BTCOEX_CTRL) == 0xdeadbeef) { |
833 | ath_dbg(common, MCI, "BTCOEX control register is dead\n"); | 832 | ath_err(common, "BTCOEX control register is dead\n"); |
834 | return; | 833 | return -EINVAL; |
835 | } | 834 | } |
836 | 835 | ||
837 | /* Program MCI DMA related registers */ | 836 | /* Program MCI DMA related registers */ |
@@ -913,6 +912,8 @@ void ar9003_mci_reset(struct ath_hw *ah, bool en_int, bool is_2g, | |||
913 | 912 | ||
914 | if (en_int) | 913 | if (en_int) |
915 | ar9003_mci_enable_interrupt(ah); | 914 | ar9003_mci_enable_interrupt(ah); |
915 | |||
916 | return 0; | ||
916 | } | 917 | } |
917 | 918 | ||
918 | void ar9003_mci_stop_bt(struct ath_hw *ah, bool save_fullsleep) | 919 | void ar9003_mci_stop_bt(struct ath_hw *ah, bool save_fullsleep) |
@@ -1144,8 +1145,8 @@ void ar9003_mci_init_cal_done(struct ath_hw *ah) | |||
1144 | ar9003_mci_send_message(ah, MCI_GPM, 0, pld, 16, true, false); | 1145 | ar9003_mci_send_message(ah, MCI_GPM, 0, pld, 16, true, false); |
1145 | } | 1146 | } |
1146 | 1147 | ||
1147 | void ar9003_mci_setup(struct ath_hw *ah, u32 gpm_addr, void *gpm_buf, | 1148 | int ar9003_mci_setup(struct ath_hw *ah, u32 gpm_addr, void *gpm_buf, |
1148 | u16 len, u32 sched_addr) | 1149 | u16 len, u32 sched_addr) |
1149 | { | 1150 | { |
1150 | struct ath9k_hw_mci *mci = &ah->btcoex_hw.mci; | 1151 | struct ath9k_hw_mci *mci = &ah->btcoex_hw.mci; |
1151 | 1152 | ||
@@ -1154,7 +1155,7 @@ void ar9003_mci_setup(struct ath_hw *ah, u32 gpm_addr, void *gpm_buf, | |||
1154 | mci->gpm_len = len; | 1155 | mci->gpm_len = len; |
1155 | mci->sched_addr = sched_addr; | 1156 | mci->sched_addr = sched_addr; |
1156 | 1157 | ||
1157 | ar9003_mci_reset(ah, true, true, true); | 1158 | return ar9003_mci_reset(ah, true, true, true); |
1158 | } | 1159 | } |
1159 | EXPORT_SYMBOL(ar9003_mci_setup); | 1160 | EXPORT_SYMBOL(ar9003_mci_setup); |
1160 | 1161 | ||
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_mci.h b/drivers/net/wireless/ath/ath9k/ar9003_mci.h index 30acf2869aa4..2a2d01889613 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_mci.h +++ b/drivers/net/wireless/ath/ath9k/ar9003_mci.h | |||
@@ -249,8 +249,8 @@ bool ar9003_mci_send_message(struct ath_hw *ah, u8 header, u32 flag, | |||
249 | u32 *payload, u8 len, bool wait_done, | 249 | u32 *payload, u8 len, bool wait_done, |
250 | bool check_bt); | 250 | bool check_bt); |
251 | u32 ar9003_mci_state(struct ath_hw *ah, u32 state_type); | 251 | u32 ar9003_mci_state(struct ath_hw *ah, u32 state_type); |
252 | void ar9003_mci_setup(struct ath_hw *ah, u32 gpm_addr, void *gpm_buf, | 252 | int ar9003_mci_setup(struct ath_hw *ah, u32 gpm_addr, void *gpm_buf, |
253 | u16 len, u32 sched_addr); | 253 | u16 len, u32 sched_addr); |
254 | void ar9003_mci_cleanup(struct ath_hw *ah); | 254 | void ar9003_mci_cleanup(struct ath_hw *ah); |
255 | void ar9003_mci_get_interrupt(struct ath_hw *ah, u32 *raw_intr, | 255 | void ar9003_mci_get_interrupt(struct ath_hw *ah, u32 *raw_intr, |
256 | u32 *rx_msg_intr); | 256 | u32 *rx_msg_intr); |
@@ -272,8 +272,8 @@ void ar9003_mci_check_bt(struct ath_hw *ah); | |||
272 | bool ar9003_mci_start_reset(struct ath_hw *ah, struct ath9k_channel *chan); | 272 | bool ar9003_mci_start_reset(struct ath_hw *ah, struct ath9k_channel *chan); |
273 | int ar9003_mci_end_reset(struct ath_hw *ah, struct ath9k_channel *chan, | 273 | int ar9003_mci_end_reset(struct ath_hw *ah, struct ath9k_channel *chan, |
274 | struct ath9k_hw_cal_data *caldata); | 274 | struct ath9k_hw_cal_data *caldata); |
275 | void ar9003_mci_reset(struct ath_hw *ah, bool en_int, bool is_2g, | 275 | int ar9003_mci_reset(struct ath_hw *ah, bool en_int, bool is_2g, |
276 | bool is_full_sleep); | 276 | bool is_full_sleep); |
277 | void ar9003_mci_get_isr(struct ath_hw *ah, enum ath9k_int *masked); | 277 | void ar9003_mci_get_isr(struct ath_hw *ah, enum ath9k_int *masked); |
278 | void ar9003_mci_bt_gain_ctrl(struct ath_hw *ah); | 278 | void ar9003_mci_bt_gain_ctrl(struct ath_hw *ah); |
279 | void ar9003_mci_set_power_awake(struct ath_hw *ah); | 279 | void ar9003_mci_set_power_awake(struct ath_hw *ah); |
diff --git a/drivers/net/wireless/ath/ath9k/mci.c b/drivers/net/wireless/ath/ath9k/mci.c index 8f51e9e358fd..ec2d7c807567 100644 --- a/drivers/net/wireless/ath/ath9k/mci.c +++ b/drivers/net/wireless/ath/ath9k/mci.c | |||
@@ -392,6 +392,7 @@ int ath_mci_setup(struct ath_softc *sc) | |||
392 | struct ath_common *common = ath9k_hw_common(sc->sc_ah); | 392 | struct ath_common *common = ath9k_hw_common(sc->sc_ah); |
393 | struct ath_mci_coex *mci = &sc->mci_coex; | 393 | struct ath_mci_coex *mci = &sc->mci_coex; |
394 | struct ath_mci_buf *buf = &mci->sched_buf; | 394 | struct ath_mci_buf *buf = &mci->sched_buf; |
395 | int ret; | ||
395 | 396 | ||
396 | buf->bf_addr = dma_alloc_coherent(sc->dev, | 397 | buf->bf_addr = dma_alloc_coherent(sc->dev, |
397 | ATH_MCI_SCHED_BUF_SIZE + ATH_MCI_GPM_BUF_SIZE, | 398 | ATH_MCI_SCHED_BUF_SIZE + ATH_MCI_GPM_BUF_SIZE, |
@@ -411,9 +412,13 @@ int ath_mci_setup(struct ath_softc *sc) | |||
411 | mci->gpm_buf.bf_addr = (u8 *)mci->sched_buf.bf_addr + mci->sched_buf.bf_len; | 412 | mci->gpm_buf.bf_addr = (u8 *)mci->sched_buf.bf_addr + mci->sched_buf.bf_len; |
412 | mci->gpm_buf.bf_paddr = mci->sched_buf.bf_paddr + mci->sched_buf.bf_len; | 413 | mci->gpm_buf.bf_paddr = mci->sched_buf.bf_paddr + mci->sched_buf.bf_len; |
413 | 414 | ||
414 | ar9003_mci_setup(sc->sc_ah, mci->gpm_buf.bf_paddr, | 415 | ret = ar9003_mci_setup(sc->sc_ah, mci->gpm_buf.bf_paddr, |
415 | mci->gpm_buf.bf_addr, (mci->gpm_buf.bf_len >> 4), | 416 | mci->gpm_buf.bf_addr, (mci->gpm_buf.bf_len >> 4), |
416 | mci->sched_buf.bf_paddr); | 417 | mci->sched_buf.bf_paddr); |
418 | if (ret) { | ||
419 | ath_err(common, "Failed to initialize MCI\n"); | ||
420 | return ret; | ||
421 | } | ||
417 | 422 | ||
418 | INIT_WORK(&sc->mci_work, ath9k_mci_work); | 423 | INIT_WORK(&sc->mci_work, ath9k_mci_work); |
419 | ath_dbg(common, MCI, "MCI Initialized\n"); | 424 | ath_dbg(common, MCI, "MCI Initialized\n"); |