#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/interrupt.h>
#include <linux/delay.h>
#include <linux/platform_device.h>
#include <linux/slab.h>
#include <linux/mfd/core.h>
#include <linux/mfd/janz.h>
#define DRV_NAME …
#define CMODIO_MODULBUS_SIZE …
#define CMODIO_MAX_MODULES …
static unsigned int num_modules = …;
static char *modules[CMODIO_MAX_MODULES] = …;
module_param_array(…);
MODULE_PARM_DESC(…) …;
static unsigned int cmodio_id;
struct cmodio_device { … };
static int cmodio_setup_subdevice(struct cmodio_device *priv,
char *name, unsigned int devno,
unsigned int modno)
{ … }
static int cmodio_probe_submodules(struct cmodio_device *priv)
{ … }
static ssize_t modulbus_number_show(struct device *dev,
struct device_attribute *attr, char *buf)
{ … }
static DEVICE_ATTR_RO(modulbus_number);
static struct attribute *cmodio_sysfs_attrs[] = …;
static const struct attribute_group cmodio_sysfs_attr_group = …;
static int cmodio_pci_probe(struct pci_dev *dev,
const struct pci_device_id *id)
{ … }
static void cmodio_pci_remove(struct pci_dev *dev)
{ … }
#define PCI_VENDOR_ID_JANZ …
static const struct pci_device_id cmodio_pci_ids[] = …;
MODULE_DEVICE_TABLE(pci, cmodio_pci_ids);
static struct pci_driver cmodio_pci_driver = …;
module_pci_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;