Re: [PATCH 8/24] RT2x00: Fix *_set_state() functions

2006-07-26 Thread Ivo van Doorn
>From Ivo van Doorn <[EMAIL PROTECTED]>

Fix problems with waking up the device at initialization time.
The debug message should be more descriptive of the problem,
when the device fails to wake up.

Signed-off-by: Ivo van Doorn <[EMAIL PROTECTED]>

diff -rU3 wireless-dev-rts/drivers/net/wireless/d80211/rt2x00/rt2400pci.c 
wireless-dev-state/drivers/net/wireless/d80211/rt2x00/rt2400pci.c
--- wireless-dev-rts/drivers/net/wireless/d80211/rt2x00/rt2400pci.c 
2006-07-23 18:16:35.0 +0200
+++ wireless-dev-state/drivers/net/wireless/d80211/rt2x00/rt2400pci.c   
2006-07-23 18:34:06.0 +0200
@@ -857,7 +857,9 @@
msleep(10);
}
 
-   NOTICE("Device failed to %s.\n" , put_to_sleep ? "suspend" : "resume");
+   NOTICE("Device failed to enter state %d, "
+   "current device state: bbp %d and rf %d.\n",
+   state, bbp_state, rf_state);
 
return -EBUSY;
 }
diff -rU3 wireless-dev-rts/drivers/net/wireless/d80211/rt2x00/rt2500pci.c 
wireless-dev-state/drivers/net/wireless/d80211/rt2x00/rt2500pci.c
--- wireless-dev-rts/drivers/net/wireless/d80211/rt2x00/rt2500pci.c 
2006-07-23 18:16:41.0 +0200
+++ wireless-dev-state/drivers/net/wireless/d80211/rt2x00/rt2500pci.c   
2006-07-23 18:34:14.0 +0200
@@ -930,7 +930,9 @@
msleep(10);
}
 
-   NOTICE("Device failed to %s.\n" , put_to_sleep ? "suspend" : "resume");
+   NOTICE("Device failed to enter state %d, "
+   "current device state: bbp %d and rf %d.\n",
+   state, bbp_state, rf_state);
 
return -EBUSY;
 }
diff -rU3 wireless-dev-rts/drivers/net/wireless/d80211/rt2x00/rt2500usb.c 
wireless-dev-state/drivers/net/wireless/d80211/rt2x00/rt2500usb.c
--- wireless-dev-rts/drivers/net/wireless/d80211/rt2x00/rt2500usb.c 
2006-07-23 18:15:52.0 +0200
+++ wireless-dev-state/drivers/net/wireless/d80211/rt2x00/rt2500usb.c   
2006-07-23 18:36:12.0 +0200
@@ -731,6 +731,7 @@
enum dev_state state)
 {
u16 reg;
+   u16 reg2;
unsigned int i;
char put_to_sleep;
char bbp_state;
@@ -739,11 +740,12 @@
put_to_sleep = (state != STATE_AWAKE);
 
rt2x00_register_read(rt2x00dev, MAC_CSR17, ®);
-   rt2x00_set_field16_nb(®, MAC_CSR17_SET_STATE, 1);
rt2x00_set_field16_nb(®, MAC_CSR17_BBP_DESIRE_STATE, state);
rt2x00_set_field16_nb(®, MAC_CSR17_RF_DESIRE_STATE, state);
rt2x00_set_field16_nb(®, MAC_CSR17_PUT_TO_SLEEP, put_to_sleep);
rt2x00_register_write(rt2x00dev, MAC_CSR17, reg);
+   rt2x00_set_field16_nb(®, MAC_CSR17_SET_STATE, 1);
+   rt2x00_register_write(rt2x00dev, MAC_CSR17, reg);
 
/*
 * Device is not guarenteed to be in the requested state yet.
@@ -751,16 +753,20 @@
 * device has entered the correct state.
 */
for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
-   rt2x00_register_read(rt2x00dev, MAC_CSR17, ®);
-   bbp_state = rt2x00_get_field16_nb(
-   reg, MAC_CSR17_BBP_CURR_STATE);
-   rf_state = rt2x00_get_field16_nb(reg, MAC_CSR17_RF_CURR_STATE);
+   rt2x00_register_read(rt2x00dev, MAC_CSR17, ®2);
+   bbp_state = rt2x00_get_field16_nb(reg2,
+   MAC_CSR17_BBP_CURR_STATE);
+   rf_state = rt2x00_get_field16_nb(reg2,
+   MAC_CSR17_RF_CURR_STATE);
if (bbp_state == state && rf_state == state)
return 0;
+   rt2x00_register_write(rt2x00dev, MAC_CSR17, reg);
msleep(10);
}
 
-   NOTICE("Device failed to %s.\n" , put_to_sleep ? "suspend" : "resume");
+   NOTICE("Device failed to enter state %d, "
+   "current device state: bbp %d and rf %d.\n",
+   state, bbp_state, rf_state);
 
return -EBUSY;
 }
diff -rU3 wireless-dev-rts/drivers/net/wireless/d80211/rt2x00/rt61pci.c 
wireless-dev-state/drivers/net/wireless/d80211/rt2x00/rt61pci.c
--- wireless-dev-rts/drivers/net/wireless/d80211/rt2x00/rt61pci.c   
2006-07-23 18:16:51.0 +0200
+++ wireless-dev-state/drivers/net/wireless/d80211/rt2x00/rt61pci.c 
2006-07-23 19:22:41.0 +0200
@@ -1169,19 +1169,33 @@
u32 reg;
unsigned int i;
char put_to_sleep;
+   char current_state;
 
put_to_sleep = (state != STATE_AWAKE);
 
-   if (!put_to_sleep)
-   rt2x00_mcu_request(rt2x00dev, MCU_WAKEUP, 0xff, 0x00, 0x00);
-
rt2x00_register_read(rt2x00dev, MAC_CSR12, ®);
rt2x00_set_field32(®, MAC_CSR12_FORCE_WAKEUP, !put_to_sleep);
rt2x00_set_field32(®, MAC_CSR12_PUT_TO_SLEEP, put_to_sleep);
rt2x00_register_write(rt2x00dev, MAC_CSR12, reg);
 
-   if (put_to_sleep)
+   if (put_to_sleep) {
+   rt2x00_register_write(rt2x00dev,
+   SOFT_RESET_CSR, cpu_to_le32(0x0005));
+   rt2x00_regi

[PATCH 8/24] RT2x00: Fix *_set_state() functions

2006-07-26 Thread Ivo van Doorn
>From Ivo van Doorn <[EMAIL PROTECTED]>

Fix problems with waking up the device at initialization time.
The debug message should be more descriptive of the problem,
when the device fails to wake up.

Signed-off-by: Ivo van Doorn <[EMAIL PROTECTED]>

---

diff -rU3 wireless-dev-rts/drivers/net/wireless/d80211/rt2x00/rt2400pci.c 
wireless-dev-state/drivers/net/wireless/d80211/rt2x00/rt2400pci.c
--- wireless-dev-rts/drivers/net/wireless/d80211/rt2x00/rt2400pci.c 
2006-07-23 
18:16:35.0 +0200
+++ wireless-dev-state/drivers/net/wireless/d80211/rt2x00/rt2400pci.c   
2006-07-23 18:34:06.0 +0200
@@ -857,7 +857,9 @@
msleep(10);
}
 
-   NOTICE("Device failed to %s.\n" , put_to_sleep ? "suspend" : "resume");
+   NOTICE("Device failed to enter state %d, "
+   "current device state: bbp %d and rf %d.\n",
+   state, bbp_state, rf_state);
 
return -EBUSY;
 }
diff -rU3 wireless-dev-rts/drivers/net/wireless/d80211/rt2x00/rt2500pci.c 
wireless-dev-state/drivers/net/wireless/d80211/rt2x00/rt2500pci.c
--- wireless-dev-rts/drivers/net/wireless/d80211/rt2x00/rt2500pci.c 
2006-07-23 
18:16:41.0 +0200
+++ wireless-dev-state/drivers/net/wireless/d80211/rt2x00/rt2500pci.c   
2006-07-23 18:34:14.0 +0200
@@ -930,7 +930,9 @@
msleep(10);
}
 
-   NOTICE("Device failed to %s.\n" , put_to_sleep ? "suspend" : "resume");
+   NOTICE("Device failed to enter state %d, "
+   "current device state: bbp %d and rf %d.\n",
+   state, bbp_state, rf_state);
 
return -EBUSY;
 }
diff -rU3 wireless-dev-rts/drivers/net/wireless/d80211/rt2x00/rt2500usb.c 
wireless-dev-state/drivers/net/wireless/d80211/rt2x00/rt2500usb.c
--- wireless-dev-rts/drivers/net/wireless/d80211/rt2x00/rt2500usb.c 
2006-07-23 
18:15:52.0 +0200
+++ wireless-dev-state/drivers/net/wireless/d80211/rt2x00/rt2500usb.c   
2006-07-23 18:36:12.0 +0200
@@ -731,6 +731,7 @@
enum dev_state state)
 {
u16 reg;
+   u16 reg2;
unsigned int i;
char put_to_sleep;
char bbp_state;
@@ -739,11 +740,12 @@
put_to_sleep = (state != STATE_AWAKE);
 
rt2x00_register_read(rt2x00dev, MAC_CSR17, ®);
-   rt2x00_set_field16_nb(®, MAC_CSR17_SET_STATE, 1);
rt2x00_set_field16_nb(®, MAC_CSR17_BBP_DESIRE_STATE, state);
rt2x00_set_field16_nb(®, MAC_CSR17_RF_DESIRE_STATE, state);
rt2x00_set_field16_nb(®, MAC_CSR17_PUT_TO_SLEEP, put_to_sleep);
rt2x00_register_write(rt2x00dev, MAC_CSR17, reg);
+   rt2x00_set_field16_nb(®, MAC_CSR17_SET_STATE, 1);
+   rt2x00_register_write(rt2x00dev, MAC_CSR17, reg);
 
/*
 * Device is not guarenteed to be in the requested state yet.
@@ -751,16 +753,20 @@
 * device has entered the correct state.
 */
for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
-   rt2x00_register_read(rt2x00dev, MAC_CSR17, ®);
-   bbp_state = rt2x00_get_field16_nb(
-   reg, MAC_CSR17_BBP_CURR_STATE);
-   rf_state = rt2x00_get_field16_nb(reg, MAC_CSR17_RF_CURR_STATE);
+   rt2x00_register_read(rt2x00dev, MAC_CSR17, ®2);
+   bbp_state = rt2x00_get_field16_nb(reg2,
+   MAC_CSR17_BBP_CURR_STATE);
+   rf_state = rt2x00_get_field16_nb(reg2,
+   MAC_CSR17_RF_CURR_STATE);
if (bbp_state == state && rf_state == state)
return 0;
+   rt2x00_register_write(rt2x00dev, MAC_CSR17, reg);
msleep(10);
}
 
-   NOTICE("Device failed to %s.\n" , put_to_sleep ? "suspend" : "resume");
+   NOTICE("Device failed to enter state %d, "
+   "current device state: bbp %d and rf %d.\n",
+   state, bbp_state, rf_state);
 
return -EBUSY;
 }
diff -rU3 wireless-dev-rts/drivers/net/wireless/d80211/rt2x00/rt61pci.c 
wireless-dev-state/drivers/net/wireless/d80211/rt2x00/rt61pci.c
--- wireless-dev-rts/drivers/net/wireless/d80211/rt2x00/rt61pci.c   
2006-07-23 
18:16:51.0 +0200
+++ wireless-dev-state/drivers/net/wireless/d80211/rt2x00/rt61pci.c 
2006-07-23 
19:22:41.0 +0200
@@ -1169,19 +1169,33 @@
u32 reg;
unsigned int i;
char put_to_sleep;
+   char current_state;
 
put_to_sleep = (state != STATE_AWAKE);
 
-   if (!put_to_sleep)
-   rt2x00_mcu_request(rt2x00dev, MCU_WAKEUP, 0xff, 0x00, 0x00);
-
rt2x00_register_read(rt2x00dev, MAC_CSR12, ®);
rt2x00_set_field32(®, MAC_CSR12_FORCE_WAKEUP, !put_to_sleep);
rt2x00_set_field32(®, MAC_CSR12_PUT_TO_SLEEP, put_to_sleep);
rt2x00_register_write(rt2x00dev, MAC_CSR12, reg);
 
-   if (put_to_sleep)
+   if (put_to_sleep) {
+   rt2x00_register_write(rt2x00dev,
+   SOFT_RESET_CSR, cpu_to_le32(0x0005));
+   r