mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-11 23:50:25 +00:00
can: peak_pci: Add name and FW version of the card in kernel buffer
This patch adds name and (possibly) firmware version information to the kernel about the detected PEAK-System CAN - PCI/PCIe interface card. Link: https://lore.kernel.org/r/20210607151720.13571-1-s.grosjean@peak-system.com Signed-off-by: Stephane Grosjean <s.grosjean@peak-system.com> [mkl: reformated struct pci_device_id peak_pci_tbl] Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
This commit is contained in:
parent
fe1fa1387a
commit
805ff68c8e
@ -28,6 +28,10 @@ MODULE_LICENSE("GPL v2");
|
||||
|
||||
#define DRV_NAME "peak_pci"
|
||||
|
||||
/* FPGA cards FW version registers */
|
||||
#define PEAK_VER_REG1 0x40
|
||||
#define PEAK_VER_REG2 0x44
|
||||
|
||||
struct peak_pciec_card;
|
||||
struct peak_pci_chan {
|
||||
void __iomem *cfg_base; /* Common for all channels */
|
||||
@ -68,19 +72,41 @@ static const u16 peak_pci_icr_masks[PEAK_PCI_CHAN_MAX] = {
|
||||
};
|
||||
|
||||
static const struct pci_device_id peak_pci_tbl[] = {
|
||||
{PEAK_PCI_VENDOR_ID, PEAK_PCI_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
|
||||
{PEAK_PCI_VENDOR_ID, PEAK_PCIE_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
|
||||
{PEAK_PCI_VENDOR_ID, PEAK_MPCI_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
|
||||
{PEAK_PCI_VENDOR_ID, PEAK_MPCIE_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
|
||||
{PEAK_PCI_VENDOR_ID, PEAK_PC_104P_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
|
||||
{PEAK_PCI_VENDOR_ID, PEAK_PCI_104E_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
|
||||
{PEAK_PCI_VENDOR_ID, PEAK_CPCI_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
|
||||
{PEAK_PCI_VENDOR_ID, PEAK_PCIE_OEM_ID, PCI_ANY_ID, PCI_ANY_ID,},
|
||||
{
|
||||
PEAK_PCI_VENDOR_ID, PEAK_PCI_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,
|
||||
.driver_data = (kernel_ulong_t)"PCAN-PCI",
|
||||
}, {
|
||||
PEAK_PCI_VENDOR_ID, PEAK_PCIE_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,
|
||||
.driver_data = (kernel_ulong_t)"PCAN-PCI Express",
|
||||
}, {
|
||||
PEAK_PCI_VENDOR_ID, PEAK_MPCI_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,
|
||||
.driver_data = (kernel_ulong_t)"PCAN-miniPCI",
|
||||
}, {
|
||||
PEAK_PCI_VENDOR_ID, PEAK_MPCIE_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,
|
||||
.driver_data = (kernel_ulong_t)"PCAN-miniPCIe",
|
||||
}, {
|
||||
PEAK_PCI_VENDOR_ID, PEAK_PC_104P_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,
|
||||
.driver_data = (kernel_ulong_t)"PCAN-PC/104-Plus Quad",
|
||||
}, {
|
||||
PEAK_PCI_VENDOR_ID, PEAK_PCI_104E_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,
|
||||
.driver_data = (kernel_ulong_t)"PCAN-PCI/104-Express",
|
||||
}, {
|
||||
PEAK_PCI_VENDOR_ID, PEAK_CPCI_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,
|
||||
.driver_data = (kernel_ulong_t)"PCAN-cPCI",
|
||||
}, {
|
||||
PEAK_PCI_VENDOR_ID, PEAK_PCIE_OEM_ID, PCI_ANY_ID, PCI_ANY_ID,
|
||||
.driver_data = (kernel_ulong_t)"PCAN-Chip PCIe",
|
||||
},
|
||||
#ifdef CONFIG_CAN_PEAK_PCIEC
|
||||
{PEAK_PCI_VENDOR_ID, PEAK_PCIEC_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
|
||||
{PEAK_PCI_VENDOR_ID, PEAK_PCIEC34_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
|
||||
{
|
||||
PEAK_PCI_VENDOR_ID, PEAK_PCIEC_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,
|
||||
.driver_data = (kernel_ulong_t)"PCAN-ExpressCard",
|
||||
}, {
|
||||
PEAK_PCI_VENDOR_ID, PEAK_PCIEC34_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,
|
||||
.driver_data = (kernel_ulong_t)"PCAN-ExpressCard 34",
|
||||
},
|
||||
#endif
|
||||
{0,}
|
||||
{ /* sentinel */ }
|
||||
};
|
||||
|
||||
MODULE_DEVICE_TABLE(pci, peak_pci_tbl);
|
||||
@ -530,6 +556,7 @@ static int peak_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
void __iomem *cfg_base, *reg_base;
|
||||
u16 sub_sys_id, icr;
|
||||
int i, err, channels;
|
||||
char fw_str[14] = "";
|
||||
|
||||
err = pci_enable_device(pdev);
|
||||
if (err)
|
||||
@ -583,6 +610,21 @@ static int peak_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
/* Leave parport mux mode */
|
||||
writeb(0x04, cfg_base + PITA_MISC + 3);
|
||||
|
||||
/* FPGA equipped card if not 0 */
|
||||
if (readl(cfg_base + PEAK_VER_REG1)) {
|
||||
/* FPGA card: display version of the running firmware */
|
||||
u32 fw_ver = readl(cfg_base + PEAK_VER_REG2);
|
||||
|
||||
snprintf(fw_str, sizeof(fw_str), " FW v%u.%u.%u",
|
||||
(fw_ver >> 12) & 0xf,
|
||||
(fw_ver >> 8) & 0xf,
|
||||
(fw_ver >> 4) & 0xf);
|
||||
}
|
||||
|
||||
/* Display commercial name (and, eventually, FW version) of the card */
|
||||
dev_info(&pdev->dev, "%ux CAN %s%s\n",
|
||||
channels, (const char *)ent->driver_data, fw_str);
|
||||
|
||||
icr = readw(cfg_base + PITA_ICR + 2);
|
||||
|
||||
for (i = 0; i < channels; i++) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user