in intel-qep.c [392:443]
static int intel_qep_probe(struct pci_dev *pci, const struct pci_device_id *id)
{
struct counter_device *counter;
struct intel_qep *qep;
struct device *dev = &pci->dev;
void __iomem *regs;
int ret;
counter = devm_counter_alloc(dev, sizeof(*qep));
if (!counter)
return -ENOMEM;
qep = counter_priv(counter);
ret = pcim_enable_device(pci);
if (ret)
return ret;
pci_set_master(pci);
ret = pcim_iomap_regions(pci, BIT(0), pci_name(pci));
if (ret)
return ret;
regs = pcim_iomap_table(pci)[0];
if (!regs)
return -ENOMEM;
qep->dev = dev;
qep->regs = regs;
mutex_init(&qep->lock);
intel_qep_init(qep);
pci_set_drvdata(pci, qep);
counter->name = pci_name(pci);
counter->parent = dev;
counter->ops = &intel_qep_counter_ops;
counter->counts = intel_qep_counter_count;
counter->num_counts = ARRAY_SIZE(intel_qep_counter_count);
counter->signals = intel_qep_signals;
counter->num_signals = ARRAY_SIZE(intel_qep_signals);
qep->enabled = false;
pm_runtime_put(dev);
pm_runtime_allow(dev);
ret = devm_counter_add(&pci->dev, counter);
if (ret < 0)
return dev_err_probe(&pci->dev, ret, "Failed to add counter\n");
return 0;
}