Hi Andreas, On 08/23/12 20:51, Andreas Messer wrote: > Hey there, > > Am Dienstag, 24. Juli 2012, 19:33:34 schrieb Andreas Messer: >> Hello Again, >> >> Am Dienstag, 26. Juni 2012, 13:18:35 schrieb John W. Linville: >>> On Tue, Jun 26, 2012 at 06:03:56PM +0200, Andreas Messer wrote: >>>> Dear all, >>>> >>>> updating my pc from linux kernel 3.3 to linux kernel 3.4 broke my wlan. > > I have spent some more time on investigating the cause of the bug and found > the problem. Actually I'm not sure which is the right solution. The problem is > caused by the following points: > > 1) The rt73 hardware registers are not initialized before bringing the > corresponding network interface up ('ifconfig wlan0 up') > > 2) Bringing the interface up is not possible because of the kill switch > > 3) The GPIO input pin for the kill switch is still in 'output mode' (the > default power on value), therefore the register will always read > 'killswitch on' > > So something like a deadlock. While looking through the code, I have seen, > that the whole rt2xx driver uses here the same concept, that the hardware > register initialization and firmware-download does not happen before the > interface is brought up. Im not sure if that is the right concept, shouldn't > be the hardware initialized properly on loading the driver already? I mean, if > values are read from the hardware in order to e.g. read the kill switch state > shouldn't bethe hardware in a defined state before that? Anyway, it would be > possible to solve this bug easily by only setting up the correct value of the > CSR13 register right after reading the eeprom. For simple testing I have > written the correct gpio mask to CSR13 using the debugfs interface and the > wlan interface immediately was brought up and connected successfully with my > Network. > > So which is the right solution? I could make & test a patch for the simple > solution easily. > Thanks for you extensive analysis. You seem to be absolutely right that we need to properly setup the GPIO direction of the rfkill switch GPIO pin. And it seems that all rt2x00 drivers (not only rt73usb) are suffering from this. The reason why we do most of the initialization at interface up is that that is the earliest possible time we can get the firmware image from userspace. A lot of the register programming we have to do for initialization depend on the firmware being uploaded and running, hence we initialize most at interface up time. However, the correct fix IMHO here is to set the GPIO direction of the rfkill switch GPIO pin to input at driver load time. Find attached a patch that does this for all the rt2x00 devices. I hope you are able to test whether this patch fixes the problem for you. Once you have verified that the patch works, I will submit the changes as a proper patch series for inclusion upstream. --- Gertjan