smsc-ircc2: skip preconfiguration for PNP devices
authorBjorn Helgaas <[email protected]>
Wed, 27 Jun 2007 21:09:50 +0000 (14:09 -0700)
committerLinus Torvalds <[email protected]>
Thu, 28 Jun 2007 18:34:53 +0000 (11:34 -0700)
If we rely on the device resources from PNPBIOS, we also have to rely on
the BIOS to configure any bridges on the way to the device.

Using the PNPBIOS resources but changing the configuration of a bridge
behind the back of the firmware is likely to make things inconsistent.

This patch addresses part of the 2.6.22 regression:
    "no irda0 interface (2.6.21 was OK), smsc does not find chip"
It fixes smsc-ircc2 PNP device detection on HP nx5000 laptops.
Other laptops, including HP nc6000, HP nc8000, HP nw8000, and Toshiba
Portege 4000, still need PNP quirks to make this work.

With "smsc-ircc2.nopnp", we do the legacy device probe, including manual
bridge preconfiguration, as before.

Signed-off-by: Bjorn Helgaas <[email protected]>
Cc: Samuel Ortiz <[email protected]>
Acked-by: "Linus Walleij (LD/EAB)" <[email protected]>
Cc: Andrey Borzenkov <[email protected]>
Cc: Michal Piotrowski <[email protected]>
Cc: "David S. Miller" <[email protected]>
Cc: Adam Belay <[email protected]>
Cc: Andrew Morton <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
drivers/net/irda/smsc-ircc2.c

index 9043bf4aa49ec9e5a477eff5347b49790f2160fa..2803b370ba01012989b90a787f5ad77829c91343 100644 (file)
@@ -416,6 +416,13 @@ static int __init smsc_ircc_legacy_probe(void)
 {
        int ret = 0;
 
+#ifdef CONFIG_PCI
+       if (smsc_ircc_preconfigure_subsystems(ircc_cfg, ircc_fir, ircc_sir, ircc_dma, ircc_irq) < 0) {
+               /* Ignore errors from preconfiguration */
+               IRDA_ERROR("%s, Preconfiguration failed !\n", driver_name);
+       }
+#endif
+
        if (ircc_fir > 0 && ircc_sir > 0) {
                IRDA_MESSAGE(" Overriding FIR address 0x%04x\n", ircc_fir);
                IRDA_MESSAGE(" Overriding SIR address 0x%04x\n", ircc_sir);
@@ -459,13 +466,6 @@ static int __init smsc_ircc_init(void)
                return ret;
        }
 
-#ifdef CONFIG_PCI
-       if (smsc_ircc_preconfigure_subsystems(ircc_cfg, ircc_fir, ircc_sir, ircc_dma, ircc_irq) < 0) {
-               /* Ignore errors from preconfiguration */
-               IRDA_ERROR("%s, Preconfiguration failed !\n", driver_name);
-       }
-#endif
-
        dev_count = 0;
 
        if (smsc_nopnp || !pnp_platform_devices ||