From: Adam Belay This patch is needed for class devices to bind to physical devices detected in drivers/net/wireless. Signed-off-by: Andrew Morton --- 25-akpm/drivers/net/wireless/airo.c | 19 +++++++++---------- 25-akpm/drivers/net/wireless/airo_cs.c | 4 ++-- 25-akpm/drivers/net/wireless/netwave_cs.c | 2 ++ 25-akpm/drivers/net/wireless/orinoco_cs.c | 1 + 25-akpm/drivers/net/wireless/ray_cs.c | 1 + 25-akpm/drivers/net/wireless/wavelan_cs.c | 1 + 25-akpm/drivers/net/wireless/wl3501_cs.c | 1 + drivers/net/wireless/atmel_cs.c | 0 8 files changed, 17 insertions(+), 12 deletions(-) diff -puN drivers/net/wireless/airo.c~update-drivers-net-wireless-3-3 drivers/net/wireless/airo.c --- 25/drivers/net/wireless/airo.c~update-drivers-net-wireless-3-3 2004-07-02 15:51:49.459983336 -0700 +++ 25-akpm/drivers/net/wireless/airo.c 2004-07-02 15:51:49.479980296 -0700 @@ -2680,7 +2680,8 @@ int reset_card( struct net_device *dev , } struct net_device *_init_airo_card( unsigned short irq, int port, - int is_pcmcia, struct pci_dev *pci ) + int is_pcmcia, struct pci_dev *pci, + struct device *dmdev ) { struct net_device *dev; struct airo_info *ai; @@ -2741,10 +2742,8 @@ struct net_device *_init_airo_card( unsi dev->irq = irq; dev->base_addr = port; - /* what is with PCMCIA ??? */ - if (pci) { - SET_NETDEV_DEV(dev, &pci->dev); - } + SET_NETDEV_DEV(dev, dmdev); + if (test_bit(FLAG_MPI,&ai->flags)) reset_card (dev, 1); @@ -2826,9 +2825,9 @@ err_out_free: return NULL; } -struct net_device *init_airo_card( unsigned short irq, int port, int is_pcmcia ) +struct net_device *init_airo_card( unsigned short irq, int port, int is_pcmcia, struct device *dmdev ) { - return _init_airo_card ( irq, port, is_pcmcia, 0); + return _init_airo_card ( irq, port, is_pcmcia, 0, dmdev); } EXPORT_SYMBOL(init_airo_card); @@ -5458,9 +5457,9 @@ static int __devinit airo_pci_probe(stru pci_set_master(pdev); if (pdev->device == 0x5000 || pdev->device == 0xa504) - dev = _init_airo_card(pdev->irq, pdev->resource[0].start, 0, pdev); + dev = _init_airo_card(pdev->irq, pdev->resource[0].start, 0, pdev, &pdev->dev); else - dev = _init_airo_card(pdev->irq, pdev->resource[2].start, 0, pdev); + dev = _init_airo_card(pdev->irq, pdev->resource[2].start, 0, pdev, &pdev->dev); if (!dev) return -ENODEV; @@ -5563,7 +5562,7 @@ static int __init airo_init_module( void printk( KERN_INFO "airo: Trying to configure ISA adapter at irq=%d io=0x%x\n", irq[i], io[i] ); - if (init_airo_card( irq[i], io[i], 0 )) + if (init_airo_card( irq[i], io[i], 0, NULL )) have_isa_dev = 1; } diff -puN drivers/net/wireless/airo_cs.c~update-drivers-net-wireless-3-3 drivers/net/wireless/airo_cs.c --- 25/drivers/net/wireless/airo_cs.c~update-drivers-net-wireless-3-3 2004-07-02 15:51:49.460983184 -0700 +++ 25-akpm/drivers/net/wireless/airo_cs.c 2004-07-02 15:51:49.480980144 -0700 @@ -89,7 +89,7 @@ MODULE_PARM(irq_list, "1-4i"); event handler. */ -struct net_device *init_airo_card( int, int, int ); +struct net_device *init_airo_card( int, int, int, struct device * ); void stop_airo_card( struct net_device *, int ); int reset_airo_card( struct net_device * ); @@ -450,7 +450,7 @@ static void airo_config(dev_link_t *link CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link->handle, &link->conf)); ((local_info_t*)link->priv)->eth_dev = init_airo_card( link->irq.AssignedIRQ, - link->io.BasePort1, 1 ); + link->io.BasePort1, 1, pcmcia_lookup_device(handle) ); if (!((local_info_t*)link->priv)->eth_dev) goto cs_failed; /* diff -puN drivers/net/wireless/atmel_cs.c~update-drivers-net-wireless-3-3 drivers/net/wireless/atmel_cs.c diff -puN drivers/net/wireless/netwave_cs.c~update-drivers-net-wireless-3-3 drivers/net/wireless/netwave_cs.c --- 25/drivers/net/wireless/netwave_cs.c~update-drivers-net-wireless-3-3 2004-07-02 15:51:49.463982728 -0700 +++ 25-akpm/drivers/net/wireless/netwave_cs.c 2004-07-02 15:51:50.936758832 -0700 @@ -1075,6 +1075,8 @@ static void netwave_pcmcia_config(dev_li dev->irq = link->irq.AssignedIRQ; dev->base_addr = link->io.BasePort1; + SET_NETDEV_DEV(dev, pcmcia_lookup_device(handle)); + if (register_netdev(dev) != 0) { printk(KERN_DEBUG "netwave_cs: register_netdev() failed\n"); goto failed; diff -puN drivers/net/wireless/orinoco_cs.c~update-drivers-net-wireless-3-3 drivers/net/wireless/orinoco_cs.c --- 25/drivers/net/wireless/orinoco_cs.c~update-drivers-net-wireless-3-3 2004-07-02 15:51:49.465982424 -0700 +++ 25-akpm/drivers/net/wireless/orinoco_cs.c 2004-07-02 15:51:50.937758680 -0700 @@ -461,6 +461,7 @@ orinoco_cs_config(dev_link_t *link) /* register_netdev will give us an ethX name */ dev->name[0] = '\0'; + SET_NETDEV_DEV(dev, pcmcia_lookup_device(handle)); /* Tell the stack we exist */ if (register_netdev(dev) != 0) { printk(KERN_ERR "orinoco_cs: register_netdev() failed\n"); diff -puN drivers/net/wireless/ray_cs.c~update-drivers-net-wireless-3-3 drivers/net/wireless/ray_cs.c --- 25/drivers/net/wireless/ray_cs.c~update-drivers-net-wireless-3-3 2004-07-02 15:51:49.467982120 -0700 +++ 25-akpm/drivers/net/wireless/ray_cs.c 2004-07-02 15:51:50.939758376 -0700 @@ -570,6 +570,7 @@ static void ray_config(dev_link_t *link) return; } + SET_NETDEV_DEV(dev, pcmcia_lookup_device(handle)); i = register_netdev(dev); if (i != 0) { printk("ray_config register_netdev() failed\n"); diff -puN drivers/net/wireless/wavelan_cs.c~update-drivers-net-wireless-3-3 drivers/net/wireless/wavelan_cs.c --- 25/drivers/net/wireless/wavelan_cs.c~update-drivers-net-wireless-3-3 2004-07-02 15:51:49.469981816 -0700 +++ 25-akpm/drivers/net/wireless/wavelan_cs.c 2004-07-02 15:51:50.943757768 -0700 @@ -4112,6 +4112,7 @@ wv_pcmcia_config(dev_link_t * link) (u_int) dev->mem_start, dev->irq, (u_int) dev->base_addr); #endif + SET_NETDEV_DEV(dev, pcmcia_lookup_device(handle)); i = register_netdev(dev); if(i != 0) { diff -puN drivers/net/wireless/wl3501_cs.c~update-drivers-net-wireless-3-3 drivers/net/wireless/wl3501_cs.c --- 25/drivers/net/wireless/wl3501_cs.c~update-drivers-net-wireless-3-3 2004-07-02 15:51:49.471981512 -0700 +++ 25-akpm/drivers/net/wireless/wl3501_cs.c 2004-07-02 15:51:50.945757464 -0700 @@ -2146,6 +2146,7 @@ static void wl3501_config(dev_link_t *li dev->irq = link->irq.AssignedIRQ; dev->base_addr = link->io.BasePort1; + SET_NETDEV_DEV(dev, pcmcia_lookup_device(handle)); if (register_netdev(dev)) { printk(KERN_NOTICE "wl3501_cs: register_netdev() failed\n"); goto failed; _