Linux SCSI subsystem development
 help / color / mirror / Atom feed
* [PATCH] scsi: Consistently define pci_device_ids using named initializers
@ 2026-04-29 10:18 Uwe Kleine-König (The Capable Hub)
  2026-06-09 15:34 ` Uwe Kleine-König (The Capable Hub)
  0 siblings, 1 reply; 4+ messages in thread
From: Uwe Kleine-König (The Capable Hub) @ 2026-04-29 10:18 UTC (permalink / raw)
  To: James E.J. Bottomley, Martin K. Petersen
  Cc: Adam Radford, Adaptec OEM Raid Solutions, Matthew Wilcox,
	Hannes Reinecke, Finn Thain, Michael Schmitz, Ram Vegesna,
	Bradley Grove, Yihang Li, Don Brace, HighPoint Linux Team,
	Brian King, Kashyap Desai, Sumit Saxena, Shivasharan S,
	Chandrakanth patil, Jack Wang, Michael Reed, Junrui Luo,
	Kees Cook, Dave Jiang, Giovanni Cabiddu, Bjorn Helgaas,
	Lukas Wunner, Sebastian Andrzej Siewior, Thomas Gleixner,
	Duoming Zhou, linux-scsi, linux-kernel, target-devel, storagedev,
	megaraidlinux.pdl, Markus Schneider-Pargmann

... 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


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] scsi: Consistently define pci_device_ids using named initializers
  2026-04-29 10:18 [PATCH] scsi: Consistently define pci_device_ids using named initializers Uwe Kleine-König (The Capable Hub)
@ 2026-06-09 15:34 ` Uwe Kleine-König (The Capable Hub)
  2026-07-17 10:00   ` Uwe Kleine-König (The Capable Hub)
  0 siblings, 1 reply; 4+ messages in thread
From: Uwe Kleine-König (The Capable Hub) @ 2026-06-09 15:34 UTC (permalink / raw)
  To: James E.J. Bottomley, Martin K. Petersen
  Cc: Adam Radford, Adaptec OEM Raid Solutions, Matthew Wilcox,
	Hannes Reinecke, Finn Thain, Michael Schmitz, Ram Vegesna,
	Yihang Li, Don Brace, HighPoint Linux Team, Brian King,
	Kashyap Desai, Sumit Saxena, Shivasharan S, Chandrakanth patil,
	Jack Wang, Junrui Luo, Kees Cook, Dave Jiang, Giovanni Cabiddu,
	Bjorn Helgaas, Lukas Wunner, Sebastian Andrzej Siewior,
	Thomas Gleixner, Duoming Zhou, linux-scsi, linux-kernel,
	target-devel, storagedev, megaraidlinux.pdl,
	Markus Schneider-Pargmann

[-- Attachment #1: Type: text/plain, Size: 1639 bytes --]

[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

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] scsi: Consistently define pci_device_ids using named initializers
  2026-06-09 15:34 ` Uwe Kleine-König (The Capable Hub)
@ 2026-07-17 10:00   ` Uwe Kleine-König (The Capable Hub)
  2026-07-17 10:04     ` Sebastian Andrzej Siewior
  0 siblings, 1 reply; 4+ messages in thread
From: Uwe Kleine-König (The Capable Hub) @ 2026-07-17 10:00 UTC (permalink / raw)
  To: James E.J. Bottomley, Martin K. Petersen
  Cc: Adam Radford, Adaptec OEM Raid Solutions, Matthew Wilcox,
	Hannes Reinecke, Finn Thain, Michael Schmitz, Ram Vegesna,
	Yihang Li, Don Brace, HighPoint Linux Team, Brian King,
	Kashyap Desai, Sumit Saxena, Shivasharan S, Chandrakanth patil,
	Jack Wang, Junrui Luo, Kees Cook, Dave Jiang, Giovanni Cabiddu,
	Bjorn Helgaas, Lukas Wunner, Sebastian Andrzej Siewior,
	Thomas Gleixner, Duoming Zhou, linux-scsi, linux-kernel,
	target-devel, storagedev, megaraidlinux.pdl,
	Markus Schneider-Pargmann

[-- Attachment #1: Type: text/plain, Size: 1919 bytes --]

On Tue, Jun 09, 2026 at 05:34:40PM +0200, Uwe Kleine-König (The Capable Hub) wrote:
> [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?

Hmm, it seems it isn't? Who is the right person to prod?

FTR: The patch still applies fine to next-20260716.

Best regards
Uwe

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] scsi: Consistently define pci_device_ids using named initializers
  2026-07-17 10:00   ` Uwe Kleine-König (The Capable Hub)
@ 2026-07-17 10:04     ` Sebastian Andrzej Siewior
  0 siblings, 0 replies; 4+ messages in thread
From: Sebastian Andrzej Siewior @ 2026-07-17 10:04 UTC (permalink / raw)
  To: Uwe Kleine-König (The Capable Hub)
  Cc: James E.J. Bottomley, Martin K. Petersen, Adam Radford,
	Adaptec OEM Raid Solutions, Matthew Wilcox, Hannes Reinecke,
	Finn Thain, Michael Schmitz, Ram Vegesna, Yihang Li, Don Brace,
	HighPoint Linux Team, Brian King, Kashyap Desai, Sumit Saxena,
	Shivasharan S, Chandrakanth patil, Jack Wang, Junrui Luo,
	Kees Cook, Dave Jiang, Giovanni Cabiddu, Bjorn Helgaas,
	Lukas Wunner, Thomas Gleixner, Duoming Zhou, linux-scsi,
	linux-kernel, target-devel, storagedev, megaraidlinux.pdl,
	Markus Schneider-Pargmann

On 2026-07-17 12:00:27 [+0200], Uwe Kleine-König (The Capable Hub) wrote:
> Hmm, it seems it isn't? Who is the right person to prod?

James and Martin are the right ones. I suggest to repost.

> Best regards
> Uwe

Sebastian

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-07-17 10:04 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-29 10:18 [PATCH] scsi: Consistently define pci_device_ids using named initializers Uwe Kleine-König (The Capable Hub)
2026-06-09 15:34 ` Uwe Kleine-König (The Capable Hub)
2026-07-17 10:00   ` Uwe Kleine-König (The Capable Hub)
2026-07-17 10:04     ` Sebastian Andrzej Siewior

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox