>From Ivo van Doorn <[EMAIL PROTECTED]>
Make checks if the EEPROM data read is valid,
if it is not, use the default values.
Also fix the endian issue when reading the PCI_CONFIG_HEADER.
Signed-off-by: Ivo van Doorn <[EMAIL PROTECTED]>
---
diff -rU3 wireless-dev-tuning/drivers/net/wireless/d80211/rt2x00/rt61pci.c
wireless-dev-eeprom/drivers/net/wireless/d80211/rt2x00/rt61pci.c
--- wireless-dev-tuning/drivers/net/wireless/d80211/rt2x00/rt61pci.c
2006-07-23 23:04:25.000000000 +0200
+++ wireless-dev-eeprom/drivers/net/wireless/d80211/rt2x00/rt61pci.c
2006-07-23 23:19:17.000000000 +0200
@@ -2914,6 +2914,7 @@
u32 reg;
u16 value;
u16 eeprom;
+ u16 device;
/*
* 1 - Detect EEPROM width.
@@ -2934,12 +2935,11 @@
* To determine the RT chip we have to read the
* PCI header of the device.
*/
- pci_read_config_dword(rt2x00dev_pci(rt2x00dev),
- PCI_CONFIG_HEADER, ®);
- reg = rt2x00_get_field32(reg, PCI_CONFIG_HEADER_DEVICE);
+ pci_read_config_word(
+ rt2x00dev_pci(rt2x00dev), PCI_CONFIG_HEADER_DEVICE, &device);
value = rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RF_TYPE);
- rt2x00_set_chip(&rt2x00dev->chip, (u16)reg, value);
+ rt2x00_set_chip(&rt2x00dev->chip, device, value);
if (!rt2x00_rf(&rt2x00dev->chip, RF5225) &&
!rt2x00_rf(&rt2x00dev->chip, RF5325) &&
@@ -2985,6 +2985,8 @@
* 8 - Read external LNA informations.
*/
rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC, &eeprom);
+ if (eeprom == 0xffff)
+ eeprom = 0;
if (rt2x00_get_field16(eeprom, EEPROM_NIC_EXTERNAL_LNA_A))
SET_FLAG(rt2x00dev, CONFIG_EXTERNAL_LNA_A);
if (rt2x00_get_field16(eeprom, EEPROM_NIC_EXTERNAL_LNA_BG))
@@ -2994,58 +2996,35 @@
* 9 - Store led settings, for correct led behaviour.
*/
rt2x00_eeprom_read(rt2x00dev, EEPROM_LED, &eeprom);
- if (eeprom == 0xffff) {
- rt2x00dev->led_mode = LED_MODE_DEFAULT;
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_LED_MODE, LED_MODE_DEFAULT);
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_GPIO_0, 1);
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_GPIO_1, 1);
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_GPIO_2, 1);
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_GPIO_3, 1);
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_GPIO_4, 1);
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_ACT, 1);
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_READY_BG, 1);
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_READY_A, 1);
- } else {
+ /*
+ * If the eeprom value is invalid,
+ * switch to default led mode.
+ */
+ if (eeprom == 0xffff)
+ rt2x00dev->led_mode = LED_MODE_DEFAULT;
+ else
rt2x00dev->led_mode = rt2x00_get_field16(eeprom,
EEPROM_LED_LED_MODE);
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_LED_MODE, rt2x00dev->led_mode);
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_GPIO_0, rt2x00_get_field16(eeprom,
- EEPROM_LED_POLARITY_GPIO_0));
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_GPIO_1, rt2x00_get_field16(eeprom,
- EEPROM_LED_POLARITY_GPIO_1));
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_GPIO_2, rt2x00_get_field16(eeprom,
- EEPROM_LED_POLARITY_GPIO_2));
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_GPIO_3, rt2x00_get_field16(eeprom,
- EEPROM_LED_POLARITY_GPIO_3));
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_GPIO_4, rt2x00_get_field16(eeprom,
- EEPROM_LED_POLARITY_GPIO_4));
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_ACT, rt2x00_get_field16(eeprom,
- EEPROM_LED_POLARITY_ACT));
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_READY_BG, rt2x00_get_field16(eeprom,
- EEPROM_LED_POLARITY_RDY_G));
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_READY_A, rt2x00_get_field16(eeprom,
- EEPROM_LED_POLARITY_RDY_A));
- }
+ rt2x00_set_field16(&rt2x00dev->led_reg, MCU_LEDCS_LED_MODE,
+ rt2x00dev->led_mode);
+ rt2x00_set_field16(&rt2x00dev->led_reg, MCU_LEDCS_POLARITY_GPIO_0,
+ rt2x00_get_field16(eeprom, EEPROM_LED_POLARITY_GPIO_0));
+ rt2x00_set_field16(&rt2x00dev->led_reg, MCU_LEDCS_POLARITY_GPIO_1,
+ rt2x00_get_field16(eeprom, EEPROM_LED_POLARITY_GPIO_1));
+ rt2x00_set_field16(&rt2x00dev->led_reg, MCU_LEDCS_POLARITY_GPIO_2,
+ rt2x00_get_field16(eeprom, EEPROM_LED_POLARITY_GPIO_2));
+ rt2x00_set_field16(&rt2x00dev->led_reg, MCU_LEDCS_POLARITY_GPIO_3,
+ rt2x00_get_field16(eeprom, EEPROM_LED_POLARITY_GPIO_3));
+ rt2x00_set_field16(&rt2x00dev->led_reg, MCU_LEDCS_POLARITY_GPIO_4,
+ rt2x00_get_field16(eeprom, EEPROM_LED_POLARITY_GPIO_4));
+ rt2x00_set_field16(&rt2x00dev->led_reg, MCU_LEDCS_POLARITY_ACT,
+ rt2x00_get_field16(eeprom, EEPROM_LED_POLARITY_ACT));
+ rt2x00_set_field16(&rt2x00dev->led_reg, MCU_LEDCS_POLARITY_READY_BG,
+ rt2x00_get_field16(eeprom, EEPROM_LED_POLARITY_RDY_G));
+ rt2x00_set_field16(&rt2x00dev->led_reg, MCU_LEDCS_POLARITY_READY_A,
+ rt2x00_get_field16(eeprom, EEPROM_LED_POLARITY_RDY_A));
/*
* 10 - Detect if this device has an hardware controlled radio.
diff -rU3 wireless-dev-tuning/drivers/net/wireless/d80211/rt2x00/rt61pci.h
wireless-dev-eeprom/drivers/net/wireless/d80211/rt2x00/rt61pci.h
--- wireless-dev-tuning/drivers/net/wireless/d80211/rt2x00/rt61pci.h
2006-07-23 19:33:56.000000000 +0200
+++ wireless-dev-eeprom/drivers/net/wireless/d80211/rt2x00/rt61pci.h
2006-07-23 23:21:39.000000000 +0200
@@ -57,9 +57,8 @@
/*
* PCI Configuration Header
*/
-#define PCI_CONFIG_HEADER 0x0000
-#define PCI_CONFIG_HEADER_VENDOR FIELD32(0x0000ffff)
-#define PCI_CONFIG_HEADER_DEVICE FIELD32(0xffff0000)
+#define PCI_CONFIG_HEADER_VENDOR 0x0000
+#define PCI_CONFIG_HEADER_DEVICE 0x0002
/*
* HOST_CMD_CSR: For HOST to interrupt embedded processor
diff -rU3 wireless-dev-tuning/drivers/net/wireless/d80211/rt2x00/rt73usb.c
wireless-dev-eeprom/drivers/net/wireless/d80211/rt2x00/rt73usb.c
--- wireless-dev-tuning/drivers/net/wireless/d80211/rt2x00/rt73usb.c
2006-07-23 23:04:31.000000000 +0200
+++ wireless-dev-eeprom/drivers/net/wireless/d80211/rt2x00/rt73usb.c
2006-07-23 23:17:42.000000000 +0200
@@ -2475,6 +2475,8 @@
* 7 - Read external LNA informations.
*/
rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC, &eeprom);
+ if (eeprom == 0xffff)
+ eeprom = 0;
if (rt2x00_get_field16(eeprom, EEPROM_NIC_EXTERNAL_LNA))
SET_FLAG(rt2x00dev, CONFIG_EXTERNAL_LNA);
@@ -2482,58 +2484,36 @@
* 8 - Store led settings, for correct led behaviour.
*/
rt2x00_eeprom_read(rt2x00dev, EEPROM_LED, &eeprom);
+
+ /*
+ * If the eeprom value is invalid,
+ * switch to default led mode, and clear all bits.
+ */
if (eeprom == 0xffff) {
rt2x00dev->led_mode = LED_MODE_DEFAULT;
-
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_LED_MODE, LED_MODE_DEFAULT);
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_GPIO_0, 0);
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_GPIO_1, 0);
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_GPIO_2, 0);
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_GPIO_3, 0);
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_GPIO_4, 0);
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_ACT, 0);
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_READY_BG, 0);
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_READY_A, 0);
- } else {
+ eeprom = 0x0000;
+ } else
rt2x00dev->led_mode = rt2x00_get_field16(eeprom,
EEPROM_LED_LED_MODE);
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_LED_MODE, rt2x00dev->led_mode);
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_GPIO_0, rt2x00_get_field16(eeprom,
- EEPROM_LED_POLARITY_GPIO_0));
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_GPIO_1, rt2x00_get_field16(eeprom,
- EEPROM_LED_POLARITY_GPIO_1));
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_GPIO_2, rt2x00_get_field16(eeprom,
- EEPROM_LED_POLARITY_GPIO_2));
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_GPIO_3, rt2x00_get_field16(eeprom,
- EEPROM_LED_POLARITY_GPIO_3));
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_GPIO_4, rt2x00_get_field16(eeprom,
- EEPROM_LED_POLARITY_GPIO_4));
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_ACT, rt2x00_get_field16(eeprom,
- EEPROM_LED_POLARITY_ACT));
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_READY_BG, rt2x00_get_field16(eeprom,
- EEPROM_LED_POLARITY_RDY_G));
- rt2x00_set_field16(&rt2x00dev->led_reg,
- MCU_LEDCS_POLARITY_READY_A, rt2x00_get_field16(eeprom,
- EEPROM_LED_POLARITY_RDY_A));
- }
+ rt2x00_set_field16(&rt2x00dev->led_reg, MCU_LEDCS_LED_MODE,
+ rt2x00dev->led_mode);
+ rt2x00_set_field16(&rt2x00dev->led_reg, MCU_LEDCS_POLARITY_GPIO_0,
+ rt2x00_get_field16(eeprom, EEPROM_LED_POLARITY_GPIO_0));
+ rt2x00_set_field16(&rt2x00dev->led_reg, MCU_LEDCS_POLARITY_GPIO_1,
+ rt2x00_get_field16(eeprom, EEPROM_LED_POLARITY_GPIO_1));
+ rt2x00_set_field16(&rt2x00dev->led_reg, MCU_LEDCS_POLARITY_GPIO_2,
+ rt2x00_get_field16(eeprom, EEPROM_LED_POLARITY_GPIO_2));
+ rt2x00_set_field16(&rt2x00dev->led_reg, MCU_LEDCS_POLARITY_GPIO_3,
+ rt2x00_get_field16(eeprom, EEPROM_LED_POLARITY_GPIO_3));
+ rt2x00_set_field16(&rt2x00dev->led_reg, MCU_LEDCS_POLARITY_GPIO_4,
+ rt2x00_get_field16(eeprom, EEPROM_LED_POLARITY_GPIO_4));
+ rt2x00_set_field16(&rt2x00dev->led_reg, MCU_LEDCS_POLARITY_ACT,
+ rt2x00_get_field16(eeprom, EEPROM_LED_POLARITY_ACT));
+ rt2x00_set_field16(&rt2x00dev->led_reg, MCU_LEDCS_POLARITY_READY_BG,
+ rt2x00_get_field16(eeprom, EEPROM_LED_POLARITY_RDY_G));
+ rt2x00_set_field16(&rt2x00dev->led_reg, MCU_LEDCS_POLARITY_READY_A,
+ rt2x00_get_field16(eeprom, EEPROM_LED_POLARITY_RDY_A));
/*
* 9 - Read BBP data from EEPROM and store in private structure.
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html