aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pcmcia/pcmcia_resource.c
diff options
context:
space:
mode:
authorDominik Brodowski <linux@dominikbrodowski.net>2009-11-08 11:24:46 -0500
committerDominik Brodowski <linux@dominikbrodowski.net>2009-11-28 12:03:14 -0500
commit5fa9167a1bf5f5a4b7282f5e7ac56a4a5a1fa044 (patch)
tree2bf23e13308ef683302ff5a92af0ae8bc37c1b60 /drivers/pcmcia/pcmcia_resource.c
parentdd2e5a156525f11754d9b1e0583f6bb49c253d62 (diff)
pcmcia: rework the irq_req_t typedef
Most of the irq_req_t typedef'd struct can be re-worked quite easily: (1) IRQInfo2 was unused in any case, so drop it. (2) IRQInfo1 was used write-only, so drop it. (3) Instance (private data to be passed to the IRQ handler): Most PCMCIA drivers using pcmcia_request_irq() to actually register an IRQ handler set the "dev_id" to the same pointer as the "priv" pointer in struct pcmcia_device. Modify the two exceptions (ipwireless, ibmtr_cs) to also work this waym and set the IRQ handler's "dev_id" to p_dev->priv unconditionally. (4) Handler is to be of type irq_handler_t. (5) Handler != NULL already tells whether an IRQ handler is present. Therefore, we do not need the IRQ_HANDLER_PRESENT flag in irq_req_t.Attributes. CC: netdev@vger.kernel.org CC: linux-bluetooth@vger.kernel.org CC: linux-ide@vger.kernel.org CC: linux-wireless@vger.kernel.org CC: linux-scsi@vger.kernel.org CC: alsa-devel@alsa-project.org CC: Jaroslav Kysela <perex@perex.cz> CC: Jiri Kosina <jkosina@suse.cz> CC: Karsten Keil <isdn@linux-pingi.de> for the Bluetooth parts: Acked-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
Diffstat (limited to 'drivers/pcmcia/pcmcia_resource.c')
-rw-r--r--drivers/pcmcia/pcmcia_resource.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/drivers/pcmcia/pcmcia_resource.c b/drivers/pcmcia/pcmcia_resource.c
index 1cf7d54fb7e2..a8bf8c1b45ed 100644
--- a/drivers/pcmcia/pcmcia_resource.c
+++ b/drivers/pcmcia/pcmcia_resource.c
@@ -383,8 +383,8 @@ static int pcmcia_release_irq(struct pcmcia_device *p_dev, irq_req_t *req)
383 s->irq.AssignedIRQ = 0; 383 s->irq.AssignedIRQ = 0;
384 } 384 }
385 385
386 if (req->Attributes & IRQ_HANDLE_PRESENT) { 386 if (req->Handler) {
387 free_irq(req->AssignedIRQ, req->Instance); 387 free_irq(req->AssignedIRQ, p_dev->priv);
388 } 388 }
389 389
390#ifdef CONFIG_PCMCIA_PROBE 390#ifdef CONFIG_PCMCIA_PROBE
@@ -664,7 +664,7 @@ int pcmcia_request_irq(struct pcmcia_device *p_dev, irq_req_t *req)
664 /* if the underlying IRQ infrastructure allows for it, only allocate 664 /* if the underlying IRQ infrastructure allows for it, only allocate
665 * the IRQ, but do not enable it 665 * the IRQ, but do not enable it
666 */ 666 */
667 if (!(req->Attributes & IRQ_HANDLE_PRESENT)) 667 if (!(req->Handler))
668 type |= IRQ_NOAUTOEN; 668 type |= IRQ_NOAUTOEN;
669#endif /* IRQ_NOAUTOEN */ 669#endif /* IRQ_NOAUTOEN */
670 670
@@ -674,7 +674,7 @@ int pcmcia_request_irq(struct pcmcia_device *p_dev, irq_req_t *req)
674 } else { 674 } else {
675 int try; 675 int try;
676 u32 mask = s->irq_mask; 676 u32 mask = s->irq_mask;
677 void *data = &p_dev->dev.driver; /* something unique to this device */ 677 void *data = p_dev; /* something unique to this device */
678 678
679 for (try = 0; try < 64; try++) { 679 for (try = 0; try < 64; try++) {
680 irq = try % 32; 680 irq = try % 32;
@@ -691,12 +691,12 @@ int pcmcia_request_irq(struct pcmcia_device *p_dev, irq_req_t *req)
691 * registering a dummy handle works, i.e. if the IRQ isn't 691 * registering a dummy handle works, i.e. if the IRQ isn't
692 * marked as used by the kernel resource management core */ 692 * marked as used by the kernel resource management core */
693 ret = request_irq(irq, 693 ret = request_irq(irq,
694 (req->Attributes & IRQ_HANDLE_PRESENT) ? req->Handler : test_action, 694 (req->Handler) ? req->Handler : test_action,
695 type, 695 type,
696 p_dev->devname, 696 p_dev->devname,
697 (req->Attributes & IRQ_HANDLE_PRESENT) ? req->Instance : data); 697 (req->Handler) ? p_dev->priv : data);
698 if (!ret) { 698 if (!ret) {
699 if (!(req->Attributes & IRQ_HANDLE_PRESENT)) 699 if (!req->Handler)
700 free_irq(irq, data); 700 free_irq(irq, data);
701 break; 701 break;
702 } 702 }
@@ -713,9 +713,9 @@ int pcmcia_request_irq(struct pcmcia_device *p_dev, irq_req_t *req)
713 irq = s->pci_irq; 713 irq = s->pci_irq;
714 } 714 }
715 715
716 if (ret && (req->Attributes & IRQ_HANDLE_PRESENT)) { 716 if (ret && req->Handler) {
717 ret = request_irq(irq, req->Handler, type, 717 ret = request_irq(irq, req->Handler, type,
718 p_dev->devname, req->Instance); 718 p_dev->devname, p_dev->priv);
719 if (ret) { 719 if (ret) {
720 dev_printk(KERN_INFO, &s->dev, 720 dev_printk(KERN_INFO, &s->dev,
721 "request_irq() failed\n"); 721 "request_irq() failed\n");