3bed6e415f
Provide basic support for MFDs having multiple cells of a given type with different IDs by adding an id to the mfd_cell structure and then adding that to the id passed in to mfd_add_devices(). As it stands this approach requires that MFDs using this feature deal with ensuring that there aren't any ID collisions resulting from multiple MFDs of the same type being instantiated. This needs to happen with the existing code too, but with this approach there is a knock on effect on the IDs for non-duplicated devices. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
57 lines
1.4 KiB
C
57 lines
1.4 KiB
C
/*
|
|
* drivers/mfd/mfd-core.h
|
|
*
|
|
* core MFD support
|
|
* Copyright (c) 2006 Ian Molton
|
|
* Copyright (c) 2007 Dmitry Baryshkov
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
*/
|
|
|
|
#ifndef MFD_CORE_H
|
|
#define MFD_CORE_H
|
|
|
|
#include <linux/platform_device.h>
|
|
|
|
/*
|
|
* This struct describes the MFD part ("cell").
|
|
* After registration the copy of this structure will become the platform data
|
|
* of the resulting platform_device
|
|
*/
|
|
struct mfd_cell {
|
|
const char *name;
|
|
int id;
|
|
|
|
int (*enable)(struct platform_device *dev);
|
|
int (*disable)(struct platform_device *dev);
|
|
int (*suspend)(struct platform_device *dev);
|
|
int (*resume)(struct platform_device *dev);
|
|
|
|
/* driver-specific data for MFD-aware "cell" drivers */
|
|
void *driver_data;
|
|
|
|
/* platform_data can be used to either pass data to "generic"
|
|
driver or as a hook to mfd_cell for the "cell" drivers */
|
|
void *platform_data;
|
|
size_t data_size;
|
|
|
|
/*
|
|
* This resources can be specified relatievly to the parent device.
|
|
* For accessing device you should use resources from device
|
|
*/
|
|
int num_resources;
|
|
const struct resource *resources;
|
|
};
|
|
|
|
extern int mfd_add_devices(struct device *parent, int id,
|
|
const struct mfd_cell *cells, int n_devs,
|
|
struct resource *mem_base,
|
|
int irq_base);
|
|
|
|
extern void mfd_remove_devices(struct device *parent);
|
|
|
|
#endif
|