[PATCH 14/24] RT2x00: Check if read eeprom words are valid

2006-07-26 Thread Ivo van Doorn
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.0 +0200
+++ wireless-dev-eeprom/drivers/net/wireless/d80211/rt2x00/rt61pci.c
2006-07-23 23:19:17.0 +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);
-   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 == 0x)
+   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 == 0x) {
-   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 == 0x)
+   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));
-   }
+  

Re: [PATCH 14/24] RT2x00: Check if read eeprom words are valid

2006-07-26 Thread Ivo van Doorn
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.0 +0200
+++ wireless-dev-eeprom/drivers/net/wireless/d80211/rt2x00/rt61pci.c
2006-07-23 23:19:17.0 +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);
-   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 == 0x)
+   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 == 0x) {
-   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 == 0x)
+   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));
-   }
+