]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
HID: intel-ish-hid: add MSI interrupt support
authorSong Hongyan <hongyan.song@intel.com>
Tue, 11 Dec 2018 01:58:23 +0000 (09:58 +0800)
committerJiri Kosina <jkosina@suse.cz>
Wed, 19 Dec 2018 18:59:01 +0000 (19:59 +0100)
Now ish hid ipc only support sideband interrupt but on some platforms
they use MSI interrupt.
In order to make the interrupt type coverage all the scenario add
single MSI interrupt support, it can match all interrupt types.

Signed-off-by: Song Hongyan <hongyan.song@intel.com>
Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/intel-ish-hid/ipc/pci-ish.c

index 8793cc49f8554c2b331323c86071b5371e4ce635..a6e1ee744f4d418c32745420b936afec111363dc 100644 (file)
@@ -117,6 +117,7 @@ static int ish_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
        int ret;
        struct ish_hw *hw;
+       unsigned long irq_flag = 0;
        struct ishtp_device *ishtp;
        struct device *dev = &pdev->dev;
 
@@ -156,8 +157,12 @@ static int ish_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        pdev->dev_flags |= PCI_DEV_FLAGS_NO_D3;
 
        /* request and enable interrupt */
+       ret = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_ALL_TYPES);
+       if (!pdev->msi_enabled && !pdev->msix_enabled)
+               irq_flag = IRQF_SHARED;
+
        ret = devm_request_irq(dev, pdev->irq, ish_irq_handler,
-                              IRQF_SHARED, KBUILD_MODNAME, ishtp);
+                              irq_flag, KBUILD_MODNAME, ishtp);
        if (ret) {
                dev_err(dev, "ISH: request IRQ %d failed\n", pdev->irq);
                return ret;