Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wirel...
authorJohn W. Linville <linville@tuxdriver.com>
Thu, 8 Apr 2010 17:34:54 +0000 (13:34 -0400)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 8 Apr 2010 17:34:54 +0000 (13:34 -0400)
Conflicts:
Documentation/feature-removal-schedule.txt
drivers/net/wireless/ath/ath5k/phy.c
drivers/net/wireless/iwlwifi/iwl-4965.c
drivers/net/wireless/iwlwifi/iwl-agn.c
drivers/net/wireless/iwlwifi/iwl-core.c
drivers/net/wireless/iwlwifi/iwl-core.h
drivers/net/wireless/iwlwifi/iwl-tx.c

29 files changed:
1  2 
Documentation/feature-removal-schedule.txt
drivers/net/wireless/ath/ath5k/eeprom.c
drivers/net/wireless/ath/ath5k/phy.c
drivers/net/wireless/ath/ath5k/reg.h
drivers/net/wireless/ath/ath5k/reset.c
drivers/net/wireless/ath/ath9k/main.c
drivers/net/wireless/ath/ath9k/xmit.c
drivers/net/wireless/ipw2x00/ipw2200.c
drivers/net/wireless/ipw2x00/libipw.h
drivers/net/wireless/ipw2x00/libipw_module.c
drivers/net/wireless/iwlwifi/iwl-3945.c
drivers/net/wireless/iwlwifi/iwl-4965.c
drivers/net/wireless/iwlwifi/iwl-agn-rs.c
drivers/net/wireless/iwlwifi/iwl-agn.c
drivers/net/wireless/iwlwifi/iwl-core.h
drivers/net/wireless/iwlwifi/iwl-scan.c
drivers/net/wireless/iwlwifi/iwl-tx.c
drivers/net/wireless/iwlwifi/iwl3945-base.c
drivers/net/wireless/libertas/dev.h
drivers/net/wireless/rndis_wlan.c
drivers/net/wireless/rt2x00/rt2500usb.c
drivers/net/wireless/rt2x00/rt2800lib.c
net/mac80211/debugfs_netdev.c
net/mac80211/mlme.c
net/mac80211/rx.c
net/mac80211/sta_info.c
net/mac80211/tx.c
net/mac80211/util.c
net/wireless/reg.c

index d46944f9de53049cd79cba84cfd4b9c0d837594e,73ef30dbe61263e4697bba21dec15c31d649d2b1..5f460110c5ee69b521609b8f83b39d14912bb26f
@@@ -520,24 -520,29 +520,47 @@@ Who:    Hans de Goede <hdegoede@redhat.com
  
  ----------------------------
  
+ What: corgikbd, spitzkbd, tosakbd driver
+ When: 2.6.35
+ Files:        drivers/input/keyboard/{corgi,spitz,tosa}kbd.c
+ Why:  We now have a generic GPIO based matrix keyboard driver that
+       are fully capable of handling all the keys on these devices.
+       The original drivers manipulate the GPIO registers directly
+       and so are difficult to maintain.
+ Who:  Eric Miao <eric.y.miao@gmail.com>
+ ----------------------------
+ What: corgi_ssp and corgi_ts driver
+ When: 2.6.35
+ Files:        arch/arm/mach-pxa/corgi_ssp.c, drivers/input/touchscreen/corgi_ts.c
+ Why:  The corgi touchscreen is now deprecated in favour of the generic
+       ads7846.c driver. The noise reduction technique used in corgi_ts.c,
+       that's to wait till vsync before ADC sampling, is also integrated into
+       ads7846 driver now. Provided that the original driver is not generic
+       and is difficult to maintain, it will be removed later.
+ Who:  Eric Miao <eric.y.miao@gmail.com>
+ ----------------------------
 +What: sysfs-class-rfkill state file
 +When: Feb 2014
 +Files:        net/rfkill/core.c
 +Why:  Documented as obsolete since Feb 2010. This file is limited to 3
 +      states while the rfkill drivers can have 4 states.
 +Who:  anybody or Florian Mickler <florian@mickler.org>
 +
 +----------------------------
 +
 +What:         sysfs-class-rfkill claim file
 +When: Feb 2012
 +Files:        net/rfkill/core.c
 +Why:  It is not possible to claim an rfkill driver since 2007. This is
 +      Documented as obsolete since Feb 2010.
 +Who:  anybody or Florian Mickler <florian@mickler.org>
 +
 +----------------------------
 +
  What: capifs
  When: February 2011
  Files:        drivers/isdn/capi/capifs.*
index cb569dbffa63e9a5bb0b83b7befe60935d9989f6,eff3323efb4bf82afc965fa30ab83110e1ac6114..b6704c93f808fa7ada4037ab84a4e7ad2f1d8563
@@@ -1369,38 -1399,26 +1375,30 @@@ static int ath5k_hw_rf511x_calibrate(st
        }
  
        i_coffd = ((i_pwr >> 1) + (q_pwr >> 1)) >> 7;
 -      q_coffd = q_pwr >> 7;
 +
 +      if (ah->ah_version == AR5K_AR5211)
 +              q_coffd = q_pwr >> 6;
 +      else
 +              q_coffd = q_pwr >> 7;
  
-       /* No correction */
-       if (i_coffd == 0 || q_coffd == 0)
+       /* protect against divide by 0 and loss of sign bits */
+       if (i_coffd == 0 || q_coffd < 2)
                goto done;
  
-       i_coff = ((-iq_corr) / i_coffd);
+       i_coff = (-iq_corr) / i_coffd;
+       i_coff = clamp(i_coff, -32, 31); /* signed 6 bit */
  
-       /* Boundary check */
-       if (i_coff > 31)
-               i_coff = 31;
-       if (i_coff < -32)
-               i_coff = -32;
-       if (ah->ah_version == AR5K_AR5211)
-               q_coff = (i_pwr / q_coffd) - 64;
-       else
-               q_coff = (i_pwr / q_coffd) - 128;
+       q_coff = (i_pwr / q_coffd) - 128;
+       q_coff = clamp(q_coff, -16, 15); /* signed 5 bit */
  
-       /* Boundary check */
-       if (q_coff > 15)
-               q_coff = 15;
-       if (q_coff < -16)
-               q_coff = -16;
+       ATH5K_DBG_UNLIMIT(ah->ah_sc, ATH5K_DEBUG_CALIBRATE,
+                       "new I:%d Q:%d (i_coffd:%x q_coffd:%x)",
+                       i_coff, q_coff, i_coffd, q_coffd);
  
-       /* Commit new I/Q value */
-       AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_IQ, AR5K_PHY_IQ_CORR_ENABLE |
-               ((u32)q_coff) | ((u32)i_coff << AR5K_PHY_IQ_CORR_Q_I_COFF_S));
+       /* Commit new I/Q values (set enable bit last to match HAL sources) */
+       AR5K_REG_WRITE_BITS(ah, AR5K_PHY_IQ, AR5K_PHY_IQ_CORR_Q_I_COFF, i_coff);
+       AR5K_REG_WRITE_BITS(ah, AR5K_PHY_IQ, AR5K_PHY_IQ_CORR_Q_Q_COFF, q_coff);
+       AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_IQ, AR5K_PHY_IQ_CORR_ENABLE);
  
        /* Re-enable calibration -if we don't we'll commit
         * the same values again and again */
Simple merge
index 4120068792ecb21564da59ccbf81c44bc1451c1e,cbf28e379843838a16d410b438636d6252cf901e..44bbbf2a6edd233180a99fab81a9afbe0dbb0fc1
@@@ -1393,10 -1382,11 +1396,9 @@@ int ath5k_hw_reset(struct ath5k_hw *ah
                ath5k_hw_set_sleep_clock(ah, true);
  
        /*
-        * Disable beacons and reset the register
+        * Disable beacons and reset the TSF
         */
-       AR5K_REG_DISABLE_BITS(ah, AR5K_BEACON, AR5K_BEACON_ENABLE |
-                       AR5K_BEACON_RESET_TSF);
+       AR5K_REG_DISABLE_BITS(ah, AR5K_BEACON, AR5K_BEACON_ENABLE);
+       ath5k_hw_reset_tsf(ah);
        return 0;
  }
 -
 -#undef _ATH5K_RESET
Simple merge
Simple merge
index 192abfdc5039bd23b88885699b05c01ae6b759b8,5c7aa1b1eb566e0bac134294874ffcadd3366a39..9e2ae8f3ecb0e9bef38ba80af3067d4747528b9a
@@@ -3186,11 -3177,22 +3186,22 @@@ static int ipw_load_firmware(struct ipw
        int total_nr = 0;
        int i;
        struct pci_pool *pool;
-       u32 *virts[CB_NUMBER_OF_ELEMENTS_SMALL];
-       dma_addr_t phys[CB_NUMBER_OF_ELEMENTS_SMALL];
+       void **virts;
+       dma_addr_t *phys;
  
 -      IPW_DEBUG_TRACE("<< : \n");
 +      IPW_DEBUG_TRACE("<< :\n");
  
+       virts = kmalloc(sizeof(void *) * CB_NUMBER_OF_ELEMENTS_SMALL,
+                       GFP_KERNEL);
+       if (!virts)
+               return -ENOMEM;
+       phys = kmalloc(sizeof(dma_addr_t) * CB_NUMBER_OF_ELEMENTS_SMALL,
+                       GFP_KERNEL);
+       if (!phys) {
+               kfree(virts);
+               return -ENOMEM;
+       }
        pool = pci_pool_create("ipw2200", priv->pci_dev, CB_MAX_LENGTH, 0, 0);
        if (!pool) {
                IPW_ERROR("pci_pool_create failed\n");
Simple merge
index 9a220d4154494a40f1642dba0a7320366fff6ca7,83c52a682622a518d5b42bbddd17edfdd895db69..6edae9b83bb7785dec0ad77be07fdcee2b849e43
@@@ -2039,17 -2040,15 +2039,15 @@@ static void iwl4965_rx_reply_tx(struct 
                                   le32_to_cpu(tx_resp->rate_n_flags),
                                   tx_resp->failure_frame);
  
 -              freed = iwl_tx_queue_reclaim(priv, txq_id, index);
 +              freed = iwlagn_tx_queue_reclaim(priv, txq_id, index);
-               if (qc && likely(sta_id != IWL_INVALID_STATION))
-                       priv->stations[sta_id].tid[tid].tfds_in_queue -= freed;
+               iwl_free_tfds_in_queue(priv, sta_id, tid, freed);
  
                if (priv->mac80211_registered &&
                    (iwl_queue_space(&txq->q) > txq->q.low_mark))
                        iwl_wake_queue(priv, txq_id);
        }
  
-       if (qc && likely(sta_id != IWL_INVALID_STATION))
-               iwlagn_txq_check_empty(priv, sta_id, tid, txq_id);
 -      iwl_txq_check_empty(priv, sta_id, tid, txq_id);
++      iwlagn_txq_check_empty(priv, sta_id, tid, txq_id);
  
        if (iwl_check_bits(status, TX_ABORT_REQUIRED_MSK))
                IWL_ERR(priv, "TODO:  Implement Tx ABORT REQUIRED!!!\n");
index 629cbf38aa9b94f94038a12089fa86e15c93e108,e4c2e1e448ad27e2f5d2b9c65a96dc867576e31b..4f0cb803f732db76f60fb1ad1c78e26abb60f0f1
@@@ -1229,9 -1258,17 +1229,17 @@@ static void iwl_irq_tasklet(struct iwl_
        /* Ack/clear/reset pending uCode interrupts.
         * Note:  Some bits in CSR_INT are "OR" of bits in CSR_FH_INT_STATUS,
         */
-       iwl_write32(priv, CSR_INT, priv->_agn.inta);
+       /* There is a hardware bug in the interrupt mask function that some
+        * interrupts (i.e. CSR_INT_BIT_SCD) can still be generated even if
+        * they are disabled in the CSR_INT_MASK register. Furthermore the
+        * ICT interrupt handling mechanism has another bug that might cause
+        * these unmasked interrupts fail to be detected. We workaround the
+        * hardware bugs here by ACKing all the possible interrupts so that
+        * interrupt coalescing can still be achieved.
+        */
 -      iwl_write32(priv, CSR_INT, priv->inta | ~priv->inta_mask);
++      iwl_write32(priv, CSR_INT, priv->_agn.inta | ~priv->inta_mask);
  
 -      inta = priv->inta;
 +      inta = priv->_agn.inta;
  
  #ifdef CONFIG_IWLWIFI_DEBUG
        if (iwl_get_debug_level(priv) & IWL_DL_ISR) {
index bc04b43cad36f0398173f5baf059b3c0e8ad2fe0,732590f5fe30c73c4f109b0005366595142392c3..10f95724536f1ce7963be1c5ff702e9e75dabbeb
@@@ -458,7 -457,12 +458,9 @@@ void iwl_free_tfds_in_queue(struct iwl_
  void iwl_txq_update_write_ptr(struct iwl_priv *priv, struct iwl_tx_queue *txq);
  int iwl_tx_queue_init(struct iwl_priv *priv, struct iwl_tx_queue *txq,
                      int slots_num, u32 txq_id);
+ void iwl_tx_queue_reset(struct iwl_priv *priv, struct iwl_tx_queue *txq,
+                       int slots_num, u32 txq_id);
  void iwl_tx_queue_free(struct iwl_priv *priv, int txq_id);
 -int iwl_tx_agg_start(struct iwl_priv *priv, const u8 *ra, u16 tid, u16 *ssn);
 -int iwl_tx_agg_stop(struct iwl_priv *priv , const u8 *ra, u16 tid);
 -int iwl_txq_check_empty(struct iwl_priv *priv, int sta_id, u8 tid, int txq_id);
  /*****************************************************
   * TX power
   ****************************************************/
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge