mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
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: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: Jaroslav Kysela <[email protected]> CC: Jiri Kosina <[email protected]> CC: Karsten Keil <[email protected]> for the Bluetooth parts: Acked-by: Marcel Holtmann <[email protected]> Signed-off-by: Dominik Brodowski <[email protected]>
This commit is contained in:
parent
dd2e5a1565
commit
5fa9167a1b
54 changed files with 59 additions and 136 deletions
|
|
@ -383,8 +383,8 @@ static int pcmcia_release_irq(struct pcmcia_device *p_dev, irq_req_t *req)
|
|||
s->irq.AssignedIRQ = 0;
|
||||
}
|
||||
|
||||
if (req->Attributes & IRQ_HANDLE_PRESENT) {
|
||||
free_irq(req->AssignedIRQ, req->Instance);
|
||||
if (req->Handler) {
|
||||
free_irq(req->AssignedIRQ, p_dev->priv);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PCMCIA_PROBE
|
||||
|
|
@ -664,7 +664,7 @@ int pcmcia_request_irq(struct pcmcia_device *p_dev, irq_req_t *req)
|
|||
/* if the underlying IRQ infrastructure allows for it, only allocate
|
||||
* the IRQ, but do not enable it
|
||||
*/
|
||||
if (!(req->Attributes & IRQ_HANDLE_PRESENT))
|
||||
if (!(req->Handler))
|
||||
type |= IRQ_NOAUTOEN;
|
||||
#endif /* IRQ_NOAUTOEN */
|
||||
|
||||
|
|
@ -674,7 +674,7 @@ int pcmcia_request_irq(struct pcmcia_device *p_dev, irq_req_t *req)
|
|||
} else {
|
||||
int try;
|
||||
u32 mask = s->irq_mask;
|
||||
void *data = &p_dev->dev.driver; /* something unique to this device */
|
||||
void *data = p_dev; /* something unique to this device */
|
||||
|
||||
for (try = 0; try < 64; try++) {
|
||||
irq = try % 32;
|
||||
|
|
@ -691,12 +691,12 @@ int pcmcia_request_irq(struct pcmcia_device *p_dev, irq_req_t *req)
|
|||
* registering a dummy handle works, i.e. if the IRQ isn't
|
||||
* marked as used by the kernel resource management core */
|
||||
ret = request_irq(irq,
|
||||
(req->Attributes & IRQ_HANDLE_PRESENT) ? req->Handler : test_action,
|
||||
(req->Handler) ? req->Handler : test_action,
|
||||
type,
|
||||
p_dev->devname,
|
||||
(req->Attributes & IRQ_HANDLE_PRESENT) ? req->Instance : data);
|
||||
(req->Handler) ? p_dev->priv : data);
|
||||
if (!ret) {
|
||||
if (!(req->Attributes & IRQ_HANDLE_PRESENT))
|
||||
if (!req->Handler)
|
||||
free_irq(irq, data);
|
||||
break;
|
||||
}
|
||||
|
|
@ -713,9 +713,9 @@ int pcmcia_request_irq(struct pcmcia_device *p_dev, irq_req_t *req)
|
|||
irq = s->pci_irq;
|
||||
}
|
||||
|
||||
if (ret && (req->Attributes & IRQ_HANDLE_PRESENT)) {
|
||||
if (ret && req->Handler) {
|
||||
ret = request_irq(irq, req->Handler, type,
|
||||
p_dev->devname, req->Instance);
|
||||
p_dev->devname, p_dev->priv);
|
||||
if (ret) {
|
||||
dev_printk(KERN_INFO, &s->dev,
|
||||
"request_irq() failed\n");
|
||||
|
|
|
|||
Loading…
Reference in a new issue