mfd: intel-m10-bmc: Split into core and spi specific parts
authorIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Mon, 16 Jan 2023 10:08:38 +0000 (12:08 +0200)
committerLee Jones <lee@kernel.org>
Fri, 27 Jan 2023 10:35:00 +0000 (10:35 +0000)
Split the common code from intel-m10-bmc driver into intel-m10-bmc-core
and move the SPI bus parts into an interface specific file.

intel-m10-bmc-core becomes the core MFD functions which can support
multiple bus interface like SPI bus.

Co-developed-by: Tianfei zhang <tianfei.zhang@intel.com>
Signed-off-by: Tianfei zhang <tianfei.zhang@intel.com>
Reviewed-by: Russ Weight <russell.h.weight@intel.com>
Acked-by: Guenter Roeck <linux@roeck-us.net> # hwmon
Reviewed-by: Xu Yilun <yilun.xu@intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Lee Jones <lee@kernel.org>
Link: https://lore.kernel.org/r/20230116100845.6153-5-ilpo.jarvinen@linux.intel.com
MAINTAINERS
drivers/fpga/Kconfig
drivers/hwmon/Kconfig
drivers/mfd/Kconfig
drivers/mfd/Makefile
drivers/mfd/intel-m10-bmc-core.c [new file with mode: 0644]
drivers/mfd/intel-m10-bmc-spi.c [new file with mode: 0644]
drivers/mfd/intel-m10-bmc.c [deleted file]
include/linux/mfd/intel-m10-bmc.h

index f61eb221415bd490a4b29945bc284b313562721f..261c1dc793bc825cdc07c26b1ad3c49c68b6758d 100644 (file)
@@ -10576,7 +10576,7 @@ S:      Maintained
 F:     Documentation/ABI/testing/sysfs-driver-intel-m10-bmc
 F:     Documentation/hwmon/intel-m10-bmc-hwmon.rst
 F:     drivers/hwmon/intel-m10-bmc-hwmon.c
-F:     drivers/mfd/intel-m10-bmc.c
+F:     drivers/mfd/intel-m10-bmc*
 F:     include/linux/mfd/intel-m10-bmc.h
 
 INTEL MENLOW THERMAL DRIVER
index 6ce143dafd049540a81b5dc57048b9a1dda8778a..0a00763b9f28a8f2643ce53cbf35a2388e93b493 100644 (file)
@@ -246,7 +246,7 @@ config FPGA_MGR_VERSAL_FPGA
 
 config FPGA_M10_BMC_SEC_UPDATE
        tristate "Intel MAX10 BMC Secure Update driver"
-       depends on MFD_INTEL_M10_BMC
+       depends on MFD_INTEL_M10_BMC_CORE
        select FW_LOADER
        select FW_UPLOAD
        help
index 3176c33af6c699d1d8390f2f1c26508c5816468e..42c28e887df38d93b13768363bb578812dc765c1 100644 (file)
@@ -2341,7 +2341,7 @@ config SENSORS_XGENE
 
 config SENSORS_INTEL_M10_BMC_HWMON
        tristate "Intel MAX10 BMC Hardware Monitoring"
-       depends on MFD_INTEL_M10_BMC
+       depends on MFD_INTEL_M10_BMC_CORE
        help
          This driver provides support for the hardware monitoring functionality
          on Intel MAX10 BMC chip.
index 30db49f3186680ae02892295a30e3d857fae7dfe..b6ab85831cde86de6879899a1481ff2d29bcde42 100644 (file)
@@ -2224,18 +2224,24 @@ config SGI_MFD_IOC3
          If you have an SGI Origin, Octane, or a PCI IOC3 card,
          then say Y. Otherwise say N.
 
-config MFD_INTEL_M10_BMC
-       tristate "Intel MAX 10 Board Management Controller"
-       depends on SPI_MASTER
-       select REGMAP_SPI_AVMM
-       select MFD_CORE
-       help
-         Support for the Intel MAX 10 board management controller using the
-         SPI interface.
-
-         This driver provides common support for accessing the device,
-         additional drivers must be enabled in order to use the functionality
-         of the device.
+config MFD_INTEL_M10_BMC_CORE
+        tristate
+        select MFD_CORE
+        select REGMAP
+        default n
+
+config MFD_INTEL_M10_BMC_SPI
+        tristate "Intel MAX 10 Board Management Controller with SPI"
+        depends on SPI_MASTER
+        select MFD_INTEL_M10_BMC_CORE
+        select REGMAP_SPI_AVMM
+        help
+          Support for the Intel MAX 10 board management controller using the
+          SPI interface.
+
+          This driver provides common support for accessing the device,
+          additional drivers must be enabled in order to use the functionality
+          of the device.
 
 config MFD_RSMU_I2C
        tristate "Renesas Synchronization Management Unit with I2C"
index 457471478a9379a6a9b06421d8041f3737f4b2f6..b360b29150b556add3155a4a5ebb6968ea6b907d 100644 (file)
@@ -269,7 +269,9 @@ obj-$(CONFIG_MFD_QCOM_PM8008)       += qcom-pm8008.o
 obj-$(CONFIG_SGI_MFD_IOC3)     += ioc3.o
 obj-$(CONFIG_MFD_SIMPLE_MFD_I2C)       += simple-mfd-i2c.o
 obj-$(CONFIG_MFD_SMPRO)                += smpro-core.o
-obj-$(CONFIG_MFD_INTEL_M10_BMC)   += intel-m10-bmc.o
+
+obj-$(CONFIG_MFD_INTEL_M10_BMC_CORE)   += intel-m10-bmc-core.o
+obj-$(CONFIG_MFD_INTEL_M10_BMC_SPI)    += intel-m10-bmc-spi.o
 
 obj-$(CONFIG_MFD_ATC260X)      += atc260x-core.o
 obj-$(CONFIG_MFD_ATC260X_I2C)  += atc260x-i2c.o
diff --git a/drivers/mfd/intel-m10-bmc-core.c b/drivers/mfd/intel-m10-bmc-core.c
new file mode 100644 (file)
index 0000000..dd26e3a
--- /dev/null
@@ -0,0 +1,122 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Intel MAX 10 Board Management Controller chip - common code
+ *
+ * Copyright (C) 2018-2020 Intel Corporation. All rights reserved.
+ */
+
+#include <linux/bitfield.h>
+#include <linux/device.h>
+#include <linux/dev_printk.h>
+#include <linux/mfd/core.h>
+#include <linux/mfd/intel-m10-bmc.h>
+#include <linux/module.h>
+
+static ssize_t bmc_version_show(struct device *dev,
+                               struct device_attribute *attr, char *buf)
+{
+       struct intel_m10bmc *ddata = dev_get_drvdata(dev);
+       unsigned int val;
+       int ret;
+
+       ret = m10bmc_sys_read(ddata, M10BMC_BUILD_VER, &val);
+       if (ret)
+               return ret;
+
+       return sprintf(buf, "0x%x\n", val);
+}
+static DEVICE_ATTR_RO(bmc_version);
+
+static ssize_t bmcfw_version_show(struct device *dev,
+                                 struct device_attribute *attr, char *buf)
+{
+       struct intel_m10bmc *ddata = dev_get_drvdata(dev);
+       unsigned int val;
+       int ret;
+
+       ret = m10bmc_sys_read(ddata, NIOS2_FW_VERSION, &val);
+       if (ret)
+               return ret;
+
+       return sprintf(buf, "0x%x\n", val);
+}
+static DEVICE_ATTR_RO(bmcfw_version);
+
+static ssize_t mac_address_show(struct device *dev,
+                               struct device_attribute *attr, char *buf)
+{
+       struct intel_m10bmc *ddata = dev_get_drvdata(dev);
+       unsigned int macaddr_low, macaddr_high;
+       int ret;
+
+       ret = m10bmc_sys_read(ddata, M10BMC_MAC_LOW, &macaddr_low);
+       if (ret)
+               return ret;
+
+       ret = m10bmc_sys_read(ddata, M10BMC_MAC_HIGH, &macaddr_high);
+       if (ret)
+               return ret;
+
+       return sysfs_emit(buf, "%02x:%02x:%02x:%02x:%02x:%02x\n",
+                         (u8)FIELD_GET(M10BMC_MAC_BYTE1, macaddr_low),
+                         (u8)FIELD_GET(M10BMC_MAC_BYTE2, macaddr_low),
+                         (u8)FIELD_GET(M10BMC_MAC_BYTE3, macaddr_low),
+                         (u8)FIELD_GET(M10BMC_MAC_BYTE4, macaddr_low),
+                         (u8)FIELD_GET(M10BMC_MAC_BYTE5, macaddr_high),
+                         (u8)FIELD_GET(M10BMC_MAC_BYTE6, macaddr_high));
+}
+static DEVICE_ATTR_RO(mac_address);
+
+static ssize_t mac_count_show(struct device *dev,
+                             struct device_attribute *attr, char *buf)
+{
+       struct intel_m10bmc *ddata = dev_get_drvdata(dev);
+       unsigned int macaddr_high;
+       int ret;
+
+       ret = m10bmc_sys_read(ddata, M10BMC_MAC_HIGH, &macaddr_high);
+       if (ret)
+               return ret;
+
+       return sysfs_emit(buf, "%u\n", (u8)FIELD_GET(M10BMC_MAC_COUNT, macaddr_high));
+}
+static DEVICE_ATTR_RO(mac_count);
+
+static struct attribute *m10bmc_attrs[] = {
+       &dev_attr_bmc_version.attr,
+       &dev_attr_bmcfw_version.attr,
+       &dev_attr_mac_address.attr,
+       &dev_attr_mac_count.attr,
+       NULL,
+};
+
+static const struct attribute_group m10bmc_group = {
+       .attrs = m10bmc_attrs,
+};
+
+const struct attribute_group *m10bmc_dev_groups[] = {
+       &m10bmc_group,
+       NULL,
+};
+EXPORT_SYMBOL_GPL(m10bmc_dev_groups);
+
+int m10bmc_dev_init(struct intel_m10bmc *m10bmc, const struct intel_m10bmc_platform_info *info)
+{
+       int ret;
+
+       m10bmc->info = info;
+       dev_set_drvdata(m10bmc->dev, m10bmc);
+
+       ret = devm_mfd_add_devices(m10bmc->dev, PLATFORM_DEVID_AUTO,
+                                  info->cells, info->n_cells,
+                                  NULL, 0, NULL);
+       if (ret)
+               dev_err(m10bmc->dev, "Failed to register sub-devices: %d\n", ret);
+
+       return ret;
+}
+EXPORT_SYMBOL_GPL(m10bmc_dev_init);
+
+MODULE_DESCRIPTION("Intel MAX 10 BMC core driver");
+MODULE_AUTHOR("Intel Corporation");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/mfd/intel-m10-bmc-spi.c b/drivers/mfd/intel-m10-bmc-spi.c
new file mode 100644 (file)
index 0000000..be1d4dd
--- /dev/null
@@ -0,0 +1,145 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Intel MAX 10 Board Management Controller chip
+ *
+ * Copyright (C) 2018-2020 Intel Corporation. All rights reserved.
+ */
+#include <linux/bitfield.h>
+#include <linux/dev_printk.h>
+#include <linux/init.h>
+#include <linux/mfd/core.h>
+#include <linux/mfd/intel-m10-bmc.h>
+#include <linux/module.h>
+#include <linux/regmap.h>
+#include <linux/spi/spi.h>
+
+static const struct regmap_range m10bmc_regmap_range[] = {
+       regmap_reg_range(M10BMC_LEGACY_BUILD_VER, M10BMC_LEGACY_BUILD_VER),
+       regmap_reg_range(M10BMC_SYS_BASE, M10BMC_SYS_END),
+       regmap_reg_range(M10BMC_FLASH_BASE, M10BMC_FLASH_END),
+};
+
+static const struct regmap_access_table m10bmc_access_table = {
+       .yes_ranges     = m10bmc_regmap_range,
+       .n_yes_ranges   = ARRAY_SIZE(m10bmc_regmap_range),
+};
+
+static struct regmap_config intel_m10bmc_regmap_config = {
+       .reg_bits = 32,
+       .val_bits = 32,
+       .reg_stride = 4,
+       .wr_table = &m10bmc_access_table,
+       .rd_table = &m10bmc_access_table,
+       .max_register = M10BMC_MEM_END,
+};
+
+static int check_m10bmc_version(struct intel_m10bmc *ddata)
+{
+       unsigned int v;
+       int ret;
+
+       /*
+        * This check is to filter out the very old legacy BMC versions. In the
+        * old BMC chips, the BMC version info is stored in the old version
+        * register (M10BMC_LEGACY_BUILD_VER), so its read out value would have
+        * not been M10BMC_VER_LEGACY_INVALID (0xffffffff). But in new BMC
+        * chips that the driver supports, the value of this register should be
+        * M10BMC_VER_LEGACY_INVALID.
+        */
+       ret = m10bmc_raw_read(ddata, M10BMC_LEGACY_BUILD_VER, &v);
+       if (ret)
+               return -ENODEV;
+
+       if (v != M10BMC_VER_LEGACY_INVALID) {
+               dev_err(ddata->dev, "bad version M10BMC detected\n");
+               return -ENODEV;
+       }
+
+       return 0;
+}
+
+static int intel_m10_bmc_spi_probe(struct spi_device *spi)
+{
+       const struct spi_device_id *id = spi_get_device_id(spi);
+       const struct intel_m10bmc_platform_info *info;
+       struct device *dev = &spi->dev;
+       struct intel_m10bmc *ddata;
+       int ret;
+
+       ddata = devm_kzalloc(dev, sizeof(*ddata), GFP_KERNEL);
+       if (!ddata)
+               return -ENOMEM;
+
+       info = (struct intel_m10bmc_platform_info *)id->driver_data;
+       ddata->dev = dev;
+
+       ddata->regmap = devm_regmap_init_spi_avmm(spi, &intel_m10bmc_regmap_config);
+       if (IS_ERR(ddata->regmap)) {
+               ret = PTR_ERR(ddata->regmap);
+               dev_err(dev, "Failed to allocate regmap: %d\n", ret);
+               return ret;
+       }
+
+       spi_set_drvdata(spi, ddata);
+
+       ret = check_m10bmc_version(ddata);
+       if (ret) {
+               dev_err(dev, "Failed to identify m10bmc hardware\n");
+               return ret;
+       }
+
+       return m10bmc_dev_init(ddata, info);
+}
+
+static struct mfd_cell m10bmc_d5005_subdevs[] = {
+       { .name = "d5005bmc-hwmon" },
+       { .name = "d5005bmc-sec-update" },
+};
+
+static struct mfd_cell m10bmc_pacn3000_subdevs[] = {
+       { .name = "n3000bmc-hwmon" },
+       { .name = "n3000bmc-retimer" },
+       { .name = "n3000bmc-sec-update" },
+};
+
+static struct mfd_cell m10bmc_n5010_subdevs[] = {
+       { .name = "n5010bmc-hwmon" },
+};
+
+static const struct intel_m10bmc_platform_info m10bmc_spi_n3000 = {
+       .cells = m10bmc_pacn3000_subdevs,
+       .n_cells = ARRAY_SIZE(m10bmc_pacn3000_subdevs),
+};
+
+static const struct intel_m10bmc_platform_info m10bmc_spi_d5005 = {
+       .cells = m10bmc_d5005_subdevs,
+       .n_cells = ARRAY_SIZE(m10bmc_d5005_subdevs),
+};
+
+static const struct intel_m10bmc_platform_info m10bmc_spi_n5010 = {
+       .cells = m10bmc_n5010_subdevs,
+       .n_cells = ARRAY_SIZE(m10bmc_n5010_subdevs),
+};
+
+static const struct spi_device_id m10bmc_spi_id[] = {
+       { "m10-n3000", (kernel_ulong_t)&m10bmc_spi_n3000 },
+       { "m10-d5005", (kernel_ulong_t)&m10bmc_spi_d5005 },
+       { "m10-n5010", (kernel_ulong_t)&m10bmc_spi_n5010 },
+       { }
+};
+MODULE_DEVICE_TABLE(spi, m10bmc_spi_id);
+
+static struct spi_driver intel_m10bmc_spi_driver = {
+       .driver = {
+               .name = "intel-m10-bmc",
+               .dev_groups = m10bmc_dev_groups,
+       },
+       .probe = intel_m10_bmc_spi_probe,
+       .id_table = m10bmc_spi_id,
+};
+module_spi_driver(intel_m10bmc_spi_driver);
+
+MODULE_DESCRIPTION("Intel MAX 10 BMC SPI bus interface");
+MODULE_AUTHOR("Intel Corporation");
+MODULE_LICENSE("GPL v2");
+MODULE_ALIAS("spi:intel-m10-bmc");
diff --git a/drivers/mfd/intel-m10-bmc.c b/drivers/mfd/intel-m10-bmc.c
deleted file mode 100644 (file)
index 2c26203..0000000
+++ /dev/null
@@ -1,233 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * Intel MAX 10 Board Management Controller chip
- *
- * Copyright (C) 2018-2020 Intel Corporation. All rights reserved.
- */
-#include <linux/bitfield.h>
-#include <linux/init.h>
-#include <linux/mfd/core.h>
-#include <linux/mfd/intel-m10-bmc.h>
-#include <linux/module.h>
-#include <linux/mutex.h>
-#include <linux/regmap.h>
-#include <linux/spi/spi.h>
-
-static struct mfd_cell m10bmc_d5005_subdevs[] = {
-       { .name = "d5005bmc-hwmon" },
-       { .name = "d5005bmc-sec-update" }
-};
-
-static struct mfd_cell m10bmc_pacn3000_subdevs[] = {
-       { .name = "n3000bmc-hwmon" },
-       { .name = "n3000bmc-retimer" },
-       { .name = "n3000bmc-sec-update" },
-};
-
-static struct mfd_cell m10bmc_n5010_subdevs[] = {
-       { .name = "n5010bmc-hwmon" },
-};
-
-static const struct regmap_range m10bmc_regmap_range[] = {
-       regmap_reg_range(M10BMC_LEGACY_BUILD_VER, M10BMC_LEGACY_BUILD_VER),
-       regmap_reg_range(M10BMC_SYS_BASE, M10BMC_SYS_END),
-       regmap_reg_range(M10BMC_FLASH_BASE, M10BMC_FLASH_END),
-};
-
-static const struct regmap_access_table m10bmc_access_table = {
-       .yes_ranges     = m10bmc_regmap_range,
-       .n_yes_ranges   = ARRAY_SIZE(m10bmc_regmap_range),
-};
-
-static struct regmap_config intel_m10bmc_regmap_config = {
-       .reg_bits = 32,
-       .val_bits = 32,
-       .reg_stride = 4,
-       .wr_table = &m10bmc_access_table,
-       .rd_table = &m10bmc_access_table,
-       .max_register = M10BMC_MEM_END,
-};
-
-static ssize_t bmc_version_show(struct device *dev,
-                               struct device_attribute *attr, char *buf)
-{
-       struct intel_m10bmc *ddata = dev_get_drvdata(dev);
-       unsigned int val;
-       int ret;
-
-       ret = m10bmc_sys_read(ddata, M10BMC_BUILD_VER, &val);
-       if (ret)
-               return ret;
-
-       return sprintf(buf, "0x%x\n", val);
-}
-static DEVICE_ATTR_RO(bmc_version);
-
-static ssize_t bmcfw_version_show(struct device *dev,
-                                 struct device_attribute *attr, char *buf)
-{
-       struct intel_m10bmc *ddata = dev_get_drvdata(dev);
-       unsigned int val;
-       int ret;
-
-       ret = m10bmc_sys_read(ddata, NIOS2_FW_VERSION, &val);
-       if (ret)
-               return ret;
-
-       return sprintf(buf, "0x%x\n", val);
-}
-static DEVICE_ATTR_RO(bmcfw_version);
-
-static ssize_t mac_address_show(struct device *dev,
-                               struct device_attribute *attr, char *buf)
-{
-       struct intel_m10bmc *ddata = dev_get_drvdata(dev);
-       unsigned int macaddr_low, macaddr_high;
-       int ret;
-
-       ret = m10bmc_sys_read(ddata, M10BMC_MAC_LOW, &macaddr_low);
-       if (ret)
-               return ret;
-
-       ret = m10bmc_sys_read(ddata, M10BMC_MAC_HIGH, &macaddr_high);
-       if (ret)
-               return ret;
-
-       return sysfs_emit(buf, "%02x:%02x:%02x:%02x:%02x:%02x\n",
-                         (u8)FIELD_GET(M10BMC_MAC_BYTE1, macaddr_low),
-                         (u8)FIELD_GET(M10BMC_MAC_BYTE2, macaddr_low),
-                         (u8)FIELD_GET(M10BMC_MAC_BYTE3, macaddr_low),
-                         (u8)FIELD_GET(M10BMC_MAC_BYTE4, macaddr_low),
-                         (u8)FIELD_GET(M10BMC_MAC_BYTE5, macaddr_high),
-                         (u8)FIELD_GET(M10BMC_MAC_BYTE6, macaddr_high));
-}
-static DEVICE_ATTR_RO(mac_address);
-
-static ssize_t mac_count_show(struct device *dev,
-                             struct device_attribute *attr, char *buf)
-{
-       struct intel_m10bmc *ddata = dev_get_drvdata(dev);
-       unsigned int macaddr_high;
-       int ret;
-
-       ret = m10bmc_sys_read(ddata, M10BMC_MAC_HIGH, &macaddr_high);
-       if (ret)
-               return ret;
-
-       return sysfs_emit(buf, "%u\n",
-                         (u8)FIELD_GET(M10BMC_MAC_COUNT, macaddr_high));
-}
-static DEVICE_ATTR_RO(mac_count);
-
-static struct attribute *m10bmc_attrs[] = {
-       &dev_attr_bmc_version.attr,
-       &dev_attr_bmcfw_version.attr,
-       &dev_attr_mac_address.attr,
-       &dev_attr_mac_count.attr,
-       NULL,
-};
-ATTRIBUTE_GROUPS(m10bmc);
-
-static int check_m10bmc_version(struct intel_m10bmc *ddata)
-{
-       unsigned int v;
-       int ret;
-
-       /*
-        * This check is to filter out the very old legacy BMC versions. In the
-        * old BMC chips, the BMC version info is stored in the old version
-        * register (M10BMC_LEGACY_BUILD_VER), so its read out value would have
-        * not been M10BMC_VER_LEGACY_INVALID (0xffffffff). But in new BMC
-        * chips that the driver supports, the value of this register should be
-        * M10BMC_VER_LEGACY_INVALID.
-        */
-       ret = m10bmc_raw_read(ddata, M10BMC_LEGACY_BUILD_VER, &v);
-       if (ret)
-               return -ENODEV;
-
-       if (v != M10BMC_VER_LEGACY_INVALID) {
-               dev_err(ddata->dev, "bad version M10BMC detected\n");
-               return -ENODEV;
-       }
-
-       return 0;
-}
-
-static int intel_m10_bmc_spi_probe(struct spi_device *spi)
-{
-       const struct spi_device_id *id = spi_get_device_id(spi);
-       const struct intel_m10bmc_platform_info *info;
-       struct device *dev = &spi->dev;
-       struct intel_m10bmc *ddata;
-       int ret;
-
-       ddata = devm_kzalloc(dev, sizeof(*ddata), GFP_KERNEL);
-       if (!ddata)
-               return -ENOMEM;
-
-       info = (struct intel_m10bmc_platform_info *)id->driver_data;
-       ddata->info = info;
-       ddata->dev = dev;
-
-       ddata->regmap =
-               devm_regmap_init_spi_avmm(spi, &intel_m10bmc_regmap_config);
-       if (IS_ERR(ddata->regmap)) {
-               ret = PTR_ERR(ddata->regmap);
-               dev_err(dev, "Failed to allocate regmap: %d\n", ret);
-               return ret;
-       }
-
-       spi_set_drvdata(spi, ddata);
-
-       ret = check_m10bmc_version(ddata);
-       if (ret) {
-               dev_err(dev, "Failed to identify m10bmc hardware\n");
-               return ret;
-       }
-
-       ret = devm_mfd_add_devices(dev, PLATFORM_DEVID_AUTO,
-                                  info->cells, info->n_cells,
-                                  NULL, 0, NULL);
-       if (ret)
-               dev_err(dev, "Failed to register sub-devices: %d\n", ret);
-
-       return ret;
-}
-
-static const struct intel_m10bmc_platform_info m10bmc_spi_n3000 = {
-       .cells = m10bmc_pacn3000_subdevs,
-       .n_cells = ARRAY_SIZE(m10bmc_pacn3000_subdevs),
-};
-
-static const struct intel_m10bmc_platform_info m10bmc_spi_d5005 = {
-       .cells = m10bmc_d5005_subdevs,
-       .n_cells = ARRAY_SIZE(m10bmc_d5005_subdevs),
-};
-
-static const struct intel_m10bmc_platform_info m10bmc_spi_n5010 = {
-       .cells = m10bmc_n5010_subdevs,
-       .n_cells = ARRAY_SIZE(m10bmc_n5010_subdevs),
-};
-
-static const struct spi_device_id m10bmc_spi_id[] = {
-       { "m10-n3000", (kernel_ulong_t)&m10bmc_spi_n3000 },
-       { "m10-d5005", (kernel_ulong_t)&m10bmc_spi_d5005 },
-       { "m10-n5010", (kernel_ulong_t)&m10bmc_spi_n5010 },
-       { }
-};
-MODULE_DEVICE_TABLE(spi, m10bmc_spi_id);
-
-static struct spi_driver intel_m10bmc_spi_driver = {
-       .driver = {
-               .name = "intel-m10-bmc",
-               .dev_groups = m10bmc_groups,
-       },
-       .probe = intel_m10_bmc_spi_probe,
-       .id_table = m10bmc_spi_id,
-};
-module_spi_driver(intel_m10bmc_spi_driver);
-
-MODULE_DESCRIPTION("Intel MAX 10 BMC Device Driver");
-MODULE_AUTHOR("Intel Corporation");
-MODULE_LICENSE("GPL v2");
-MODULE_ALIAS("spi:intel-m10-bmc");
index f418cad88e643f3322451a238bb4de65931e0f8b..a80deb61b69a59f7f3d31f3400de51ca9ad1a93c 100644 (file)
@@ -174,4 +174,10 @@ m10bmc_raw_read(struct intel_m10bmc *m10bmc, unsigned int addr,
 #define m10bmc_sys_read(m10bmc, offset, val) \
        m10bmc_raw_read(m10bmc, M10BMC_SYS_BASE + (offset), val)
 
+/*
+ * MAX10 BMC Core support
+ */
+int m10bmc_dev_init(struct intel_m10bmc *m10bmc, const struct intel_m10bmc_platform_info *info);
+extern const struct attribute_group *m10bmc_dev_groups[];
+
 #endif /* __MFD_INTEL_M10_BMC_H */