316-rt2x00-Fix-register-initialization-rt2800pci.patch 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. From c3a42af4455fd75735c218ffac392ef86a3a250f Mon Sep 17 00:00:00 2001
  2. From: Ivo van Doorn <[email protected]>
  3. Date: Sat, 17 Jan 2009 19:18:38 +0100
  4. Subject: [PATCH] rt2x00: Fix register initialization (rt2800pci)
  5. Signed-off-by: Ivo van Doorn <[email protected]>
  6. ---
  7. drivers/net/wireless/rt2x00/rt2800pci.c | 19 +++++++++++++++----
  8. 1 files changed, 15 insertions(+), 4 deletions(-)
  9. --- a/drivers/net/wireless/rt2x00/rt2800pci.c
  10. +++ b/drivers/net/wireless/rt2x00/rt2800pci.c
  11. @@ -602,9 +602,12 @@ static void rt2800pci_config_ant(struct
  12. */
  13. switch (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_TXPATH)) {
  14. case 1:
  15. + rt2x00_set_field8(&r1, BBP1_TX_ANTENNA, 0);
  16. rt2x00_set_field8(&r3, BBP3_RX_ANTENNA, 0);
  17. break;
  18. case 2:
  19. + rt2x00_set_field8(&r1, BBP1_TX_ANTENNA, 16);
  20. + break;
  21. case 3:
  22. /* Do nothing */
  23. break;
  24. @@ -1371,7 +1374,7 @@ static int rt2800pci_init_registers(stru
  25. * ASIC will keep garbage value after boot, clear encryption keys.
  26. */
  27. for (i = 0; i < 254; i++) {
  28. - u32 wcid[2] = { 0xffffffff, 0x0000ffff };
  29. + u32 wcid[2] = { 0xffffffff, 0x00ffffff };
  30. rt2x00pci_register_multiwrite(rt2x00dev, MAC_WCID_ENTRY(i),
  31. wcid, sizeof(wcid));
  32. }
  33. @@ -2158,9 +2161,17 @@ static int rt2800pci_validate_eeprom(str
  34. }
  35. rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC, &word);
  36. - if (word != 0) {
  37. - /* NIC configuration must always be 0. */
  38. - word = 0;
  39. + if (word == 0xffff) {
  40. + rt2x00_set_field16(&word, EEPROM_NIC_HW_RADIO, 0);
  41. + rt2x00_set_field16(&word, EEPROM_NIC_DYNAMIC_TX_AGC, 0);
  42. + rt2x00_set_field16(&word, EEPROM_NIC_EXTERNAL_LNA_BG, 0);
  43. + rt2x00_set_field16(&word, EEPROM_NIC_EXTERNAL_LNA_A, 0);
  44. + rt2x00_set_field16(&word, EEPROM_NIC_CARDBUS_ACCEL, 0);
  45. + rt2x00_set_field16(&word, EEPROM_NIC_BW40M_SB_BG, 0);
  46. + rt2x00_set_field16(&word, EEPROM_NIC_BW40M_SB_A, 0);
  47. + rt2x00_set_field16(&word, EEPROM_NIC_WPS_PBC, 0);
  48. + rt2x00_set_field16(&word, EEPROM_NIC_BW40M_BG, 0);
  49. + rt2x00_set_field16(&word, EEPROM_NIC_BW40M_A, 0);
  50. rt2x00_eeprom_write(rt2x00dev, EEPROM_NIC, word);
  51. EEPROM(rt2x00dev, "NIC: 0x%04x\n", word);
  52. }