mirror of
https://github.com/torvalds/linux.git
synced 2024-12-27 05:11:48 +00:00
[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:
parent
d3feb1844a
commit
bd65a68574
@ -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:
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user