Comment 25 for bug 396417

Andy Whitcroft (apw) wrote :

@Andy Rogers -- thanks for your very comprehensive replies.

From the 2.6.30 dmesg output we see that the kernel attempts to use both the rt25000 driver and the rt73 driver, but the former fails to bind:

    [ 18.626748] phy0 -> rt2500usb_init_eeprom: Error - Invalid RT chipset detected.
    [ 18.626760] phy0 -> rt2x00lib_probe_dev: Error - Failed to allocate device.
    [ 18.626839] usbcore: registered new interface driver rt2500usb
    [ 18.835405] Intel ICH 0000:00:02.7: PCI INT C -> GSI 18 (level, low) -> IRQ 18
    [ 18.992141] phy1: Selected rate control algorithm 'minstrel'
    [ 18.993466] Registered led device: rt73usb-phy1::radio
    [ 18.993512] Registered led device: rt73usb-phy1::assoc
    [ 18.993548] Registered led device: rt73usb-phy1::quality
    [ 18.994395] usbcore: registered new interface driver rt73usb

Whereas with 2.6.31-rc3 we see the rt2500 driver bind and fail:

    [ 16.496142] phy0: Selected rate control algorithm 'minstrel'
    [ 16.496940] Registered led device: rt2500usb-phy0::radio
    [ 16.496978] Registered led device: rt2500usb-phy0::quality
    [...]
    [ 16.504190] usbcore: registered new interface driver rt2500usb
    [ 16.554735] usbcore: registered new interface driver rt73usb
    [...]
    [ 27.632025] phy0 -> rt2500usb_set_device_state: Error - Device failed to enter state 3 (-16).
    [ 27.632033] phy0 -> rt2500usb_set_device_state: Error - Device failed to enter state 4 (-5).

This specific code chipset matching code has been fixed recently to simplify it in these two commits:

    commit 358623c22c9fd837b3b1b444377037f72553dc9f
    Author: Ivo van Doorn <email address hidden>
    Date: Tue May 5 19:46:08 2009 +0200

 rt2x00: Simplify rt2x00_check_rev

    commit 5a9940118a616266183c53a9ee4352feadb9c2e8
    Author: Ivo van Doorn <email address hidden>
    Date: Fri May 8 18:30:43 2009 +0200

 rt2x00: Fix chipset detection for rt73usb

These two in combination switch over to a mask based chipset version matcher. However also remove the code from rt2x00_check_rev() which checked the bottom four bits as non-zero passing that responsibility to the caller. This appears to change the semantics of the rt2500usb matcher.

Will spin a test patch to undo this semantic change and post test kernels shortly.