>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.000000000 +0200 +++ wireless-dev-state/drivers/net/wireless/d80211/rt2x00/rt2400pci.c 2006-07-23 18:34:06.000000000 +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.000000000 +0200 +++ wireless-dev-state/drivers/net/wireless/d80211/rt2x00/rt2500pci.c 2006-07-23 18:34:14.000000000 +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.000000000 +0200 +++ wireless-dev-state/drivers/net/wireless/d80211/rt2x00/rt2500usb.c 2006-07-23 18:36:12.000000000 +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.000000000 +0200 +++ wireless-dev-state/drivers/net/wireless/d80211/rt2x00/rt61pci.c 2006-07-23 19:22:41.000000000 +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(0x00000005)); + rt2x00_register_write(rt2x00dev, + IO_CNTL_CSR, cpu_to_le32(0x0000001c)); + rt2x00_register_write(rt2x00dev, + PCI_USEC_CSR, cpu_to_le32(0x00000060)); + rt2x00_mcu_request(rt2x00dev, MCU_SLEEP, 0xff, 0x00, 0x00); + } else { + rt2x00_register_write(rt2x00dev, + SOFT_RESET_CSR, cpu_to_le32(0x00000007)); + rt2x00_register_write(rt2x00dev, + IO_CNTL_CSR, cpu_to_le32(0x00000018)); + rt2x00_register_write(rt2x00dev, + PCI_USEC_CSR, cpu_to_le32(0x00000020)); + rt2x00_mcu_request(rt2x00dev, MCU_WAKEUP, 0xff, 0x00, 0x00); + } /* * Device is not guarenteed to be in the requested state yet. @@ -1190,13 +1204,15 @@ */ for (i = 0; i < REGISTER_BUSY_COUNT; i++) { rt2x00_register_read(rt2x00dev, MAC_CSR12, ®); - if (rt2x00_get_field32( - reg, MAC_CSR12_CURRENT_STATE) == !put_to_sleep) + current_state = rt2x00_get_field32(reg, + MAC_CSR12_BBP_CURRENT_STATE); + if (current_state == !put_to_sleep) return 0; msleep(10); } - NOTICE("Device failed to %s.\n" , put_to_sleep ? "suspend" : "resume"); + NOTICE("Device failed to enter state %d, " + "current device state %d.\n", !put_to_sleep, current_state); return -EBUSY; } diff -rU3 wireless-dev-rts/drivers/net/wireless/d80211/rt2x00/rt61pci.h wireless-dev-state/drivers/net/wireless/d80211/rt2x00/rt61pci.h --- wireless-dev-rts/drivers/net/wireless/d80211/rt2x00/rt61pci.h 2006-07-23 17:16:49.000000000 +0200 +++ wireless-dev-state/drivers/net/wireless/d80211/rt2x00/rt61pci.h 2006-07-23 18:33:18.000000000 +0200 @@ -311,11 +311,13 @@ * MAC_CSR12: Manual power control / status register (merge CSR20 & PWRCSR1). * CURRENT_STATE: 0:sleep, 1:awake. * FORCE_WAKEUP: This has higher priority than PUT_TO_SLEEP. + * BBP_CURRENT_STATE: 0: BBP sleep, 1: BBP awake. */ #define MAC_CSR12 0x3030 #define MAC_CSR12_CURRENT_STATE FIELD32(0x00000001) #define MAC_CSR12_PUT_TO_SLEEP FIELD32(0x00000002) #define MAC_CSR12_FORCE_WAKEUP FIELD32(0x00000004) +#define MAC_CSR12_BBP_CURRENT_STATE FIELD32(0x00000008) /* * MAC_CSR13: GPIO. diff -rU3 wireless-dev-rts/drivers/net/wireless/d80211/rt2x00/rt73usb.c wireless-dev-state/drivers/net/wireless/d80211/rt2x00/rt73usb.c --- wireless-dev-rts/drivers/net/wireless/d80211/rt2x00/rt73usb.c 2006-07-23 18:17:01.000000000 +0200 +++ wireless-dev-state/drivers/net/wireless/d80211/rt2x00/rt73usb.c 2006-07-23 19:23:14.000000000 +0200 @@ -895,6 +895,7 @@ u32 reg; unsigned int i; char put_to_sleep; + char current_state; put_to_sleep = (state != STATE_AWAKE); @@ -920,13 +921,15 @@ */ for (i = 0; i < REGISTER_BUSY_COUNT; i++) { rt2x00_register_read(rt2x00dev, MAC_CSR12, ®); - if (rt2x00_get_field32( - reg, MAC_CSR12_CURRENT_STATE) == !put_to_sleep) + current_state = rt2x00_get_field32(reg, + MAC_CSR12_BBP_CURRENT_STATE); + if (current_state == !put_to_sleep) return 0; msleep(10); } - NOTICE("Device failed to %s.\n" , put_to_sleep ? "suspend" : "resume"); + NOTICE("Device failed to enter state %d, " + "current device state %d.\n", !put_to_sleep, current_state); return -EBUSY; } diff -rU3 wireless-dev-rts/drivers/net/wireless/d80211/rt2x00/rt73usb.h wireless-dev-state/drivers/net/wireless/d80211/rt2x00/rt73usb.h --- wireless-dev-rts/drivers/net/wireless/d80211/rt2x00/rt73usb.h 2006-07-23 17:17:09.000000000 +0200 +++ wireless-dev-state/drivers/net/wireless/d80211/rt2x00/rt73usb.h 2006-07-23 18:33:18.000000000 +0200 @@ -218,11 +218,13 @@ * MAC_CSR12: Manual power control / status register (merge CSR20 & PWRCSR1). * CURRENT_STATE: 0:sleep, 1:awake. * FORCE_WAKEUP: This has higher priority than PUT_TO_SLEEP. + * BBP_CURRENT_STATE: 0: BBP sleep, 1: BBP awake. */ #define MAC_CSR12 0x3030 #define MAC_CSR12_CURRENT_STATE FIELD32(0x00000001) #define MAC_CSR12_PUT_TO_SLEEP FIELD32(0x00000002) #define MAC_CSR12_FORCE_WAKEUP FIELD32(0x00000004) +#define MAC_CSR12_BBP_CURRENT_STATE FIELD32(0x00000008) /* * MAC_CSR13: GPIO. - 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