[PATCH] pcmcia: add pcmcia to IRQ information

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@ens-lyon.org>
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Brice Goglin 2005-09-09 13:03:29 -07:00 committed by Linus Torvalds
parent d3feb1844a
commit bd65a68574
3 changed files with 13 additions and 3 deletions

View File

@ -354,6 +354,7 @@ static void pcmcia_release_dev(struct device *dev)
struct pcmcia_device *p_dev = to_pcmcia_dev(dev); struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
ds_dbg(1, "releasing dev %p\n", p_dev); ds_dbg(1, "releasing dev %p\n", p_dev);
pcmcia_put_socket(p_dev->socket); pcmcia_put_socket(p_dev->socket);
kfree(p_dev->devname);
kfree(p_dev); kfree(p_dev);
} }
@ -504,6 +505,7 @@ struct pcmcia_device * pcmcia_device_add(struct pcmcia_socket *s, unsigned int f
{ {
struct pcmcia_device *p_dev; struct pcmcia_device *p_dev;
unsigned long flags; unsigned long flags;
int bus_id_len;
s = pcmcia_get_socket(s); s = pcmcia_get_socket(s);
if (!s) if (!s)
@ -527,7 +529,12 @@ struct pcmcia_device * pcmcia_device_add(struct pcmcia_socket *s, unsigned int f
p_dev->dev.bus = &pcmcia_bus_type; p_dev->dev.bus = &pcmcia_bus_type;
p_dev->dev.parent = s->dev.dev; p_dev->dev.parent = s->dev.dev;
p_dev->dev.release = pcmcia_release_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 */ /* compat */
p_dev->state = CLIENT_UNBOUND; p_dev->state = CLIENT_UNBOUND;
@ -552,6 +559,7 @@ struct pcmcia_device * pcmcia_device_add(struct pcmcia_socket *s, unsigned int f
return p_dev; return p_dev;
err_free: err_free:
kfree(p_dev->devname);
kfree(p_dev); kfree(p_dev);
s->device_count--; s->device_count--;
err_put: err_put:

View File

@ -820,7 +820,7 @@ int pcmcia_request_irq(struct pcmcia_device *p_dev, irq_req_t *req)
((req->Attributes & IRQ_TYPE_DYNAMIC_SHARING) || ((req->Attributes & IRQ_TYPE_DYNAMIC_SHARING) ||
(s->functions > 1) || (s->functions > 1) ||
(irq == s->pci_irq)) ? SA_SHIRQ : 0, (irq == s->pci_irq)) ? SA_SHIRQ : 0,
p_dev->dev.bus_id, p_dev->devname,
(req->Attributes & IRQ_HANDLE_PRESENT) ? req->Instance : data); (req->Attributes & IRQ_HANDLE_PRESENT) ? req->Instance : data);
if (!ret) { if (!ret) {
if (!(req->Attributes & IRQ_HANDLE_PRESENT)) if (!(req->Attributes & IRQ_HANDLE_PRESENT))
@ -842,7 +842,7 @@ int pcmcia_request_irq(struct pcmcia_device *p_dev, irq_req_t *req)
((req->Attributes & IRQ_TYPE_DYNAMIC_SHARING) || ((req->Attributes & IRQ_TYPE_DYNAMIC_SHARING) ||
(s->functions > 1) || (s->functions > 1) ||
(irq == s->pci_irq)) ? SA_SHIRQ : 0, (irq == s->pci_irq)) ? SA_SHIRQ : 0,
p_dev->dev.bus_id, req->Instance)) p_dev->devname, req->Instance))
return CS_IN_USE; return CS_IN_USE;
} }

View File

@ -151,6 +151,8 @@ struct pcmcia_device {
uniquely define a pcmcia_device */ uniquely define a pcmcia_device */
struct pcmcia_socket *socket; struct pcmcia_socket *socket;
char *devname;
u8 device_no; u8 device_no;
/* the hardware "function" device; certain subdevices can /* the hardware "function" device; certain subdevices can