// SPDX-License-Identifier: GPL-2.0 /* Fintek F81601 PCIE to 2 CAN controller driver * * Copyright (C) 2019 Peter Hong <peter_hong@fintek.com.tw> * Copyright (C) 2019 Linux Foundation
*/
/* Probe F81601 based device for the SJA1000 chips and register each * available CAN channel to SJA1000 Socket-CAN subsystem.
*/ staticint f81601_pci_probe(struct pci_dev *pdev, conststruct pci_device_id *ent)
{ struct sja1000_priv *priv; struct net_device *dev; struct f81601_pci_card *card; int err, i, count;
u8 tmp;
if (pcim_enable_device(pdev) < 0) {
dev_err(&pdev->dev, "Failed to enable PCI device\n"); return -ENODEV;
}
dev_info(&pdev->dev, "Detected card at slot #%i\n",
PCI_SLOT(pdev->devfn));
card = devm_kzalloc(&pdev->dev, sizeof(*card), GFP_KERNEL); if (!card) return -ENOMEM;
if (!card->addr) {
err = -ENOMEM;
dev_err(&pdev->dev, "%s: Failed to remap BAR\n", __func__); goto failure_cleanup;
}
/* read CAN2_HW_EN strap pin to detect how many CANBUS do we have */
count = ARRAY_SIZE(card->net_dev);
pci_read_config_byte(pdev, F81601_TRAP_REG, &tmp); if (!(tmp & F81601_CAN2_HAS_EN))
count = 1;
for (i = 0; i < count; i++) {
dev = alloc_sja1000dev(0); if (!dev) {
err = -ENOMEM; goto failure_cleanup;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.