*  All rights reserved.
  */
 
+#include <linux/bitfield.h>
 #include <linux/delay.h>
 #include <media/i2c/adv7604.h>
 #include <media/i2c/adv7842.h>
        pcie_capability_read_word(pci_dev, PCI_EXP_LNKSTA, &stat);
        cobalt_info("PCIe link capability 0x%08x: %s per lane and %u lanes\n",
                        capa, get_link_speed(capa),
-                       (capa & PCI_EXP_LNKCAP_MLW) >> 4);
+                       FIELD_GET(PCI_EXP_LNKCAP_MLW, capa));
        cobalt_info("PCIe link control 0x%04x\n", ctrl);
        cobalt_info("PCIe link status 0x%04x: %s per lane and %u lanes\n",
                    stat, get_link_speed(stat),
-                   (stat & PCI_EXP_LNKSTA_NLW) >> 4);
+                   FIELD_GET(PCI_EXP_LNKSTA_NLW, stat));
 
        /* Bus */
        pcie_capability_read_dword(pci_bus_dev, PCI_EXP_LNKCAP, &capa);
        cobalt_info("PCIe bus link capability 0x%08x: %s per lane and %u lanes\n",
                        capa, get_link_speed(capa),
-                       (capa & PCI_EXP_LNKCAP_MLW) >> 4);
+                       FIELD_GET(PCI_EXP_LNKCAP_MLW, capa));
 
        /* Slot */
        pcie_capability_read_dword(pci_dev, PCI_EXP_SLTCAP, &capa);
        if (!pci_is_pcie(pci_dev))
                return 0;
        pcie_capability_read_word(pci_dev, PCI_EXP_LNKSTA, &link);
-       return (link & PCI_EXP_LNKSTA_NLW) >> 4;
+       return FIELD_GET(PCI_EXP_LNKSTA_NLW, link);
 }
 
 static unsigned pcie_bus_link_get_lanes(struct cobalt *cobalt)
        if (!pci_is_pcie(pci_dev))
                return 0;
        pcie_capability_read_dword(pci_dev, PCI_EXP_LNKCAP, &link);
-       return (link & PCI_EXP_LNKCAP_MLW) >> 4;
+       return FIELD_GET(PCI_EXP_LNKCAP_MLW, link);
 }
 
 static void msi_config_show(struct cobalt *cobalt, struct pci_dev *pci_dev)