media: cx23885: Use PCI and TS masks in irq functions
authorBrad Love <brad@nextdimension.cc>
Tue, 8 May 2018 21:20:17 +0000 (17:20 -0400)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Fri, 11 May 2018 15:28:28 +0000 (11:28 -0400)
Currently mask is read for pci_status/ts1_status/ts2_status, but
otherwise ignored. The masks are now used to determine whether
action is warranted.

Signed-off-by: Brad Love <brad@nextdimension.cc>
Signed-off-by: Hans Verkuil <hansverk@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/pci/cx23885/cx23885-core.c

index b279758..3f55319 100644 (file)
@@ -1704,6 +1704,12 @@ static irqreturn_t cx23885_irq(int irq, void *dev_id)
 
        pci_status = cx_read(PCI_INT_STAT);
        pci_mask = cx23885_irq_get_mask(dev);
+       if ((pci_status & pci_mask) == 0) {
+               dprintk(7, "pci_status: 0x%08x  pci_mask: 0x%08x\n",
+                       pci_status, pci_mask);
+               goto out;
+       }
+
        vida_status = cx_read(VID_A_INT_STAT);
        vida_mask = cx_read(VID_A_INT_MSK);
        audint_status = cx_read(AUDIO_INT_INT_STAT);
@@ -1713,7 +1719,9 @@ static irqreturn_t cx23885_irq(int irq, void *dev_id)
        ts2_status = cx_read(VID_C_INT_STAT);
        ts2_mask = cx_read(VID_C_INT_MSK);
 
-       if ((pci_status == 0) && (ts2_status == 0) && (ts1_status == 0))
+       if (((pci_status & pci_mask) == 0) &&
+               ((ts2_status & ts2_mask) == 0) &&
+               ((ts1_status & ts1_mask) == 0))
                goto out;
 
        vida_count = cx_read(VID_A_GPCNT);
@@ -1840,7 +1848,7 @@ static irqreturn_t cx23885_irq(int irq, void *dev_id)
        }
 
        if (handled)
-               cx_write(PCI_INT_STAT, pci_status);
+               cx_write(PCI_INT_STAT, pci_status & pci_mask);
 out:
        return IRQ_RETVAL(handled);
 }