[PATCH 5/6] pcmcia: add pcmcia to IRQ information

Dominik Brodowski linux at dominikbrodowski.net
Sun Aug 28 15:38:47 EDT 2005


From: Brice Goglin <Brice.Goglin at ens-lyon.org>

Add a devname parameter to the pcmcia_device structure, fills it with 
"pcmcia<bus_id>" in pcmcia_device_add, and passes it to request_irq in 
pcmcia_request_irq.

Signed-off-by: Brice Goglin <Brice.Goglin at ens-lyon.org>
Signed-off-by: Dominik Brodowski <linux at dominikbrodowski.net>

Index: 2.6.13-rc7/drivers/pcmcia/ds.c
===================================================================
--- 2.6.13-rc7.orig/drivers/pcmcia/ds.c
+++ 2.6.13-rc7/drivers/pcmcia/ds.c
@@ -354,6 +354,7 @@ static void pcmcia_release_dev(struct de
 	struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
 	ds_dbg(1, "releasing dev %p\n", p_dev);
 	pcmcia_put_socket(p_dev->socket);
+	kfree(p_dev->devname);
 	kfree(p_dev);
 }
 
@@ -504,6 +505,7 @@ struct pcmcia_device * pcmcia_device_add
 {
 	struct pcmcia_device *p_dev;
 	unsigned long flags;
+	int bus_id_len;
 
 	s = pcmcia_get_socket(s);
 	if (!s)
@@ -527,7 +529,12 @@ struct pcmcia_device * pcmcia_device_add
 	p_dev->dev.bus = &pcmcia_bus_type;
 	p_dev->dev.parent = s->dev.dev;
 	p_dev->dev.release = pcmcia_release_dev;
-	sprintf (p_dev->dev.bus_id, "%d.%d", p_dev->socket->sock, p_dev->device_no);
+	bus_id_len = sprintf (p_dev->dev.bus_id, "%d.%d", p_dev->socket->sock, p_dev->device_no);
+
+	p_dev->devname = kmalloc(6 + bus_id_len + 1, GFP_KERNEL);
+	if (!p_dev->devname)
+		goto err_free;
+	sprintf (p_dev->devname, "pcmcia%s", p_dev->dev.bus_id);
 
 	/* compat */
 	p_dev->state = CLIENT_UNBOUND;
@@ -552,6 +559,7 @@ struct pcmcia_device * pcmcia_device_add
 	return p_dev;
 
  err_free:
+	kfree(p_dev->devname);
 	kfree(p_dev);
 	s->device_count--;
  err_put:
Index: 2.6.13-rc7/drivers/pcmcia/pcmcia_resource.c
===================================================================
--- 2.6.13-rc7.orig/drivers/pcmcia/pcmcia_resource.c
+++ 2.6.13-rc7/drivers/pcmcia/pcmcia_resource.c
@@ -820,7 +820,7 @@ int pcmcia_request_irq(struct pcmcia_dev
 					  ((req->Attributes & IRQ_TYPE_DYNAMIC_SHARING) ||
 					   (s->functions > 1) ||
 					   (irq == s->pci_irq)) ? SA_SHIRQ : 0,
-					  p_dev->dev.bus_id,
+					  p_dev->devname,
 					  (req->Attributes & IRQ_HANDLE_PRESENT) ? req->Instance : data);
 			if (!ret) {
 				if (!(req->Attributes & IRQ_HANDLE_PRESENT))
@@ -841,7 +841,7 @@ int pcmcia_request_irq(struct pcmcia_dev
 				((req->Attributes & IRQ_TYPE_DYNAMIC_SHARING) ||
 				 (s->functions > 1) ||
 				 (irq == s->pci_irq)) ? SA_SHIRQ : 0,
-				p_dev->dev.bus_id, req->Instance))
+				p_dev->devname, req->Instance))
 			return CS_IN_USE;
 	}
 
Index: 2.6.13-rc7/include/pcmcia/ds.h
===================================================================
--- 2.6.13-rc7.orig/include/pcmcia/ds.h
+++ 2.6.13-rc7/include/pcmcia/ds.h
@@ -151,6 +151,8 @@ struct pcmcia_device {
 	   uniquely define a pcmcia_device */
 	struct pcmcia_socket	*socket;
 
+	char			*devname;
+
 	u8			device_no;
 
 	/* the hardware "function" device; certain subdevices can



More information about the linux-pcmcia mailing list