rtl8187: Reduce delays to reduce startup time
A message that is not in the archive (sent off-list or not yet received): [email protected]
The current driver for the RTL8187 and RTL8187B USB devices contain a large number of sleep statements, which causes the driver to take a very long time to initialize and connect. An audit was undertaken to test which, if any, of these delays could be eliminated.
The first thing I noted was that calls to rtl8225_write_ofdm(), rtl8225_write_cck(), and rtl8225_write() all go through either rtl8225_write_bang() or rtl8225_write_8051() and that both those routines finish with an msleep() call; therefore sequences such as rtl8225_write(); msleep(1) should not be needed. After removing the msleep() calls of this type, the initialization routine was much faster without affecting any functionality.
Next, I experimented with removing those calls with sleeps greater than 1 second - again there was no negative effect.
These changes are most important for the execution of routine rtl8225z2_b_rf_init() where the time went from 14.84 sec to 7.90 sec.
Please test these changes to verify that these changes do not affect correct operations of other versions of either the RTL8187 or RTL8187B chips.
---
drivers/net/wireless/rtl8187_rtl8225.c +186 -192
@@ -64,7 +64,7 @@ static void rtl8225_write_bitbang(structrtl818x_iowrite16 (priv, &priv->map->RFPinsOutput, reg80 | (1 <<2 ));rtl818x_iowrite16 (priv, &priv->map->RFPinsSelect, reg84); -msleep (2 ); +msleep (1 ); }static void rtl8225_write_8051 (struct ieee80211_hw *dev,u8 addr,__le16 data)
@@ -98,7 +98,7 @@ static void rtl8225_write_8051(struct iertl818x_iowrite16 (priv, &priv->map->RFPinsOutput, reg80 | (1 <<2 ));rtl818x_iowrite16 (priv, &priv->map->RFPinsSelect, reg84); -msleep (2 ); +msleep (1 ); }static void rtl8225_write (struct ieee80211_hw *dev,u8 addr,u16 data)
@@ -333,21 +333,21 @@ static void rtl8225_rf_init(struct ieee8struct rtl8187_priv *priv = dev->priv;int i; -rtl8225_write (dev,0x0 ,0x067 );msleep (1 ); -rtl8225_write (dev,0x1 ,0xFE0 );msleep (1 ); -rtl8225_write (dev,0x2 ,0x44D );msleep (1 ); -rtl8225_write (dev,0x3 ,0x441 );msleep (1 ); -rtl8225_write (dev,0x4 ,0x486 );msleep (1 ); -rtl8225_write (dev,0x5 ,0xBC0 );msleep (1 ); -rtl8225_write (dev,0x6 ,0xAE6 );msleep (1 ); -rtl8225_write (dev,0x7 ,0x82A );msleep (1 ); -rtl8225_write (dev,0x8 ,0x01F );msleep (1 ); -rtl8225_write (dev,0x9 ,0x334 );msleep (1 ); -rtl8225_write (dev,0xA ,0xFD4 );msleep (1 ); -rtl8225_write (dev,0xB ,0x391 );msleep (1 ); -rtl8225_write (dev,0xC ,0x050 );msleep (1 ); -rtl8225_write (dev,0xD ,0x6DB );msleep (1 ); -rtl8225_write (dev,0xE ,0x029 );msleep (1 ); +rtl8225_write (dev,0x0 ,0x067 ); +rtl8225_write (dev,0x1 ,0xFE0 ); +rtl8225_write (dev,0x2 ,0x44D ); +rtl8225_write (dev,0x3 ,0x441 ); +rtl8225_write (dev,0x4 ,0x486 ); +rtl8225_write (dev,0x5 ,0xBC0 ); +rtl8225_write (dev,0x6 ,0xAE6 ); +rtl8225_write (dev,0x7 ,0x82A ); +rtl8225_write (dev,0x8 ,0x01F ); +rtl8225_write (dev,0x9 ,0x334 ); +rtl8225_write (dev,0xA ,0xFD4 ); +rtl8225_write (dev,0xB ,0x391 ); +rtl8225_write (dev,0xC ,0x050 ); +rtl8225_write (dev,0xD ,0x6DB ); +rtl8225_write (dev,0xE ,0x029 );rtl8225_write (dev,0xF ,0x914 );msleep (100 );rtl8225_write (dev,0x2 ,0xC4D );msleep (200 );
@@ -375,91 +375,89 @@ static void rtl8225_rf_init(struct ieee8for (i =0 ; i <ARRAY_SIZE (rtl8225_agc); i++) {rtl8225_write_phy_ofdm (dev,0xB , rtl8225_agc[i]); -msleep (1 );rtl8225_write_phy_ofdm (dev,0xA ,0x80 + i); -msleep (1 ); }msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x00 ,0x01 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x01 ,0x02 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x02 ,0x42 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x03 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x04 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x05 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x06 ,0x40 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x07 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x08 ,0x40 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x09 ,0xfe );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0a ,0x09 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0b ,0x80 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0c ,0x01 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0e ,0xd3 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0f ,0x38 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x10 ,0x84 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x11 ,0x06 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x12 ,0x20 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x13 ,0x20 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x14 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x15 ,0x40 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x16 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x17 ,0x40 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x18 ,0xef );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x19 ,0x19 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1a ,0x20 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1b ,0x76 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1c ,0x04 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1e ,0x95 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1f ,0x75 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x20 ,0x1f );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x21 ,0x27 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x22 ,0x16 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x24 ,0x46 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x25 ,0x20 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x26 ,0x90 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x27 ,0x88 );msleep (1 ); +rtl8225_write_phy_ofdm (dev,0x00 ,0x01 ); +rtl8225_write_phy_ofdm (dev,0x01 ,0x02 ); +rtl8225_write_phy_ofdm (dev,0x02 ,0x42 ); +rtl8225_write_phy_ofdm (dev,0x03 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x04 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x05 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x06 ,0x40 ); +rtl8225_write_phy_ofdm (dev,0x07 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x08 ,0x40 ); +rtl8225_write_phy_ofdm (dev,0x09 ,0xfe ); +rtl8225_write_phy_ofdm (dev,0x0a ,0x09 ); +rtl8225_write_phy_ofdm (dev,0x0b ,0x80 ); +rtl8225_write_phy_ofdm (dev,0x0c ,0x01 ); +rtl8225_write_phy_ofdm (dev,0x0e ,0xd3 ); +rtl8225_write_phy_ofdm (dev,0x0f ,0x38 ); +rtl8225_write_phy_ofdm (dev,0x10 ,0x84 ); +rtl8225_write_phy_ofdm (dev,0x11 ,0x06 ); +rtl8225_write_phy_ofdm (dev,0x12 ,0x20 ); +rtl8225_write_phy_ofdm (dev,0x13 ,0x20 ); +rtl8225_write_phy_ofdm (dev,0x14 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x15 ,0x40 ); +rtl8225_write_phy_ofdm (dev,0x16 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x17 ,0x40 ); +rtl8225_write_phy_ofdm (dev,0x18 ,0xef ); +rtl8225_write_phy_ofdm (dev,0x19 ,0x19 ); +rtl8225_write_phy_ofdm (dev,0x1a ,0x20 ); +rtl8225_write_phy_ofdm (dev,0x1b ,0x76 ); +rtl8225_write_phy_ofdm (dev,0x1c ,0x04 ); +rtl8225_write_phy_ofdm (dev,0x1e ,0x95 ); +rtl8225_write_phy_ofdm (dev,0x1f ,0x75 ); +rtl8225_write_phy_ofdm (dev,0x20 ,0x1f ); +rtl8225_write_phy_ofdm (dev,0x21 ,0x27 ); +rtl8225_write_phy_ofdm (dev,0x22 ,0x16 ); +rtl8225_write_phy_ofdm (dev,0x24 ,0x46 ); +rtl8225_write_phy_ofdm (dev,0x25 ,0x20 ); +rtl8225_write_phy_ofdm (dev,0x26 ,0x90 ); +rtl8225_write_phy_ofdm (dev,0x27 ,0x88 );rtl8225_write_phy_ofdm (dev,0x0d , rtl8225_gain[2 *4 ]);rtl8225_write_phy_ofdm (dev,0x1b , rtl8225_gain[2 *4 +2 ]);rtl8225_write_phy_ofdm (dev,0x1d , rtl8225_gain[2 *4 +3 ]);rtl8225_write_phy_ofdm (dev,0x23 , rtl8225_gain[2 *4 +1 ]); -rtl8225_write_phy_cck (dev,0x00 ,0x98 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x03 ,0x20 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x04 ,0x7e );msleep (1 ); -rtl8225_write_phy_cck (dev,0x05 ,0x12 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x06 ,0xfc );msleep (1 ); -rtl8225_write_phy_cck (dev,0x07 ,0x78 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x08 ,0x2e );msleep (1 ); -rtl8225_write_phy_cck (dev,0x10 ,0x9b );msleep (1 ); -rtl8225_write_phy_cck (dev,0x11 ,0x88 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x12 ,0x47 );msleep (1 ); +rtl8225_write_phy_cck (dev,0x00 ,0x98 ); +rtl8225_write_phy_cck (dev,0x03 ,0x20 ); +rtl8225_write_phy_cck (dev,0x04 ,0x7e ); +rtl8225_write_phy_cck (dev,0x05 ,0x12 ); +rtl8225_write_phy_cck (dev,0x06 ,0xfc ); +rtl8225_write_phy_cck (dev,0x07 ,0x78 ); +rtl8225_write_phy_cck (dev,0x08 ,0x2e ); +rtl8225_write_phy_cck (dev,0x10 ,0x9b ); +rtl8225_write_phy_cck (dev,0x11 ,0x88 ); +rtl8225_write_phy_cck (dev,0x12 ,0x47 );rtl8225_write_phy_cck (dev,0x13 ,0xd0 );rtl8225_write_phy_cck (dev,0x19 ,0x00 );rtl8225_write_phy_cck (dev,0x1a ,0xa0 );rtl8225_write_phy_cck (dev,0x1b ,0x08 );rtl8225_write_phy_cck (dev,0x40 ,0x86 ); -rtl8225_write_phy_cck (dev,0x41 ,0x8d );msleep (1 ); -rtl8225_write_phy_cck (dev,0x42 ,0x15 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x43 ,0x18 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x44 ,0x1f );msleep (1 ); -rtl8225_write_phy_cck (dev,0x45 ,0x1e );msleep (1 ); -rtl8225_write_phy_cck (dev,0x46 ,0x1a );msleep (1 ); -rtl8225_write_phy_cck (dev,0x47 ,0x15 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x48 ,0x10 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x49 ,0x0a );msleep (1 ); -rtl8225_write_phy_cck (dev,0x4a ,0x05 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x4b ,0x02 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x4c ,0x05 );msleep (1 ); +rtl8225_write_phy_cck (dev,0x41 ,0x8d ); +rtl8225_write_phy_cck (dev,0x42 ,0x15 ); +rtl8225_write_phy_cck (dev,0x43 ,0x18 ); +rtl8225_write_phy_cck (dev,0x44 ,0x1f ); +rtl8225_write_phy_cck (dev,0x45 ,0x1e ); +rtl8225_write_phy_cck (dev,0x46 ,0x1a ); +rtl8225_write_phy_cck (dev,0x47 ,0x15 ); +rtl8225_write_phy_cck (dev,0x48 ,0x10 ); +rtl8225_write_phy_cck (dev,0x49 ,0x0a ); +rtl8225_write_phy_cck (dev,0x4a ,0x05 ); +rtl8225_write_phy_cck (dev,0x4b ,0x02 ); +rtl8225_write_phy_cck (dev,0x4c ,0x05 );rtl818x_iowrite8 (priv, &priv->map->TESTR,0x0D );rtl8225_rf_set_tx_power (dev,1 );/* RX antenna default to A */ -rtl8225_write_phy_cck (dev,0x10 ,0x9b );msleep (1 );/* B: 0xDB */ -rtl8225_write_phy_ofdm (dev,0x26 ,0x90 );msleep (1 );/* B: 0x10 */ +rtl8225_write_phy_cck (dev,0x10 ,0x9b );/* B: 0xDB */ +rtl8225_write_phy_ofdm (dev,0x26 ,0x90 );/* B: 0x10 */ rtl818x_iowrite8 (priv, &priv->map->TX_ANTENNA,0x03 );/* B: 0x00 */ msleep (1 );
@@ -691,21 +689,21 @@ static void rtl8225z2_rf_init(struct ieestruct rtl8187_priv *priv = dev->priv;int i; -rtl8225_write (dev,0x0 ,0x2BF );msleep (1 ); -rtl8225_write (dev,0x1 ,0xEE0 );msleep (1 ); -rtl8225_write (dev,0x2 ,0x44D );msleep (1 ); -rtl8225_write (dev,0x3 ,0x441 );msleep (1 ); -rtl8225_write (dev,0x4 ,0x8C3 );msleep (1 ); -rtl8225_write (dev,0x5 ,0xC72 );msleep (1 ); -rtl8225_write (dev,0x6 ,0x0E6 );msleep (1 ); -rtl8225_write (dev,0x7 ,0x82A );msleep (1 ); -rtl8225_write (dev,0x8 ,0x03F );msleep (1 ); -rtl8225_write (dev,0x9 ,0x335 );msleep (1 ); -rtl8225_write (dev,0xa ,0x9D4 );msleep (1 ); -rtl8225_write (dev,0xb ,0x7BB );msleep (1 ); -rtl8225_write (dev,0xc ,0x850 );msleep (1 ); -rtl8225_write (dev,0xd ,0xCDF );msleep (1 ); -rtl8225_write (dev,0xe ,0x02B );msleep (1 ); +rtl8225_write (dev,0x0 ,0x2BF ); +rtl8225_write (dev,0x1 ,0xEE0 ); +rtl8225_write (dev,0x2 ,0x44D ); +rtl8225_write (dev,0x3 ,0x441 ); +rtl8225_write (dev,0x4 ,0x8C3 ); +rtl8225_write (dev,0x5 ,0xC72 ); +rtl8225_write (dev,0x6 ,0x0E6 ); +rtl8225_write (dev,0x7 ,0x82A ); +rtl8225_write (dev,0x8 ,0x03F ); +rtl8225_write (dev,0x9 ,0x335 ); +rtl8225_write (dev,0xa ,0x9D4 ); +rtl8225_write (dev,0xb ,0x7BB ); +rtl8225_write (dev,0xc ,0x850 ); +rtl8225_write (dev,0xd ,0xCDF ); +rtl8225_write (dev,0xe ,0x02B );rtl8225_write (dev,0xf ,0x114 );msleep (100 );rtl8225_write (dev,0x0 ,0x1B7 );
@@ -740,94 +738,92 @@ static void rtl8225z2_rf_init(struct ieefor (i =0 ; i <ARRAY_SIZE (rtl8225_agc); i++) {rtl8225_write_phy_ofdm (dev,0xB , rtl8225_agc[i]); -msleep (1 );rtl8225_write_phy_ofdm (dev,0xA ,0x80 + i); -msleep (1 ); }msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x00 ,0x01 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x01 ,0x02 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x02 ,0x42 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x03 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x04 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x05 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x06 ,0x40 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x07 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x08 ,0x40 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x09 ,0xfe );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0a ,0x08 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0b ,0x80 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0c ,0x01 );msleep (1 ); +rtl8225_write_phy_ofdm (dev,0x00 ,0x01 ); +rtl8225_write_phy_ofdm (dev,0x01 ,0x02 ); +rtl8225_write_phy_ofdm (dev,0x02 ,0x42 ); +rtl8225_write_phy_ofdm (dev,0x03 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x04 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x05 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x06 ,0x40 ); +rtl8225_write_phy_ofdm (dev,0x07 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x08 ,0x40 ); +rtl8225_write_phy_ofdm (dev,0x09 ,0xfe ); +rtl8225_write_phy_ofdm (dev,0x0a ,0x08 ); +rtl8225_write_phy_ofdm (dev,0x0b ,0x80 ); +rtl8225_write_phy_ofdm (dev,0x0c ,0x01 );rtl8225_write_phy_ofdm (dev,0x0d ,0x43 ); -rtl8225_write_phy_ofdm (dev,0x0e ,0xd3 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0f ,0x38 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x10 ,0x84 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x11 ,0x07 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x12 ,0x20 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x13 ,0x20 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x14 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x15 ,0x40 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x16 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x17 ,0x40 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x18 ,0xef );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x19 ,0x19 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1a ,0x20 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1b ,0x15 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1c ,0x04 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1d ,0xc5 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1e ,0x95 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1f ,0x75 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x20 ,0x1f );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x21 ,0x17 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x22 ,0x16 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x23 ,0x80 );msleep (1 );//FIXME: not needed? -rtl8225_write_phy_ofdm (dev,0x24 ,0x46 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x25 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x26 ,0x90 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x27 ,0x88 );msleep (1 ); +rtl8225_write_phy_ofdm (dev,0x0e ,0xd3 ); +rtl8225_write_phy_ofdm (dev,0x0f ,0x38 ); +rtl8225_write_phy_ofdm (dev,0x10 ,0x84 ); +rtl8225_write_phy_ofdm (dev,0x11 ,0x07 ); +rtl8225_write_phy_ofdm (dev,0x12 ,0x20 ); +rtl8225_write_phy_ofdm (dev,0x13 ,0x20 ); +rtl8225_write_phy_ofdm (dev,0x14 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x15 ,0x40 ); +rtl8225_write_phy_ofdm (dev,0x16 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x17 ,0x40 ); +rtl8225_write_phy_ofdm (dev,0x18 ,0xef ); +rtl8225_write_phy_ofdm (dev,0x19 ,0x19 ); +rtl8225_write_phy_ofdm (dev,0x1a ,0x20 ); +rtl8225_write_phy_ofdm (dev,0x1b ,0x15 ); +rtl8225_write_phy_ofdm (dev,0x1c ,0x04 ); +rtl8225_write_phy_ofdm (dev,0x1d ,0xc5 ); +rtl8225_write_phy_ofdm (dev,0x1e ,0x95 ); +rtl8225_write_phy_ofdm (dev,0x1f ,0x75 ); +rtl8225_write_phy_ofdm (dev,0x20 ,0x1f ); +rtl8225_write_phy_ofdm (dev,0x21 ,0x17 ); +rtl8225_write_phy_ofdm (dev,0x22 ,0x16 ); +rtl8225_write_phy_ofdm (dev,0x23 ,0x80 ); +rtl8225_write_phy_ofdm (dev,0x24 ,0x46 ); +rtl8225_write_phy_ofdm (dev,0x25 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x26 ,0x90 ); +rtl8225_write_phy_ofdm (dev,0x27 ,0x88 );rtl8225_write_phy_ofdm (dev,0x0b , rtl8225z2_gain_bg[4 *3 ]);rtl8225_write_phy_ofdm (dev,0x1b , rtl8225z2_gain_bg[4 *3 +1 ]);rtl8225_write_phy_ofdm (dev,0x1d , rtl8225z2_gain_bg[4 *3 +2 ]);rtl8225_write_phy_ofdm (dev,0x21 ,0x37 ); -rtl8225_write_phy_cck (dev,0x00 ,0x98 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x03 ,0x20 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x04 ,0x7e );msleep (1 ); -rtl8225_write_phy_cck (dev,0x05 ,0x12 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x06 ,0xfc );msleep (1 ); -rtl8225_write_phy_cck (dev,0x07 ,0x78 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x08 ,0x2e );msleep (1 ); -rtl8225_write_phy_cck (dev,0x10 ,0x9b );msleep (1 ); -rtl8225_write_phy_cck (dev,0x11 ,0x88 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x12 ,0x47 );msleep (1 ); +rtl8225_write_phy_cck (dev,0x00 ,0x98 ); +rtl8225_write_phy_cck (dev,0x03 ,0x20 ); +rtl8225_write_phy_cck (dev,0x04 ,0x7e ); +rtl8225_write_phy_cck (dev,0x05 ,0x12 ); +rtl8225_write_phy_cck (dev,0x06 ,0xfc ); +rtl8225_write_phy_cck (dev,0x07 ,0x78 ); +rtl8225_write_phy_cck (dev,0x08 ,0x2e ); +rtl8225_write_phy_cck (dev,0x10 ,0x9b ); +rtl8225_write_phy_cck (dev,0x11 ,0x88 ); +rtl8225_write_phy_cck (dev,0x12 ,0x47 );rtl8225_write_phy_cck (dev,0x13 ,0xd0 );rtl8225_write_phy_cck (dev,0x19 ,0x00 );rtl8225_write_phy_cck (dev,0x1a ,0xa0 );rtl8225_write_phy_cck (dev,0x1b ,0x08 );rtl8225_write_phy_cck (dev,0x40 ,0x86 ); -rtl8225_write_phy_cck (dev,0x41 ,0x8d );msleep (1 ); -rtl8225_write_phy_cck (dev,0x42 ,0x15 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x43 ,0x18 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x44 ,0x36 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x45 ,0x35 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x46 ,0x2e );msleep (1 ); -rtl8225_write_phy_cck (dev,0x47 ,0x25 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x48 ,0x1c );msleep (1 ); -rtl8225_write_phy_cck (dev,0x49 ,0x12 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x4a ,0x09 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x4b ,0x04 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x4c ,0x05 );msleep (1 ); +rtl8225_write_phy_cck (dev,0x41 ,0x8d ); +rtl8225_write_phy_cck (dev,0x42 ,0x15 ); +rtl8225_write_phy_cck (dev,0x43 ,0x18 ); +rtl8225_write_phy_cck (dev,0x44 ,0x36 ); +rtl8225_write_phy_cck (dev,0x45 ,0x35 ); +rtl8225_write_phy_cck (dev,0x46 ,0x2e ); +rtl8225_write_phy_cck (dev,0x47 ,0x25 ); +rtl8225_write_phy_cck (dev,0x48 ,0x1c ); +rtl8225_write_phy_cck (dev,0x49 ,0x12 ); +rtl8225_write_phy_cck (dev,0x4a ,0x09 ); +rtl8225_write_phy_cck (dev,0x4b ,0x04 ); +rtl8225_write_phy_cck (dev,0x4c ,0x05 );rtl818x_iowrite8 (priv, (u8 *)0xFF5B ,0x0D );msleep (1 );rtl8225z2_rf_set_tx_power (dev,1 );/* RX antenna default to A */ -rtl8225_write_phy_cck (dev,0x10 ,0x9b );msleep (1 );/* B: 0xDB */ -rtl8225_write_phy_ofdm (dev,0x26 ,0x90 );msleep (1 );/* B: 0x10 */ +rtl8225_write_phy_cck (dev,0x10 ,0x9b );/* B: 0xDB */ +rtl8225_write_phy_ofdm (dev,0x26 ,0x90 );/* B: 0x10 */ rtl818x_iowrite8 (priv, &priv->map->TX_ANTENNA,0x03 );/* B: 0x00 */ msleep (1 );
@@ -839,40 +835,38 @@ static void rtl8225z2_b_rf_init(struct istruct rtl8187_priv *priv = dev->priv;int i; -rtl8225_write (dev,0x0 ,0x0B7 );msleep (1 ); -rtl8225_write (dev,0x1 ,0xEE0 );msleep (1 ); -rtl8225_write (dev,0x2 ,0x44D );msleep (1 ); -rtl8225_write (dev,0x3 ,0x441 );msleep (1 ); -rtl8225_write (dev,0x4 ,0x8C3 );msleep (1 ); -rtl8225_write (dev,0x5 ,0xC72 );msleep (1 ); -rtl8225_write (dev,0x6 ,0x0E6 );msleep (1 ); -rtl8225_write (dev,0x7 ,0x82A );msleep (1 ); -rtl8225_write (dev,0x8 ,0x03F );msleep (1 ); -rtl8225_write (dev,0x9 ,0x335 );msleep (1 ); -rtl8225_write (dev,0xa ,0x9D4 );msleep (1 ); -rtl8225_write (dev,0xb ,0x7BB );msleep (1 ); -rtl8225_write (dev,0xc ,0x850 );msleep (1 ); -rtl8225_write (dev,0xd ,0xCDF );msleep (1 ); -rtl8225_write (dev,0xe ,0x02B );msleep (1 ); -rtl8225_write (dev,0xf ,0x114 );msleep (1 ); +rtl8225_write (dev,0x0 ,0x0B7 ); +rtl8225_write (dev,0x1 ,0xEE0 ); +rtl8225_write (dev,0x2 ,0x44D ); +rtl8225_write (dev,0x3 ,0x441 ); +rtl8225_write (dev,0x4 ,0x8C3 ); +rtl8225_write (dev,0x5 ,0xC72 ); +rtl8225_write (dev,0x6 ,0x0E6 ); +rtl8225_write (dev,0x7 ,0x82A ); +rtl8225_write (dev,0x8 ,0x03F ); +rtl8225_write (dev,0x9 ,0x335 ); +rtl8225_write (dev,0xa ,0x9D4 ); +rtl8225_write (dev,0xb ,0x7BB ); +rtl8225_write (dev,0xc ,0x850 ); +rtl8225_write (dev,0xd ,0xCDF ); +rtl8225_write (dev,0xe ,0x02B ); +rtl8225_write (dev,0xf ,0x114 ); -rtl8225_write (dev,0x0 ,0x1B7 );msleep (1 ); +rtl8225_write (dev,0x0 ,0x1B7 );for (i =0 ; i <ARRAY_SIZE (rtl8225z2_rxgain); i++) { -rtl8225_write (dev,0x1 , i +1 );msleep (1 ); -rtl8225_write (dev,0x2 , rtl8225z2_rxgain[i]);msleep (1 ); +rtl8225_write (dev,0x1 , i +1 ); +rtl8225_write (dev,0x2 , rtl8225z2_rxgain[i]); } -rtl8225_write (dev,0x3 ,0x080 );msleep (1 ); -rtl8225_write (dev,0x5 ,0x004 );msleep (1 ); -rtl8225_write (dev,0x0 ,0x0B7 );msleep (1 ); -msleep (3000 ); +rtl8225_write (dev,0x3 ,0x080 ); +rtl8225_write (dev,0x5 ,0x004 ); +rtl8225_write (dev,0x0 ,0x0B7 ); -rtl8225_write (dev,0x2 ,0xC4D );msleep (1 ); -msleep (2000 ); +rtl8225_write (dev,0x2 ,0xC4D ); -rtl8225_write (dev,0x2 ,0x44D );msleep (1 ); -rtl8225_write (dev,0x0 ,0x2BF );msleep (1 ); +rtl8225_write (dev,0x2 ,0x44D ); +rtl8225_write (dev,0x0 ,0x2BF );rtl818x_iowrite8 (priv, &priv->map->TX_GAIN_CCK,0x03 );rtl818x_iowrite8 (priv, &priv->map->TX_GAIN_OFDM,0x07 );
@@ -895,10 +889,10 @@ static void rtl8225z2_b_rf_init(struct irtl818x_iowrite32 (priv, (__le32 *)0xFFFC , (7 <<12 ) | (3 <<8 ) |28 );rtl818x_iowrite8 (priv, &priv->map->ACM_CONTROL,0 ); -rtl8225_write_phy_ofdm (dev,0x97 ,0x46 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0xa4 ,0xb6 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x85 ,0xfc );msleep (1 ); -rtl8225_write_phy_cck (dev,0xc1 ,0x88 );msleep (1 ); +rtl8225_write_phy_ofdm (dev,0x97 ,0x46 ); +rtl8225_write_phy_ofdm (dev,0xa4 ,0xb6 ); +rtl8225_write_phy_ofdm (dev,0x85 ,0xfc ); +rtl8225_write_phy_cck (dev,0xc1 ,0x88 ); }static void rtl8225_rf_stop (struct ieee80211_hw *dev)
@@ -906,7 +900,7 @@ static void rtl8225_rf_stop(struct ieee8u8 reg;struct rtl8187_priv *priv = dev->priv; -rtl8225_write (dev,0x4 ,0x1f );msleep (1 ); +rtl8225_write (dev,0x4 ,0x1f );rtl818x_iowrite8 (priv, &priv->map->EEPROM_CMD,RTL818X_EEPROM_CMD_CONFIG ); reg =rtl818x_ioread8 (priv, &priv->map->CONFIG3);
drivers/net/wireless/rtl8187_dev.c +1 -1
@@ -669,7 +669,7 @@ static int rtl8187b_init_hw(struct ieee8rtl818x_iowrite16 (priv, &priv->map->RFPinsOutput,0x0480 );rtl818x_iowrite16 (priv, &priv->map->RFPinsSelect,0x2488 );rtl818x_iowrite16 (priv, &priv->map->RFPinsEnable,0x1FFF ); -msleep (1100 ); +msleep (100 ); priv->rf->init (dev);
Herton Ronaldo Krzesinski
Tested-byQuoted 13 lines · On Wednesday 29 October 2008 14:29:49 Larry Finger wrote:
The current driver for the RTL8187 and RTL8187B USB devices contain a large number of sleep statements, which causes the driver to take a very long time to initialize and connect. An audit was undertaken to test which, if any, of these delays could be eliminated.
The first thing I noted was that calls to
rtl8225_write_ofdm(),rtl8225_write_cck(), andrtl8225_write()all go through eitherrtl8225_write_bang()orrtl8225_write_8051()and that both those routines finish with anmsleep()call; therefore sequences such asrtl8225_write(); msleep(1) should not be needed. After removing themsleep()calls of this type, the initialization routine was much faster without affecting any functionality.
Quoted 8 lines
Next, I experimented with removing those calls with sleeps greater than 1 second - again there was no negative effect.
These changes are most important for the execution of routine
rtl8225z2_b_rf_init()where the time went from 14.84 sec to 7.90 sec.Please test these changes to verify that these changes do not affect correct operations of other versions of either the RTL8187 or RTL8187B chips.
I tested here with one 8187B and another 8187L and don't found problems. Just don't know about the 8187L part that you changed, may be the original authors of 8187L should comment about it. Otherwise you can add:
Quoted 4 lines
Signed-off-by Larry Finger <[email protected]>---
--
[]'s
Herton
Hin-Tak Leung
Tested-byQuoted 2 lines · Herton Ronaldo Krzesinski
Tested-by: Herton Ronaldo Krzesinski
<[email protected]>
Seems to work just as well for me as well.
Hin-Tak
Quoted 9 lines · Hin-Tak Leung
Quoted 2 lines · Herton Ronaldo Krzesinski
Tested-by: Herton Ronaldo Krzesinski
<[email protected]>Tested-by Hin-Tak Leung <[email protected]>Seems to work just as well for me as well.
Thanks for the testing. Since I posted the patch this morning, I have located some other speedups. I also refactored the patches to split the functionality. There is a further speedup in initialization.
Larry
cover rtl8187: Reduce delays to reduce startup time
In reply to Larry FingerThe current version of the rtl8187 driver contains a large number of msleep() commands that cause initialization to take a long time. This series of patches include revisions that were found by looking at the latest version of the vendor's driver (rtl8187B_linux_26.1036.0708.2008), and others that were found to be OK with testing.
To keep each of the patches relatively small, these changes are split into 6 parts. The changes in them are as follows:
1. Remove all delays of greater than 1 sec.
2. Remove the msleep(1) that immediately follow calls to rtl8225_write_phy_ofdm().
3. Remove the msleep(1) that immediately follow calls to rtl8225_write_phy_cck().
4. Remove the msleep(1) that immediately follow calls to rtl8225_write().
5. Remove the nsleep() calls from rtl8187_write_phy(), rtl8225_write_bitbang(), and rtl8225_write_8051().
6. Remove the msleep(10) that preceeds a channel change.
Before these changes, routine rtl8187b_init_hw() took 15.82 sec to execute. It now takes 3.76 sec.
---
PATCH 1/6 rtl8187: Remove large delays
In reply to Larry FingerThe rtl8187 driver contains 3 sleep statements that are longer than a second. Testing has shown no bad effects when they are removed.
---
drivers/net/wireless/rtl8187_dev.c +1 -1
@@ -669,7 +669,7 @@ static int rtl8187b_init_hw(struct ieee8rtl818x_iowrite16 (priv, &priv->map->RFPinsOutput,0x0480 );rtl818x_iowrite16 (priv, &priv->map->RFPinsSelect,0x2488 );rtl818x_iowrite16 (priv, &priv->map->RFPinsEnable,0x1FFF ); -msleep (1100 ); +msleep (100 ); priv->rf->init (dev);
drivers/net/wireless/rtl8187_rtl8225.c +0 -2
@@ -862,10 +862,8 @@ static void rtl8225z2_b_rf_init(struct irtl8225_write (dev,0x3 ,0x080 );msleep (1 );rtl8225_write (dev,0x5 ,0x004 );msleep (1 );rtl8225_write (dev,0x0 ,0x0B7 );msleep (1 ); -msleep (3000 );rtl8225_write (dev,0x2 ,0xC4D );msleep (1 ); -msleep (2000 );rtl8225_write (dev,0x2 ,0x44D );msleep (1 );rtl8225_write (dev,0x0 ,0x2BF );msleep (1 );
PATCH 2/6 rtl8187: Remove OFDM delays
In reply to Larry FingerRoutine rtl8225_write_phy_ofdm() calls rtl8225_write_phy(), which concludes with a sleep of 1 msec; therefore a call to rtl8225_write_phy_ofdm() immediately followed by an msleep(1) is not needed.
---
drivers/net/wireless/rtl8187_rtl8225.c +82 -86
@@ -375,50 +375,48 @@ static void rtl8225_rf_init(struct ieee8for (i =0 ; i <ARRAY_SIZE (rtl8225_agc); i++) {rtl8225_write_phy_ofdm (dev,0xB , rtl8225_agc[i]); -msleep (1 );rtl8225_write_phy_ofdm (dev,0xA ,0x80 + i); -msleep (1 ); }msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x00 ,0x01 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x01 ,0x02 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x02 ,0x42 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x03 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x04 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x05 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x06 ,0x40 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x07 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x08 ,0x40 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x09 ,0xfe );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0a ,0x09 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0b ,0x80 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0c ,0x01 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0e ,0xd3 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0f ,0x38 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x10 ,0x84 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x11 ,0x06 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x12 ,0x20 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x13 ,0x20 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x14 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x15 ,0x40 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x16 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x17 ,0x40 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x18 ,0xef );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x19 ,0x19 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1a ,0x20 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1b ,0x76 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1c ,0x04 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1e ,0x95 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1f ,0x75 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x20 ,0x1f );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x21 ,0x27 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x22 ,0x16 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x24 ,0x46 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x25 ,0x20 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x26 ,0x90 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x27 ,0x88 );msleep (1 ); +rtl8225_write_phy_ofdm (dev,0x00 ,0x01 ); +rtl8225_write_phy_ofdm (dev,0x01 ,0x02 ); +rtl8225_write_phy_ofdm (dev,0x02 ,0x42 ); +rtl8225_write_phy_ofdm (dev,0x03 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x04 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x05 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x06 ,0x40 ); +rtl8225_write_phy_ofdm (dev,0x07 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x08 ,0x40 ); +rtl8225_write_phy_ofdm (dev,0x09 ,0xfe ); +rtl8225_write_phy_ofdm (dev,0x0a ,0x09 ); +rtl8225_write_phy_ofdm (dev,0x0b ,0x80 ); +rtl8225_write_phy_ofdm (dev,0x0c ,0x01 ); +rtl8225_write_phy_ofdm (dev,0x0e ,0xd3 ); +rtl8225_write_phy_ofdm (dev,0x0f ,0x38 ); +rtl8225_write_phy_ofdm (dev,0x10 ,0x84 ); +rtl8225_write_phy_ofdm (dev,0x11 ,0x06 ); +rtl8225_write_phy_ofdm (dev,0x12 ,0x20 ); +rtl8225_write_phy_ofdm (dev,0x13 ,0x20 ); +rtl8225_write_phy_ofdm (dev,0x14 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x15 ,0x40 ); +rtl8225_write_phy_ofdm (dev,0x16 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x17 ,0x40 ); +rtl8225_write_phy_ofdm (dev,0x18 ,0xef ); +rtl8225_write_phy_ofdm (dev,0x19 ,0x19 ); +rtl8225_write_phy_ofdm (dev,0x1a ,0x20 ); +rtl8225_write_phy_ofdm (dev,0x1b ,0x76 ); +rtl8225_write_phy_ofdm (dev,0x1c ,0x04 ); +rtl8225_write_phy_ofdm (dev,0x1e ,0x95 ); +rtl8225_write_phy_ofdm (dev,0x1f ,0x75 ); +rtl8225_write_phy_ofdm (dev,0x20 ,0x1f ); +rtl8225_write_phy_ofdm (dev,0x21 ,0x27 ); +rtl8225_write_phy_ofdm (dev,0x22 ,0x16 ); +rtl8225_write_phy_ofdm (dev,0x24 ,0x46 ); +rtl8225_write_phy_ofdm (dev,0x25 ,0x20 ); +rtl8225_write_phy_ofdm (dev,0x26 ,0x90 ); +rtl8225_write_phy_ofdm (dev,0x27 ,0x88 );rtl8225_write_phy_ofdm (dev,0x0d , rtl8225_gain[2 *4 ]);rtl8225_write_phy_ofdm (dev,0x1b , rtl8225_gain[2 *4 +2 ]);
@@ -459,7 +457,7 @@ static void rtl8225_rf_init(struct ieee8/* RX antenna default to A */ rtl8225_write_phy_cck (dev,0x10 ,0x9b );msleep (1 );/* B: 0xDB */ -rtl8225_write_phy_ofdm (dev,0x26 ,0x90 );msleep (1 );/* B: 0x10 */ +rtl8225_write_phy_ofdm (dev,0x26 ,0x90 );/* B: 0x10 */ rtl818x_iowrite8 (priv, &priv->map->TX_ANTENNA,0x03 );/* B: 0x00 */ msleep (1 );
@@ -736,53 +734,51 @@ static void rtl8225z2_rf_init(struct ieefor (i =0 ; i <ARRAY_SIZE (rtl8225_agc); i++) {rtl8225_write_phy_ofdm (dev,0xB , rtl8225_agc[i]); -msleep (1 );rtl8225_write_phy_ofdm (dev,0xA ,0x80 + i); -msleep (1 ); }msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x00 ,0x01 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x01 ,0x02 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x02 ,0x42 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x03 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x04 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x05 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x06 ,0x40 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x07 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x08 ,0x40 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x09 ,0xfe );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0a ,0x08 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0b ,0x80 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0c ,0x01 );msleep (1 ); +rtl8225_write_phy_ofdm (dev,0x00 ,0x01 ); +rtl8225_write_phy_ofdm (dev,0x01 ,0x02 ); +rtl8225_write_phy_ofdm (dev,0x02 ,0x42 ); +rtl8225_write_phy_ofdm (dev,0x03 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x04 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x05 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x06 ,0x40 ); +rtl8225_write_phy_ofdm (dev,0x07 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x08 ,0x40 ); +rtl8225_write_phy_ofdm (dev,0x09 ,0xfe ); +rtl8225_write_phy_ofdm (dev,0x0a ,0x08 ); +rtl8225_write_phy_ofdm (dev,0x0b ,0x80 ); +rtl8225_write_phy_ofdm (dev,0x0c ,0x01 );rtl8225_write_phy_ofdm (dev,0x0d ,0x43 ); -rtl8225_write_phy_ofdm (dev,0x0e ,0xd3 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0f ,0x38 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x10 ,0x84 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x11 ,0x07 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x12 ,0x20 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x13 ,0x20 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x14 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x15 ,0x40 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x16 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x17 ,0x40 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x18 ,0xef );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x19 ,0x19 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1a ,0x20 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1b ,0x15 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1c ,0x04 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1d ,0xc5 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1e ,0x95 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1f ,0x75 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x20 ,0x1f );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x21 ,0x17 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x22 ,0x16 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x23 ,0x80 );msleep (1 );//FIXME: not needed? -rtl8225_write_phy_ofdm (dev,0x24 ,0x46 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x25 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x26 ,0x90 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x27 ,0x88 );msleep (1 ); +rtl8225_write_phy_ofdm (dev,0x0e ,0xd3 ); +rtl8225_write_phy_ofdm (dev,0x0f ,0x38 ); +rtl8225_write_phy_ofdm (dev,0x10 ,0x84 ); +rtl8225_write_phy_ofdm (dev,0x11 ,0x07 ); +rtl8225_write_phy_ofdm (dev,0x12 ,0x20 ); +rtl8225_write_phy_ofdm (dev,0x13 ,0x20 ); +rtl8225_write_phy_ofdm (dev,0x14 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x15 ,0x40 ); +rtl8225_write_phy_ofdm (dev,0x16 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x17 ,0x40 ); +rtl8225_write_phy_ofdm (dev,0x18 ,0xef ); +rtl8225_write_phy_ofdm (dev,0x19 ,0x19 ); +rtl8225_write_phy_ofdm (dev,0x1a ,0x20 ); +rtl8225_write_phy_ofdm (dev,0x1b ,0x15 ); +rtl8225_write_phy_ofdm (dev,0x1c ,0x04 ); +rtl8225_write_phy_ofdm (dev,0x1d ,0xc5 ); +rtl8225_write_phy_ofdm (dev,0x1e ,0x95 ); +rtl8225_write_phy_ofdm (dev,0x1f ,0x75 ); +rtl8225_write_phy_ofdm (dev,0x20 ,0x1f ); +rtl8225_write_phy_ofdm (dev,0x21 ,0x17 ); +rtl8225_write_phy_ofdm (dev,0x22 ,0x16 ); +rtl8225_write_phy_ofdm (dev,0x23 ,0x80 ); +rtl8225_write_phy_ofdm (dev,0x24 ,0x46 ); +rtl8225_write_phy_ofdm (dev,0x25 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x26 ,0x90 ); +rtl8225_write_phy_ofdm (dev,0x27 ,0x88 );rtl8225_write_phy_ofdm (dev,0x0b , rtl8225z2_gain_bg[4 *3 ]);rtl8225_write_phy_ofdm (dev,0x1b , rtl8225z2_gain_bg[4 *3 +1 ]);
@@ -823,7 +819,7 @@ static void rtl8225z2_rf_init(struct iee/* RX antenna default to A */ rtl8225_write_phy_cck (dev,0x10 ,0x9b );msleep (1 );/* B: 0xDB */ -rtl8225_write_phy_ofdm (dev,0x26 ,0x90 );msleep (1 );/* B: 0x10 */ +rtl8225_write_phy_ofdm (dev,0x26 ,0x90 );/* B: 0x10 */ rtl818x_iowrite8 (priv, &priv->map->TX_ANTENNA,0x03 );/* B: 0x00 */ msleep (1 );
@@ -889,10 +885,10 @@ static void rtl8225z2_b_rf_init(struct irtl818x_iowrite32 (priv, (__le32 *)0xFFFC , (7 <<12 ) | (3 <<8 ) |28 );rtl818x_iowrite8 (priv, &priv->map->ACM_CONTROL,0 ); -rtl8225_write_phy_ofdm (dev,0x97 ,0x46 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0xa4 ,0xb6 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x85 ,0xfc );msleep (1 ); -rtl8225_write_phy_cck (dev,0xc1 ,0x88 );msleep (1 ); +rtl8225_write_phy_ofdm (dev,0x97 ,0x46 ); +rtl8225_write_phy_ofdm (dev,0xa4 ,0xb6 ); +rtl8225_write_phy_ofdm (dev,0x85 ,0xfc ); +rtl8225_write_phy_cck (dev,0xc1 ,0x88 ); }static void rtl8225_rf_stop (struct ieee80211_hw *dev)
PATCH 3/6 rtl8187: Remove CCK delays
In reply to Larry FingerRoutine rtl8225_write_phy_cck() calls rtl8225_write_phy(), which concludes with a sleep of 1 msec; therefore a call to rtl8225_write_phy_cck() immediately followed by an msleep(1) is not needed.
---
John,
This is 2.6.29 material.
Larry
---
drivers/net/wireless/rtl8187_rtl8225.c +46 -46
@@ -423,40 +423,40 @@ static void rtl8225_rf_init(struct ieee8rtl8225_write_phy_ofdm (dev,0x1d , rtl8225_gain[2 *4 +3 ]);rtl8225_write_phy_ofdm (dev,0x23 , rtl8225_gain[2 *4 +1 ]); -rtl8225_write_phy_cck (dev,0x00 ,0x98 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x03 ,0x20 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x04 ,0x7e );msleep (1 ); -rtl8225_write_phy_cck (dev,0x05 ,0x12 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x06 ,0xfc );msleep (1 ); -rtl8225_write_phy_cck (dev,0x07 ,0x78 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x08 ,0x2e );msleep (1 ); -rtl8225_write_phy_cck (dev,0x10 ,0x9b );msleep (1 ); -rtl8225_write_phy_cck (dev,0x11 ,0x88 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x12 ,0x47 );msleep (1 ); +rtl8225_write_phy_cck (dev,0x00 ,0x98 ); +rtl8225_write_phy_cck (dev,0x03 ,0x20 ); +rtl8225_write_phy_cck (dev,0x04 ,0x7e ); +rtl8225_write_phy_cck (dev,0x05 ,0x12 ); +rtl8225_write_phy_cck (dev,0x06 ,0xfc ); +rtl8225_write_phy_cck (dev,0x07 ,0x78 ); +rtl8225_write_phy_cck (dev,0x08 ,0x2e ); +rtl8225_write_phy_cck (dev,0x10 ,0x9b ); +rtl8225_write_phy_cck (dev,0x11 ,0x88 ); +rtl8225_write_phy_cck (dev,0x12 ,0x47 );rtl8225_write_phy_cck (dev,0x13 ,0xd0 );rtl8225_write_phy_cck (dev,0x19 ,0x00 );rtl8225_write_phy_cck (dev,0x1a ,0xa0 );rtl8225_write_phy_cck (dev,0x1b ,0x08 );rtl8225_write_phy_cck (dev,0x40 ,0x86 ); -rtl8225_write_phy_cck (dev,0x41 ,0x8d );msleep (1 ); -rtl8225_write_phy_cck (dev,0x42 ,0x15 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x43 ,0x18 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x44 ,0x1f );msleep (1 ); -rtl8225_write_phy_cck (dev,0x45 ,0x1e );msleep (1 ); -rtl8225_write_phy_cck (dev,0x46 ,0x1a );msleep (1 ); -rtl8225_write_phy_cck (dev,0x47 ,0x15 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x48 ,0x10 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x49 ,0x0a );msleep (1 ); -rtl8225_write_phy_cck (dev,0x4a ,0x05 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x4b ,0x02 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x4c ,0x05 );msleep (1 ); +rtl8225_write_phy_cck (dev,0x41 ,0x8d ); +rtl8225_write_phy_cck (dev,0x42 ,0x15 ); +rtl8225_write_phy_cck (dev,0x43 ,0x18 ); +rtl8225_write_phy_cck (dev,0x44 ,0x1f ); +rtl8225_write_phy_cck (dev,0x45 ,0x1e ); +rtl8225_write_phy_cck (dev,0x46 ,0x1a ); +rtl8225_write_phy_cck (dev,0x47 ,0x15 ); +rtl8225_write_phy_cck (dev,0x48 ,0x10 ); +rtl8225_write_phy_cck (dev,0x49 ,0x0a ); +rtl8225_write_phy_cck (dev,0x4a ,0x05 ); +rtl8225_write_phy_cck (dev,0x4b ,0x02 ); +rtl8225_write_phy_cck (dev,0x4c ,0x05 );rtl818x_iowrite8 (priv, &priv->map->TESTR,0x0D );rtl8225_rf_set_tx_power (dev,1 );/* RX antenna default to A */ -rtl8225_write_phy_cck (dev,0x10 ,0x9b );msleep (1 );/* B: 0xDB */ +rtl8225_write_phy_cck (dev,0x10 ,0x9b );/* B: 0xDB */ rtl8225_write_phy_ofdm (dev,0x26 ,0x90 );/* B: 0x10 */ rtl818x_iowrite8 (priv, &priv->map->TX_ANTENNA,0x03 );/* B: 0x00 */
@@ -785,40 +785,40 @@ static void rtl8225z2_rf_init(struct ieertl8225_write_phy_ofdm (dev,0x1d , rtl8225z2_gain_bg[4 *3 +2 ]);rtl8225_write_phy_ofdm (dev,0x21 ,0x37 ); -rtl8225_write_phy_cck (dev,0x00 ,0x98 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x03 ,0x20 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x04 ,0x7e );msleep (1 ); -rtl8225_write_phy_cck (dev,0x05 ,0x12 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x06 ,0xfc );msleep (1 ); -rtl8225_write_phy_cck (dev,0x07 ,0x78 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x08 ,0x2e );msleep (1 ); -rtl8225_write_phy_cck (dev,0x10 ,0x9b );msleep (1 ); -rtl8225_write_phy_cck (dev,0x11 ,0x88 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x12 ,0x47 );msleep (1 ); +rtl8225_write_phy_cck (dev,0x00 ,0x98 ); +rtl8225_write_phy_cck (dev,0x03 ,0x20 ); +rtl8225_write_phy_cck (dev,0x04 ,0x7e ); +rtl8225_write_phy_cck (dev,0x05 ,0x12 ); +rtl8225_write_phy_cck (dev,0x06 ,0xfc ); +rtl8225_write_phy_cck (dev,0x07 ,0x78 ); +rtl8225_write_phy_cck (dev,0x08 ,0x2e ); +rtl8225_write_phy_cck (dev,0x10 ,0x9b ); +rtl8225_write_phy_cck (dev,0x11 ,0x88 ); +rtl8225_write_phy_cck (dev,0x12 ,0x47 );rtl8225_write_phy_cck (dev,0x13 ,0xd0 );rtl8225_write_phy_cck (dev,0x19 ,0x00 );rtl8225_write_phy_cck (dev,0x1a ,0xa0 );rtl8225_write_phy_cck (dev,0x1b ,0x08 );rtl8225_write_phy_cck (dev,0x40 ,0x86 ); -rtl8225_write_phy_cck (dev,0x41 ,0x8d );msleep (1 ); -rtl8225_write_phy_cck (dev,0x42 ,0x15 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x43 ,0x18 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x44 ,0x36 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x45 ,0x35 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x46 ,0x2e );msleep (1 ); -rtl8225_write_phy_cck (dev,0x47 ,0x25 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x48 ,0x1c );msleep (1 ); -rtl8225_write_phy_cck (dev,0x49 ,0x12 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x4a ,0x09 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x4b ,0x04 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x4c ,0x05 );msleep (1 ); +rtl8225_write_phy_cck (dev,0x41 ,0x8d ); +rtl8225_write_phy_cck (dev,0x42 ,0x15 ); +rtl8225_write_phy_cck (dev,0x43 ,0x18 ); +rtl8225_write_phy_cck (dev,0x44 ,0x36 ); +rtl8225_write_phy_cck (dev,0x45 ,0x35 ); +rtl8225_write_phy_cck (dev,0x46 ,0x2e ); +rtl8225_write_phy_cck (dev,0x47 ,0x25 ); +rtl8225_write_phy_cck (dev,0x48 ,0x1c ); +rtl8225_write_phy_cck (dev,0x49 ,0x12 ); +rtl8225_write_phy_cck (dev,0x4a ,0x09 ); +rtl8225_write_phy_cck (dev,0x4b ,0x04 ); +rtl8225_write_phy_cck (dev,0x4c ,0x05 );rtl818x_iowrite8 (priv, (u8 *)0xFF5B ,0x0D );msleep (1 );rtl8225z2_rf_set_tx_power (dev,1 );/* RX antenna default to A */ -rtl8225_write_phy_cck (dev,0x10 ,0x9b );msleep (1 );/* B: 0xDB */ +rtl8225_write_phy_cck (dev,0x10 ,0x9b );/* B: 0xDB */ rtl8225_write_phy_ofdm (dev,0x26 ,0x90 );/* B: 0x10 */ rtl818x_iowrite8 (priv, &priv->map->TX_ANTENNA,0x03 );/* B: 0x00 */
PATCH 4/6 rtl8187: Remove msleep calls after calls to rtl8225_write
In reply to Larry FingerRoutine rtl8225_write() calls either rtl8225_write_bitbang() or rtl8225_write_8051(), both of which end with an msleep() command. As a result, a rtl8225_write() immediately followed by an msleep() is not needed.
---
John,
This is 2.6.29 material.
Larry
---
drivers/net/wireless/rtl8187_rtl8225.c +58 -57
@@ -333,21 +333,21 @@ static void rtl8225_rf_init(struct ieee8struct rtl8187_priv *priv = dev->priv;int i; -rtl8225_write (dev,0x0 ,0x067 );msleep (1 ); -rtl8225_write (dev,0x1 ,0xFE0 );msleep (1 ); -rtl8225_write (dev,0x2 ,0x44D );msleep (1 ); -rtl8225_write (dev,0x3 ,0x441 );msleep (1 ); -rtl8225_write (dev,0x4 ,0x486 );msleep (1 ); -rtl8225_write (dev,0x5 ,0xBC0 );msleep (1 ); -rtl8225_write (dev,0x6 ,0xAE6 );msleep (1 ); -rtl8225_write (dev,0x7 ,0x82A );msleep (1 ); -rtl8225_write (dev,0x8 ,0x01F );msleep (1 ); -rtl8225_write (dev,0x9 ,0x334 );msleep (1 ); -rtl8225_write (dev,0xA ,0xFD4 );msleep (1 ); -rtl8225_write (dev,0xB ,0x391 );msleep (1 ); -rtl8225_write (dev,0xC ,0x050 );msleep (1 ); -rtl8225_write (dev,0xD ,0x6DB );msleep (1 ); -rtl8225_write (dev,0xE ,0x029 );msleep (1 ); +rtl8225_write (dev,0x0 ,0x067 ); +rtl8225_write (dev,0x1 ,0xFE0 ); +rtl8225_write (dev,0x2 ,0x44D ); +rtl8225_write (dev,0x3 ,0x441 ); +rtl8225_write (dev,0x4 ,0x486 ); +rtl8225_write (dev,0x5 ,0xBC0 ); +rtl8225_write (dev,0x6 ,0xAE6 ); +rtl8225_write (dev,0x7 ,0x82A ); +rtl8225_write (dev,0x8 ,0x01F ); +rtl8225_write (dev,0x9 ,0x334 ); +rtl8225_write (dev,0xA ,0xFD4 ); +rtl8225_write (dev,0xB ,0x391 ); +rtl8225_write (dev,0xC ,0x050 ); +rtl8225_write (dev,0xD ,0x6DB ); +rtl8225_write (dev,0xE ,0x029 );rtl8225_write (dev,0xF ,0x914 );msleep (100 );rtl8225_write (dev,0x2 ,0xC4D );msleep (200 );
@@ -685,22 +685,23 @@ static void rtl8225z2_rf_init(struct ieestruct rtl8187_priv *priv = dev->priv;int i; -rtl8225_write (dev,0x0 ,0x2BF );msleep (1 ); -rtl8225_write (dev,0x1 ,0xEE0 );msleep (1 ); -rtl8225_write (dev,0x2 ,0x44D );msleep (1 ); -rtl8225_write (dev,0x3 ,0x441 );msleep (1 ); -rtl8225_write (dev,0x4 ,0x8C3 );msleep (1 ); -rtl8225_write (dev,0x5 ,0xC72 );msleep (1 ); -rtl8225_write (dev,0x6 ,0x0E6 );msleep (1 ); -rtl8225_write (dev,0x7 ,0x82A );msleep (1 ); -rtl8225_write (dev,0x8 ,0x03F );msleep (1 ); -rtl8225_write (dev,0x9 ,0x335 );msleep (1 ); -rtl8225_write (dev,0xa ,0x9D4 );msleep (1 ); -rtl8225_write (dev,0xb ,0x7BB );msleep (1 ); -rtl8225_write (dev,0xc ,0x850 );msleep (1 ); -rtl8225_write (dev,0xd ,0xCDF );msleep (1 ); -rtl8225_write (dev,0xe ,0x02B );msleep (1 ); -rtl8225_write (dev,0xf ,0x114 );msleep (100 ); +rtl8225_write (dev,0x0 ,0x2BF ); +rtl8225_write (dev,0x1 ,0xEE0 ); +rtl8225_write (dev,0x2 ,0x44D ); +rtl8225_write (dev,0x3 ,0x441 ); +rtl8225_write (dev,0x4 ,0x8C3 ); +rtl8225_write (dev,0x5 ,0xC72 ); +rtl8225_write (dev,0x6 ,0x0E6 ); +rtl8225_write (dev,0x7 ,0x82A ); +rtl8225_write (dev,0x8 ,0x03F ); +rtl8225_write (dev,0x9 ,0x335 ); +rtl8225_write (dev,0xa ,0x9D4 ); +rtl8225_write (dev,0xb ,0x7BB ); +rtl8225_write (dev,0xc ,0x850 ); +rtl8225_write (dev,0xd ,0xCDF ); +rtl8225_write (dev,0xe ,0x02B ); +rtl8225_write (dev,0xf ,0x114 ); +msleep (100 );rtl8225_write (dev,0x0 ,0x1B7 );
@@ -831,38 +832,38 @@ static void rtl8225z2_b_rf_init(struct istruct rtl8187_priv *priv = dev->priv;int i; -rtl8225_write (dev,0x0 ,0x0B7 );msleep (1 ); -rtl8225_write (dev,0x1 ,0xEE0 );msleep (1 ); -rtl8225_write (dev,0x2 ,0x44D );msleep (1 ); -rtl8225_write (dev,0x3 ,0x441 );msleep (1 ); -rtl8225_write (dev,0x4 ,0x8C3 );msleep (1 ); -rtl8225_write (dev,0x5 ,0xC72 );msleep (1 ); -rtl8225_write (dev,0x6 ,0x0E6 );msleep (1 ); -rtl8225_write (dev,0x7 ,0x82A );msleep (1 ); -rtl8225_write (dev,0x8 ,0x03F );msleep (1 ); -rtl8225_write (dev,0x9 ,0x335 );msleep (1 ); -rtl8225_write (dev,0xa ,0x9D4 );msleep (1 ); -rtl8225_write (dev,0xb ,0x7BB );msleep (1 ); -rtl8225_write (dev,0xc ,0x850 );msleep (1 ); -rtl8225_write (dev,0xd ,0xCDF );msleep (1 ); -rtl8225_write (dev,0xe ,0x02B );msleep (1 ); -rtl8225_write (dev,0xf ,0x114 );msleep (1 ); +rtl8225_write (dev,0x0 ,0x0B7 ); +rtl8225_write (dev,0x1 ,0xEE0 ); +rtl8225_write (dev,0x2 ,0x44D ); +rtl8225_write (dev,0x3 ,0x441 ); +rtl8225_write (dev,0x4 ,0x8C3 ); +rtl8225_write (dev,0x5 ,0xC72 ); +rtl8225_write (dev,0x6 ,0x0E6 ); +rtl8225_write (dev,0x7 ,0x82A ); +rtl8225_write (dev,0x8 ,0x03F ); +rtl8225_write (dev,0x9 ,0x335 ); +rtl8225_write (dev,0xa ,0x9D4 ); +rtl8225_write (dev,0xb ,0x7BB ); +rtl8225_write (dev,0xc ,0x850 ); +rtl8225_write (dev,0xd ,0xCDF ); +rtl8225_write (dev,0xe ,0x02B ); +rtl8225_write (dev,0xf ,0x114 ); -rtl8225_write (dev,0x0 ,0x1B7 );msleep (1 ); +rtl8225_write (dev,0x0 ,0x1B7 );for (i =0 ; i <ARRAY_SIZE (rtl8225z2_rxgain); i++) { -rtl8225_write (dev,0x1 , i +1 );msleep (1 ); -rtl8225_write (dev,0x2 , rtl8225z2_rxgain[i]);msleep (1 ); +rtl8225_write (dev,0x1 , i +1 ); +rtl8225_write (dev,0x2 , rtl8225z2_rxgain[i]); } -rtl8225_write (dev,0x3 ,0x080 );msleep (1 ); -rtl8225_write (dev,0x5 ,0x004 );msleep (1 ); -rtl8225_write (dev,0x0 ,0x0B7 );msleep (1 ); +rtl8225_write (dev,0x3 ,0x080 ); +rtl8225_write (dev,0x5 ,0x004 ); +rtl8225_write (dev,0x0 ,0x0B7 ); -rtl8225_write (dev,0x2 ,0xC4D );msleep (1 ); +rtl8225_write (dev,0x2 ,0xC4D ); -rtl8225_write (dev,0x2 ,0x44D );msleep (1 ); -rtl8225_write (dev,0x0 ,0x2BF );msleep (1 ); +rtl8225_write (dev,0x2 ,0x44D ); +rtl8225_write (dev,0x0 ,0x2BF );rtl818x_iowrite8 (priv, &priv->map->TX_GAIN_CCK,0x03 );rtl818x_iowrite8 (priv, &priv->map->TX_GAIN_OFDM,0x07 );
@@ -896,7 +897,7 @@ static void rtl8225_rf_stop(struct ieee8u8 reg;struct rtl8187_priv *priv = dev->priv; -rtl8225_write (dev,0x4 ,0x1f );msleep (1 ); +rtl8225_write (dev,0x4 ,0x1f );rtl818x_iowrite8 (priv, &priv->map->EEPROM_CMD,RTL818X_EEPROM_CMD_CONFIG ); reg =rtl818x_ioread8 (priv, &priv->map->CONFIG3);
PATCH 5/6 rtl8187: Remove primitive write delays
In reply to Larry FingerEach of the primary write routines, rtl8187_write_phy(), rtl8225_write_bitbang(), and rtl8225_write_8051() all conclude with an msleep() command. Testing shows that these are not needed.
---
drivers/net/wireless/rtl8187_dev.c +0 -2
@@ -152,8 +152,6 @@ void rtl8187_write_phy(struct ieee80211_rtl818x_iowrite8 (priv, &priv->map->PHY[2 ], (data >>16 ) &0xFF );rtl818x_iowrite8 (priv, &priv->map->PHY[1 ], (data >>8 ) &0xFF );rtl818x_iowrite8 (priv, &priv->map->PHY[0 ], data &0xFF ); - -msleep (1 ); }static void rtl8187_tx_cb (struct urb *urb)
drivers/net/wireless/rtl8187_rtl8225.c +0 -2
@@ -64,7 +64,6 @@ static void rtl8225_write_bitbang(structrtl818x_iowrite16 (priv, &priv->map->RFPinsOutput, reg80 | (1 <<2 ));rtl818x_iowrite16 (priv, &priv->map->RFPinsSelect, reg84); -msleep (2 ); }static void rtl8225_write_8051 (struct ieee80211_hw *dev,u8 addr,__le16 data)
@@ -98,7 +97,6 @@ static void rtl8225_write_8051(struct iertl818x_iowrite16 (priv, &priv->map->RFPinsOutput, reg80 | (1 <<2 ));rtl818x_iowrite16 (priv, &priv->map->RFPinsSelect, reg84); -msleep (2 ); }static void rtl8225_write (struct ieee80211_hw *dev,u8 addr,u16 data)
[RFC/RFT] rtl8187: Change TX power settings
The latest vendor driver (rtl8187B_linux_26.1036.0708.2008) has changed the CCK and OFDM power setting code as compared with previous versions. This patch implements those changes for the Linux driver.
---
Piter,
Does this help your devices?
Larry
drivers/net/wireless/rtl8187_rtl8225.c +11 -7
@@ -578,23 +578,27 @@ static void rtl8225z2_b_rf_set_tx_power( {struct rtl8187_priv *priv = dev->priv;u8 cck_power, ofdm_power; +u8 min_cck_power = (priv->hw_rev == RTL8187BvB) ?0 :7 ; +u8 max_cck_power = (priv->hw_rev == RTL8187BvB) ?15 :22 ; +u8 min_ofdm_power = (priv->hw_rev == RTL8187BvB) ?2 :10 ; +u8 max_ofdm_power = (priv->hw_rev == RTL8187BvB) ?17 :25 ;const u8 *tmp;int i; cck_power = priv->channels[channel -1 ].hw_value &0xF ; ofdm_power = priv->channels[channel -1 ].hw_value >>4 ; -if (cck_power >15 ) - cck_power = (priv->hw_rev == RTL8187BvB) ?15 :22 ; +if (cck_power > max_cck_power - min_cck_power) + cck_power = max_cck_power;else - cck_power += (priv->hw_rev == RTL8187BvB) ?0 :7 ; + cck_power += min_cck_power; cck_power += priv->txpwr_base &0xF ; cck_power =min (cck_power, (u8 )35 ); -if (ofdm_power >15 ) - ofdm_power = (priv->hw_rev == RTL8187BvB) ?17 :25 ; +if (ofdm_power > max_ofdm_power - min_ofdm_power) + ofdm_power = max_ofdm_power;else - ofdm_power += (priv->hw_rev == RTL8187BvB) ?2 :10 ; + ofdm_power += min_ofdm_power; ofdm_power += (priv->txpwr_base >>4 ) &0xF ; ofdm_power =min (ofdm_power, (u8 )35 );
@@ -625,7 +629,7 @@ static void rtl8225z2_b_rf_set_tx_power(rtl8225_write_phy_cck (dev,0x44 + i, *tmp++);rtl818x_iowrite8 (priv, &priv->map->TX_GAIN_CCK, - rtl8225z2_tx_gain_cck_ofdm[cck_power]); + rtl8225z2_tx_gain_cck_ofdm[cck_power] <<1 );msleep (1 ); rtl818x_iowrite8(priv, &priv->map->TX_GAIN_OFDM,
Re: [RFC/RFT] rtl8187: Change TX power settings
Hi Larry,
I think one needs to be more careful about removing some of the
(priv->hw_rev == RTL8187BvB) in the 2nd half of the patch. The latest vendor driver can stop supporting the older 8187BvB chip (intentionally or by mistake), but linux users often/occasionally have older hardware. I think one wants to make sure that numbers from the new code are no-bigger
than numbers from the old in the 2nd part of the patch below
in the case of (priv->hw_rev == RTL8187BvB).
Hin-Tak
Quoted 75 lines · Larry Finger
The latest vendor driver (rtl8187B_linux_26.1036.0708.2008) has changed the
CCK and OFDM power setting code as compared with previous versions. This
patch implements those changes for the Linux driver.Signed-off-by: Larry Finger
<[email protected]>
---Piter,
Does this help your devices?
Larry
Index:
wireless-testing/drivers/net/wireless/rtl8187_rtl8225.c
===================================================================
---wireless-testing.orig/drivers/net/wireless/rtl8187_rtl8225.c+++wireless-testing/drivers/net/wireless/rtl8187_rtl8225.c(quoted diff) +0
-0@@ -578,23 +578,27 @@ static voidrtl8225z2_b_rf_set_tx_power(
{drivers/net/wireless/rtl8187_rtl8225.c +1
-0struct rtl8187_priv *priv = dev->priv;u8 cck_power, ofdm_power; + u8 min_cck_power = (priv->hw_rev == RTL8187BvB) ? 0 :7;
(quoted diff) +1
-0+ u8 max_cck_power = (priv->hw_rev == RTL8187BvB) ? 15 :22;
(quoted diff) +1
-0+ u8 min_ofdm_power = (priv->hw_rev == RTL8187BvB) ? 2 :10;
(quoted diff) +1
-0+ u8 max_ofdm_power = (priv->hw_rev == RTL8187BvB) ? 17: 25;
drivers/net/wireless/rtl8187_rtl8225.c +0
-0const u8 *tmp;int i; cck_power = priv->channels[channel - 1].hw_value &
0xF;
ofdm_power= priv->channels[channel - 1].hw_valueQuoted 1 line
Quoted 1 line
4;
drivers/net/wireless/rtl8187_rtl8225.c +6
-6-if (cck_power >15 ) - cck_power = (priv->hw_rev == RTL8187BvB) ?15 :22 ; +if (cck_power > max_cck_power - min_cck_power) + cck_power = max_cck_power;else - cck_power += (priv->hw_rev == RTL8187BvB) ?0 :7 ; + cck_power += min_cck_power; cck_power += priv->txpwr_base &0xF ; cck_power =min (cck_power, (u8 )35 ); -if (ofdm_power >15 ) - ofdm_power = (priv->hw_rev == RTL8187BvB) ?17 :25 ; +if (ofdm_power > max_ofdm_power - min_ofdm_power) + ofdm_power = max_ofdm_power;else - ofdm_power += (priv->hw_rev == RTL8187BvB) ?2 :10 ; + ofdm_power += min_ofdm_power; ofdm_power += (priv->txpwr_base >>4 ) &0xF ; ofdm_power =min (ofdm_power, (u8 )35 );@@ -625,7 +629,7 @@ static voidrtl8225z2_b_rf_set_tx_power(
drivers/net/wireless/rtl8187_rtl8225.c +1
-1rtl8225_write_phy_cck (dev,0x44 + i, *tmp++);rtl818x_iowrite8 (priv, &priv->map->TX_GAIN_CCK, - rtl8225z2_tx_gain_cck_ofdm[cck_power]); + rtl8225z2_tx_gain_cck_ofdm[cck_power] <<1 );msleep (1 ); rtl818x_iowrite8(priv,
&priv->map->TX_GAIN_OFDM,
Re: [RFC/RFT] rtl8187: Change TX power settings
Quoted 6 lines · Hin-Tak Leung
Hi Larry,
I think one needs to be more careful about removing some of the
(priv->hw_rev== RTL8187BvB) in the 2nd half of the patch. The latest vendor driver can stop supporting the older 8187BvB chip (intentionally or by mistake), but linux users often/occasionally have older hardware. I think one wants to make sure that numbers from the new code are no-bigger
than numbers from the old in the 2nd part of the patch below
I think that all the (priv->hw_rev == RTL8187BvB) stuff is still there - I just moved it to the min/max definitions, but I'll take another look.
Larry
Re: [RFC/RFT] rtl8187: Change TX power settings
In reply to Larry FingerQuoted 4 lines · Larry Finger
The latest vendor driver (rtl8187B_linux_26.1036.0708.2008) has changed the CCK and OFDM power setting code as compared with previous versions. This patch implements those changes for the Linux driver.
Quoted 8 lines
Signed-off-by Larry Finger <[email protected]>---
Piter,
Does this help your devices?
Larry
Yes! I apply the patch against 2.6.27.4 and is all OK -:) Just now i upload some package files to slackware.com!
Seems to me that all the magic is:
drivers/net/wireless/rtl8187_rtl8225.c static void rtl8225z2_b_rf_set_tx_power( · line 632
Quoted 1 line
drivers/net/wireless/rtl8187_rtl8225.c +1
-0+ rtl8225z2_tx_gain_cck_ofdm[cck_power] << 1);
Correct? It only increases the TX power?
Thanks!
Piter PUNK
Signature · 7 lines
| E-Mail: [email protected] .|. /V\ // \\ UIN:116043354 Homepage:http://piterpunk.info02.com.br /( )\ ^`~'^ ----> Slackware Linux <---- #105432
PATCH 6/6 rtl8187: Reduce channel switch delay
In reply to Larry FingerThe latest vendor driver (rtl8187B_linux_26.1036.0708.2008) has a 10 msec delay after the call to set a new channel, but not before.
---
drivers/net/wireless/rtl8187_dev.c +0 -1
@@ -870,7 +870,6 @@ static int rtl8187_config(struct ieee802*/ rtl818x_iowrite32 (priv, &priv->map->TX_CONF, reg |RTL818X_TX_CONF_LOOPBACK_MAC ); -msleep (10 ); priv->rf->set_chan (dev, conf);msleep (10 );rtl818x_iowrite32 (priv, &priv->map->TX_CONF, reg);
cover rtl8187: Reduce delays to reduce startup time
In reply to Larry FingerThe current version of the rtl8187 driver contains a large number of msleep() commands that cause initialization to take a long time. This series of patches include revisions that were found by looking at the latest version of the vendor's driver (rtl8187B_linux_26.1036.0708.2008), and others that were found to be OK with testing.
To keep each of the patches relatively small, these changes are split into 6 parts. The changes in them are as follows:
1. Remove all delays of greater than 1 sec.
2. Remove the msleep(1) that immediately follow calls to rtl8225_write_phy_ofdm().
3. Remove the msleep(1) that immediately follow calls to rtl8225_write_phy_cck().
4. Remove the msleep(1) that immediately follow calls to rtl8225_write().
5. Remove the nsleep() calls from rtl8187_write_phy(), rtl8225_write_bitbang(), and rtl8225_write_8051().
6. Remove the msleep(10) that preceeds a channel change.
Before these changes, routine rtl8187b_init_hw() took 15.82 sec to execute. It now takes 3.76 sec.
---
Quoted 17 lines · On Friday 31 October 2008 14:51:36 Larry Finger wrote:
The current version of the rtl8187 driver contains a large number of
msleep()commands that cause initialization to take a long time. This series of patches include revisions that were found by looking at the latest version of the vendor's driver (rtl8187B_linux_26.1036.0708.2008), and others that were found to be OK with testing.To keep each of the patches relatively small, these changes are split into 6 parts. The changes in them are as follows:
1. Remove all delays of greater than 1 sec.
2. Remove the msleep(1) that immediately follow calls tortl8225_write_phy_ofdm().
3. Remove the msleep(1) that immediately follow calls tortl8225_write_phy_cck().
4. Remove the msleep(1) that immediately follow calls tortl8225_write().
5. Remove thensleep()calls fromrtl8187_write_phy(),rtl8225_write_bitbang(), andrtl8225_write_8051().
6. Remove the msleep(10) that preceeds a channel change.
Quoted 2 lines
Before these changes, routine
rtl8187b_init_hw()took 15.82 sec to execute. It now takes 3.76 sec.
I tested here the 6 patches, and didn't found problems with them (testing with two 8187 models, one an old 8187L and other an 8187B).
Quoted 3 lines
Signed-off-by Larry Finger <[email protected]>---
--
[]'s
Herton
PATCH 1/6 rtl8187: Remove large delays
In reply to Larry FingerThe rtl8187 driver contains 3 sleep statements that are longer than a second. Testing has shown no bad effects when they are removed.
---
John,
This is 2.6.29 material.
Larry
---
drivers/net/wireless/rtl8187_dev.c +1 -1
@@ -669,7 +669,7 @@ static int rtl8187b_init_hw(struct ieee8rtl818x_iowrite16 (priv, &priv->map->RFPinsOutput,0x0480 );rtl818x_iowrite16 (priv, &priv->map->RFPinsSelect,0x2488 );rtl818x_iowrite16 (priv, &priv->map->RFPinsEnable,0x1FFF ); -msleep (1100 ); +msleep (100 ); priv->rf->init (dev);
drivers/net/wireless/rtl8187_rtl8225.c +0 -2
@@ -862,10 +862,8 @@ static void rtl8225z2_b_rf_init(struct irtl8225_write (dev,0x3 ,0x080 );msleep (1 );rtl8225_write (dev,0x5 ,0x004 );msleep (1 );rtl8225_write (dev,0x0 ,0x0B7 );msleep (1 ); -msleep (3000 );rtl8225_write (dev,0x2 ,0xC4D );msleep (1 ); -msleep (2000 );rtl8225_write (dev,0x2 ,0x44D );msleep (1 );rtl8225_write (dev,0x0 ,0x2BF );msleep (1 );
PATCH 2/6 rtl8187: Remove OFDM delays
In reply to Larry FingerRoutine rtl8225_write_phy_ofdm() calls rtl8225_write_phy(), which concludes with a sleep of 1 msec; therefore a call to rtl8225_write_phy_ofdm() immediately followed by an msleep(1) is not needed.
---
John,
This is 2.6.29 material.
Larry
---
drivers/net/wireless/rtl8187_rtl8225.c +82 -86
@@ -375,50 +375,48 @@ static void rtl8225_rf_init(struct ieee8for (i =0 ; i <ARRAY_SIZE (rtl8225_agc); i++) {rtl8225_write_phy_ofdm (dev,0xB , rtl8225_agc[i]); -msleep (1 );rtl8225_write_phy_ofdm (dev,0xA ,0x80 + i); -msleep (1 ); }msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x00 ,0x01 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x01 ,0x02 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x02 ,0x42 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x03 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x04 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x05 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x06 ,0x40 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x07 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x08 ,0x40 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x09 ,0xfe );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0a ,0x09 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0b ,0x80 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0c ,0x01 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0e ,0xd3 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0f ,0x38 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x10 ,0x84 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x11 ,0x06 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x12 ,0x20 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x13 ,0x20 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x14 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x15 ,0x40 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x16 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x17 ,0x40 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x18 ,0xef );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x19 ,0x19 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1a ,0x20 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1b ,0x76 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1c ,0x04 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1e ,0x95 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1f ,0x75 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x20 ,0x1f );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x21 ,0x27 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x22 ,0x16 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x24 ,0x46 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x25 ,0x20 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x26 ,0x90 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x27 ,0x88 );msleep (1 ); +rtl8225_write_phy_ofdm (dev,0x00 ,0x01 ); +rtl8225_write_phy_ofdm (dev,0x01 ,0x02 ); +rtl8225_write_phy_ofdm (dev,0x02 ,0x42 ); +rtl8225_write_phy_ofdm (dev,0x03 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x04 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x05 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x06 ,0x40 ); +rtl8225_write_phy_ofdm (dev,0x07 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x08 ,0x40 ); +rtl8225_write_phy_ofdm (dev,0x09 ,0xfe ); +rtl8225_write_phy_ofdm (dev,0x0a ,0x09 ); +rtl8225_write_phy_ofdm (dev,0x0b ,0x80 ); +rtl8225_write_phy_ofdm (dev,0x0c ,0x01 ); +rtl8225_write_phy_ofdm (dev,0x0e ,0xd3 ); +rtl8225_write_phy_ofdm (dev,0x0f ,0x38 ); +rtl8225_write_phy_ofdm (dev,0x10 ,0x84 ); +rtl8225_write_phy_ofdm (dev,0x11 ,0x06 ); +rtl8225_write_phy_ofdm (dev,0x12 ,0x20 ); +rtl8225_write_phy_ofdm (dev,0x13 ,0x20 ); +rtl8225_write_phy_ofdm (dev,0x14 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x15 ,0x40 ); +rtl8225_write_phy_ofdm (dev,0x16 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x17 ,0x40 ); +rtl8225_write_phy_ofdm (dev,0x18 ,0xef ); +rtl8225_write_phy_ofdm (dev,0x19 ,0x19 ); +rtl8225_write_phy_ofdm (dev,0x1a ,0x20 ); +rtl8225_write_phy_ofdm (dev,0x1b ,0x76 ); +rtl8225_write_phy_ofdm (dev,0x1c ,0x04 ); +rtl8225_write_phy_ofdm (dev,0x1e ,0x95 ); +rtl8225_write_phy_ofdm (dev,0x1f ,0x75 ); +rtl8225_write_phy_ofdm (dev,0x20 ,0x1f ); +rtl8225_write_phy_ofdm (dev,0x21 ,0x27 ); +rtl8225_write_phy_ofdm (dev,0x22 ,0x16 ); +rtl8225_write_phy_ofdm (dev,0x24 ,0x46 ); +rtl8225_write_phy_ofdm (dev,0x25 ,0x20 ); +rtl8225_write_phy_ofdm (dev,0x26 ,0x90 ); +rtl8225_write_phy_ofdm (dev,0x27 ,0x88 );rtl8225_write_phy_ofdm (dev,0x0d , rtl8225_gain[2 *4 ]);rtl8225_write_phy_ofdm (dev,0x1b , rtl8225_gain[2 *4 +2 ]);
@@ -459,7 +457,7 @@ static void rtl8225_rf_init(struct ieee8/* RX antenna default to A */ rtl8225_write_phy_cck (dev,0x10 ,0x9b );msleep (1 );/* B: 0xDB */ -rtl8225_write_phy_ofdm (dev,0x26 ,0x90 );msleep (1 );/* B: 0x10 */ +rtl8225_write_phy_ofdm (dev,0x26 ,0x90 );/* B: 0x10 */ rtl818x_iowrite8 (priv, &priv->map->TX_ANTENNA,0x03 );/* B: 0x00 */ msleep (1 );
@@ -736,53 +734,51 @@ static void rtl8225z2_rf_init(struct ieefor (i =0 ; i <ARRAY_SIZE (rtl8225_agc); i++) {rtl8225_write_phy_ofdm (dev,0xB , rtl8225_agc[i]); -msleep (1 );rtl8225_write_phy_ofdm (dev,0xA ,0x80 + i); -msleep (1 ); }msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x00 ,0x01 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x01 ,0x02 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x02 ,0x42 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x03 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x04 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x05 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x06 ,0x40 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x07 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x08 ,0x40 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x09 ,0xfe );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0a ,0x08 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0b ,0x80 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0c ,0x01 );msleep (1 ); +rtl8225_write_phy_ofdm (dev,0x00 ,0x01 ); +rtl8225_write_phy_ofdm (dev,0x01 ,0x02 ); +rtl8225_write_phy_ofdm (dev,0x02 ,0x42 ); +rtl8225_write_phy_ofdm (dev,0x03 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x04 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x05 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x06 ,0x40 ); +rtl8225_write_phy_ofdm (dev,0x07 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x08 ,0x40 ); +rtl8225_write_phy_ofdm (dev,0x09 ,0xfe ); +rtl8225_write_phy_ofdm (dev,0x0a ,0x08 ); +rtl8225_write_phy_ofdm (dev,0x0b ,0x80 ); +rtl8225_write_phy_ofdm (dev,0x0c ,0x01 );rtl8225_write_phy_ofdm (dev,0x0d ,0x43 ); -rtl8225_write_phy_ofdm (dev,0x0e ,0xd3 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x0f ,0x38 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x10 ,0x84 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x11 ,0x07 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x12 ,0x20 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x13 ,0x20 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x14 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x15 ,0x40 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x16 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x17 ,0x40 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x18 ,0xef );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x19 ,0x19 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1a ,0x20 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1b ,0x15 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1c ,0x04 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1d ,0xc5 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1e ,0x95 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x1f ,0x75 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x20 ,0x1f );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x21 ,0x17 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x22 ,0x16 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x23 ,0x80 );msleep (1 );//FIXME: not needed? -rtl8225_write_phy_ofdm (dev,0x24 ,0x46 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x25 ,0x00 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x26 ,0x90 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x27 ,0x88 );msleep (1 ); +rtl8225_write_phy_ofdm (dev,0x0e ,0xd3 ); +rtl8225_write_phy_ofdm (dev,0x0f ,0x38 ); +rtl8225_write_phy_ofdm (dev,0x10 ,0x84 ); +rtl8225_write_phy_ofdm (dev,0x11 ,0x07 ); +rtl8225_write_phy_ofdm (dev,0x12 ,0x20 ); +rtl8225_write_phy_ofdm (dev,0x13 ,0x20 ); +rtl8225_write_phy_ofdm (dev,0x14 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x15 ,0x40 ); +rtl8225_write_phy_ofdm (dev,0x16 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x17 ,0x40 ); +rtl8225_write_phy_ofdm (dev,0x18 ,0xef ); +rtl8225_write_phy_ofdm (dev,0x19 ,0x19 ); +rtl8225_write_phy_ofdm (dev,0x1a ,0x20 ); +rtl8225_write_phy_ofdm (dev,0x1b ,0x15 ); +rtl8225_write_phy_ofdm (dev,0x1c ,0x04 ); +rtl8225_write_phy_ofdm (dev,0x1d ,0xc5 ); +rtl8225_write_phy_ofdm (dev,0x1e ,0x95 ); +rtl8225_write_phy_ofdm (dev,0x1f ,0x75 ); +rtl8225_write_phy_ofdm (dev,0x20 ,0x1f ); +rtl8225_write_phy_ofdm (dev,0x21 ,0x17 ); +rtl8225_write_phy_ofdm (dev,0x22 ,0x16 ); +rtl8225_write_phy_ofdm (dev,0x23 ,0x80 ); +rtl8225_write_phy_ofdm (dev,0x24 ,0x46 ); +rtl8225_write_phy_ofdm (dev,0x25 ,0x00 ); +rtl8225_write_phy_ofdm (dev,0x26 ,0x90 ); +rtl8225_write_phy_ofdm (dev,0x27 ,0x88 );rtl8225_write_phy_ofdm (dev,0x0b , rtl8225z2_gain_bg[4 *3 ]);rtl8225_write_phy_ofdm (dev,0x1b , rtl8225z2_gain_bg[4 *3 +1 ]);
@@ -823,7 +819,7 @@ static void rtl8225z2_rf_init(struct iee/* RX antenna default to A */ rtl8225_write_phy_cck (dev,0x10 ,0x9b );msleep (1 );/* B: 0xDB */ -rtl8225_write_phy_ofdm (dev,0x26 ,0x90 );msleep (1 );/* B: 0x10 */ +rtl8225_write_phy_ofdm (dev,0x26 ,0x90 );/* B: 0x10 */ rtl818x_iowrite8 (priv, &priv->map->TX_ANTENNA,0x03 );/* B: 0x00 */ msleep (1 );
@@ -889,10 +885,10 @@ static void rtl8225z2_b_rf_init(struct irtl818x_iowrite32 (priv, (__le32 *)0xFFFC , (7 <<12 ) | (3 <<8 ) |28 );rtl818x_iowrite8 (priv, &priv->map->ACM_CONTROL,0 ); -rtl8225_write_phy_ofdm (dev,0x97 ,0x46 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0xa4 ,0xb6 );msleep (1 ); -rtl8225_write_phy_ofdm (dev,0x85 ,0xfc );msleep (1 ); -rtl8225_write_phy_cck (dev,0xc1 ,0x88 );msleep (1 ); +rtl8225_write_phy_ofdm (dev,0x97 ,0x46 ); +rtl8225_write_phy_ofdm (dev,0xa4 ,0xb6 ); +rtl8225_write_phy_ofdm (dev,0x85 ,0xfc ); +rtl8225_write_phy_cck (dev,0xc1 ,0x88 ); }static void rtl8225_rf_stop (struct ieee80211_hw *dev)
PATCH 3/6 rtl8187: Remove CCK delays
In reply to Larry FingerRoutine rtl8225_write_phy_cck() calls rtl8225_write_phy(), which concludes with a sleep of 1 msec; therefore a call to rtl8225_write_phy_cck() immediately followed by an msleep(1) is not needed.
---
John,
This is 2.6.29 material.
Larry
---
drivers/net/wireless/rtl8187_rtl8225.c +46 -46
@@ -423,40 +423,40 @@ static void rtl8225_rf_init(struct ieee8rtl8225_write_phy_ofdm (dev,0x1d , rtl8225_gain[2 *4 +3 ]);rtl8225_write_phy_ofdm (dev,0x23 , rtl8225_gain[2 *4 +1 ]); -rtl8225_write_phy_cck (dev,0x00 ,0x98 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x03 ,0x20 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x04 ,0x7e );msleep (1 ); -rtl8225_write_phy_cck (dev,0x05 ,0x12 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x06 ,0xfc );msleep (1 ); -rtl8225_write_phy_cck (dev,0x07 ,0x78 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x08 ,0x2e );msleep (1 ); -rtl8225_write_phy_cck (dev,0x10 ,0x9b );msleep (1 ); -rtl8225_write_phy_cck (dev,0x11 ,0x88 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x12 ,0x47 );msleep (1 ); +rtl8225_write_phy_cck (dev,0x00 ,0x98 ); +rtl8225_write_phy_cck (dev,0x03 ,0x20 ); +rtl8225_write_phy_cck (dev,0x04 ,0x7e ); +rtl8225_write_phy_cck (dev,0x05 ,0x12 ); +rtl8225_write_phy_cck (dev,0x06 ,0xfc ); +rtl8225_write_phy_cck (dev,0x07 ,0x78 ); +rtl8225_write_phy_cck (dev,0x08 ,0x2e ); +rtl8225_write_phy_cck (dev,0x10 ,0x9b ); +rtl8225_write_phy_cck (dev,0x11 ,0x88 ); +rtl8225_write_phy_cck (dev,0x12 ,0x47 );rtl8225_write_phy_cck (dev,0x13 ,0xd0 );rtl8225_write_phy_cck (dev,0x19 ,0x00 );rtl8225_write_phy_cck (dev,0x1a ,0xa0 );rtl8225_write_phy_cck (dev,0x1b ,0x08 );rtl8225_write_phy_cck (dev,0x40 ,0x86 ); -rtl8225_write_phy_cck (dev,0x41 ,0x8d );msleep (1 ); -rtl8225_write_phy_cck (dev,0x42 ,0x15 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x43 ,0x18 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x44 ,0x1f );msleep (1 ); -rtl8225_write_phy_cck (dev,0x45 ,0x1e );msleep (1 ); -rtl8225_write_phy_cck (dev,0x46 ,0x1a );msleep (1 ); -rtl8225_write_phy_cck (dev,0x47 ,0x15 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x48 ,0x10 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x49 ,0x0a );msleep (1 ); -rtl8225_write_phy_cck (dev,0x4a ,0x05 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x4b ,0x02 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x4c ,0x05 );msleep (1 ); +rtl8225_write_phy_cck (dev,0x41 ,0x8d ); +rtl8225_write_phy_cck (dev,0x42 ,0x15 ); +rtl8225_write_phy_cck (dev,0x43 ,0x18 ); +rtl8225_write_phy_cck (dev,0x44 ,0x1f ); +rtl8225_write_phy_cck (dev,0x45 ,0x1e ); +rtl8225_write_phy_cck (dev,0x46 ,0x1a ); +rtl8225_write_phy_cck (dev,0x47 ,0x15 ); +rtl8225_write_phy_cck (dev,0x48 ,0x10 ); +rtl8225_write_phy_cck (dev,0x49 ,0x0a ); +rtl8225_write_phy_cck (dev,0x4a ,0x05 ); +rtl8225_write_phy_cck (dev,0x4b ,0x02 ); +rtl8225_write_phy_cck (dev,0x4c ,0x05 );rtl818x_iowrite8 (priv, &priv->map->TESTR,0x0D );rtl8225_rf_set_tx_power (dev,1 );/* RX antenna default to A */ -rtl8225_write_phy_cck (dev,0x10 ,0x9b );msleep (1 );/* B: 0xDB */ +rtl8225_write_phy_cck (dev,0x10 ,0x9b );/* B: 0xDB */ rtl8225_write_phy_ofdm (dev,0x26 ,0x90 );/* B: 0x10 */ rtl818x_iowrite8 (priv, &priv->map->TX_ANTENNA,0x03 );/* B: 0x00 */
@@ -785,40 +785,40 @@ static void rtl8225z2_rf_init(struct ieertl8225_write_phy_ofdm (dev,0x1d , rtl8225z2_gain_bg[4 *3 +2 ]);rtl8225_write_phy_ofdm (dev,0x21 ,0x37 ); -rtl8225_write_phy_cck (dev,0x00 ,0x98 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x03 ,0x20 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x04 ,0x7e );msleep (1 ); -rtl8225_write_phy_cck (dev,0x05 ,0x12 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x06 ,0xfc );msleep (1 ); -rtl8225_write_phy_cck (dev,0x07 ,0x78 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x08 ,0x2e );msleep (1 ); -rtl8225_write_phy_cck (dev,0x10 ,0x9b );msleep (1 ); -rtl8225_write_phy_cck (dev,0x11 ,0x88 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x12 ,0x47 );msleep (1 ); +rtl8225_write_phy_cck (dev,0x00 ,0x98 ); +rtl8225_write_phy_cck (dev,0x03 ,0x20 ); +rtl8225_write_phy_cck (dev,0x04 ,0x7e ); +rtl8225_write_phy_cck (dev,0x05 ,0x12 ); +rtl8225_write_phy_cck (dev,0x06 ,0xfc ); +rtl8225_write_phy_cck (dev,0x07 ,0x78 ); +rtl8225_write_phy_cck (dev,0x08 ,0x2e ); +rtl8225_write_phy_cck (dev,0x10 ,0x9b ); +rtl8225_write_phy_cck (dev,0x11 ,0x88 ); +rtl8225_write_phy_cck (dev,0x12 ,0x47 );rtl8225_write_phy_cck (dev,0x13 ,0xd0 );rtl8225_write_phy_cck (dev,0x19 ,0x00 );rtl8225_write_phy_cck (dev,0x1a ,0xa0 );rtl8225_write_phy_cck (dev,0x1b ,0x08 );rtl8225_write_phy_cck (dev,0x40 ,0x86 ); -rtl8225_write_phy_cck (dev,0x41 ,0x8d );msleep (1 ); -rtl8225_write_phy_cck (dev,0x42 ,0x15 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x43 ,0x18 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x44 ,0x36 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x45 ,0x35 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x46 ,0x2e );msleep (1 ); -rtl8225_write_phy_cck (dev,0x47 ,0x25 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x48 ,0x1c );msleep (1 ); -rtl8225_write_phy_cck (dev,0x49 ,0x12 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x4a ,0x09 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x4b ,0x04 );msleep (1 ); -rtl8225_write_phy_cck (dev,0x4c ,0x05 );msleep (1 ); +rtl8225_write_phy_cck (dev,0x41 ,0x8d ); +rtl8225_write_phy_cck (dev,0x42 ,0x15 ); +rtl8225_write_phy_cck (dev,0x43 ,0x18 ); +rtl8225_write_phy_cck (dev,0x44 ,0x36 ); +rtl8225_write_phy_cck (dev,0x45 ,0x35 ); +rtl8225_write_phy_cck (dev,0x46 ,0x2e ); +rtl8225_write_phy_cck (dev,0x47 ,0x25 ); +rtl8225_write_phy_cck (dev,0x48 ,0x1c ); +rtl8225_write_phy_cck (dev,0x49 ,0x12 ); +rtl8225_write_phy_cck (dev,0x4a ,0x09 ); +rtl8225_write_phy_cck (dev,0x4b ,0x04 ); +rtl8225_write_phy_cck (dev,0x4c ,0x05 );rtl818x_iowrite8 (priv, (u8 *)0xFF5B ,0x0D );msleep (1 );rtl8225z2_rf_set_tx_power (dev,1 );/* RX antenna default to A */ -rtl8225_write_phy_cck (dev,0x10 ,0x9b );msleep (1 );/* B: 0xDB */ +rtl8225_write_phy_cck (dev,0x10 ,0x9b );/* B: 0xDB */ rtl8225_write_phy_ofdm (dev,0x26 ,0x90 );/* B: 0x10 */ rtl818x_iowrite8 (priv, &priv->map->TX_ANTENNA,0x03 );/* B: 0x00 */
PATCH 4/6 rtl8187: Remove msleep calls after calls to rtl8225_write
In reply to Larry FingerRoutine rtl8225_write() calls either rtl8225_write_bitbang() or rtl8225_write_8051(), both of which end with an msleep() command. As a result, a rtl8225_write() immediately followed by an msleep() is not needed.
---
John,
This is 2.6.29 material.
Larry
---
drivers/net/wireless/rtl8187_rtl8225.c +58 -57
@@ -333,21 +333,21 @@ static void rtl8225_rf_init(struct ieee8struct rtl8187_priv *priv = dev->priv;int i; -rtl8225_write (dev,0x0 ,0x067 );msleep (1 ); -rtl8225_write (dev,0x1 ,0xFE0 );msleep (1 ); -rtl8225_write (dev,0x2 ,0x44D );msleep (1 ); -rtl8225_write (dev,0x3 ,0x441 );msleep (1 ); -rtl8225_write (dev,0x4 ,0x486 );msleep (1 ); -rtl8225_write (dev,0x5 ,0xBC0 );msleep (1 ); -rtl8225_write (dev,0x6 ,0xAE6 );msleep (1 ); -rtl8225_write (dev,0x7 ,0x82A );msleep (1 ); -rtl8225_write (dev,0x8 ,0x01F );msleep (1 ); -rtl8225_write (dev,0x9 ,0x334 );msleep (1 ); -rtl8225_write (dev,0xA ,0xFD4 );msleep (1 ); -rtl8225_write (dev,0xB ,0x391 );msleep (1 ); -rtl8225_write (dev,0xC ,0x050 );msleep (1 ); -rtl8225_write (dev,0xD ,0x6DB );msleep (1 ); -rtl8225_write (dev,0xE ,0x029 );msleep (1 ); +rtl8225_write (dev,0x0 ,0x067 ); +rtl8225_write (dev,0x1 ,0xFE0 ); +rtl8225_write (dev,0x2 ,0x44D ); +rtl8225_write (dev,0x3 ,0x441 ); +rtl8225_write (dev,0x4 ,0x486 ); +rtl8225_write (dev,0x5 ,0xBC0 ); +rtl8225_write (dev,0x6 ,0xAE6 ); +rtl8225_write (dev,0x7 ,0x82A ); +rtl8225_write (dev,0x8 ,0x01F ); +rtl8225_write (dev,0x9 ,0x334 ); +rtl8225_write (dev,0xA ,0xFD4 ); +rtl8225_write (dev,0xB ,0x391 ); +rtl8225_write (dev,0xC ,0x050 ); +rtl8225_write (dev,0xD ,0x6DB ); +rtl8225_write (dev,0xE ,0x029 );rtl8225_write (dev,0xF ,0x914 );msleep (100 );rtl8225_write (dev,0x2 ,0xC4D );msleep (200 );
@@ -685,22 +685,23 @@ static void rtl8225z2_rf_init(struct ieestruct rtl8187_priv *priv = dev->priv;int i; -rtl8225_write (dev,0x0 ,0x2BF );msleep (1 ); -rtl8225_write (dev,0x1 ,0xEE0 );msleep (1 ); -rtl8225_write (dev,0x2 ,0x44D );msleep (1 ); -rtl8225_write (dev,0x3 ,0x441 );msleep (1 ); -rtl8225_write (dev,0x4 ,0x8C3 );msleep (1 ); -rtl8225_write (dev,0x5 ,0xC72 );msleep (1 ); -rtl8225_write (dev,0x6 ,0x0E6 );msleep (1 ); -rtl8225_write (dev,0x7 ,0x82A );msleep (1 ); -rtl8225_write (dev,0x8 ,0x03F );msleep (1 ); -rtl8225_write (dev,0x9 ,0x335 );msleep (1 ); -rtl8225_write (dev,0xa ,0x9D4 );msleep (1 ); -rtl8225_write (dev,0xb ,0x7BB );msleep (1 ); -rtl8225_write (dev,0xc ,0x850 );msleep (1 ); -rtl8225_write (dev,0xd ,0xCDF );msleep (1 ); -rtl8225_write (dev,0xe ,0x02B );msleep (1 ); -rtl8225_write (dev,0xf ,0x114 );msleep (100 ); +rtl8225_write (dev,0x0 ,0x2BF ); +rtl8225_write (dev,0x1 ,0xEE0 ); +rtl8225_write (dev,0x2 ,0x44D ); +rtl8225_write (dev,0x3 ,0x441 ); +rtl8225_write (dev,0x4 ,0x8C3 ); +rtl8225_write (dev,0x5 ,0xC72 ); +rtl8225_write (dev,0x6 ,0x0E6 ); +rtl8225_write (dev,0x7 ,0x82A ); +rtl8225_write (dev,0x8 ,0x03F ); +rtl8225_write (dev,0x9 ,0x335 ); +rtl8225_write (dev,0xa ,0x9D4 ); +rtl8225_write (dev,0xb ,0x7BB ); +rtl8225_write (dev,0xc ,0x850 ); +rtl8225_write (dev,0xd ,0xCDF ); +rtl8225_write (dev,0xe ,0x02B ); +rtl8225_write (dev,0xf ,0x114 ); +msleep (100 );rtl8225_write (dev,0x0 ,0x1B7 );
@@ -831,38 +832,38 @@ static void rtl8225z2_b_rf_init(struct istruct rtl8187_priv *priv = dev->priv;int i; -rtl8225_write (dev,0x0 ,0x0B7 );msleep (1 ); -rtl8225_write (dev,0x1 ,0xEE0 );msleep (1 ); -rtl8225_write (dev,0x2 ,0x44D );msleep (1 ); -rtl8225_write (dev,0x3 ,0x441 );msleep (1 ); -rtl8225_write (dev,0x4 ,0x8C3 );msleep (1 ); -rtl8225_write (dev,0x5 ,0xC72 );msleep (1 ); -rtl8225_write (dev,0x6 ,0x0E6 );msleep (1 ); -rtl8225_write (dev,0x7 ,0x82A );msleep (1 ); -rtl8225_write (dev,0x8 ,0x03F );msleep (1 ); -rtl8225_write (dev,0x9 ,0x335 );msleep (1 ); -rtl8225_write (dev,0xa ,0x9D4 );msleep (1 ); -rtl8225_write (dev,0xb ,0x7BB );msleep (1 ); -rtl8225_write (dev,0xc ,0x850 );msleep (1 ); -rtl8225_write (dev,0xd ,0xCDF );msleep (1 ); -rtl8225_write (dev,0xe ,0x02B );msleep (1 ); -rtl8225_write (dev,0xf ,0x114 );msleep (1 ); +rtl8225_write (dev,0x0 ,0x0B7 ); +rtl8225_write (dev,0x1 ,0xEE0 ); +rtl8225_write (dev,0x2 ,0x44D ); +rtl8225_write (dev,0x3 ,0x441 ); +rtl8225_write (dev,0x4 ,0x8C3 ); +rtl8225_write (dev,0x5 ,0xC72 ); +rtl8225_write (dev,0x6 ,0x0E6 ); +rtl8225_write (dev,0x7 ,0x82A ); +rtl8225_write (dev,0x8 ,0x03F ); +rtl8225_write (dev,0x9 ,0x335 ); +rtl8225_write (dev,0xa ,0x9D4 ); +rtl8225_write (dev,0xb ,0x7BB ); +rtl8225_write (dev,0xc ,0x850 ); +rtl8225_write (dev,0xd ,0xCDF ); +rtl8225_write (dev,0xe ,0x02B ); +rtl8225_write (dev,0xf ,0x114 ); -rtl8225_write (dev,0x0 ,0x1B7 );msleep (1 ); +rtl8225_write (dev,0x0 ,0x1B7 );for (i =0 ; i <ARRAY_SIZE (rtl8225z2_rxgain); i++) { -rtl8225_write (dev,0x1 , i +1 );msleep (1 ); -rtl8225_write (dev,0x2 , rtl8225z2_rxgain[i]);msleep (1 ); +rtl8225_write (dev,0x1 , i +1 ); +rtl8225_write (dev,0x2 , rtl8225z2_rxgain[i]); } -rtl8225_write (dev,0x3 ,0x080 );msleep (1 ); -rtl8225_write (dev,0x5 ,0x004 );msleep (1 ); -rtl8225_write (dev,0x0 ,0x0B7 );msleep (1 ); +rtl8225_write (dev,0x3 ,0x080 ); +rtl8225_write (dev,0x5 ,0x004 ); +rtl8225_write (dev,0x0 ,0x0B7 ); -rtl8225_write (dev,0x2 ,0xC4D );msleep (1 ); +rtl8225_write (dev,0x2 ,0xC4D ); -rtl8225_write (dev,0x2 ,0x44D );msleep (1 ); -rtl8225_write (dev,0x0 ,0x2BF );msleep (1 ); +rtl8225_write (dev,0x2 ,0x44D ); +rtl8225_write (dev,0x0 ,0x2BF );rtl818x_iowrite8 (priv, &priv->map->TX_GAIN_CCK,0x03 );rtl818x_iowrite8 (priv, &priv->map->TX_GAIN_OFDM,0x07 );
@@ -896,7 +897,7 @@ static void rtl8225_rf_stop(struct ieee8u8 reg;struct rtl8187_priv *priv = dev->priv; -rtl8225_write (dev,0x4 ,0x1f );msleep (1 ); +rtl8225_write (dev,0x4 ,0x1f );rtl818x_iowrite8 (priv, &priv->map->EEPROM_CMD,RTL818X_EEPROM_CMD_CONFIG ); reg =rtl818x_ioread8 (priv, &priv->map->CONFIG3);
PATCH 5/6 rtl8187: Remove primitive write delays
In reply to Larry FingerEach of the primary write routines, rtl8187_write_phy(), rtl8225_write_bitbang(), and rtl8225_write_8051() all conclude with an msleep() command. Testing shows that these are not needed.
---
John,
This is 2.6.29 material.
Larry
---
drivers/net/wireless/rtl8187_dev.c +0 -2
@@ -152,8 +152,6 @@ void rtl8187_write_phy(struct ieee80211_rtl818x_iowrite8 (priv, &priv->map->PHY[2 ], (data >>16 ) &0xFF );rtl818x_iowrite8 (priv, &priv->map->PHY[1 ], (data >>8 ) &0xFF );rtl818x_iowrite8 (priv, &priv->map->PHY[0 ], data &0xFF ); - -msleep (1 ); }static void rtl8187_tx_cb (struct urb *urb)
drivers/net/wireless/rtl8187_rtl8225.c +0 -2
@@ -64,7 +64,6 @@ static void rtl8225_write_bitbang(structrtl818x_iowrite16 (priv, &priv->map->RFPinsOutput, reg80 | (1 <<2 ));rtl818x_iowrite16 (priv, &priv->map->RFPinsSelect, reg84); -msleep (2 ); }static void rtl8225_write_8051 (struct ieee80211_hw *dev,u8 addr,__le16 data)
@@ -98,7 +97,6 @@ static void rtl8225_write_8051(struct iertl818x_iowrite16 (priv, &priv->map->RFPinsOutput, reg80 | (1 <<2 ));rtl818x_iowrite16 (priv, &priv->map->RFPinsSelect, reg84); -msleep (2 ); }static void rtl8225_write (struct ieee80211_hw *dev,u8 addr,u16 data)
PATCH 6/6 rtl8187: Reduce channel switch delay
In reply to Larry FingerThe latest vendor driver (rtl8187B_linux_26.1036.0708.2008) has a 10 msec delay after the call to set a new channel, but not before.
---
John,
This is 2.6.29 material.
Larry
---
drivers/net/wireless/rtl8187_dev.c +0 -1
@@ -870,7 +870,6 @@ static int rtl8187_config(struct ieee802*/ rtl818x_iowrite32 (priv, &priv->map->TX_CONF, reg |RTL818X_TX_CONF_LOOPBACK_MAC ); -msleep (10 ); priv->rf->set_chan (dev, conf);msleep (10 );rtl818x_iowrite32 (priv, &priv->map->TX_CONF, reg);