From: Adam Belay <ambx1@neo.rr.com>

This patch is needed for class devices to bind to physical devices detected
in drivers/net/wireless.

Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-sparc64-akpm/drivers/net/wireless/airo.c       |   21 ++++++++++-----------
 25-sparc64-akpm/drivers/net/wireless/airo_cs.c    |    4 ++--
 25-sparc64-akpm/drivers/net/wireless/netwave_cs.c |    2 ++
 25-sparc64-akpm/drivers/net/wireless/orinoco_cs.c |    1 +
 25-sparc64-akpm/drivers/net/wireless/ray_cs.c     |    1 +
 25-sparc64-akpm/drivers/net/wireless/wavelan_cs.c |    1 +
 25-sparc64-akpm/drivers/net/wireless/wl3501_cs.c  |    1 +
 7 files changed, 18 insertions(+), 13 deletions(-)

diff -puN drivers/net/wireless/airo.c~update-drivers-net-wireless-3-3 drivers/net/wireless/airo.c
--- 25-sparc64/drivers/net/wireless/airo.c~update-drivers-net-wireless-3-3	2004-07-31 20:57:16.920687624 -0700
+++ 25-sparc64-akpm/drivers/net/wireless/airo.c	2004-07-31 20:57:16.938684888 -0700
@@ -2681,7 +2681,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;
@@ -2742,10 +2743,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);
@@ -2827,11 +2826,11 @@ 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, NULL);
+	return _init_airo_card(irq, port, is_pcmcia, NULL, dmdev);
 }
-
 EXPORT_SYMBOL(init_airo_card);
 
 static int waitbusy (struct airo_info *ai) {
@@ -5461,9 +5460,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;
 
@@ -5566,7 +5565,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-sparc64/drivers/net/wireless/airo_cs.c~update-drivers-net-wireless-3-3	2004-07-31 20:57:16.921687472 -0700
+++ 25-sparc64-akpm/drivers/net/wireless/airo_cs.c	2004-07-31 20:57:16.939684736 -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/netwave_cs.c~update-drivers-net-wireless-3-3 drivers/net/wireless/netwave_cs.c
--- 25-sparc64/drivers/net/wireless/netwave_cs.c~update-drivers-net-wireless-3-3	2004-07-31 20:57:16.923687168 -0700
+++ 25-sparc64-akpm/drivers/net/wireless/netwave_cs.c	2004-07-31 20:57:16.940684584 -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-sparc64/drivers/net/wireless/orinoco_cs.c~update-drivers-net-wireless-3-3	2004-07-31 20:57:16.925686864 -0700
+++ 25-sparc64-akpm/drivers/net/wireless/orinoco_cs.c	2004-07-31 20:57:16.942684280 -0700
@@ -454,6 +454,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 PFX "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-sparc64/drivers/net/wireless/ray_cs.c~update-drivers-net-wireless-3-3	2004-07-31 20:57:16.927686560 -0700
+++ 25-sparc64-akpm/drivers/net/wireless/ray_cs.c	2004-07-31 20:57:16.944683976 -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-sparc64/drivers/net/wireless/wavelan_cs.c~update-drivers-net-wireless-3-3	2004-07-31 20:57:16.928686408 -0700
+++ 25-sparc64-akpm/drivers/net/wireless/wavelan_cs.c	2004-07-31 20:57:16.948683368 -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-sparc64/drivers/net/wireless/wl3501_cs.c~update-drivers-net-wireless-3-3	2004-07-31 20:57:16.930686104 -0700
+++ 25-sparc64-akpm/drivers/net/wireless/wl3501_cs.c	2004-07-31 20:57:16.950683064 -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;
_