mfd: intel-m10-bmc: Split into core and spi specific parts
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
This commit is contained in:
Родитель
85ba469090
Коммит
603aed8ffd
|
@ -10576,7 +10576,7 @@ S: Maintained
|
||||||
F: Documentation/ABI/testing/sysfs-driver-intel-m10-bmc
|
F: Documentation/ABI/testing/sysfs-driver-intel-m10-bmc
|
||||||
F: Documentation/hwmon/intel-m10-bmc-hwmon.rst
|
F: Documentation/hwmon/intel-m10-bmc-hwmon.rst
|
||||||
F: drivers/hwmon/intel-m10-bmc-hwmon.c
|
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
|
F: include/linux/mfd/intel-m10-bmc.h
|
||||||
|
|
||||||
INTEL MENLOW THERMAL DRIVER
|
INTEL MENLOW THERMAL DRIVER
|
||||||
|
|
|
@ -246,7 +246,7 @@ config FPGA_MGR_VERSAL_FPGA
|
||||||
|
|
||||||
config FPGA_M10_BMC_SEC_UPDATE
|
config FPGA_M10_BMC_SEC_UPDATE
|
||||||
tristate "Intel MAX10 BMC Secure Update driver"
|
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_LOADER
|
||||||
select FW_UPLOAD
|
select FW_UPLOAD
|
||||||
help
|
help
|
||||||
|
|
|
@ -2341,7 +2341,7 @@ config SENSORS_XGENE
|
||||||
|
|
||||||
config SENSORS_INTEL_M10_BMC_HWMON
|
config SENSORS_INTEL_M10_BMC_HWMON
|
||||||
tristate "Intel MAX10 BMC Hardware Monitoring"
|
tristate "Intel MAX10 BMC Hardware Monitoring"
|
||||||
depends on MFD_INTEL_M10_BMC
|
depends on MFD_INTEL_M10_BMC_CORE
|
||||||
help
|
help
|
||||||
This driver provides support for the hardware monitoring functionality
|
This driver provides support for the hardware monitoring functionality
|
||||||
on Intel MAX10 BMC chip.
|
on Intel MAX10 BMC chip.
|
||||||
|
|
|
@ -2224,18 +2224,24 @@ config SGI_MFD_IOC3
|
||||||
If you have an SGI Origin, Octane, or a PCI IOC3 card,
|
If you have an SGI Origin, Octane, or a PCI IOC3 card,
|
||||||
then say Y. Otherwise say N.
|
then say Y. Otherwise say N.
|
||||||
|
|
||||||
config MFD_INTEL_M10_BMC
|
config MFD_INTEL_M10_BMC_CORE
|
||||||
tristate "Intel MAX 10 Board Management Controller"
|
tristate
|
||||||
depends on SPI_MASTER
|
select MFD_CORE
|
||||||
select REGMAP_SPI_AVMM
|
select REGMAP
|
||||||
select MFD_CORE
|
default n
|
||||||
help
|
|
||||||
Support for the Intel MAX 10 board management controller using the
|
|
||||||
SPI interface.
|
|
||||||
|
|
||||||
This driver provides common support for accessing the device,
|
config MFD_INTEL_M10_BMC_SPI
|
||||||
additional drivers must be enabled in order to use the functionality
|
tristate "Intel MAX 10 Board Management Controller with SPI"
|
||||||
of the device.
|
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
|
config MFD_RSMU_I2C
|
||||||
tristate "Renesas Synchronization Management Unit with I2C"
|
tristate "Renesas Synchronization Management Unit with I2C"
|
||||||
|
|
|
@ -269,7 +269,9 @@ obj-$(CONFIG_MFD_QCOM_PM8008) += qcom-pm8008.o
|
||||||
obj-$(CONFIG_SGI_MFD_IOC3) += ioc3.o
|
obj-$(CONFIG_SGI_MFD_IOC3) += ioc3.o
|
||||||
obj-$(CONFIG_MFD_SIMPLE_MFD_I2C) += simple-mfd-i2c.o
|
obj-$(CONFIG_MFD_SIMPLE_MFD_I2C) += simple-mfd-i2c.o
|
||||||
obj-$(CONFIG_MFD_SMPRO) += smpro-core.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) += atc260x-core.o
|
||||||
obj-$(CONFIG_MFD_ATC260X_I2C) += atc260x-i2c.o
|
obj-$(CONFIG_MFD_ATC260X_I2C) += atc260x-i2c.o
|
||||||
|
|
|
@ -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");
|
|
@ -5,29 +5,14 @@
|
||||||
* Copyright (C) 2018-2020 Intel Corporation. All rights reserved.
|
* Copyright (C) 2018-2020 Intel Corporation. All rights reserved.
|
||||||
*/
|
*/
|
||||||
#include <linux/bitfield.h>
|
#include <linux/bitfield.h>
|
||||||
|
#include <linux/dev_printk.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/mfd/core.h>
|
#include <linux/mfd/core.h>
|
||||||
#include <linux/mfd/intel-m10-bmc.h>
|
#include <linux/mfd/intel-m10-bmc.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/mutex.h>
|
|
||||||
#include <linux/regmap.h>
|
#include <linux/regmap.h>
|
||||||
#include <linux/spi/spi.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[] = {
|
static const struct regmap_range m10bmc_regmap_range[] = {
|
||||||
regmap_reg_range(M10BMC_LEGACY_BUILD_VER, M10BMC_LEGACY_BUILD_VER),
|
regmap_reg_range(M10BMC_LEGACY_BUILD_VER, M10BMC_LEGACY_BUILD_VER),
|
||||||
regmap_reg_range(M10BMC_SYS_BASE, M10BMC_SYS_END),
|
regmap_reg_range(M10BMC_SYS_BASE, M10BMC_SYS_END),
|
||||||
|
@ -48,86 +33,6 @@ static struct regmap_config intel_m10bmc_regmap_config = {
|
||||||
.max_register = M10BMC_MEM_END,
|
.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)
|
static int check_m10bmc_version(struct intel_m10bmc *ddata)
|
||||||
{
|
{
|
||||||
unsigned int v;
|
unsigned int v;
|
||||||
|
@ -166,11 +71,9 @@ static int intel_m10_bmc_spi_probe(struct spi_device *spi)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
info = (struct intel_m10bmc_platform_info *)id->driver_data;
|
info = (struct intel_m10bmc_platform_info *)id->driver_data;
|
||||||
ddata->info = info;
|
|
||||||
ddata->dev = dev;
|
ddata->dev = dev;
|
||||||
|
|
||||||
ddata->regmap =
|
ddata->regmap = devm_regmap_init_spi_avmm(spi, &intel_m10bmc_regmap_config);
|
||||||
devm_regmap_init_spi_avmm(spi, &intel_m10bmc_regmap_config);
|
|
||||||
if (IS_ERR(ddata->regmap)) {
|
if (IS_ERR(ddata->regmap)) {
|
||||||
ret = PTR_ERR(ddata->regmap);
|
ret = PTR_ERR(ddata->regmap);
|
||||||
dev_err(dev, "Failed to allocate regmap: %d\n", ret);
|
dev_err(dev, "Failed to allocate regmap: %d\n", ret);
|
||||||
|
@ -185,15 +88,24 @@ static int intel_m10_bmc_spi_probe(struct spi_device *spi)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = devm_mfd_add_devices(dev, PLATFORM_DEVID_AUTO,
|
return m10bmc_dev_init(ddata, info);
|
||||||
info->cells, info->n_cells,
|
|
||||||
NULL, 0, NULL);
|
|
||||||
if (ret)
|
|
||||||
dev_err(dev, "Failed to register sub-devices: %d\n", ret);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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 = {
|
static const struct intel_m10bmc_platform_info m10bmc_spi_n3000 = {
|
||||||
.cells = m10bmc_pacn3000_subdevs,
|
.cells = m10bmc_pacn3000_subdevs,
|
||||||
.n_cells = ARRAY_SIZE(m10bmc_pacn3000_subdevs),
|
.n_cells = ARRAY_SIZE(m10bmc_pacn3000_subdevs),
|
||||||
|
@ -220,14 +132,14 @@ MODULE_DEVICE_TABLE(spi, m10bmc_spi_id);
|
||||||
static struct spi_driver intel_m10bmc_spi_driver = {
|
static struct spi_driver intel_m10bmc_spi_driver = {
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "intel-m10-bmc",
|
.name = "intel-m10-bmc",
|
||||||
.dev_groups = m10bmc_groups,
|
.dev_groups = m10bmc_dev_groups,
|
||||||
},
|
},
|
||||||
.probe = intel_m10_bmc_spi_probe,
|
.probe = intel_m10_bmc_spi_probe,
|
||||||
.id_table = m10bmc_spi_id,
|
.id_table = m10bmc_spi_id,
|
||||||
};
|
};
|
||||||
module_spi_driver(intel_m10bmc_spi_driver);
|
module_spi_driver(intel_m10bmc_spi_driver);
|
||||||
|
|
||||||
MODULE_DESCRIPTION("Intel MAX 10 BMC Device Driver");
|
MODULE_DESCRIPTION("Intel MAX 10 BMC SPI bus interface");
|
||||||
MODULE_AUTHOR("Intel Corporation");
|
MODULE_AUTHOR("Intel Corporation");
|
||||||
MODULE_LICENSE("GPL v2");
|
MODULE_LICENSE("GPL v2");
|
||||||
MODULE_ALIAS("spi:intel-m10-bmc");
|
MODULE_ALIAS("spi:intel-m10-bmc");
|
|
@ -174,4 +174,10 @@ m10bmc_raw_read(struct intel_m10bmc *m10bmc, unsigned int addr,
|
||||||
#define m10bmc_sys_read(m10bmc, offset, val) \
|
#define m10bmc_sys_read(m10bmc, offset, val) \
|
||||||
m10bmc_raw_read(m10bmc, M10BMC_SYS_BASE + (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 */
|
#endif /* __MFD_INTEL_M10_BMC_H */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче