[PATCH] scsi: Consistently define pci_device_ids using named initializers

Uwe Kleine-König (The Capable Hub) posted 1 patch 1 month, 2 weeks ago
drivers/scsi/3w-9xxx.c                 |  12 +-
drivers/scsi/3w-xxxx.c                 |   6 +-
drivers/scsi/a100u2w.c                 |   4 +-
drivers/scsi/aacraid/linit.c           | 138 +++++------
drivers/scsi/advansys.c                |  20 +-
drivers/scsi/aic7xxx/aiclib.h          |   8 +-
drivers/scsi/aic94xx/aic94xx_init.c    |  20 +-
drivers/scsi/am53c974.c                |   3 +-
drivers/scsi/csiostor/csio_init.c      |   4 +-
drivers/scsi/dmx3191d.c                |   6 +-
drivers/scsi/elx/efct/efct_driver.c    |   6 +-
drivers/scsi/esas2r/esas2r_main.c      |  31 +--
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c |   4 +-
drivers/scsi/hpsa.c                    | 118 +++++-----
drivers/scsi/hptiop.c                  |  66 +++---
drivers/scsi/initio.c                  |  12 +-
drivers/scsi/ipr.c                     | 310 ++++++++++++++++---------
drivers/scsi/megaraid.c                |  11 +-
drivers/scsi/mvsas/mv_init.c           |  86 +++----
drivers/scsi/pm8001/pm8001_init.c      | 243 +++++++++++++------
drivers/scsi/pmcraid.c                 |   7 +-
drivers/scsi/qla1280.c                 |  22 +-
drivers/scsi/stex.c                    |  91 +++++---
drivers/scsi/sym53c8xx_2/sym_glue.c    |  62 +++--
24 files changed, 724 insertions(+), 566 deletions(-)
[PATCH] scsi: Consistently define pci_device_ids using named initializers
Posted by Uwe Kleine-König (The Capable Hub) 1 month, 2 weeks ago
... and PCI device helpers.

The various struct pci_device_id arrays were initialized mostly by one
of the PCI_DEVICE macros and then list expressions. The latter isn't
easily readable if you're not into PCI. Using named initializers is more
explicit and thus easier to parse.

Also use PCI_DEVICE* helper macros to assign .vendor, .device,
.subvendor and .subdevice where appropriate and skip explicit
assignments of 0 (which the compiler takes care of).

The secret plan is to make struct pci_device_id::driver_data an
anonymous union (similar to
https://lore.kernel.org/all/cover.1776579304.git.u.kleine-koenig@baylibre.com/)
and that requires named initializers. But it's also a nice cleanup on
its own.

This change doesn't introduce changes to the compiled pci_device_id
arrays. Tested on x86 and arm64.

Signed-off-by: Uwe Kleine-König (The Capable Hub) <u.kleine-koenig@baylibre.com>
---
Hello,

the mentioned follow-up quest allows to do

	-	{ PCI_VDEVICE(TTI, 0x3220), .driver_data = (kernel_ulong_t)&hptiop_itl_ops },
	+	{ PCI_VDEVICE(TTI, 0x3220), .driver_data_ptr = &hptiop_itl_ops },

which gets rid of a bunch of casts and so brings a little bit more type
safety. This patch is a preparation for that.

I assume a single patch for all of drivers/scsi is fine. If not I can
split per driver.

Best regards
Uwe

 drivers/scsi/3w-9xxx.c                 |  12 +-
 drivers/scsi/3w-xxxx.c                 |   6 +-
 drivers/scsi/a100u2w.c                 |   4 +-
 drivers/scsi/aacraid/linit.c           | 138 +++++------
 drivers/scsi/advansys.c                |  20 +-
 drivers/scsi/aic7xxx/aiclib.h          |   8 +-
 drivers/scsi/aic94xx/aic94xx_init.c    |  20 +-
 drivers/scsi/am53c974.c                |   3 +-
 drivers/scsi/csiostor/csio_init.c      |   4 +-
 drivers/scsi/dmx3191d.c                |   6 +-
 drivers/scsi/elx/efct/efct_driver.c    |   6 +-
 drivers/scsi/esas2r/esas2r_main.c      |  31 +--
 drivers/scsi/hisi_sas/hisi_sas_v3_hw.c |   4 +-
 drivers/scsi/hpsa.c                    | 118 +++++-----
 drivers/scsi/hptiop.c                  |  66 +++---
 drivers/scsi/initio.c                  |  12 +-
 drivers/scsi/ipr.c                     | 310 ++++++++++++++++---------
 drivers/scsi/megaraid.c                |  11 +-
 drivers/scsi/mvsas/mv_init.c           |  86 +++----
 drivers/scsi/pm8001/pm8001_init.c      | 243 +++++++++++++------
 drivers/scsi/pmcraid.c                 |   7 +-
 drivers/scsi/qla1280.c                 |  22 +-
 drivers/scsi/stex.c                    |  91 +++++---
 drivers/scsi/sym53c8xx_2/sym_glue.c    |  62 +++--
 24 files changed, 724 insertions(+), 566 deletions(-)

diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c
index 9b93a2440af8..37a027e0b9de 100644
--- a/drivers/scsi/3w-9xxx.c
+++ b/drivers/scsi/3w-9xxx.c
@@ -2262,14 +2262,10 @@ static int __maybe_unused twa_resume(struct device *dev)
 
 /* PCI Devices supported by this driver */
 static const struct pci_device_id twa_pci_tbl[] = {
-	{ PCI_VENDOR_ID_3WARE, PCI_DEVICE_ID_3WARE_9000,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{ PCI_VENDOR_ID_3WARE, PCI_DEVICE_ID_3WARE_9550SX,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{ PCI_VENDOR_ID_3WARE, PCI_DEVICE_ID_3WARE_9650SE,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{ PCI_VENDOR_ID_3WARE, PCI_DEVICE_ID_3WARE_9690SA,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+	{ PCI_VDEVICE(3WARE, PCI_DEVICE_ID_3WARE_9000) },
+	{ PCI_VDEVICE(3WARE, PCI_DEVICE_ID_3WARE_9550SX) },
+	{ PCI_VDEVICE(3WARE, PCI_DEVICE_ID_3WARE_9650SE) },
+	{ PCI_VDEVICE(3WARE, PCI_DEVICE_ID_3WARE_9690SA) },
 	{ }
 };
 MODULE_DEVICE_TABLE(pci, twa_pci_tbl);
diff --git a/drivers/scsi/3w-xxxx.c b/drivers/scsi/3w-xxxx.c
index c68678fa72c1..835359b37b6d 100644
--- a/drivers/scsi/3w-xxxx.c
+++ b/drivers/scsi/3w-xxxx.c
@@ -2394,10 +2394,8 @@ static void tw_remove(struct pci_dev *pdev)
 
 /* PCI Devices supported by this driver */
 static const struct pci_device_id tw_pci_tbl[] = {
-	{ PCI_VENDOR_ID_3WARE, PCI_DEVICE_ID_3WARE_1000,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{ PCI_VENDOR_ID_3WARE, PCI_DEVICE_ID_3WARE_7000,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+	{ PCI_VDEVICE(3WARE, PCI_DEVICE_ID_3WARE_1000) },
+	{ PCI_VDEVICE(3WARE, PCI_DEVICE_ID_3WARE_7000) },
 	{ }
 };
 MODULE_DEVICE_TABLE(pci, tw_pci_tbl);
diff --git a/drivers/scsi/a100u2w.c b/drivers/scsi/a100u2w.c
index 4365b896f5c4..c7247b2780ae 100644
--- a/drivers/scsi/a100u2w.c
+++ b/drivers/scsi/a100u2w.c
@@ -1207,8 +1207,8 @@ static void inia100_remove_one(struct pci_dev *pdev)
 } 
 
 static const struct pci_device_id inia100_pci_tbl[] = {
-	{PCI_VENDOR_ID_INIT, 0x1060, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{0,}
+	{ PCI_VDEVICE(INIT, 0x1060) },
+	{ }
 };
 MODULE_DEVICE_TABLE(pci, inia100_pci_tbl);
 
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
index 2fa8f7ddb703..30d614cfcd22 100644
--- a/drivers/scsi/aacraid/linit.c
+++ b/drivers/scsi/aacraid/linit.c
@@ -74,80 +74,80 @@ char aac_driver_version[] = AAC_DRIVER_FULL_VERSION;
  * Because of the way Linux names scsi devices, the order in this table has
  * become important.  Check for on-board Raid first, add-in cards second.
  *
- * Note: The last field is used to index into aac_drivers below.
+ * Note: .driver_data is used to index into aac_drivers below.
  */
 static const struct pci_device_id aac_pci_tbl[] = {
-	{ 0x1028, 0x0001, 0x1028, 0x0001, 0, 0, 0 }, /* PERC 2/Si (Iguana/PERC2Si) */
-	{ 0x1028, 0x0002, 0x1028, 0x0002, 0, 0, 1 }, /* PERC 3/Di (Opal/PERC3Di) */
-	{ 0x1028, 0x0003, 0x1028, 0x0003, 0, 0, 2 }, /* PERC 3/Si (SlimFast/PERC3Si */
-	{ 0x1028, 0x0004, 0x1028, 0x00d0, 0, 0, 3 }, /* PERC 3/Di (Iguana FlipChip/PERC3DiF */
-	{ 0x1028, 0x0002, 0x1028, 0x00d1, 0, 0, 4 }, /* PERC 3/Di (Viper/PERC3DiV) */
-	{ 0x1028, 0x0002, 0x1028, 0x00d9, 0, 0, 5 }, /* PERC 3/Di (Lexus/PERC3DiL) */
-	{ 0x1028, 0x000a, 0x1028, 0x0106, 0, 0, 6 }, /* PERC 3/Di (Jaguar/PERC3DiJ) */
-	{ 0x1028, 0x000a, 0x1028, 0x011b, 0, 0, 7 }, /* PERC 3/Di (Dagger/PERC3DiD) */
-	{ 0x1028, 0x000a, 0x1028, 0x0121, 0, 0, 8 }, /* PERC 3/Di (Boxster/PERC3DiB) */
-	{ 0x9005, 0x0283, 0x9005, 0x0283, 0, 0, 9 }, /* catapult */
-	{ 0x9005, 0x0284, 0x9005, 0x0284, 0, 0, 10 }, /* tomcat */
-	{ 0x9005, 0x0285, 0x9005, 0x0286, 0, 0, 11 }, /* Adaptec 2120S (Crusader) */
-	{ 0x9005, 0x0285, 0x9005, 0x0285, 0, 0, 12 }, /* Adaptec 2200S (Vulcan) */
-	{ 0x9005, 0x0285, 0x9005, 0x0287, 0, 0, 13 }, /* Adaptec 2200S (Vulcan-2m) */
-	{ 0x9005, 0x0285, 0x17aa, 0x0286, 0, 0, 14 }, /* Legend S220 (Legend Crusader) */
-	{ 0x9005, 0x0285, 0x17aa, 0x0287, 0, 0, 15 }, /* Legend S230 (Legend Vulcan) */
+	{ PCI_DEVICE_SUB(0x1028, 0x0001, 0x1028, 0x0001), .driver_data = 0 }, /* PERC 2/Si (Iguana/PERC2Si) */
+	{ PCI_DEVICE_SUB(0x1028, 0x0002, 0x1028, 0x0002), .driver_data = 1 }, /* PERC 3/Di (Opal/PERC3Di) */
+	{ PCI_DEVICE_SUB(0x1028, 0x0003, 0x1028, 0x0003), .driver_data = 2 }, /* PERC 3/Si (SlimFast/PERC3Si */
+	{ PCI_DEVICE_SUB(0x1028, 0x0004, 0x1028, 0x00d0), .driver_data = 3 }, /* PERC 3/Di (Iguana FlipChip/PERC3DiF) */
+	{ PCI_DEVICE_SUB(0x1028, 0x0002, 0x1028, 0x00d1), .driver_data = 4 }, /* PERC 3/Di (Viper/PERC3DiV) */
+	{ PCI_DEVICE_SUB(0x1028, 0x0002, 0x1028, 0x00d9), .driver_data = 5 }, /* PERC 3/Di (Lexus/PERC3DiL) */
+	{ PCI_DEVICE_SUB(0x1028, 0x000a, 0x1028, 0x0106), .driver_data = 6 }, /* PERC 3/Di (Jaguar/PERC3DiJ) */
+	{ PCI_DEVICE_SUB(0x1028, 0x000a, 0x1028, 0x011b), .driver_data = 7 }, /* PERC 3/Di (Dagger/PERC3DiD) */
+	{ PCI_DEVICE_SUB(0x1028, 0x000a, 0x1028, 0x0121), .driver_data = 8 }, /* PERC 3/Di (Boxster/PERC3DiB) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0283, 0x9005, 0x0283), .driver_data = 9 }, /* catapult */
+	{ PCI_DEVICE_SUB(0x9005, 0x0284, 0x9005, 0x0284), .driver_data = 10 }, /* tomcat */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x9005, 0x0286), .driver_data = 11 }, /* Adaptec 2120S (Crusader) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x9005, 0x0285), .driver_data = 12 }, /* Adaptec 2200S (Vulcan) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x9005, 0x0287), .driver_data = 13 }, /* Adaptec 2200S (Vulcan-2m) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x17aa, 0x0286), .driver_data = 14 }, /* Legend S220 (Legend Crusader) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x17aa, 0x0287), .driver_data = 15 }, /* Legend S230 (Legend Vulcan) */
 
-	{ 0x9005, 0x0285, 0x9005, 0x0288, 0, 0, 16 }, /* Adaptec 3230S (Harrier) */
-	{ 0x9005, 0x0285, 0x9005, 0x0289, 0, 0, 17 }, /* Adaptec 3240S (Tornado) */
-	{ 0x9005, 0x0285, 0x9005, 0x028a, 0, 0, 18 }, /* ASR-2020ZCR SCSI PCI-X ZCR (Skyhawk) */
-	{ 0x9005, 0x0285, 0x9005, 0x028b, 0, 0, 19 }, /* ASR-2025ZCR SCSI SO-DIMM PCI-X ZCR (Terminator) */
-	{ 0x9005, 0x0286, 0x9005, 0x028c, 0, 0, 20 }, /* ASR-2230S + ASR-2230SLP PCI-X (Lancer) */
-	{ 0x9005, 0x0286, 0x9005, 0x028d, 0, 0, 21 }, /* ASR-2130S (Lancer) */
-	{ 0x9005, 0x0286, 0x9005, 0x029b, 0, 0, 22 }, /* AAR-2820SA (Intruder) */
-	{ 0x9005, 0x0286, 0x9005, 0x029c, 0, 0, 23 }, /* AAR-2620SA (Intruder) */
-	{ 0x9005, 0x0286, 0x9005, 0x029d, 0, 0, 24 }, /* AAR-2420SA (Intruder) */
-	{ 0x9005, 0x0286, 0x9005, 0x029e, 0, 0, 25 }, /* ICP9024RO (Lancer) */
-	{ 0x9005, 0x0286, 0x9005, 0x029f, 0, 0, 26 }, /* ICP9014RO (Lancer) */
-	{ 0x9005, 0x0286, 0x9005, 0x02a0, 0, 0, 27 }, /* ICP9047MA (Lancer) */
-	{ 0x9005, 0x0286, 0x9005, 0x02a1, 0, 0, 28 }, /* ICP9087MA (Lancer) */
-	{ 0x9005, 0x0286, 0x9005, 0x02a3, 0, 0, 29 }, /* ICP5445AU (Hurricane44) */
-	{ 0x9005, 0x0285, 0x9005, 0x02a4, 0, 0, 30 }, /* ICP9085LI (Marauder-X) */
-	{ 0x9005, 0x0285, 0x9005, 0x02a5, 0, 0, 31 }, /* ICP5085BR (Marauder-E) */
-	{ 0x9005, 0x0286, 0x9005, 0x02a6, 0, 0, 32 }, /* ICP9067MA (Intruder-6) */
-	{ 0x9005, 0x0287, 0x9005, 0x0800, 0, 0, 33 }, /* Themisto Jupiter Platform */
-	{ 0x9005, 0x0200, 0x9005, 0x0200, 0, 0, 33 }, /* Themisto Jupiter Platform */
-	{ 0x9005, 0x0286, 0x9005, 0x0800, 0, 0, 34 }, /* Callisto Jupiter Platform */
-	{ 0x9005, 0x0285, 0x9005, 0x028e, 0, 0, 35 }, /* ASR-2020SA SATA PCI-X ZCR (Skyhawk) */
-	{ 0x9005, 0x0285, 0x9005, 0x028f, 0, 0, 36 }, /* ASR-2025SA SATA SO-DIMM PCI-X ZCR (Terminator) */
-	{ 0x9005, 0x0285, 0x9005, 0x0290, 0, 0, 37 }, /* AAR-2410SA PCI SATA 4ch (Jaguar II) */
-	{ 0x9005, 0x0285, 0x1028, 0x0291, 0, 0, 38 }, /* CERC SATA RAID 2 PCI SATA 6ch (DellCorsair) */
-	{ 0x9005, 0x0285, 0x9005, 0x0292, 0, 0, 39 }, /* AAR-2810SA PCI SATA 8ch (Corsair-8) */
-	{ 0x9005, 0x0285, 0x9005, 0x0293, 0, 0, 40 }, /* AAR-21610SA PCI SATA 16ch (Corsair-16) */
-	{ 0x9005, 0x0285, 0x9005, 0x0294, 0, 0, 41 }, /* ESD SO-DIMM PCI-X SATA ZCR (Prowler) */
-	{ 0x9005, 0x0285, 0x103C, 0x3227, 0, 0, 42 }, /* AAR-2610SA PCI SATA 6ch */
-	{ 0x9005, 0x0285, 0x9005, 0x0296, 0, 0, 43 }, /* ASR-2240S (SabreExpress) */
-	{ 0x9005, 0x0285, 0x9005, 0x0297, 0, 0, 44 }, /* ASR-4005 */
-	{ 0x9005, 0x0285, 0x1014, 0x02F2, 0, 0, 45 }, /* IBM 8i (AvonPark) */
-	{ 0x9005, 0x0285, 0x1014, 0x0312, 0, 0, 45 }, /* IBM 8i (AvonPark Lite) */
-	{ 0x9005, 0x0286, 0x1014, 0x9580, 0, 0, 46 }, /* IBM 8k/8k-l8 (Aurora) */
-	{ 0x9005, 0x0286, 0x1014, 0x9540, 0, 0, 47 }, /* IBM 8k/8k-l4 (Aurora Lite) */
-	{ 0x9005, 0x0285, 0x9005, 0x0298, 0, 0, 48 }, /* ASR-4000 (BlackBird) */
-	{ 0x9005, 0x0285, 0x9005, 0x0299, 0, 0, 49 }, /* ASR-4800SAS (Marauder-X) */
-	{ 0x9005, 0x0285, 0x9005, 0x029a, 0, 0, 50 }, /* ASR-4805SAS (Marauder-E) */
-	{ 0x9005, 0x0286, 0x9005, 0x02a2, 0, 0, 51 }, /* ASR-3800 (Hurricane44) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x9005, 0x0288), .driver_data = 16 }, /* Adaptec 3230S (Harrier) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x9005, 0x0289), .driver_data = 17 }, /* Adaptec 3240S (Tornado) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x9005, 0x028a), .driver_data = 18 }, /* ASR-2020ZCR SCSI PCI-X ZCR (Skyhawk) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x9005, 0x028b), .driver_data = 19 }, /* ASR-2025ZCR SCSI SO-DIMM PCI-X ZCR (Terminator) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0286, 0x9005, 0x028c), .driver_data = 20 }, /* ASR-2230S + ASR-2230SLP PCI-X (Lancer) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0286, 0x9005, 0x028d), .driver_data = 21 }, /* ASR-2130S (Lancer) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0286, 0x9005, 0x029b), .driver_data = 22 }, /* AAR-2820SA (Intruder) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0286, 0x9005, 0x029c), .driver_data = 23 }, /* AAR-2620SA (Intruder) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0286, 0x9005, 0x029d), .driver_data = 24 }, /* AAR-2420SA (Intruder) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0286, 0x9005, 0x029e), .driver_data = 25 }, /* ICP9024RO (Lancer) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0286, 0x9005, 0x029f), .driver_data = 26 }, /* ICP9014RO (Lancer) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0286, 0x9005, 0x02a0), .driver_data = 27 }, /* ICP9047MA (Lancer) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0286, 0x9005, 0x02a1), .driver_data = 28 }, /* ICP9087MA (Lancer) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0286, 0x9005, 0x02a3), .driver_data = 29 }, /* ICP5445AU (Hurricane44) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x9005, 0x02a4), .driver_data = 30 }, /* ICP9085LI (Marauder-X) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x9005, 0x02a5), .driver_data = 31 }, /* ICP5085BR (Marauder-E) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0286, 0x9005, 0x02a6), .driver_data = 32 }, /* ICP9067MA (Intruder-6) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0287, 0x9005, 0x0800), .driver_data = 33 }, /* Themisto Jupiter Platform */
+	{ PCI_DEVICE_SUB(0x9005, 0x0200, 0x9005, 0x0200), .driver_data = 33 }, /* Themisto Jupiter Platform */
+	{ PCI_DEVICE_SUB(0x9005, 0x0286, 0x9005, 0x0800), .driver_data = 34 }, /* Callisto Jupiter Platform */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x9005, 0x028e), .driver_data = 35 }, /* ASR-2020SA SATA PCI-X ZCR (Skyhawk) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x9005, 0x028f), .driver_data = 36 }, /* ASR-2025SA SATA SO-DIMM PCI-X ZCR (Terminator) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x9005, 0x0290), .driver_data = 37 }, /* AAR-2410SA PCI SATA 4ch (Jaguar II) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x1028, 0x0291), .driver_data = 38 }, /* CERC SATA RAID 2 PCI SATA 6ch (DellCorsair) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x9005, 0x0292), .driver_data = 39 }, /* AAR-2810SA PCI SATA 8ch (Corsair-8) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x9005, 0x0293), .driver_data = 40 }, /* AAR-21610SA PCI SATA 16ch (Corsair-16) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x9005, 0x0294), .driver_data = 41 }, /* ESD SO-DIMM PCI-X SATA ZCR (Prowler) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x103C, 0x3227), .driver_data = 42 }, /* AAR-2610SA PCI SATA 6ch */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x9005, 0x0296), .driver_data = 43 }, /* ASR-2240S (SabreExpress) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x9005, 0x0297), .driver_data = 44 }, /* ASR-4005 */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x1014, 0x02F2), .driver_data = 45 }, /* IBM 8i (AvonPark) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x1014, 0x0312), .driver_data = 45 }, /* IBM 8i (AvonPark Lite) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0286, 0x1014, 0x9580), .driver_data = 46 }, /* IBM 8k/8k-l8 (Aurora) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0286, 0x1014, 0x9540), .driver_data = 47 }, /* IBM 8k/8k-l4 (Aurora Lite) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x9005, 0x0298), .driver_data = 48 }, /* ASR-4000 (BlackBird) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x9005, 0x0299), .driver_data = 49 }, /* ASR-4800SAS (Marauder-X) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x9005, 0x029a), .driver_data = 50 }, /* ASR-4805SAS (Marauder-E) */
+	{ PCI_DEVICE_SUB(0x9005, 0x0286, 0x9005, 0x02a2), .driver_data = 51 }, /* ASR-3800 (Hurricane44) */
 
-	{ 0x9005, 0x0285, 0x1028, 0x0287, 0, 0, 52 }, /* Perc 320/DC*/
-	{ 0x1011, 0x0046, 0x9005, 0x0365, 0, 0, 53 }, /* Adaptec 5400S (Mustang)*/
-	{ 0x1011, 0x0046, 0x9005, 0x0364, 0, 0, 54 }, /* Adaptec 5400S (Mustang)*/
-	{ 0x1011, 0x0046, 0x9005, 0x1364, 0, 0, 55 }, /* Dell PERC2/QC */
-	{ 0x1011, 0x0046, 0x103c, 0x10c2, 0, 0, 56 }, /* HP NetRAID-4M */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x1028, 0x0287), .driver_data = 52 }, /* Perc 320/DC*/
+	{ PCI_DEVICE_SUB(0x1011, 0x0046, 0x9005, 0x0365), .driver_data = 53 }, /* Adaptec 5400S (Mustang)*/
+	{ PCI_DEVICE_SUB(0x1011, 0x0046, 0x9005, 0x0364), .driver_data = 54 }, /* Adaptec 5400S (Mustang)*/
+	{ PCI_DEVICE_SUB(0x1011, 0x0046, 0x9005, 0x1364), .driver_data = 55 }, /* Dell PERC2/QC */
+	{ PCI_DEVICE_SUB(0x1011, 0x0046, 0x103c, 0x10c2), .driver_data = 56 }, /* HP NetRAID-4M */
 
-	{ 0x9005, 0x0285, 0x1028, PCI_ANY_ID, 0, 0, 57 }, /* Dell Catchall */
-	{ 0x9005, 0x0285, 0x17aa, PCI_ANY_ID, 0, 0, 58 }, /* Legend Catchall */
-	{ 0x9005, 0x0285, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 59 }, /* Adaptec Catch All */
-	{ 0x9005, 0x0286, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 60 }, /* Adaptec Rocket Catch All */
-	{ 0x9005, 0x0288, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 61 }, /* Adaptec NEMER/ARK Catch All */
-	{ 0x9005, 0x028b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 62 }, /* Adaptec PMC Series 6 (Tupelo) */
-	{ 0x9005, 0x028c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 63 }, /* Adaptec PMC Series 7 (Denali) */
-	{ 0x9005, 0x028d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 64 }, /* Adaptec PMC Series 8 */
-	{ 0,}
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x1028, PCI_ANY_ID), .driver_data = 57 }, /* Dell Catchall */
+	{ PCI_DEVICE_SUB(0x9005, 0x0285, 0x17aa, PCI_ANY_ID), .driver_data = 58 }, /* Legend Catchall */
+	{ PCI_DEVICE(0x9005, 0x0285), .driver_data = 59 }, /* Adaptec Catch All */
+	{ PCI_DEVICE(0x9005, 0x0286), .driver_data = 60 }, /* Adaptec Rocket Catch All */
+	{ PCI_DEVICE(0x9005, 0x0288), .driver_data = 61 }, /* Adaptec NEMER/ARK Catch All */
+	{ PCI_DEVICE(0x9005, 0x028b), .driver_data = 62 }, /* Adaptec PMC Series 6 (Tupelo) */
+	{ PCI_DEVICE(0x9005, 0x028c), .driver_data = 63 }, /* Adaptec PMC Series 7 (Denali) */
+	{ PCI_DEVICE(0x9005, 0x028d), .driver_data = 64 }, /* Adaptec PMC Series 8 */
+	{ }
 };
 MODULE_DEVICE_TABLE(pci, aac_pci_tbl);
 
diff --git a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c
index fcf059bf41e8..9b06c2390cb4 100644
--- a/drivers/scsi/advansys.c
+++ b/drivers/scsi/advansys.c
@@ -11410,19 +11410,13 @@ static struct eisa_driver advansys_eisa_driver = {
 
 /* PCI Devices supported by this driver */
 static const struct pci_device_id advansys_pci_tbl[] = {
-	{PCI_VENDOR_ID_ASP, PCI_DEVICE_ID_ASP_1200A,
-	 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{PCI_VENDOR_ID_ASP, PCI_DEVICE_ID_ASP_ABP940,
-	 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{PCI_VENDOR_ID_ASP, PCI_DEVICE_ID_ASP_ABP940U,
-	 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{PCI_VENDOR_ID_ASP, PCI_DEVICE_ID_ASP_ABP940UW,
-	 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{PCI_VENDOR_ID_ASP, PCI_DEVICE_ID_38C0800_REV1,
-	 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{PCI_VENDOR_ID_ASP, PCI_DEVICE_ID_38C1600_REV1,
-	 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{}
+	{ PCI_VDEVICE(ASP, PCI_DEVICE_ID_ASP_1200A) },
+	{ PCI_VDEVICE(ASP, PCI_DEVICE_ID_ASP_ABP940) },
+	{ PCI_VDEVICE(ASP, PCI_DEVICE_ID_ASP_ABP940U) },
+	{ PCI_VDEVICE(ASP, PCI_DEVICE_ID_ASP_ABP940UW) },
+	{ PCI_VDEVICE(ASP, PCI_DEVICE_ID_38C0800_REV1) },
+	{ PCI_VDEVICE(ASP, PCI_DEVICE_ID_38C1600_REV1) },
+	{ }
 };
 
 MODULE_DEVICE_TABLE(pci, advansys_pci_tbl);
diff --git a/drivers/scsi/aic7xxx/aiclib.h b/drivers/scsi/aic7xxx/aiclib.h
index ba08eb3c4e3b..0ffc59b93036 100644
--- a/drivers/scsi/aic7xxx/aiclib.h
+++ b/drivers/scsi/aic7xxx/aiclib.h
@@ -142,10 +142,10 @@ scsi_4btoul(uint8_t *bytes)
 
 #define GETID(v, s) (unsigned)(((v) >> (s)) & 0xFFFF ?: PCI_ANY_ID)
 
-#define ID_C(x, c)						\
-{								\
-	GETID(x,32), GETID(x,48), GETID(x,0), GETID(x,16),	\
-	(c) << 8, 0xFFFF00, 0					\
+#define ID_C(x, c)								\
+{										\
+	PCI_DEVICE_SUB(GETID(x, 32), GETID(x, 48), GETID(x, 0), GETID(x, 16)),	\
+	.class = (c) << 8, .class_mask = 0xFFFF00,				\
 }
 
 #define ID2C(x)                          \
diff --git a/drivers/scsi/aic94xx/aic94xx_init.c b/drivers/scsi/aic94xx/aic94xx_init.c
index 4400a3661d90..4fd15a84428d 100644
--- a/drivers/scsi/aic94xx/aic94xx_init.c
+++ b/drivers/scsi/aic94xx/aic94xx_init.c
@@ -967,16 +967,16 @@ static struct sas_domain_function_template aic94xx_transport_functions = {
 };
 
 static const struct pci_device_id aic94xx_pci_table[] = {
-	{PCI_DEVICE(PCI_VENDOR_ID_ADAPTEC2, 0x410),0, 0, 1},
-	{PCI_DEVICE(PCI_VENDOR_ID_ADAPTEC2, 0x412),0, 0, 1},
-	{PCI_DEVICE(PCI_VENDOR_ID_ADAPTEC2, 0x416),0, 0, 1},
-	{PCI_DEVICE(PCI_VENDOR_ID_ADAPTEC2, 0x41E),0, 0, 1},
-	{PCI_DEVICE(PCI_VENDOR_ID_ADAPTEC2, 0x41F),0, 0, 1},
-	{PCI_DEVICE(PCI_VENDOR_ID_ADAPTEC2, 0x430),0, 0, 2},
-	{PCI_DEVICE(PCI_VENDOR_ID_ADAPTEC2, 0x432),0, 0, 2},
-	{PCI_DEVICE(PCI_VENDOR_ID_ADAPTEC2, 0x43E),0, 0, 2},
-	{PCI_DEVICE(PCI_VENDOR_ID_ADAPTEC2, 0x43F),0, 0, 2},
-	{}
+	{ PCI_VDEVICE(ADAPTEC2, 0x410), .driver_data = 1 },
+	{ PCI_VDEVICE(ADAPTEC2, 0x412), .driver_data = 1 },
+	{ PCI_VDEVICE(ADAPTEC2, 0x416), .driver_data = 1 },
+	{ PCI_VDEVICE(ADAPTEC2, 0x41E), .driver_data = 1 },
+	{ PCI_VDEVICE(ADAPTEC2, 0x41F), .driver_data = 1 },
+	{ PCI_VDEVICE(ADAPTEC2, 0x430), .driver_data = 2 },
+	{ PCI_VDEVICE(ADAPTEC2, 0x432), .driver_data = 2 },
+	{ PCI_VDEVICE(ADAPTEC2, 0x43E), .driver_data = 2 },
+	{ PCI_VDEVICE(ADAPTEC2, 0x43F), .driver_data = 2 },
+	{ }
 };
 
 MODULE_DEVICE_TABLE(pci, aic94xx_pci_table);
diff --git a/drivers/scsi/am53c974.c b/drivers/scsi/am53c974.c
index f972a3c90a2f..ea49379ca9cb 100644
--- a/drivers/scsi/am53c974.c
+++ b/drivers/scsi/am53c974.c
@@ -514,8 +514,7 @@ static void pci_esp_remove_one(struct pci_dev *pdev)
 }
 
 static const struct pci_device_id am53c974_pci_tbl[] = {
-	{ PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_SCSI,
-		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
+	{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_SCSI) },
 	{ }
 };
 MODULE_DEVICE_TABLE(pci, am53c974_pci_tbl);
diff --git a/drivers/scsi/csiostor/csio_init.c b/drivers/scsi/csiostor/csio_init.c
index 238431524801..2df8848ae723 100644
--- a/drivers/scsi/csiostor/csio_init.c
+++ b/drivers/scsi/csiostor/csio_init.c
@@ -1176,9 +1176,9 @@ static const struct pci_error_handlers csio_err_handler = {
 #define CH_PCI_DEVICE_ID_FUNCTION	0x6
 
 #define CH_PCI_ID_TABLE_ENTRY(devid) \
-		{ PCI_VDEVICE(CHELSIO, (devid)), 0 }
+		{ PCI_VDEVICE(CHELSIO, (devid)) }
 
-#define CH_PCI_DEVICE_ID_TABLE_DEFINE_END { 0, } }
+#define CH_PCI_DEVICE_ID_TABLE_DEFINE_END { } }
 
 #include "t4_pci_id_tbl.h"
 
diff --git a/drivers/scsi/dmx3191d.c b/drivers/scsi/dmx3191d.c
index d6d091b2f3c7..3676400f992a 100644
--- a/drivers/scsi/dmx3191d.c
+++ b/drivers/scsi/dmx3191d.c
@@ -128,8 +128,10 @@ static void dmx3191d_remove_one(struct pci_dev *pdev)
 }
 
 static const struct pci_device_id dmx3191d_pci_tbl[] = {
-	{PCI_VENDOR_ID_DOMEX, PCI_DEVICE_ID_DOMEX_DMX3191D,
-		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4},
+	{
+		PCI_VDEVICE(DOMEX, PCI_DEVICE_ID_DOMEX_DMX3191D),
+		.driver_data = 4,
+	},
 	{ }
 };
 MODULE_DEVICE_TABLE(pci, dmx3191d_pci_tbl);
diff --git a/drivers/scsi/elx/efct/efct_driver.c b/drivers/scsi/elx/efct/efct_driver.c
index 07c2f453459e..35b6dead3736 100644
--- a/drivers/scsi/elx/efct/efct_driver.c
+++ b/drivers/scsi/elx/efct/efct_driver.c
@@ -465,9 +465,9 @@ efct_setup_msix(struct efct *efct, u32 num_intrs)
 }
 
 static const struct pci_device_id efct_pci_table[] = {
-	{PCI_DEVICE(EFCT_VENDOR_ID, EFCT_DEVICE_LANCER_G6), 0},
-	{PCI_DEVICE(EFCT_VENDOR_ID, EFCT_DEVICE_LANCER_G7), 0},
-	{}	/* terminate list */
+	{ PCI_DEVICE(EFCT_VENDOR_ID, EFCT_DEVICE_LANCER_G6) },
+	{ PCI_DEVICE(EFCT_VENDOR_ID, EFCT_DEVICE_LANCER_G7) },
+	{ }	/* terminate list */
 };
 
 static int
diff --git a/drivers/scsi/esas2r/esas2r_main.c b/drivers/scsi/esas2r/esas2r_main.c
index ada278c24c51..d59b066e9b25 100644
--- a/drivers/scsi/esas2r/esas2r_main.c
+++ b/drivers/scsi/esas2r/esas2r_main.c
@@ -303,29 +303,14 @@ MODULE_PARM_DESC(interrupt_mode,
 		 "Defines the interrupt mode to use.  0 for legacy"
 		 ", 1 for MSI.  Default is MSI (1).");
 
-static const struct pci_device_id
-	esas2r_pci_table[] = {
-	{ ATTO_VENDOR_ID, 0x0049,	  ATTO_VENDOR_ID, 0x0049,
-	  0,
-	  0, 0 },
-	{ ATTO_VENDOR_ID, 0x0049,	  ATTO_VENDOR_ID, 0x004A,
-	  0,
-	  0, 0 },
-	{ ATTO_VENDOR_ID, 0x0049,	  ATTO_VENDOR_ID, 0x004B,
-	  0,
-	  0, 0 },
-	{ ATTO_VENDOR_ID, 0x0049,	  ATTO_VENDOR_ID, 0x004C,
-	  0,
-	  0, 0 },
-	{ ATTO_VENDOR_ID, 0x0049,	  ATTO_VENDOR_ID, 0x004D,
-	  0,
-	  0, 0 },
-	{ ATTO_VENDOR_ID, 0x0049,	  ATTO_VENDOR_ID, 0x004E,
-	  0,
-	  0, 0 },
-	{ 0,		  0,		  0,		  0,
-	  0,
-	  0, 0 }
+static const struct pci_device_id esas2r_pci_table[] = {
+	{ PCI_DEVICE_SUB(ATTO_VENDOR_ID, 0x0049, ATTO_VENDOR_ID, 0x0049) },
+	{ PCI_DEVICE_SUB(ATTO_VENDOR_ID, 0x0049, ATTO_VENDOR_ID, 0x004A) },
+	{ PCI_DEVICE_SUB(ATTO_VENDOR_ID, 0x0049, ATTO_VENDOR_ID, 0x004B) },
+	{ PCI_DEVICE_SUB(ATTO_VENDOR_ID, 0x0049, ATTO_VENDOR_ID, 0x004C) },
+	{ PCI_DEVICE_SUB(ATTO_VENDOR_ID, 0x0049, ATTO_VENDOR_ID, 0x004D) },
+	{ PCI_DEVICE_SUB(ATTO_VENDOR_ID, 0x0049, ATTO_VENDOR_ID, 0x004E) },
+	{ }
 };
 
 MODULE_DEVICE_TABLE(pci, esas2r_pci_table);
diff --git a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
index fda07b193137..c1993e41bafe 100644
--- a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
+++ b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
@@ -5296,8 +5296,8 @@ static int __maybe_unused resume_v3_hw(struct device *device)
 }
 
 static const struct pci_device_id sas_v3_pci_table[] = {
-	{ PCI_VDEVICE(HUAWEI, 0xa230), hip08 },
-	{}
+	{ PCI_VDEVICE(HUAWEI, 0xa230), .driver_data = hip08 },
+	{ }
 };
 MODULE_DEVICE_TABLE(pci, sas_v3_pci_table);
 
diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
index a1b116cd4723..f5fa1ca273aa 100644
--- a/drivers/scsi/hpsa.c
+++ b/drivers/scsi/hpsa.c
@@ -91,64 +91,66 @@ MODULE_PARM_DESC(hpsa_simple_mode,
 
 /* define the PCI info for the cards we can control */
 static const struct pci_device_id hpsa_pci_device_id[] = {
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x3241},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x3243},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x3245},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x3247},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x3249},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x324A},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x324B},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x3233},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSF,     0x103C, 0x3350},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSF,     0x103C, 0x3351},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSF,     0x103C, 0x3352},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSF,     0x103C, 0x3353},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSF,     0x103C, 0x3354},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSF,     0x103C, 0x3355},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSF,     0x103C, 0x3356},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSH,     0x103c, 0x1920},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSH,     0x103C, 0x1921},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSH,     0x103C, 0x1922},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSH,     0x103C, 0x1923},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSH,     0x103C, 0x1924},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSH,     0x103c, 0x1925},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSH,     0x103C, 0x1926},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSH,     0x103C, 0x1928},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSH,     0x103C, 0x1929},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSI,     0x103C, 0x21BD},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSI,     0x103C, 0x21BE},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSI,     0x103C, 0x21BF},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSI,     0x103C, 0x21C0},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSI,     0x103C, 0x21C1},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSI,     0x103C, 0x21C2},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSI,     0x103C, 0x21C3},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSI,     0x103C, 0x21C4},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSI,     0x103C, 0x21C5},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSI,     0x103C, 0x21C6},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSI,     0x103C, 0x21C7},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSI,     0x103C, 0x21C8},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSI,     0x103C, 0x21C9},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSI,     0x103C, 0x21CA},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSI,     0x103C, 0x21CB},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSI,     0x103C, 0x21CC},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSI,     0x103C, 0x21CD},
-	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSI,     0x103C, 0x21CE},
-	{PCI_VENDOR_ID_ADAPTEC2, 0x0290, 0x9005, 0x0580},
-	{PCI_VENDOR_ID_ADAPTEC2, 0x0290, 0x9005, 0x0581},
-	{PCI_VENDOR_ID_ADAPTEC2, 0x0290, 0x9005, 0x0582},
-	{PCI_VENDOR_ID_ADAPTEC2, 0x0290, 0x9005, 0x0583},
-	{PCI_VENDOR_ID_ADAPTEC2, 0x0290, 0x9005, 0x0584},
-	{PCI_VENDOR_ID_ADAPTEC2, 0x0290, 0x9005, 0x0585},
-	{PCI_VENDOR_ID_HP_3PAR, 0x0075, 0x1590, 0x0076},
-	{PCI_VENDOR_ID_HP_3PAR, 0x0075, 0x1590, 0x0087},
-	{PCI_VENDOR_ID_HP_3PAR, 0x0075, 0x1590, 0x007D},
-	{PCI_VENDOR_ID_HP_3PAR, 0x0075, 0x1590, 0x0088},
-	{PCI_VENDOR_ID_HP, 0x333f, 0x103c, 0x333f},
-	{PCI_VENDOR_ID_HP,     PCI_ANY_ID,	PCI_ANY_ID, PCI_ANY_ID,
-		PCI_CLASS_STORAGE_RAID << 8, 0xffff << 8, 0},
-	{PCI_VENDOR_ID_COMPAQ,     PCI_ANY_ID,	PCI_ANY_ID, PCI_ANY_ID,
-		PCI_CLASS_STORAGE_RAID << 8, 0xffff << 8, 0},
-	{0,}
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x3241) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x3243) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x3245) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x3247) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x3249) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x324A) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x324B) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x3233) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSF, 0x103C, 0x3350) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSF, 0x103C, 0x3351) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSF, 0x103C, 0x3352) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSF, 0x103C, 0x3353) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSF, 0x103C, 0x3354) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSF, 0x103C, 0x3355) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSF, 0x103C, 0x3356) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSH, 0x103c, 0x1920) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSH, 0x103C, 0x1921) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSH, 0x103C, 0x1922) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSH, 0x103C, 0x1923) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSH, 0x103C, 0x1924) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSH, 0x103c, 0x1925) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSH, 0x103C, 0x1926) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSH, 0x103C, 0x1928) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSH, 0x103C, 0x1929) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSI, 0x103C, 0x21BD) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSI, 0x103C, 0x21BE) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSI, 0x103C, 0x21BF) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSI, 0x103C, 0x21C0) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSI, 0x103C, 0x21C1) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSI, 0x103C, 0x21C2) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSI, 0x103C, 0x21C3) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSI, 0x103C, 0x21C4) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSI, 0x103C, 0x21C5) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSI, 0x103C, 0x21C6) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSI, 0x103C, 0x21C7) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSI, 0x103C, 0x21C8) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSI, 0x103C, 0x21C9) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSI, 0x103C, 0x21CA) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSI, 0x103C, 0x21CB) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSI, 0x103C, 0x21CC) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSI, 0x103C, 0x21CD) },
+	{ PCI_VDEVICE_SUB(HP, PCI_DEVICE_ID_HP_CISSI, 0x103C, 0x21CE) },
+	{ PCI_VDEVICE_SUB(ADAPTEC2, 0x0290, 0x9005, 0x0580) },
+	{ PCI_VDEVICE_SUB(ADAPTEC2, 0x0290, 0x9005, 0x0581) },
+	{ PCI_VDEVICE_SUB(ADAPTEC2, 0x0290, 0x9005, 0x0582) },
+	{ PCI_VDEVICE_SUB(ADAPTEC2, 0x0290, 0x9005, 0x0583) },
+	{ PCI_VDEVICE_SUB(ADAPTEC2, 0x0290, 0x9005, 0x0584) },
+	{ PCI_VDEVICE_SUB(ADAPTEC2, 0x0290, 0x9005, 0x0585) },
+	{ PCI_VDEVICE_SUB(HP_3PAR, 0x0075, 0x1590, 0x0076) },
+	{ PCI_VDEVICE_SUB(HP_3PAR, 0x0075, 0x1590, 0x0087) },
+	{ PCI_VDEVICE_SUB(HP_3PAR, 0x0075, 0x1590, 0x007D) },
+	{ PCI_VDEVICE_SUB(HP_3PAR, 0x0075, 0x1590, 0x0088) },
+	{ PCI_VDEVICE_SUB(HP, 0x333f, 0x103c, 0x333f) },
+	{ PCI_DEVICE(PCI_VENDOR_ID_HP, PCI_ANY_ID),
+	  .class = PCI_CLASS_STORAGE_RAID << 8,
+	  .class_mask = 0xffff << 8 },
+	{ PCI_DEVICE(PCI_VENDOR_ID_COMPAQ, PCI_ANY_ID),
+	  .class = PCI_CLASS_STORAGE_RAID << 8,
+	  .class_mask = 0xffff << 8 },
+	{ }
 };
 
 MODULE_DEVICE_TABLE(pci, hpsa_pci_device_id);
diff --git a/drivers/scsi/hptiop.c b/drivers/scsi/hptiop.c
index 7083c14c5302..edaf7e0e72a8 100644
--- a/drivers/scsi/hptiop.c
+++ b/drivers/scsi/hptiop.c
@@ -1635,39 +1635,39 @@ static struct hptiop_adapter_ops hptiop_mvfrey_ops = {
 };
 
 static const struct pci_device_id hptiop_id_table[] = {
-	{ PCI_VDEVICE(TTI, 0x3220), (kernel_ulong_t)&hptiop_itl_ops },
-	{ PCI_VDEVICE(TTI, 0x3320), (kernel_ulong_t)&hptiop_itl_ops },
-	{ PCI_VDEVICE(TTI, 0x3410), (kernel_ulong_t)&hptiop_itl_ops },
-	{ PCI_VDEVICE(TTI, 0x3510), (kernel_ulong_t)&hptiop_itl_ops },
-	{ PCI_VDEVICE(TTI, 0x3511), (kernel_ulong_t)&hptiop_itl_ops },
-	{ PCI_VDEVICE(TTI, 0x3520), (kernel_ulong_t)&hptiop_itl_ops },
-	{ PCI_VDEVICE(TTI, 0x3521), (kernel_ulong_t)&hptiop_itl_ops },
-	{ PCI_VDEVICE(TTI, 0x3522), (kernel_ulong_t)&hptiop_itl_ops },
-	{ PCI_VDEVICE(TTI, 0x3530), (kernel_ulong_t)&hptiop_itl_ops },
-	{ PCI_VDEVICE(TTI, 0x3540), (kernel_ulong_t)&hptiop_itl_ops },
-	{ PCI_VDEVICE(TTI, 0x3560), (kernel_ulong_t)&hptiop_itl_ops },
-	{ PCI_VDEVICE(TTI, 0x4210), (kernel_ulong_t)&hptiop_itl_ops },
-	{ PCI_VDEVICE(TTI, 0x4211), (kernel_ulong_t)&hptiop_itl_ops },
-	{ PCI_VDEVICE(TTI, 0x4310), (kernel_ulong_t)&hptiop_itl_ops },
-	{ PCI_VDEVICE(TTI, 0x4311), (kernel_ulong_t)&hptiop_itl_ops },
-	{ PCI_VDEVICE(TTI, 0x4320), (kernel_ulong_t)&hptiop_itl_ops },
-	{ PCI_VDEVICE(TTI, 0x4321), (kernel_ulong_t)&hptiop_itl_ops },
-	{ PCI_VDEVICE(TTI, 0x4322), (kernel_ulong_t)&hptiop_itl_ops },
-	{ PCI_VDEVICE(TTI, 0x4400), (kernel_ulong_t)&hptiop_itl_ops },
-	{ PCI_VDEVICE(TTI, 0x3120), (kernel_ulong_t)&hptiop_mv_ops },
-	{ PCI_VDEVICE(TTI, 0x3122), (kernel_ulong_t)&hptiop_mv_ops },
-	{ PCI_VDEVICE(TTI, 0x3020), (kernel_ulong_t)&hptiop_mv_ops },
-	{ PCI_VDEVICE(TTI, 0x4520), (kernel_ulong_t)&hptiop_mvfrey_ops },
-	{ PCI_VDEVICE(TTI, 0x4522), (kernel_ulong_t)&hptiop_mvfrey_ops },
-	{ PCI_VDEVICE(TTI, 0x3610), (kernel_ulong_t)&hptiop_mvfrey_ops },
-	{ PCI_VDEVICE(TTI, 0x3611), (kernel_ulong_t)&hptiop_mvfrey_ops },
-	{ PCI_VDEVICE(TTI, 0x3620), (kernel_ulong_t)&hptiop_mvfrey_ops },
-	{ PCI_VDEVICE(TTI, 0x3622), (kernel_ulong_t)&hptiop_mvfrey_ops },
-	{ PCI_VDEVICE(TTI, 0x3640), (kernel_ulong_t)&hptiop_mvfrey_ops },
-	{ PCI_VDEVICE(TTI, 0x3660), (kernel_ulong_t)&hptiop_mvfrey_ops },
-	{ PCI_VDEVICE(TTI, 0x3680), (kernel_ulong_t)&hptiop_mvfrey_ops },
-	{ PCI_VDEVICE(TTI, 0x3690), (kernel_ulong_t)&hptiop_mvfrey_ops },
-	{},
+	{ PCI_VDEVICE(TTI, 0x3220), .driver_data = (kernel_ulong_t)&hptiop_itl_ops },
+	{ PCI_VDEVICE(TTI, 0x3320), .driver_data = (kernel_ulong_t)&hptiop_itl_ops },
+	{ PCI_VDEVICE(TTI, 0x3410), .driver_data = (kernel_ulong_t)&hptiop_itl_ops },
+	{ PCI_VDEVICE(TTI, 0x3510), .driver_data = (kernel_ulong_t)&hptiop_itl_ops },
+	{ PCI_VDEVICE(TTI, 0x3511), .driver_data = (kernel_ulong_t)&hptiop_itl_ops },
+	{ PCI_VDEVICE(TTI, 0x3520), .driver_data = (kernel_ulong_t)&hptiop_itl_ops },
+	{ PCI_VDEVICE(TTI, 0x3521), .driver_data = (kernel_ulong_t)&hptiop_itl_ops },
+	{ PCI_VDEVICE(TTI, 0x3522), .driver_data = (kernel_ulong_t)&hptiop_itl_ops },
+	{ PCI_VDEVICE(TTI, 0x3530), .driver_data = (kernel_ulong_t)&hptiop_itl_ops },
+	{ PCI_VDEVICE(TTI, 0x3540), .driver_data = (kernel_ulong_t)&hptiop_itl_ops },
+	{ PCI_VDEVICE(TTI, 0x3560), .driver_data = (kernel_ulong_t)&hptiop_itl_ops },
+	{ PCI_VDEVICE(TTI, 0x4210), .driver_data = (kernel_ulong_t)&hptiop_itl_ops },
+	{ PCI_VDEVICE(TTI, 0x4211), .driver_data = (kernel_ulong_t)&hptiop_itl_ops },
+	{ PCI_VDEVICE(TTI, 0x4310), .driver_data = (kernel_ulong_t)&hptiop_itl_ops },
+	{ PCI_VDEVICE(TTI, 0x4311), .driver_data = (kernel_ulong_t)&hptiop_itl_ops },
+	{ PCI_VDEVICE(TTI, 0x4320), .driver_data = (kernel_ulong_t)&hptiop_itl_ops },
+	{ PCI_VDEVICE(TTI, 0x4321), .driver_data = (kernel_ulong_t)&hptiop_itl_ops },
+	{ PCI_VDEVICE(TTI, 0x4322), .driver_data = (kernel_ulong_t)&hptiop_itl_ops },
+	{ PCI_VDEVICE(TTI, 0x4400), .driver_data = (kernel_ulong_t)&hptiop_itl_ops },
+	{ PCI_VDEVICE(TTI, 0x3120), .driver_data = (kernel_ulong_t)&hptiop_mv_ops },
+	{ PCI_VDEVICE(TTI, 0x3122), .driver_data = (kernel_ulong_t)&hptiop_mv_ops },
+	{ PCI_VDEVICE(TTI, 0x3020), .driver_data = (kernel_ulong_t)&hptiop_mv_ops },
+	{ PCI_VDEVICE(TTI, 0x4520), .driver_data = (kernel_ulong_t)&hptiop_mvfrey_ops },
+	{ PCI_VDEVICE(TTI, 0x4522), .driver_data = (kernel_ulong_t)&hptiop_mvfrey_ops },
+	{ PCI_VDEVICE(TTI, 0x3610), .driver_data = (kernel_ulong_t)&hptiop_mvfrey_ops },
+	{ PCI_VDEVICE(TTI, 0x3611), .driver_data = (kernel_ulong_t)&hptiop_mvfrey_ops },
+	{ PCI_VDEVICE(TTI, 0x3620), .driver_data = (kernel_ulong_t)&hptiop_mvfrey_ops },
+	{ PCI_VDEVICE(TTI, 0x3622), .driver_data = (kernel_ulong_t)&hptiop_mvfrey_ops },
+	{ PCI_VDEVICE(TTI, 0x3640), .driver_data = (kernel_ulong_t)&hptiop_mvfrey_ops },
+	{ PCI_VDEVICE(TTI, 0x3660), .driver_data = (kernel_ulong_t)&hptiop_mvfrey_ops },
+	{ PCI_VDEVICE(TTI, 0x3680), .driver_data = (kernel_ulong_t)&hptiop_mvfrey_ops },
+	{ PCI_VDEVICE(TTI, 0x3690), .driver_data = (kernel_ulong_t)&hptiop_mvfrey_ops },
+	{ },
 };
 
 MODULE_DEVICE_TABLE(pci, hptiop_id_table);
diff --git a/drivers/scsi/initio.c b/drivers/scsi/initio.c
index 06fbe85dccfa..59ec9dc65b24 100644
--- a/drivers/scsi/initio.c
+++ b/drivers/scsi/initio.c
@@ -2942,12 +2942,12 @@ static void initio_remove_one(struct pci_dev *pdev)
 MODULE_LICENSE("GPL");
 
 static const struct pci_device_id initio_pci_tbl[] = {
-	{PCI_VENDOR_ID_INIT, 0x9500, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{PCI_VENDOR_ID_INIT, 0x9400, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{PCI_VENDOR_ID_INIT, 0x9401, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{PCI_VENDOR_ID_INIT, 0x0002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{PCI_VENDOR_ID_DOMEX, 0x0002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{0,}
+	{ PCI_VDEVICE(INIT, 0x9500) },
+	{ PCI_VDEVICE(INIT, 0x9400) },
+	{ PCI_VDEVICE(INIT, 0x9401) },
+	{ PCI_VDEVICE(INIT, 0x0002) },
+	{ PCI_VDEVICE(DOMEX, 0x0002) },
+	{ }
 };
 MODULE_DEVICE_TABLE(pci, initio_pci_tbl);
 
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
index d207e5e81afe..4923aa0ee005 100644
--- a/drivers/scsi/ipr.c
+++ b/drivers/scsi/ipr.c
@@ -9869,115 +9869,207 @@ static void ipr_shutdown(struct pci_dev *pdev)
 }
 
 static const struct pci_device_id ipr_pci_table[] = {
-	{ PCI_VENDOR_ID_MYLEX, PCI_DEVICE_ID_IBM_GEMSTONE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_5702, 0, 0, 0 },
-	{ PCI_VENDOR_ID_MYLEX, PCI_DEVICE_ID_IBM_GEMSTONE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_5703, 0, 0, 0 },
-	{ PCI_VENDOR_ID_MYLEX, PCI_DEVICE_ID_IBM_GEMSTONE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_573D, 0, 0, 0 },
-	{ PCI_VENDOR_ID_MYLEX, PCI_DEVICE_ID_IBM_GEMSTONE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_573E, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CITRINE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_571B, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CITRINE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572E, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CITRINE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_571A, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CITRINE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_575B, 0, 0,
-		IPR_USE_LONG_TRANSOP_TIMEOUT },
-	{ PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_OBSIDIAN,
-	      PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572A, 0, 0, 0 },
-	{ PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_OBSIDIAN,
-	      PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572B, 0, 0,
-	      IPR_USE_LONG_TRANSOP_TIMEOUT },
-	{ PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_OBSIDIAN,
-	      PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_575C, 0, 0,
-	      IPR_USE_LONG_TRANSOP_TIMEOUT },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN,
-	      PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572A, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN,
-	      PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572B, 0, 0,
-	      IPR_USE_LONG_TRANSOP_TIMEOUT},
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN,
-	      PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_575C, 0, 0,
-	      IPR_USE_LONG_TRANSOP_TIMEOUT },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN_E,
-	      PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_574E, 0, 0,
-	      IPR_USE_LONG_TRANSOP_TIMEOUT },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN_E,
-	      PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57B3, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN_E,
-	      PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57CC, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN_E,
-	      PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57B7, 0, 0,
-	      IPR_USE_LONG_TRANSOP_TIMEOUT | IPR_USE_PCI_WARM_RESET },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_SNIPE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_2780, 0, 0, 0 },
-	{ PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_SCAMP,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_571E, 0, 0, 0 },
-	{ PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_SCAMP,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_571F, 0, 0,
-		IPR_USE_LONG_TRANSOP_TIMEOUT },
-	{ PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_SCAMP,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572F, 0, 0,
-		IPR_USE_LONG_TRANSOP_TIMEOUT },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CROC_FPGA_E2,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57B5, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CROC_FPGA_E2,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_574D, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CROC_FPGA_E2,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57B2, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CROC_FPGA_E2,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57C0, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CROC_FPGA_E2,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57C3, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CROC_FPGA_E2,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57C4, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CROCODILE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57B4, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CROCODILE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57B1, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CROCODILE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57C6, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CROCODILE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57C8, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CROCODILE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57CE, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CROCODILE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57D5, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CROCODILE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57D6, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CROCODILE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57D7, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CROCODILE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57D8, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CROCODILE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57D9, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CROCODILE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57DA, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CROCODILE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57EB, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CROCODILE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57EC, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CROCODILE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57ED, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CROCODILE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57EE, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CROCODILE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57EF, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CROCODILE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57F0, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CROCODILE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_2CCA, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CROCODILE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_2CD2, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CROCODILE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_2CCD, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_RATTLESNAKE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_580A, 0, 0, 0 },
-	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_RATTLESNAKE,
-		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_580B, 0, 0, 0 },
+	{
+		PCI_VDEVICE_SUB(MYLEX, PCI_DEVICE_ID_IBM_GEMSTONE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_5702),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(MYLEX, PCI_DEVICE_ID_IBM_GEMSTONE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_5703),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(MYLEX, PCI_DEVICE_ID_IBM_GEMSTONE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_573D),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(MYLEX, PCI_DEVICE_ID_IBM_GEMSTONE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_573E),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CITRINE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_571B),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CITRINE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572E),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CITRINE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_571A),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CITRINE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_575B),
+		.driver_data = IPR_USE_LONG_TRANSOP_TIMEOUT,
+	}, {
+		PCI_VDEVICE_SUB(ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_OBSIDIAN,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572A),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_OBSIDIAN,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572B),
+		.driver_data = IPR_USE_LONG_TRANSOP_TIMEOUT,
+	}, {
+		PCI_VDEVICE_SUB(ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_OBSIDIAN,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_575C),
+		.driver_data = IPR_USE_LONG_TRANSOP_TIMEOUT,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_OBSIDIAN,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572A),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_OBSIDIAN,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572B),
+		.driver_data = IPR_USE_LONG_TRANSOP_TIMEOUT,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_OBSIDIAN,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_575C),
+		.driver_data = IPR_USE_LONG_TRANSOP_TIMEOUT,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_OBSIDIAN_E,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_574E),
+		.driver_data = IPR_USE_LONG_TRANSOP_TIMEOUT,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_OBSIDIAN_E,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57B3),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_OBSIDIAN_E,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57CC),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_OBSIDIAN_E,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57B7),
+		.driver_data = IPR_USE_LONG_TRANSOP_TIMEOUT | IPR_USE_PCI_WARM_RESET,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_SNIPE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_2780),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_SCAMP,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_571E),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_SCAMP,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_571F),
+		.driver_data = IPR_USE_LONG_TRANSOP_TIMEOUT,
+	}, {
+		PCI_VDEVICE_SUB(ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_SCAMP,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572F),
+		.driver_data = IPR_USE_LONG_TRANSOP_TIMEOUT,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CROC_FPGA_E2,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57B5),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CROC_FPGA_E2,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_574D),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CROC_FPGA_E2,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57B2),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CROC_FPGA_E2,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57C0),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CROC_FPGA_E2,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57C3),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CROC_FPGA_E2,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57C4),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CROCODILE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57B4),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CROCODILE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57B1),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CROCODILE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57C6),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CROCODILE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57C8),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CROCODILE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57CE),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CROCODILE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57D5),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CROCODILE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57D6),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CROCODILE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57D7),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CROCODILE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57D8),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CROCODILE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57D9),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CROCODILE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57DA),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CROCODILE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57EB),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CROCODILE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57EC),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CROCODILE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57ED),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CROCODILE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57EE),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CROCODILE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57EF),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CROCODILE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57F0),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CROCODILE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_2CCA),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CROCODILE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_2CD2),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_CROCODILE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_2CCD),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_RATTLESNAKE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_580A),
+		.driver_data = 0,
+	}, {
+		PCI_VDEVICE_SUB(IBM, PCI_DEVICE_ID_IBM_RATTLESNAKE,
+				PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_580B),
+		.driver_data = 0
+	},
 	{ }
 };
 MODULE_DEVICE_TABLE(pci, ipr_pci_table);
diff --git a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c
index 9476a0d2c72d..d290692f43c4 100644
--- a/drivers/scsi/megaraid.c
+++ b/drivers/scsi/megaraid.c
@@ -4552,13 +4552,10 @@ megaraid_shutdown(struct pci_dev *pdev)
 }
 
 static const struct pci_device_id megaraid_pci_tbl[] = {
-	{PCI_VENDOR_ID_AMI, PCI_DEVICE_ID_AMI_MEGARAID,
-		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{PCI_VENDOR_ID_AMI, PCI_DEVICE_ID_AMI_MEGARAID2,
-		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_AMI_MEGARAID3,
-		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{0,}
+	{ PCI_VDEVICE(AMI, PCI_DEVICE_ID_AMI_MEGARAID) },
+	{ PCI_VDEVICE(AMI, PCI_DEVICE_ID_AMI_MEGARAID2) },
+	{ PCI_VDEVICE(INTEL, PCI_DEVICE_ID_AMI_MEGARAID3) },
+	{ }
 };
 MODULE_DEVICE_TABLE(pci, megaraid_pci_tbl);
 
diff --git a/drivers/scsi/mvsas/mv_init.c b/drivers/scsi/mvsas/mv_init.c
index 5abc17a2e261..242b810e994d 100644
--- a/drivers/scsi/mvsas/mv_init.c
+++ b/drivers/scsi/mvsas/mv_init.c
@@ -610,61 +610,37 @@ static void mvs_pci_remove(struct pci_dev *pdev)
 }
 
 static const struct pci_device_id mvs_pci_table[] = {
-	{ PCI_VDEVICE(MARVELL, 0x6320), chip_6320 },
-	{ PCI_VDEVICE(MARVELL, 0x6340), chip_6440 },
-	{
-		.vendor 	= PCI_VENDOR_ID_MARVELL,
-		.device 	= 0x6440,
-		.subvendor	= PCI_ANY_ID,
-		.subdevice	= 0x6480,
-		.class		= 0,
-		.class_mask	= 0,
-		.driver_data	= chip_6485,
-	},
-	{ PCI_VDEVICE(MARVELL, 0x6440), chip_6440 },
-	{ PCI_VDEVICE(MARVELL, 0x6485), chip_6485 },
-	{ PCI_VDEVICE(MARVELL, 0x9480), chip_9480 },
-	{ PCI_VDEVICE(MARVELL, 0x9180), chip_9180 },
-	{ PCI_VDEVICE(ARECA, PCI_DEVICE_ID_ARECA_1300), chip_1300 },
-	{ PCI_VDEVICE(ARECA, PCI_DEVICE_ID_ARECA_1320), chip_1320 },
-	{ PCI_VDEVICE(ADAPTEC2, 0x0450), chip_6440 },
-	{ PCI_VDEVICE(TTI, 0x2640), chip_6440 },
-	{ PCI_VDEVICE(TTI, 0x2710), chip_9480 },
-	{ PCI_VDEVICE(TTI, 0x2720), chip_9480 },
-	{ PCI_VDEVICE(TTI, 0x2721), chip_9480 },
-	{ PCI_VDEVICE(TTI, 0x2722), chip_9480 },
-	{ PCI_VDEVICE(TTI, 0x2740), chip_9480 },
-	{ PCI_VDEVICE(TTI, 0x2744), chip_9480 },
-	{ PCI_VDEVICE(TTI, 0x2760), chip_9480 },
-	{
-		.vendor		= PCI_VENDOR_ID_MARVELL_EXT,
-		.device		= 0x9480,
-		.subvendor	= PCI_ANY_ID,
-		.subdevice	= 0x9480,
-		.class		= 0,
-		.class_mask	= 0,
-		.driver_data	= chip_9480,
-	},
-	{
-		.vendor		= PCI_VENDOR_ID_MARVELL_EXT,
-		.device		= 0x9445,
-		.subvendor	= PCI_ANY_ID,
-		.subdevice	= 0x9480,
-		.class		= 0,
-		.class_mask	= 0,
-		.driver_data	= chip_9445,
-	},
-	{ PCI_VDEVICE(MARVELL_EXT, 0x9485), chip_9485 }, /* Marvell 9480/9485 (any vendor/model) */
-	{ PCI_VDEVICE(OCZ, 0x1021), chip_9485}, /* OCZ RevoDrive3 */
-	{ PCI_VDEVICE(OCZ, 0x1022), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
-	{ PCI_VDEVICE(OCZ, 0x1040), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
-	{ PCI_VDEVICE(OCZ, 0x1041), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
-	{ PCI_VDEVICE(OCZ, 0x1042), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
-	{ PCI_VDEVICE(OCZ, 0x1043), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
-	{ PCI_VDEVICE(OCZ, 0x1044), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
-	{ PCI_VDEVICE(OCZ, 0x1080), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
-	{ PCI_VDEVICE(OCZ, 0x1083), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
-	{ PCI_VDEVICE(OCZ, 0x1084), chip_9485}, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
+	{ PCI_VDEVICE(MARVELL, 0x6320), .driver_data = chip_6320 },
+	{ PCI_VDEVICE(MARVELL, 0x6340), .driver_data = chip_6440 },
+	{ PCI_VDEVICE_SUB(MARVELL, 0x6440, PCI_ANY_ID, 0x6480), .driver_data = chip_6485 },
+	{ PCI_VDEVICE(MARVELL, 0x6440), .driver_data = chip_6440 },
+	{ PCI_VDEVICE(MARVELL, 0x6485), .driver_data = chip_6485 },
+	{ PCI_VDEVICE(MARVELL, 0x9480), .driver_data = chip_9480 },
+	{ PCI_VDEVICE(MARVELL, 0x9180), .driver_data = chip_9180 },
+	{ PCI_VDEVICE(ARECA, PCI_DEVICE_ID_ARECA_1300), .driver_data = chip_1300 },
+	{ PCI_VDEVICE(ARECA, PCI_DEVICE_ID_ARECA_1320), .driver_data = chip_1320 },
+	{ PCI_VDEVICE(ADAPTEC2, 0x0450), .driver_data = chip_6440 },
+	{ PCI_VDEVICE(TTI, 0x2640), .driver_data = chip_6440 },
+	{ PCI_VDEVICE(TTI, 0x2710), .driver_data = chip_9480 },
+	{ PCI_VDEVICE(TTI, 0x2720), .driver_data = chip_9480 },
+	{ PCI_VDEVICE(TTI, 0x2721), .driver_data = chip_9480 },
+	{ PCI_VDEVICE(TTI, 0x2722), .driver_data = chip_9480 },
+	{ PCI_VDEVICE(TTI, 0x2740), .driver_data = chip_9480 },
+	{ PCI_VDEVICE(TTI, 0x2744), .driver_data = chip_9480 },
+	{ PCI_VDEVICE(TTI, 0x2760), .driver_data = chip_9480 },
+	{ PCI_VDEVICE_SUB(MARVELL_EXT, 0x9480, PCI_ANY_ID, 0x9480), .driver_data = chip_9480 },
+	{ PCI_VDEVICE_SUB(MARVELL_EXT, 0x9445, PCI_ANY_ID, 0x9480), .driver_data = chip_9445 },
+	{ PCI_VDEVICE(MARVELL_EXT, 0x9485), .driver_data = chip_9485 }, /* Marvell 9480/9485 (any vendor/model) */
+	{ PCI_VDEVICE(OCZ, 0x1021), .driver_data = chip_9485 }, /* OCZ RevoDrive3 */
+	{ PCI_VDEVICE(OCZ, 0x1022), .driver_data = chip_9485 }, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
+	{ PCI_VDEVICE(OCZ, 0x1040), .driver_data = chip_9485 }, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
+	{ PCI_VDEVICE(OCZ, 0x1041), .driver_data = chip_9485 }, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
+	{ PCI_VDEVICE(OCZ, 0x1042), .driver_data = chip_9485 }, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
+	{ PCI_VDEVICE(OCZ, 0x1043), .driver_data = chip_9485 }, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
+	{ PCI_VDEVICE(OCZ, 0x1044), .driver_data = chip_9485 }, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
+	{ PCI_VDEVICE(OCZ, 0x1080), .driver_data = chip_9485 }, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
+	{ PCI_VDEVICE(OCZ, 0x1083), .driver_data = chip_9485 }, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
+	{ PCI_VDEVICE(OCZ, 0x1084), .driver_data = chip_9485 }, /* OCZ RevoDrive3/zDriveR4 (exact model unknown) */
 
 	{ }	/* terminate list */
 };
diff --git a/drivers/scsi/pm8001/pm8001_init.c b/drivers/scsi/pm8001/pm8001_init.c
index e93ea76b565e..13c1e541cd22 100644
--- a/drivers/scsi/pm8001/pm8001_init.c
+++ b/drivers/scsi/pm8001/pm8001_init.c
@@ -1437,79 +1437,176 @@ static int __maybe_unused pm8001_pci_resume(struct device *dev)
  * unique value for each of the controller
  */
 static const struct pci_device_id pm8001_pci_table[] = {
-	{ PCI_VDEVICE(PMC_Sierra, 0x8001), chip_8001 },
-	{ PCI_VDEVICE(PMC_Sierra, 0x8006), chip_8006 },
-	{ PCI_VDEVICE(ADAPTEC2, 0x8006), chip_8006 },
-	{ PCI_VDEVICE(ATTO, 0x0042), chip_8001 },
-	/* Support for SPC/SPCv/SPCve controllers */
-	{ PCI_VDEVICE(ADAPTEC2, 0x8001), chip_8001 },
-	{ PCI_VDEVICE(PMC_Sierra, 0x8008), chip_8008 },
-	{ PCI_VDEVICE(ADAPTEC2, 0x8008), chip_8008 },
-	{ PCI_VDEVICE(PMC_Sierra, 0x8018), chip_8018 },
-	{ PCI_VDEVICE(ADAPTEC2, 0x8018), chip_8018 },
-	{ PCI_VDEVICE(PMC_Sierra, 0x8009), chip_8009 },
-	{ PCI_VDEVICE(ADAPTEC2, 0x8009), chip_8009 },
-	{ PCI_VDEVICE(PMC_Sierra, 0x8019), chip_8019 },
-	{ PCI_VDEVICE(ADAPTEC2, 0x8019), chip_8019 },
-	{ PCI_VDEVICE(PMC_Sierra, 0x8074), chip_8074 },
-	{ PCI_VDEVICE(ADAPTEC2, 0x8074), chip_8074 },
-	{ PCI_VDEVICE(PMC_Sierra, 0x8076), chip_8076 },
-	{ PCI_VDEVICE(ADAPTEC2, 0x8076), chip_8076 },
-	{ PCI_VDEVICE(PMC_Sierra, 0x8077), chip_8077 },
-	{ PCI_VDEVICE(ADAPTEC2, 0x8077), chip_8077 },
-	{ PCI_VENDOR_ID_ADAPTEC2, 0x8081,
-		PCI_VENDOR_ID_ADAPTEC2, 0x0400, 0, 0, chip_8001 },
-	{ PCI_VENDOR_ID_ADAPTEC2, 0x8081,
-		PCI_VENDOR_ID_ADAPTEC2, 0x0800, 0, 0, chip_8001 },
-	{ PCI_VENDOR_ID_ADAPTEC2, 0x8088,
-		PCI_VENDOR_ID_ADAPTEC2, 0x0008, 0, 0, chip_8008 },
-	{ PCI_VENDOR_ID_ADAPTEC2, 0x8088,
-		PCI_VENDOR_ID_ADAPTEC2, 0x0800, 0, 0, chip_8008 },
-	{ PCI_VENDOR_ID_ADAPTEC2, 0x8089,
-		PCI_VENDOR_ID_ADAPTEC2, 0x0008, 0, 0, chip_8009 },
-	{ PCI_VENDOR_ID_ADAPTEC2, 0x8089,
-		PCI_VENDOR_ID_ADAPTEC2, 0x0800, 0, 0, chip_8009 },
-	{ PCI_VENDOR_ID_ADAPTEC2, 0x8088,
-		PCI_VENDOR_ID_ADAPTEC2, 0x0016, 0, 0, chip_8018 },
-	{ PCI_VENDOR_ID_ADAPTEC2, 0x8088,
-		PCI_VENDOR_ID_ADAPTEC2, 0x1600, 0, 0, chip_8018 },
-	{ PCI_VENDOR_ID_ADAPTEC2, 0x8089,
-		PCI_VENDOR_ID_ADAPTEC2, 0x0016, 0, 0, chip_8019 },
-	{ PCI_VENDOR_ID_ADAPTEC2, 0x8089,
-		PCI_VENDOR_ID_ADAPTEC2, 0x1600, 0, 0, chip_8019 },
-	{ PCI_VENDOR_ID_ADAPTEC2, 0x8074,
-		PCI_VENDOR_ID_ADAPTEC2, 0x0800, 0, 0, chip_8074 },
-	{ PCI_VENDOR_ID_ADAPTEC2, 0x8076,
-		PCI_VENDOR_ID_ADAPTEC2, 0x1600, 0, 0, chip_8076 },
-	{ PCI_VENDOR_ID_ADAPTEC2, 0x8077,
-		PCI_VENDOR_ID_ADAPTEC2, 0x1600, 0, 0, chip_8077 },
-	{ PCI_VENDOR_ID_ADAPTEC2, 0x8074,
-		PCI_VENDOR_ID_ADAPTEC2, 0x0008, 0, 0, chip_8074 },
-	{ PCI_VENDOR_ID_ADAPTEC2, 0x8076,
-		PCI_VENDOR_ID_ADAPTEC2, 0x0016, 0, 0, chip_8076 },
-	{ PCI_VENDOR_ID_ADAPTEC2, 0x8077,
-		PCI_VENDOR_ID_ADAPTEC2, 0x0016, 0, 0, chip_8077 },
-	{ PCI_VENDOR_ID_ADAPTEC2, 0x8076,
-		PCI_VENDOR_ID_ADAPTEC2, 0x0808, 0, 0, chip_8076 },
-	{ PCI_VENDOR_ID_ADAPTEC2, 0x8077,
-		PCI_VENDOR_ID_ADAPTEC2, 0x0808, 0, 0, chip_8077 },
-	{ PCI_VENDOR_ID_ADAPTEC2, 0x8074,
-		PCI_VENDOR_ID_ADAPTEC2, 0x0404, 0, 0, chip_8074 },
-	{ PCI_VENDOR_ID_ATTO, 0x8070,
-		PCI_VENDOR_ID_ATTO, 0x0070, 0, 0, chip_8070 },
-	{ PCI_VENDOR_ID_ATTO, 0x8070,
-		PCI_VENDOR_ID_ATTO, 0x0071, 0, 0, chip_8070 },
-	{ PCI_VENDOR_ID_ATTO, 0x8072,
-		PCI_VENDOR_ID_ATTO, 0x0072, 0, 0, chip_8072 },
-	{ PCI_VENDOR_ID_ATTO, 0x8072,
-		PCI_VENDOR_ID_ATTO, 0x0073, 0, 0, chip_8072 },
-	{ PCI_VENDOR_ID_ATTO, 0x8070,
-		PCI_VENDOR_ID_ATTO, 0x0080, 0, 0, chip_8070 },
-	{ PCI_VENDOR_ID_ATTO, 0x8072,
-		PCI_VENDOR_ID_ATTO, 0x0081, 0, 0, chip_8072 },
-	{ PCI_VENDOR_ID_ATTO, 0x8072,
-		PCI_VENDOR_ID_ATTO, 0x0082, 0, 0, chip_8072 },
-	{} /* terminate list */
+	{
+		PCI_VDEVICE(PMC_Sierra, 0x8001),
+		.driver_data = chip_8001,
+	}, {
+		PCI_VDEVICE(PMC_Sierra, 0x8006),
+		.driver_data = chip_8006,
+	}, {
+		PCI_VDEVICE(ADAPTEC2, 0x8006),
+		.driver_data = chip_8006,
+	}, {
+		PCI_VDEVICE(ATTO, 0x0042),
+		.driver_data = chip_8001
+	}, {
+		/* Support for SPC/SPCv/SPCve controllers */
+		PCI_VDEVICE(ADAPTEC2, 0x8001),
+		.driver_data = chip_8001,
+	}, {
+		PCI_VDEVICE(PMC_Sierra, 0x8008),
+		.driver_data = chip_8008,
+	}, {
+		PCI_VDEVICE(ADAPTEC2, 0x8008),
+		.driver_data = chip_8008,
+	}, {
+		PCI_VDEVICE(PMC_Sierra, 0x8018),
+		.driver_data = chip_8018,
+	}, {
+		PCI_VDEVICE(ADAPTEC2, 0x8018),
+		.driver_data = chip_8018,
+	}, {
+		PCI_VDEVICE(PMC_Sierra, 0x8009),
+		.driver_data = chip_8009,
+	}, {
+		PCI_VDEVICE(ADAPTEC2, 0x8009),
+		.driver_data = chip_8009,
+	}, {
+		PCI_VDEVICE(PMC_Sierra, 0x8019),
+		.driver_data = chip_8019,
+	}, {
+		PCI_VDEVICE(ADAPTEC2, 0x8019),
+		.driver_data = chip_8019,
+	}, {
+		PCI_VDEVICE(PMC_Sierra, 0x8074),
+		.driver_data = chip_8074,
+	}, {
+		PCI_VDEVICE(ADAPTEC2, 0x8074),
+		.driver_data = chip_8074,
+	}, {
+		PCI_VDEVICE(PMC_Sierra, 0x8076),
+		.driver_data = chip_8076,
+	}, {
+		PCI_VDEVICE(ADAPTEC2, 0x8076),
+		.driver_data = chip_8076,
+	}, {
+		PCI_VDEVICE(PMC_Sierra, 0x8077),
+		.driver_data = chip_8077,
+	}, {
+		PCI_VDEVICE(ADAPTEC2, 0x8077),
+		.driver_data = chip_8077,
+	}, {
+		PCI_VDEVICE_SUB(ADAPTEC2, 0x8081,
+				PCI_VENDOR_ID_ADAPTEC2, 0x0400),
+		.driver_data = chip_8001,
+	}, {
+		PCI_VDEVICE_SUB(ADAPTEC2, 0x8081,
+				PCI_VENDOR_ID_ADAPTEC2, 0x0800),
+		.driver_data = chip_8001,
+	}, {
+		PCI_VDEVICE_SUB(ADAPTEC2, 0x8088,
+				PCI_VENDOR_ID_ADAPTEC2, 0x0008),
+		.driver_data = chip_8008,
+	}, {
+		PCI_VDEVICE_SUB(ADAPTEC2, 0x8088,
+				PCI_VENDOR_ID_ADAPTEC2, 0x0800),
+		.driver_data = chip_8008,
+	}, {
+		PCI_VDEVICE_SUB(ADAPTEC2, 0x8089,
+				PCI_VENDOR_ID_ADAPTEC2, 0x0008),
+		.driver_data = chip_8009,
+	}, {
+		PCI_VDEVICE_SUB(ADAPTEC2, 0x8089,
+				PCI_VENDOR_ID_ADAPTEC2, 0x0800),
+		.driver_data = chip_8009,
+	}, {
+		PCI_VDEVICE_SUB(ADAPTEC2, 0x8088,
+				PCI_VENDOR_ID_ADAPTEC2, 0x0016),
+		.driver_data = chip_8018,
+	}, {
+		PCI_VDEVICE_SUB(ADAPTEC2, 0x8088,
+				PCI_VENDOR_ID_ADAPTEC2, 0x1600),
+		.driver_data = chip_8018,
+	}, {
+		PCI_VDEVICE_SUB(ADAPTEC2, 0x8089,
+				PCI_VENDOR_ID_ADAPTEC2, 0x0016),
+		.driver_data = chip_8019,
+	}, {
+		PCI_VDEVICE_SUB(ADAPTEC2, 0x8089,
+				PCI_VENDOR_ID_ADAPTEC2, 0x1600),
+		.driver_data = chip_8019,
+	}, {
+		PCI_VDEVICE_SUB(ADAPTEC2, 0x8074,
+				PCI_VENDOR_ID_ADAPTEC2, 0x0800),
+		.driver_data = chip_8074,
+	}, {
+		PCI_VDEVICE_SUB(ADAPTEC2, 0x8076,
+				PCI_VENDOR_ID_ADAPTEC2, 0x1600),
+		.driver_data = chip_8076,
+	}, {
+		PCI_VDEVICE_SUB(ADAPTEC2, 0x8077,
+				PCI_VENDOR_ID_ADAPTEC2, 0x1600),
+		.driver_data = chip_8077,
+	}, {
+		PCI_VDEVICE_SUB(ADAPTEC2, 0x8074,
+				PCI_VENDOR_ID_ADAPTEC2, 0x0008),
+		.driver_data = chip_8074,
+	}, {
+		PCI_VDEVICE_SUB(ADAPTEC2, 0x8076,
+				PCI_VENDOR_ID_ADAPTEC2, 0x0016),
+		.driver_data = chip_8076,
+	}, {
+		PCI_VDEVICE_SUB(ADAPTEC2, 0x8077,
+				PCI_VENDOR_ID_ADAPTEC2, 0x0016),
+		.driver_data = chip_8077,
+	}, {
+		PCI_VDEVICE_SUB(ADAPTEC2, 0x8076,
+				PCI_VENDOR_ID_ADAPTEC2, 0x0808),
+		.driver_data = chip_8076,
+	}, {
+		PCI_VDEVICE_SUB(ADAPTEC2, 0x8077,
+				PCI_VENDOR_ID_ADAPTEC2, 0x0808),
+		.driver_data = chip_8077,
+	}, {
+		PCI_VDEVICE_SUB(ADAPTEC2, 0x8074,
+				PCI_VENDOR_ID_ADAPTEC2, 0x0404),
+		.driver_data = chip_8074,
+	}, {
+		PCI_VDEVICE_SUB(ATTO, 0x8070,
+				PCI_VENDOR_ID_ATTO, 0x0070),
+		.driver_data = chip_8070,
+	}, {
+
+		PCI_VDEVICE_SUB(ATTO, 0x8070,
+				PCI_VENDOR_ID_ATTO, 0x0071),
+		.driver_data = chip_8070,
+	}, {
+
+		PCI_VDEVICE_SUB(ATTO, 0x8072,
+				PCI_VENDOR_ID_ATTO, 0x0072),
+		.driver_data = chip_8072,
+	}, {
+
+		PCI_VDEVICE_SUB(ATTO, 0x8072,
+				PCI_VENDOR_ID_ATTO, 0x0073),
+		.driver_data = chip_8072,
+	}, {
+
+		PCI_VDEVICE_SUB(ATTO, 0x8070,
+				PCI_VENDOR_ID_ATTO, 0x0080),
+		.driver_data = chip_8070,
+	}, {
+
+		PCI_VDEVICE_SUB(ATTO, 0x8072,
+				PCI_VENDOR_ID_ATTO, 0x0081),
+		.driver_data = chip_8072,
+	}, {
+
+		PCI_VDEVICE_SUB(ATTO, 0x8072,
+				PCI_VENDOR_ID_ATTO, 0x0082),
+		.driver_data = chip_8072,
+	},
+	{ } /* terminate list */
 };
 
 static SIMPLE_DEV_PM_OPS(pm8001_pci_pm_ops,
diff --git a/drivers/scsi/pmcraid.c b/drivers/scsi/pmcraid.c
index 942a99393204..029aa21c47bb 100644
--- a/drivers/scsi/pmcraid.c
+++ b/drivers/scsi/pmcraid.c
@@ -114,10 +114,11 @@ static struct pmcraid_chip_details pmcraid_chip_cfg[] = {
  * PCI device ids supported by pmcraid driver
  */
 static const struct pci_device_id pmcraid_pci_table[] = {
-	{ PCI_DEVICE(PCI_VENDOR_ID_PMC, PCI_DEVICE_ID_PMC_MAXRAID),
-	  0, 0, (kernel_ulong_t)&pmcraid_chip_cfg[0]
+	{
+		PCI_VDEVICE(PMC, PCI_DEVICE_ID_PMC_MAXRAID),
+		.driver_data = (kernel_ulong_t)&pmcraid_chip_cfg[0],
 	},
-	{}
+	{ }
 };
 
 MODULE_DEVICE_TABLE(pci, pmcraid_pci_table);
diff --git a/drivers/scsi/qla1280.c b/drivers/scsi/qla1280.c
index cdd6fe002c32..377b63c82e89 100644
--- a/drivers/scsi/qla1280.c
+++ b/drivers/scsi/qla1280.c
@@ -502,21 +502,15 @@ struct qla_boards {
 	int fw_index;		/* index into qla1280_fw_tbl for firmware */
 };
 
-/* NOTE: the last argument in each entry is used to index ql1280_board_tbl */
+/* NOTE: the driver_data argument in each entry is used to index ql1280_board_tbl */
 static const struct pci_device_id qla1280_pci_tbl[] = {
-	{PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP12160,
-		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP1020,
-		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1},
-	{PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP1080,
-		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2},
-	{PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP1240,
-		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3},
-	{PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP1280,
-		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4},
-	{PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP10160,
-		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5},
-	{0,}
+	{ PCI_VDEVICE(QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP12160), .driver_data = 0 },
+	{ PCI_VDEVICE(QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP1020), .driver_data = 1 },
+	{ PCI_VDEVICE(QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP1080), .driver_data = 2 },
+	{ PCI_VDEVICE(QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP1240), .driver_data = 3 },
+	{ PCI_VDEVICE(QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP1280), .driver_data = 4 },
+	{ PCI_VDEVICE(QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP10160), .driver_data = 5 },
+	{ }
 };
 MODULE_DEVICE_TABLE(pci, qla1280_pci_tbl);
 
diff --git a/drivers/scsi/stex.c b/drivers/scsi/stex.c
index 6aeeb338633d..892396cf3261 100644
--- a/drivers/scsi/stex.c
+++ b/drivers/scsi/stex.c
@@ -1490,47 +1490,80 @@ static const struct scsi_host_template driver_template = {
 
 static const struct pci_device_id stex_pci_tbl[] = {
 	/* st_shasta */
-	{ 0x105a, 0x8350, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
-		st_shasta }, /* SuperTrak EX8350/8300/16350/16300 */
-	{ 0x105a, 0xc350, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
-		st_shasta }, /* SuperTrak EX12350 */
-	{ 0x105a, 0x4302, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
-		st_shasta }, /* SuperTrak EX4350 */
-	{ 0x105a, 0xe350, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
-		st_shasta }, /* SuperTrak EX24350 */
-
+	{
+		/* SuperTrak EX8350/8300/16350/16300 */
+		PCI_DEVICE(0x105a, 0x8350),
+		.driver_data = st_shasta,
+	}, {
+		/* SuperTrak EX12350 */
+		PCI_DEVICE(0x105a, 0xc350),
+		.driver_data = st_shasta,
+	}, {
+		/* SuperTrak EX4350 */
+		PCI_DEVICE(0x105a, 0x4302),
+		.driver_data = st_shasta,
+	}, {
+		/* SuperTrak EX24350 */
+		PCI_DEVICE(0x105a, 0xe350),
+		.driver_data = st_shasta,
+	},
 	/* st_vsc */
-	{ 0x105a, 0x7250, PCI_ANY_ID, PCI_ANY_ID, 0, 0, st_vsc },
+	{
+		PCI_DEVICE(0x105a, 0x7250),
+		.driver_data = st_vsc,
+	},
 
 	/* st_yosemite */
-	{ 0x105a, 0x8650, 0x105a, PCI_ANY_ID, 0, 0, st_yosemite },
+	{
+		PCI_DEVICE_SUB(0x105a, 0x8650, 0x105a, PCI_ANY_ID),
+		.driver_data = st_yosemite,
+	},
 
 	/* st_seq */
-	{ 0x105a, 0x3360, PCI_ANY_ID, PCI_ANY_ID, 0, 0, st_seq },
+	{
+		PCI_DEVICE(0x105a, 0x3360),
+		.driver_data = st_seq,
+	},
 
 	/* st_yel */
-	{ 0x105a, 0x8650, 0x1033, PCI_ANY_ID, 0, 0, st_yel },
-	{ 0x105a, 0x8760, PCI_ANY_ID, PCI_ANY_ID, 0, 0, st_yel },
+	{
+		PCI_DEVICE_SUB(0x105a, 0x8650, 0x1033, PCI_ANY_ID),
+		.driver_data = st_yel,
+	}, {
+		PCI_DEVICE(0x105a, 0x8760),
+		.driver_data = st_yel,
+	},
 
 	/* st_P3, pluto */
-	{ PCI_VENDOR_ID_PROMISE, 0x8870, PCI_VENDOR_ID_PROMISE,
-		0x8870, 0, 0, st_P3 },
-	/* st_P3, p3 */
-	{ PCI_VENDOR_ID_PROMISE, 0x8870, PCI_VENDOR_ID_PROMISE,
-		0x4300, 0, 0, st_P3 },
+	{
+		/* st_P3, p3 */
+		PCI_VDEVICE_SUB(PROMISE, 0x8870, PCI_VENDOR_ID_PROMISE, 0x8870),
+		.driver_data = st_P3,
+	}, {
+		/* st_P3, SymplyStor4E */
+		PCI_VDEVICE_SUB(PROMISE, 0x8870, PCI_VENDOR_ID_PROMISE, 0x4300),
+		.driver_data = st_P3,
+	}, {
+		/* st_P3, SymplyStor8E */
+		PCI_VDEVICE_SUB(PROMISE, 0x8871, PCI_VENDOR_ID_PROMISE, 0x4311),
+		.driver_data = st_P3,
+	}, {
+		PCI_VDEVICE_SUB(PROMISE, 0x8871, PCI_VENDOR_ID_PROMISE, 0x4312),
+		.driver_data = st_P3,
+	},
 
-	/* st_P3, SymplyStor4E */
-	{ PCI_VENDOR_ID_PROMISE, 0x8871, PCI_VENDOR_ID_PROMISE,
-		0x4311, 0, 0, st_P3 },
-	/* st_P3, SymplyStor8E */
-	{ PCI_VENDOR_ID_PROMISE, 0x8871, PCI_VENDOR_ID_PROMISE,
-		0x4312, 0, 0, st_P3 },
 	/* st_P3, SymplyStor4 */
-	{ PCI_VENDOR_ID_PROMISE, 0x8871, PCI_VENDOR_ID_PROMISE,
-		0x4321, 0, 0, st_P3 },
+	{
+		PCI_VDEVICE_SUB(PROMISE, 0x8871, PCI_VENDOR_ID_PROMISE, 0x4321),
+		.driver_data = st_P3,
+	},
+
 	/* st_P3, SymplyStor8 */
-	{ PCI_VENDOR_ID_PROMISE, 0x8871, PCI_VENDOR_ID_PROMISE,
-		0x4322, 0, 0, st_P3 },
+	{
+		PCI_VDEVICE_SUB(PROMISE, 0x8871, PCI_VENDOR_ID_PROMISE, 0x4322),
+		.driver_data = st_P3,
+	},
+
 	{ }	/* terminate list */
 };
 
diff --git a/drivers/scsi/sym53c8xx_2/sym_glue.c b/drivers/scsi/sym53c8xx_2/sym_glue.c
index 27e22acaf1a7..a3f7ffd2b7f8 100644
--- a/drivers/scsi/sym53c8xx_2/sym_glue.c
+++ b/drivers/scsi/sym53c8xx_2/sym_glue.c
@@ -2032,41 +2032,33 @@ static struct spi_function_template sym2_transport_functions = {
 };
 
 static const struct pci_device_id sym2_id_table[] = {
-	{ PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_NCR_53C810,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
-	{ PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_NCR_53C820,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, /* new */
-	{ PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_NCR_53C825,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
-	{ PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_NCR_53C815,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
-	{ PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_53C810AP,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, /* new */
-	{ PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_NCR_53C860,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
-	{ PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_53C1510,
-	  PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_SCSI<<8,  0xffff00, 0UL },
-	{ PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_NCR_53C896,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
-	{ PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_NCR_53C895,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
-	{ PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_NCR_53C885,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
-	{ PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_NCR_53C875,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
-	{ PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_NCR_53C1510,
-	  PCI_ANY_ID, PCI_ANY_ID,  PCI_CLASS_STORAGE_SCSI<<8,  0xffff00, 0UL }, /* new */
-	{ PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_53C895A,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
-	{ PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_53C875A,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
-	{ PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_53C1010_33,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
-	{ PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_53C1010_66,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
-	{ PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_NCR_53C875J,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
-	{ 0, }
+	{ PCI_VDEVICE(LSI_LOGIC, PCI_DEVICE_ID_NCR_53C810) },
+	{ PCI_VDEVICE(LSI_LOGIC, PCI_DEVICE_ID_NCR_53C820) }, /* new */
+	{ PCI_VDEVICE(LSI_LOGIC, PCI_DEVICE_ID_NCR_53C825) },
+	{ PCI_VDEVICE(LSI_LOGIC, PCI_DEVICE_ID_NCR_53C815) },
+	{ PCI_VDEVICE(LSI_LOGIC, PCI_DEVICE_ID_LSI_53C810AP) }, /* new */
+	{ PCI_VDEVICE(LSI_LOGIC, PCI_DEVICE_ID_NCR_53C860) },
+	{
+		PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_53C1510),
+		.class = PCI_CLASS_STORAGE_SCSI << 8,
+		.class_mask = 0xffff00,
+	},
+	{ PCI_VDEVICE(LSI_LOGIC, PCI_DEVICE_ID_NCR_53C896) },
+	{ PCI_VDEVICE(LSI_LOGIC, PCI_DEVICE_ID_NCR_53C895) },
+	{ PCI_VDEVICE(LSI_LOGIC, PCI_DEVICE_ID_NCR_53C885) },
+	{ PCI_VDEVICE(LSI_LOGIC, PCI_DEVICE_ID_NCR_53C875) },
+	{
+		/* new */
+		PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_NCR_53C1510),
+		.class = PCI_CLASS_STORAGE_SCSI << 8,
+		.class_mask = 0xffff00,
+	},
+	{ PCI_VDEVICE(LSI_LOGIC, PCI_DEVICE_ID_LSI_53C895A) },
+	{ PCI_VDEVICE(LSI_LOGIC, PCI_DEVICE_ID_LSI_53C875A) },
+	{ PCI_VDEVICE(LSI_LOGIC, PCI_DEVICE_ID_LSI_53C1010_33) },
+	{ PCI_VDEVICE(LSI_LOGIC, PCI_DEVICE_ID_LSI_53C1010_66) },
+	{ PCI_VDEVICE(LSI_LOGIC, PCI_DEVICE_ID_NCR_53C875J) },
+	{ }
 };
 
 MODULE_DEVICE_TABLE(pci, sym2_id_table);

base-commit: 254f49634ee16a731174d2ae34bc50bd5f45e731
-- 
2.47.3

Re: [PATCH] scsi: Consistently define pci_device_ids using named initializers
Posted by Uwe Kleine-König (The Capable Hub) 1 week ago
[Dropping Bradley Grove and Michael Reed from Cc: as their addresses
bounced]

On Wed, Apr 29, 2026 at 12:18:20PM +0200, Uwe Kleine-König (The Capable Hub) wrote:
> ... and PCI device helpers.
> 
> The various struct pci_device_id arrays were initialized mostly by one
> of the PCI_DEVICE macros and then list expressions. The latter isn't
> easily readable if you're not into PCI. Using named initializers is more
> explicit and thus easier to parse.
> 
> Also use PCI_DEVICE* helper macros to assign .vendor, .device,
> .subvendor and .subdevice where appropriate and skip explicit
> assignments of 0 (which the compiler takes care of).
> 
> The secret plan is to make struct pci_device_id::driver_data an
> anonymous union (similar to
> https://lore.kernel.org/all/cover.1776579304.git.u.kleine-koenig@baylibre.com/)
> and that requires named initializers. But it's also a nice cleanup on
> its own.
> 
> This change doesn't introduce changes to the compiled pci_device_id
> arrays. Tested on x86 and arm64.
> 
> Signed-off-by: Uwe Kleine-König (The Capable Hub) <u.kleine-koenig@baylibre.com>
> ---
> Hello,
> 
> the mentioned follow-up quest allows to do
> 
> 	-	{ PCI_VDEVICE(TTI, 0x3220), .driver_data = (kernel_ulong_t)&hptiop_itl_ops },
> 	+	{ PCI_VDEVICE(TTI, 0x3220), .driver_data_ptr = &hptiop_itl_ops },
> 
> which gets rid of a bunch of casts and so brings a little bit more type
> safety. This patch is a preparation for that.
> 
> I assume a single patch for all of drivers/scsi is fine. If not I can
> split per driver.

Is this patch still on someone's radar?

Best regards
Uwe