#include <linux/kernel.h>
#include <linux/platform_device.h>
#include <linux/acpi.h>
#include <linux/list.h>
#include <linux/property.h>
#include <linux/mfd/core.h>
#include <linux/pm_runtime.h>
#include <linux/slab.h>
#include <linux/module.h>
#include <linux/irqdomain.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/regulator/consumer.h>
static LIST_HEAD(mfd_of_node_list);
struct mfd_of_node_entry { … };
static const struct device_type mfd_dev_type = …;
#if IS_ENABLED(CONFIG_ACPI)
struct match_ids_walk_data { … };
static int match_device_ids(struct acpi_device *adev, void *data)
{ … }
static void mfd_acpi_add_device(const struct mfd_cell *cell,
struct platform_device *pdev)
{ … }
#else
static inline void mfd_acpi_add_device(const struct mfd_cell *cell,
struct platform_device *pdev)
{
}
#endif
static int mfd_match_of_node_to_dev(struct platform_device *pdev,
struct device_node *np,
const struct mfd_cell *cell)
{ … }
static int mfd_add_device(struct device *parent, int id,
const struct mfd_cell *cell,
struct resource *mem_base,
int irq_base, struct irq_domain *domain)
{ … }
int mfd_add_devices(struct device *parent, int id,
const struct mfd_cell *cells, int n_devs,
struct resource *mem_base,
int irq_base, struct irq_domain *domain)
{ … }
EXPORT_SYMBOL(…);
static int mfd_remove_devices_fn(struct device *dev, void *data)
{ … }
void mfd_remove_devices_late(struct device *parent)
{ … }
EXPORT_SYMBOL(…);
void mfd_remove_devices(struct device *parent)
{ … }
EXPORT_SYMBOL(…);
static void devm_mfd_dev_release(struct device *dev, void *res)
{ … }
int devm_mfd_add_devices(struct device *dev, int id,
const struct mfd_cell *cells, int n_devs,
struct resource *mem_base,
int irq_base, struct irq_domain *domain)
{ … }
EXPORT_SYMBOL(…);
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;