ath9k: fix incorrect profile type manupulation
authorBala Shanmugam <bkamatch@qca.qualcomm.com>
Mon, 18 Jun 2012 06:06:58 +0000 (11:36 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 20 Jun 2012 19:14:47 +0000 (15:14 -0400)
Two MCI interrupts are generated while adding A2DP and headset profiles
with different types and same connection handle. While disconnecting,
only one MCI interrupt is generated with last added profile type value
for both profiles.

While adding second profile type decrement first one.

Signed-off-by: Bala Shanmugam <bkamatch@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/mci.c

index 7d34a504d6171b0370ede10581df1617c59ff5d0..c40e568b5c2bf16141025710571567c317cccac9 100644 (file)
@@ -233,8 +233,21 @@ static void ath_mci_process_profile(struct ath_softc *sc,
        struct ath_mci_profile_info *entry = NULL;
 
        entry = ath_mci_find_profile(mci, info);
-       if (entry)
+       if (entry) {
+               /*
+                * Two MCI interrupts are generated while connecting to
+                * headset and A2DP profile, but only one MCI interrupt
+                * is generated with last added profile type while disconnecting
+                * both profiles.
+                * So while adding second profile type decrement
+                * the first one.
+                */
+               if (entry->type != info->type) {
+                       DEC_PROF(mci, entry);
+                       INC_PROF(mci, info);
+               }
                memcpy(entry, info, 10);
+       }
 
        if (info->start) {
                if (!entry && !ath_mci_add_profile(common, mci, info))