b8da68f44f
The PCI probe driver in intel_pmc_ipc.c is a duplicate of what we already have in intel_scu_pcidrv.c with the exception that the later also creates SCU specific devices. Move the PCI IDs from the intel_pmc_ipc.c to intel_scu.c and use driver_data to detect whether SCU devices need to be created or not. Also update Kconfig entry to mention all platforms supported by the Intel SCU PCI driver and change dependency from X86_INTEL_MID to PCI which is more generic. Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Lee Jones <lee.jones@linaro.org>
69 lines
1.5 KiB
C
69 lines
1.5 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* PCI driver for the Intel SCU.
|
|
*
|
|
* Copyright (C) 2008-2010, 2015, 2020 Intel Corporation
|
|
* Authors: Sreedhara DS (sreedhara.ds@intel.com)
|
|
* Mika Westerberg <mika.westerberg@linux.intel.com>
|
|
*/
|
|
|
|
#include <linux/errno.h>
|
|
#include <linux/init.h>
|
|
#include <linux/pci.h>
|
|
|
|
#include <asm/intel-mid.h>
|
|
#include <asm/intel_scu_ipc.h>
|
|
|
|
static int intel_scu_pci_probe(struct pci_dev *pdev,
|
|
const struct pci_device_id *id)
|
|
{
|
|
void (*setup_fn)(void) = (void (*)(void))id->driver_data;
|
|
struct intel_scu_ipc_data scu_data = {};
|
|
struct intel_scu_ipc_dev *scu;
|
|
int ret;
|
|
|
|
ret = pcim_enable_device(pdev);
|
|
if (ret)
|
|
return ret;
|
|
|
|
scu_data.mem = pdev->resource[0];
|
|
scu_data.irq = pdev->irq;
|
|
|
|
scu = intel_scu_ipc_register(&pdev->dev, &scu_data);
|
|
if (IS_ERR(scu))
|
|
return PTR_ERR(scu);
|
|
|
|
if (setup_fn)
|
|
setup_fn();
|
|
return 0;
|
|
}
|
|
|
|
static void intel_mid_scu_setup(void)
|
|
{
|
|
intel_scu_devices_create();
|
|
}
|
|
|
|
static const struct pci_device_id pci_ids[] = {
|
|
{ PCI_VDEVICE(INTEL, 0x080e),
|
|
.driver_data = (kernel_ulong_t)intel_mid_scu_setup },
|
|
{ PCI_VDEVICE(INTEL, 0x08ea),
|
|
.driver_data = (kernel_ulong_t)intel_mid_scu_setup },
|
|
{ PCI_VDEVICE(INTEL, 0x0a94) },
|
|
{ PCI_VDEVICE(INTEL, 0x11a0),
|
|
.driver_data = (kernel_ulong_t)intel_mid_scu_setup },
|
|
{ PCI_VDEVICE(INTEL, 0x1a94) },
|
|
{ PCI_VDEVICE(INTEL, 0x5a94) },
|
|
{}
|
|
};
|
|
|
|
static struct pci_driver intel_scu_pci_driver = {
|
|
.driver = {
|
|
.suppress_bind_attrs = true,
|
|
},
|
|
.name = "intel_scu",
|
|
.id_table = pci_ids,
|
|
.probe = intel_scu_pci_probe,
|
|
};
|
|
|
|
builtin_pci_driver(intel_scu_pci_driver);
|